🎉

raspberry pi zero wにAlpine Linuxでファイルサーバー構築

2021/07/04に公開

個人ブログの記事から焼き直し。

「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イメージの準備

イメージファイル準備

公式サイトから最新のイメージをダウンロードしてください。
https://alpinelinux.org/downloads/[ダウンロード]

上記から「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」を以下のサイトからダウンロードして、作業フォルダにダウンロードしてください。
https://wiki.alpinelinux.org/wiki/Raspberry_Pi_-_Headless_Installation

以下のコマンドを実行して、ダウンロードしたファイルを「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
https://www.sdcard.org/jp/downloads/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