144Labの入江田です。
alpine-linuxのインストールにはこれまで、画面とキーボードが必須だったのでインストールが結構面倒でした。 今回、ヘッドレスインストールに関する情報がAlpine-LinuxのWiKiに投稿されましたのでそれを試してみました。
情報元
https://wiki.alpinelinux.org/wiki/Raspberry_Pi-Headless_Installation
予めダウンロード
基本のインストール手順
- マイクロSDカード8~32GBをFAT32でフォーマットします。ラベルは「ALPINE」で。
- 上記のalpine-rpi-3.12.0-aarch64.tar.gzをALPINEディスクに展開します
- 上記のheadless.apkovl.tar.gzを解凍せずにALPINEディスクにコピーします
- ALPINEディスクルートにwifi.txtを書く(「ssid WPA-PSK pass-phrase」の3単語を書いておきます)
- ALPINEディスクを取り外し操作をします
for macOS
sudo diskutil eraseDisk FAT32 ALPINE MBRFormat /dev/disk2 tar xzvf alpine-rpi-3.12.0-aarch64.tar.gz -C /Volumes/ALPINE/ cp headless.apkovl.tar.gz /Volumes/ALPINE/ echo <無線SSID> WPA-PSK <パスフレーズ> > /Volumes/ALPINE/wifi.txt find /Volumes/ALPINE \( -name ".DS_Store" -or -name "._*" \) -delete sudo diskutil unmountDisk /dev/disk2
初回ログイン方法
- 前述の方法で作成したマイクロSDをRaspberryPiに差し込んで電源ONします
- RaspberryPiはブート後、wifi.txtにしたがって無線接続します
- 無線ルーターでlocalhostという名称で繋ぎにきてるデバイスのIPアドレスを確認します
- 「ssh root@上記のIPアドレス」にてノーパスワードでログインできます
唯一環境に依存して難度が変わるのは、「ラズパイの動的IPアドレスの確認方法」です。 DHCPでアドレス払い出している状況を確認する必要があります。(一般的なルーターは管理画面で確認できます)
初回ログイン後に必要な作業
setup-ntp -c chrony setup-keymap jp jp setup-hostname <ホスト名> setup-timezone -z UTC setup-apkrepos -1 hostname $(cat /etc/hostname) setup-lbu mmcblk0p1 setup-apkcache /media/mmcblk0p1/cache apk add rng-tools rc-update add rngd boot rc-update add wpa_supplicant boot rc-update add urandom boot mount -o remount,rw /media/mmcblk0p1 rm /media/mmcblk0p1/*.apkovl.tar.gz rm /media/mmcblk0p1/wifi.txt rc-update del local default rm /etc/local.d/headless.start apk add dbus avahi curl cd /root install -d .ssh -m 700 cd .ssh curl -L http://github.com/<GitHubユーザーID>.keys > authorized_keys chmod go-r authorized_keys rc-update add dbus rc-update add avahi-daemon echo IPQoS 0x00 >> /etc/ssh/sshd_config lbu add /root/.ssh/authorized_keys lbu commit -d reboot
このあと、「ssh root@<ホスト名>.local」でログインできるようになってます。
この方法の特徴
- LinuxがFAT32をそのまま利用します
- そのため、SDカードに予め書いておいたファイルを読むこともできます
- ディスクレスモード動作のためSDカードへの書き込み頻度が非常に少ない(ユーザーが操作した時だけ)
- 「mount -o remount,rw /media/mmcblk0p1」コマンドにてSDカードに大量のファイルを書き込むこともできます
- SDカードのサイズに依存せずにインストールでき、SDカードの容量をフルに利用できます
- インストール作業がとにかく短時間で済みます(SDへの書き込みは100MB以下)
ディスクレスモードについて
- SDカード、電源の切ったり入れたりが乱暴な運用に向いています
- apk経由インストールバイナリのみディスク負担がSDカードのFATパーティションにオフロードします
- RAMの容量で書き込み量の上限が決まっています(特にRAM1GiB以下モデルは要注意)
- apk以外のディスク消費の大きな作業をするとすぐディスクフルになってしまう
- lbu add/lbu commitして初めてそれまでに積み上げた変更が永続化されます
- commitされていない変更はリブート時に破棄されます
- 基本sshでログインしての作業は最小限の操作しかしないようにしましょう
- ターゲット上でビルド作業とかはしてはいけません
- ホストマシンのdocker(arm64ベース)でビルド作業をするか、Go言語のクロスビルドを使いましょう
dockerのススメ
macOSとWindows版のdockerは標準で別アーキテクチャCPUのイメージを実行することができます。(Linux版はいくつか追加作業が必要かも?)
docker run -it aarch64/alpine
以上の環境でビルドなり開発作業を行い、成果物だけをRaspberryPiに置いて使います。成果物がかなり巨大な場合はSDカードのFAT領域に置くこともアリです。