😊

Alpineを理解したい

2021/02/05に公開

Dockerイメージを作る時にAlpineベースにしようと思ったら、使い方がいまいちわからなかった。
勉強を兼ねてVMで環境を作ってみることにした。

Alpine

めちゃくちゃ軽いLinuxディストリビューション。
https://alpinelinux.org/

Install on VirtualBox

イメージのダウンロード

公式のダウンロードページからisoファイルをダウンロードする。
https://alpinelinux.org/downloads

VMの作成

名前は適当に、タイプはLinuxに、バージョンはOther Linux (64-bit)にする。

ストレージとネットワークの設定を行う。
isoファイルを追加する。

アダプター1をSSHの設定に使う。
ポートフォワーディングの設定を以下のようにする。

アダプター2をブリッジアダプターに設定する。

最初のセットアップ時はisoファイルを読み込みたいので、起動順序を光学優先にする。
多分デフォルトは光学が優先になっていると思う。

以上でVMを起動する。

初期設定

OSが立ち上がったらパスワードなしのrootでログインする。

Welcome to Alpine Linux 3.3
Kernel 4.1.15-2-grsec on an x86_64 (/dev/tty1)

localhost login: root

Welcome to Alpine!
:
You can setup the system with the command: setup-alpine

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

localhost:~#

setup-alpine を使って設定しろとのことなので、コマンドを実行する。
対話形式で色々聞かれるので、進める。
ハードディスクの指定をする。
これで、ハードディスクにAlpineがインストールされて、isoファイルなしで起動できるようになる。

Available disks are:
  sda   (8.6 GB ATA      VBOX HARDDISK   )
Which disk(s) would you like to use? (or '?' for help or 'none') [none] sda

The following disk is selected:
  sda   (8.6 GB ATA      VBOX HARDDISK   )
How would you like to use it? ('sys', 'data', 'lvm' or '?' for help) [?] sys

WARNING: The following disk(s) will be erased:
  sda   (8.6 GB ATA      VBOX HARDDISK   )
WARNING: Erase the above disk(s) and continue? [y/N]: y

WARNINGが出るが、yを選択する。
ディスクがフォーマットされてインストールされる。
一度Nを選択したらもう一度セットアップをする羽目になった。
しばらくまって、インストールが完了したらpoweroffコマンドでいったん電源をオフにする。

イメージファイルを消す

VirtualBoxでストレージの設定からisoディスクイメージを消す。

ストレージも光学ドライブはいらないので、ハードディスク最優先にする。

これでAlpineのセットアップは完了。

Alpineの設定いろいろ

SSHの設定

/etc/ssh/sshd_configを書き換える。
PermitRootLoginがコメントアウトになっているので、下記のように修正する。

PermitRootLogin yes

これでSSHでrootログインができる。
セキュリティてきにはよろしくないから別のログインユーザーを作ったらnoに変えるようにする。
ホストOSのターミナルで下記コマンドでVMにrootユーザーでログインする。

ssh -p 2222 root@localhost

別のユーザーでログインしたかったら@の前のユーザー名を変えてログインする。
SSHの設定ができたら、VMはヘッドレス起動にするとウィンドウが立ち上がらなくて嬉しい。

sudo

Alpine にはsudoもない。
root以外のユーザーで色々試すには管理者権限が必要なので、sudoをインストールする。

apk update
apk add sudo

/etc/sudoersにユーザー権限を追加する。

<user name> ALL=(root) ALL

Shell

Alpineではashが標準のシェルになる。
プロンプトにユーザー名を記載したければ、/etc/profile を書き換える。

export PS1='\u@\h:\w\$ '

bashを使いたい場合は、apkでインストールする。
ただ、AlpineのコマンドはBusyBoxなので、エイリアスの設定とかができなかったりする。
Alpineに慣れるという意味でもbashはいらないかなと思う。
viが標準で入っていて、vimを使いたい場合も別途インストールが必要。
これもviでいいと思う。

motd

ログインしたら出てくるメッセージ。/etc/motdを書き換えるだけ。
Alpineの初期のままだと、セットアップしなさいのメッセージがずっと出るから変えると起動するのが楽しくなる。

    _    _       _
   / \  | |_ __ (_)_ __   ___
  / _ \ | | '_ \| | '_ \ / _ \
 / ___ \| | |_) | | | | |  __/
/_/   \_\_| .__/|_|_| |_|\___|
          |_|

いい感じのアスキーアートを記載するといいと思う。
figletを使うと簡単に文字のAAを生成できる。

❯ figlet "Hello World"
 _   _      _ _        __        __         _     _
| | | | ___| | | ___   \ \      / /__  _ __| | __| |
| |_| |/ _ \ | |/ _ \   \ \ /\ / / _ \| '__| |/ _` |
|  _  |  __/ | | (_) |   \ V  V / (_) | |  | | (_| |
|_| |_|\___|_|_|\___/     \_/\_/ \___/|_|  |_|\__,_|

❯ figlet -f epic "Hello World"
          _______  _        _        _______
|\     /|(  ____ \( \      ( \      (  ___  )
| )   ( || (    \/| (      | (      | (   ) |
| (___) || (__    | |      | |      | |   | |
|  ___  ||  __)   | |      | |      | |   | |
| (   ) || (      | |      | |      | |   | |
| )   ( || (____/\| (____/\| (____/\| (___) |
|/     \|(_______/(_______/(_______/(_______)

          _______  _______  _        ______
|\     /|(  ___  )(  ____ )( \      (  __  \
| )   ( || (   ) || (    )|| (      | (  \  )
| | _ | || |   | || (____)|| |      | |   ) |
| |( )| || |   | ||     __)| |      | |   | |
| || || || |   | || (\ (   | |      | |   ) |
| () () || (___) || ) \ \__| (____/\| (__/  )
(_______)(_______)|/   \__/(_______/(______/

最後に

シンプルなディストリビューションを触ることで、Linuxの仕組みが少し理解できた。
Ubuntuとかのありがたみを実感する。

参考にしたサイト

https://blog.stormcat.io/post/entry/alpine-entry-setup/

Discussion