[一案]　Alpineを普段使いして、"Linux"をしっかりと学ぶ。

[想定読者]

- "軽量Linux"Alpine LinuxとDockerとの関係が気になっている人 。
> 参考記事:[Docker、オフィシャルイメージのOSをAlpine Linuxへ切り替える計画が明らかに。OSの軽量化に傾倒するDocker](http://www.publickey1.jp/blog/16/docker_alpine_linux.html)

- Linuxに入門したいWindowsユーザー（新人プログラマ等）。
>参考記事 : [Alpine Linux入門 -環境構築編-](http://blog.stormcat.io/entry/alpine-entry-setup)
=>　以下、このエントリーに適宜参考にしながらAlpine Linuxをwindows機上のvirtualboxにインストールします。


*※Dockerで試すAlpine Linuxのシリーズも書き始めた : [初心者のための Docker Private Beta with Alpine Linux　① Macに導入編](http://qiita.com/kmry2045/items/deb4ef479efce59f534a) ...今回のは中身薄いけど、、一応windowsにも言及。*

# (一案) Windows上でAlpineLinuxを普段使い
 以下、Docker公式となりつつあることにより、Dockerコンテナ向けの用途が注目されているAlpine Linux。これを軽量linuxとして日常的いの一選択肢とすること、windowsユーザー(特にLinux初心者)にはけっこうお勧めかもしれないよというお話。以下、①～③は背景事情としてチラ見しておいてください。
 
## ①　週末開発マシンを担うWindows 10、落城。。

私事だが、いろいろと目新しいツールを入れたりした末に不安定化しか週末開発マシンのWindows 10をゴールデンウィーク中に初期状態に戻すことにした。
Windows10の"設定"には、ディフォルトで「PCを初期状態に戻す」機能が用意されており、Windows10の初期化自体は簡単:

![初期.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/2809ad6a-ee53-b4fb-055f-9d7494e1d400.png)

初期化後はwindow10は最新のセキュリティパッチが当たった状態で立ち上がり、windowsインストーラー経由でインストールしたプログラムはアンインストールされレジストリ等はクリーンになる(所要時間は１時間程度だった)。

一方で、自らのファイルは残せるので、自ら入れたポータブルなツールは使い続けることができる。ただ、windows insiderプログラムを試しつつ、いろいろな便利シェルをあちこらから入れて試したことが...不安定化の一因であることは容易に推測がつくので、windowsでの便利シェルの活用は当面、ミニマムとすることとした。

## ②　Vagrant　いらない子!?
となると、windows環境を汚さない仮想環境(個人的にはvirtualbox)を活用することが候補となる。最近は、vagrant経由で、仮想環境にさまざまなOSを簡単にインストールできるようになっている。vagrant+dockerという組み合わせも定番の一つとなっていて、Windows上でのvagrantを使うブログも多く見かける。
ただ、Vagrantを使ってAlpine Linuxを一気に設定するといったことも当然可能なわけだが、今回は、使わないこととする。

理由は、以下の通り:

- 軽量LinuxとしてのAlpine Linux環境になるべく親しんでおくことは、良きDocker使いとなるための条件となりつつある(そのためそ、vagrantという"皮"を通さずに入門しておきたい)。
- 現状のDockerのローカル環境での実行はvagrant+virtulboxといった他ツール頼みだが、近い将来に、docker toolsオンリーでdockerコンテナをローカル実行できるようにするとDocker公式がアナウンスしていること(vagrantコマンドのニーズが減る可能性)

もちろん、Alpine Linuxをvagrant経由で行うことも全然あり。

vagrantとdockerとの関係については、以下のシリーズを参考にしておくと良い。

参考　[プログラマのためのDocker超入門 01.仮想化](http://qiita.com/pottava/items/7086f9d63487aa3d7d08)

## ③　AlpineLinux、恐ろしい子。

Web界隈でマイクロサービスが脚光を浴びる中、特定ベンダーにロックインされないクラウド開発を行うための標準ツールとなりつつあるDocker。そのDockerのオフィシャルイメージとして採用される予定の、Alpine Linuxは、いわば軽量Linux界のシンデレラ。
[Alpine Linux公式サイト](https://www.alpinelinux.org/)においても、活発に開発が続けられていることが分かる。
とはいえ、軽量linux特有の癖やはまりどころもあるらしく、dockerでの活用を視野に特徴を知っておくことは後々役に立つかもしれない。

![初期.jpg](
http://blog-imgs-56-origin.fc2.com/b/o/s/bosesound/20141017141159fb9.jpg
)

#Alpine Linux導入例。

##インストール
冒頭に掲げた、[Alpine Linux入門 -環境構築編-](http://blog.stormcat.io/entry/alpine-entry-setup)
に従ってインストールする。

今回の導入でのポイントは以下 :

### ① Git for WindowsとWinSCPを併用
Virtualboxでの初回起動時はvirtualboxが用意しているなんちゃてシェル(?)上で作業することになる。

Alpine Linuxを"普段使い"するためには、ssh経由でwindowsからログインすることが望ましい。
そのため、安定しており、windows側でも便利使いできる"Git for Windows"をssh用に導入しておく。また、scpでのファイル転送に今も継続的に開発されているWinSCPも導入。
![3root.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/42f90461-73ae-1466-0381-3224047ccb1f.png)

### ②　virtualbox上でポートフォワーディングを活用
sshログインのためには、virtualbox上でポートフォワーディングを活用するのが簡単。すなわち、alpine linuxの22番ポート(ssh用)とwindows側の空きポート(2222番等)を結びつけておく。

![protFWD.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/80b20067-ee01-b41f-a60e-524ae6ace895.png)
今回は、ゴールデンウィーク中のおつかれ自分ということで、なんとなくポート番号5963を設定。

### ③ sda/sysの設定は忘れずに。
これは念のため。Alpine Linuxのインストール作業のほとんどはリターンキー押下で良いので、忘れてしまいがちだが、インストール先としてsdaを選んでおかないと、。Alpine Linuxはインストールされない。
![sda_sys.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/3a7237d3-1b93-9213-a774-3edcc9414aa6.png)

*...実際、android studio2.1のインストールと平行して作業していたところ、sdaを選ぶのを忘れてしまっていた。。*

### ④　インストール後にsshできるようになったあたりで、virtualboxスナップショット取得。
インストール後にrebootした後に、/etc/ssh/sshd_configを修正し、再びrebootする。

![vi_yes.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/5c679141-7cc1-2a71-902e-95a100556106.png)


これで、windows側からsshでログイン出来るようになる。
ここから先は、[Alpine Linuxの使い方](http://qiita.com/syui/items/7851423ddc132b751fa3)などを参考に、Alpine Linuxのパッケージ管理ツールapkを使い、ニーズとお好みに応じた作業を行う。
初回起動時に、apk updateしておこう。

![apk.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/e11e3c13-93a6-12f2-c52c-0628818db8ef.png)

このあたりで、virtualboxでスナップショットを取得しておこう。これで何かあった時に、ここからやり直せる。

##追加パッケージのインストール
軽量linuxなるべく保つべく、以下、--no-cache オプションをつけて無駄なファイルを残さずにapk addを使っていく。


いくつかおすすめを書いておこう。

###①fish-shellを導入
apkコマンド
> apk --no-cache add curl git sudo fish tmux

開発作業に、curlとgitはほぼ必須。あとsudoも*（linux初心者の人は、ユーザ追加とsudoer設定あたりをここで練習しておこう）*。
alpine linux のシェルは軽量なAsh(not Bash)で普段使いには厳しいので、軽量で機能豊富なFishを入れておく(tmuxも)。

*※参考　[fish-shellを使ってみませんか](http://qiita.com/mtwtk_man/items/dde92d0a6024bc61fa58)
※　zshは、周辺ツールが即座に入らなかったので却下。*


Fish/tmuxについては、alpine linux上での使い勝手報告も兼ねて、後ほど追加記事を書きたい。現在のところは快調に動作。

この時点でのディスク使用量は300M程度と、やはり軽量。
![df.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/324d1061-e4f6-c411-364b-3a0bb48e9965.png)

### ②pythonを導入。
ansibleでalpine linuxをいじくりたいためpythonを入れる。

apkコマンド
> apk --no-cache add python

せっかくなので、今風なpyhton環境も整えてみたいと思ったが、ここはちょっと苦戦した。

以下を参考に、、pipが入り、
http://www.yunabe.jp/docs/python_package_management.html
pythonなcurl(?)のhttpieも導入できた。

![httpie.PNG](https://qiita-image-store.s3.amazonaws.com/0/16455/94ba2be2-9989-4e40-fdce-e1a4c6e7959c.png)


### ③java8(OpenJDK8)を導入

ここに書かれていたとおり、communityリポジトリから導入。
http://symfoware.blog68.fc2.com/blog-entry-1839.html

現時点でのバージョンは、1.8.0_77。

pythonで試行錯誤したため、少し無駄に肥大化した気がするが、この時点でのディスク使用量は653MB。

#今後
せっかくなので、dockerを用いた開発にalpine linuxを活用していきたい。それに併せて、alpine linuxが、windows機において、どのように使えているかを報告する予定。