raspberry pi zero wにAlpine Linuxでファイルサーバー構築
個人ブログの記事から焼き直し。
「Raspberry Pi zero w」に「Alpine Linux」をインストールしてファイルサーバーを構築したので、その時の備忘として残しておきます。(この記事を参考にして発生した、事象に対して一切責任は負えないので、自己責任でお願いします。)
ハード構成
もともと、「LIVA-C0-2G-64G-W」にWindowsを入れて、SSDを接続してファイルサーバーにしていましたが、消費電力も気になるし、最近なぜか自動スリープにもならなくて悩んでいたので、それの代替として「Raspberry Pi」を購入。なので構成的には以下になります。
- Raspberry Pi zero w
- SSD 120GB
- Micro SDカード 32GB
せっかくの「W」版なので、通信はwifiで接続します。(もちろんUSBで有線LAN接続も可能ですが、それによってUSB接続するSSDの速度が低下するのは嫌だったので)
OSインストール
まずはOSをインストールします。普通であれば「Raspberry Imager」とか使って公式OSを入れるところですが、それよりも軽量そうな「Alpine Linux」を入れます。
「Alpine Linux」はdockerを使用したことのある人であれば、名前は聞いたことはあるかもしれません。dockerのコンテナサイズを小さくするために、軽量化されたLinuxになります。
そういった理由もあり、少し面倒な部分もありますが、常時に電源がONであることを考えると少しでも軽量なOSの方が良いのかなぁと。経緯はこの程度でインストールしていきたいと思います。
OSイメージの準備
イメージファイル準備
公式サイトから最新のイメージをダウンロードしてください。
上記から「armhf」をダウンロードしてください。それ以外だと起動しないと思います。(自分はうっかり別のものをダウンロードしていて、起動しないという事に悪戦苦闘してしまっていました。。。)
作業フォルダ準備
任意の作業フォルダを作成し、そこに移動してください。
例:C:/work
SDカードに展開するためのフォルダ準備
作業フォルダに「zw」フォルダを作成してください。
cd C:/work
mkdir zw
イメージファイルの展開
そこにダウンロードした「tar.gz」を展開してください。
Linuxを使用している方や、WSL2を使用している方は以下のコマンドで展開可能です。(以降に記載するコマンドも同様です)
tar xzf alpine-rpi-3.13.0-armhf.tar.gz -C zw
Windowsの方は「7-zip」などで展開して、配置してください。「zw」フォルダ直下は以下のようなフォルダ構造になります。
├─apks
│ └─armhf
├─boot
└─overlays
Alpine Linuxのバグ対応
原因は良く分かりませんが、バグがあるらしいので、以下のコマンドを実行して「usercfg.txt」ファイルを作成してください。
echo enable_uart=1 >> zw/usercfg.txt
LinuxやWSL2が利用できない方は「zw」フォルダ直下に「usercfg.txt」を作成し、ファイルに以下を記述してください。
enable_uart=1
Wifiドライバの準備
イメージファイルにはwifiドライバが無いらしいので、公式に記載されている通り、GitHubから必要なファイルを取得します。
mkdir -p zw/firmware/brcm
cd zw/firmware/brcm
curl -LO https://raw.githubusercontent.com/RPi-Distro/firmware-nonfree/master/brcm/brcmfmac43430-sdio.bin
curl -LO https://raw.githubusercontent.com/RPi-Distro/firmware-nonfree/master/brcm/brcmfmac43430-sdio.txt
cd ../../
LinuxやWSL2が利用できない方は「zw/firmware/brcm」フォルダを作成して、上記のURLからダウンロードして配置してください。
ヘッドレス準備
今回はヘッドレスでインストールをしていきます。ヘッドレスとは「Raspberry Pi」にディスプレイを接続せずにインストールする方法です。
下記の方法で実行するとWifiへの接続とSSH接続設定まで自動的に行ってくれます。その為、ディスプレイに接続せずに、別端末でSSH接続でインストール作業が可能です。
ヘッドレスインストールするためのファイル「headless.apkovl.tar.gz」を以下のサイトからダウンロードして、作業フォルダにダウンロードしてください。
以下のコマンドを実行して、ダウンロードしたファイルを「zw」フォルダ直下にコピーしてください。また、2行目の「ssid」と「password」は接続したいWifiの情報に書き換えてください。
cp headless.apkovl.tar.gz zw
echo "ssid WPA2-PSK password" >> zw/wifi.txt
LinuxやWSL2が利用できない方は、手動で「headless.apkovl.tar.gz」をコピーして、「wifi.txt」を作成しWifi接続情報を記載してください。
SDカード準備
「Raspberry Pi」で使用するSDカードをFAT32でフォーマットしてください。以下のツールを使うと良いらしいです。
SD Card Formatter
SDカードのフォーマットが完了したら、「zw」フォルダの中身をSDカードにコピーしてください。(「zw」フォルダごとコピーするのではありません)
電源接続
SDカードを「Raspberry Pi」に接続し、電源に接続してください。緑色のLEDが点滅していると思いますが、しばらく経つと点灯したままとなります。
DHCPサーバー(ルーターなど)を確認し、新しいIPアドレスの払い出しがあった場合、それが「Raspberry Pi」のアドレスになりますので、控えておいてください。
インストール作業
IPアドレスが判明しているので、SSH接続(TeraTermなど)で「Raspberry Pi」に接続してください。
「root」ユーザのパスワードなしで接続可能です。
通常であれば「setup-alpine」を実行しますが、ある程度のコマンドがすでに実行された後のため、以下のコマンド順次実行してください。(各種設定値は自分の環境に合わせて指定してください)
setup-ntp
setup-keymap
setup-hostname
setup-timezone
setup-apkrepos
setup-lbu
setup-apkcache
ルートユーザのパスワードを設定します。
passwd
あと、公式サイトでおすすめされているので、以下のコマンドも実行します。
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
SSH環境設定
ここで再起動してしまうと、次回起動時にSSH接続出来なくなるので、SSH設定ファイルを編集します。
apk add vim
vi /mnt/etc/ssh/sshd_config
以下を追記します。vi使わずにechoで追記しても良いかもしれません。
PermitRootLogin yes
ここまで出来たら、以下のコマンドで再起動します。
lbu commit -d
reboot
「Alpine Linux」は、UbuntuとかでよくあったLiveCDと同じような感じで起動しているようなので、再起動すると変更した内容が消えます。「lbu commit -d」を実行すると、現在の状態が保持(永続化)されます。
SSDの自動マウント
SSDを「Raspberry Pi」に接続してください。自分はバスパワーのみで接続可能でしたが、場合によっては電源供給ありのハブを使用するなどしてください。
接続後、「mount」コマンドなどでマウントすることは可能ですが、再起動した場合など、そのたびにマウントする必要があります。これを解決します。
autofsのインストール
他に方法(fstabとか)があるのかもしれませんが、情報が無かったので「autofs」を使用します。ネットで調べればわかりますが、testingのリポジトリに存在します。その為、デフォルトのままだと「apk add」で追加できません。
vi /etc/apk/repositories
「repositories」の一番最後にあると思いますが、最後が「testing」で終わるURLの行のコメントアウトを削除して有効にしてください。
apk add autofs
でインストール可能になっているはずです。
autofsの設定
正しい設定方法は分かりませんが、「/etc/autofs/auto.master」に自動マウントの設定を記載していきます。
vi /etc/autofs/auto.master
以下を「/misc /etc/autofs/auto.misc」の下に追記します。
/mnt /etc/autofs/auto.filesv --ghost
設定値の意味は「/mnt」をベースディレクトリにして、「/etc/autofs/auto.filesv」の設定値の通りにマウントします。
「/etc/autofs/auto.filesv」は以下のコマンドで作成します。(UUIDなどの変更が必要)
echo "filesv -fstype=exfat,rw UUID=××○○" > /etc/autofs/auto.filesv
この設定値は、「/mnt/filesv」にUUIDが「××○○」で、ファイルシステムが「exfat」のデバイスをマウントします。 +
デバイスのファイルシステムやUUIDは色々な方法で確認可能ですが、自分は「blkid」で確認しました。
apk add blkid
blkid
SAMBAインストール&設定
ファイル共有をするので、sambaをインストールします。sambaの設定値を永続化するためには以下の2行目、3行目の実行が必要になります。
4行目では、ファイル共有で使用するrootユーザを追加しています。
apk add samba
lbu include /var/lib/samba/private/
lbu exclude /var/lib/samba/private/msg.sock/
pdbedit -a -u root
マウントしたフォルダをrootユーザで共有します。「/etc/samba/smb.conf」の最後に以下を追記してください。
[root]
comment = root
path = /mnt/filesv/
browseable = yes
writeable = yes
create mask = 0777
directory mask = 0777
guest ok = no
guest only = no
valid users = pi,root
force user = root
以下のコマンドを実行して、設定を永続化してください。
lbu commit -d
LEDを消す
別に必須ではありませんが、常に電源が入っているので、LEDが光っている必要性があまりないので、消灯しておきます。
以下のコマンドを実行してください。
echo 0 > /sys/class/leds/led0/brightness
Discussion