Alpine Linux入門 -環境構築編-

今、Docker界隈ではAlpine Linuxへの注目が急速に高まってきています。

f:id:a-yamada:20160228233244p:plain

Alpine Linuxは非常に軽量なディストリビューションであり、軽量なDockerイメージを作るために必要不可欠な要素になりつつあります。Alpine Linuxの有用性については、この間行われたJAWS-UGコンテナ支部 #4 - connpassでもお話させてもらったので、詳細はスライドをご覧あれ。

お前のDockerイメージはまだ重い💢💢💢 // Speaker Deck

Alpineデビューする障壁

Alpineが軽いからといって、そうホイホイとDockerにalpineなイメージを簡単に作れるかというとそうではありません。最初はDockerfileを作るだけで相当消耗してしまうでしょう。そうならないためにも、Alpineの特性を抑えておく必要があります。

Alpineはデフォルトではかなり機能が制限されています。自らで色々なツールやパッケージをインストールしていく必要があるわけですが、alpineは独自のパッケージ管理システムapkを持っています。yumやapt-getはとてもポピュラーですが、このシステムはかなりマイナーなものと言わざるを得ません。この辺りの仕組みを抑えてからの方が理解のスピードが格段に違ってきます。

本エントリの趣旨は、まず好き勝手遊べるAlpine Linuxの環境を作ってAlpine学習の足がかりをつくることにあります。

VirtualBoxでAlpine Linuxを構築してみる

Dockerfileを修正して都度トライアンドエラーするのも良いですが、やはり純粋なAlpine Linuxの仮想環境を検証用に持っておくと良いでしょう。

というわけで、VirtualBox上にAlpine Linuxの環境を作ってみることにします。VirtualBoxの導入については省略しますので適当に入れてください。

Vagrant Shareにもalpineのboxが公開されていますが、今回は敢えてゼロから3.3系のAlpineを作ります。

Alpineのイメージを用意

AlpineのisoファイルをAlpine公式からダウンロードしておきます。

Downloads | Alpine Linux

それぞれの環境にあったものをダウンロードします。自分はMacなので alpine-3.3.1-x86_64.iso ですね。

仮想マシンをつくる

VirtualBox仮想マシン作成ウィザードで進めます。名前はとりあえずalpineにしましょう。OSですがLinux2.6を選択します。

f:id:a-yamada:20160228231229p:plain

メモリーサイズを設定します。まあデフォルトで良いでしょう。

f:id:a-yamada:20160228231243p:plain

新規なので、仮想ハードディスクを新たに作成します。

f:id:a-yamada:20160228231252p:plain

ファイルタイプはVDIでOKです。

f:id:a-yamada:20160228231301p:plain

ストレージは可変にしておきましょう。

f:id:a-yamada:20160228231316p:plain

ディスクの上限サイズもよしなにどうぞ。

f:id:a-yamada:20160228231324p:plain

これで仮想マシンの作成完了です。

f:id:a-yamada:20160228234356p:plain

ネットワークの設定

作成したalpineの設定変更をします。仮想マシンの設定からネットワークタブを開きます。

アダプター1にはデフォルトでNATが設定されていますが、新たにアダプター2を設定し「ブリッジアダプター」を設定します。

f:id:a-yamada:20160228231331p:plain

ストレージのタブで、alpineのISOファイルをディスクに設定します。

f:id:a-yamada:20160228231340p:plain

システムタブではブートローダー順を光学->ハードディスクの順に変更します。これでマウントしたalpineのISOで起動できます。これで設定は完了。

f:id:a-yamada:20160228231350p:plain

起動してセットアップしてみる

起動すると黒い画面が出てきます。ログインを求められるのでrootでログインします(パス無し)。

f:id:a-yamada:20160228231358p:plain

何やらwelcomeメッセージみたいなのが表示されて、setup-alpine をしろというのが表示されます。この時点では仮想ディスクにはまだインストールされていない状態で、setup-alpineすることでISO無しで利用できるようになります。

f:id:a-yamada:20160228231407p:plain

対話的に色々と聞かれますが、ほとんどデフォルト回答です。rootのパスワードを聞かれたりします。

f:id:a-yamada:20160228231415p:plain

ここが重要。Which disk(s) would you like to use? (or '?' for help or 'none') [none] という問ではsdaを入力します。これで仮想ドライブにalpineがインストールされます。

f:id:a-yamada:20160228231424p:plain

続いて、Hou would you like to use it? ('sys', 'data, 'lvm' or '?' for help) [?] と聞かれます。ここではsysを入力します。

f:id:a-yamada:20160228231432p:plain

インストールが開始されます。

f:id:a-yamada:20160228231440p:plain

Installation is Complete. Please reboot. が表示されればインストール完了。いったんrebootが必要となります。

f:id:a-yamada:20160228231449p:plain

仮想ディスクにインストールされたので、一度仮想マシンを停止してブートローダー順を「ハードディスク->光学」に変えておきましょう。 f:id:a-yamada:20160228231501p:plain

仮想マシンsshできるようにする

Alpineは構築できましたが、VirtualBoxの黒い画面で色々入力しないといけないのはタルいです。これを脱却するために、Alpine側でリモートから(事実上ホストから)sshできるようにします。

ポートフォワードの設定をする

再びalpine仮想マシンのネットワーク設定を開き、アダプター1のNATにおいてポートフォワードの設定をします。ここではホストを2222、ゲストを22にしています(ホストのポートは衝突を回避できるポートを設定する)。

f:id:a-yamada:20160229002456p:plain

alpine側でsshd_configをいじる

リモートでのrootログインを許可するために、alpine側の/etc/ssh/sshd_configを修正します。PermitRootLoginがコメントアウトされているので、yesにしてコメントアウトを解除します。

PermitRootLogin yes

sshしてみる

ホスト側からゲストのalpineに対してsshします。

$ ssh -p 2222 root@localhost
root@localhost's password:
Welcome to Alpine!

The Alpine Wiki contains a large amount of how-to guides and general
information about administrating Alpine systems.
See <http://wiki.alpinelinux.org>.

You can setup the system with the command: setup-alpine

You may change this message by editing /etc/motd.

localhost:~#

これで自分のターミナルからalpineに対してsshできるようになりましたね。ここまでくればVirtualBoxの黒い画面は不要なので、次回からはヘッドレス起動にしましょう。

さて、これでAlpine Linuxを学ぶ準備ができましたので、次回は実際にapkを使ったパッケージのインストール等について解説しまする。