Raspberry Pi Zero WにAlpine Linuxでファイルサーバー構築

Share on:

スイッチサイエンスで500円引きのクーポンが配布されていたので、「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」フォルダを作成してください。

1cd C:/work
2mkdir zw

イメージファイルの展開

そこにダウンロードした「tar.gz」を展開してください。

Linuxを使用している方や、WSL2を使用している方は以下のコマンドで展開可能です。(以降に記載するコマンドも同様です)

1tar xzf alpine-rpi-3.13.0-armhf.tar.gz  -C zw

Windowsの方は「7-zip」などで展開して、配置してください。「zw」フォルダ直下は以下のようなフォルダ構造になります。

1├─apks
2│  └─armhf
3├─boot
4└─overlays

Alpine Linuxのバグ対応

原因は良く分かりませんが、バグがあるらしいので、以下のコマンドを実行して「usercfg.txt」ファイルを作成してください。

1echo enable_uart=1 >> zw/usercfg.txt

LinuxやWSL2が利用できない方は「zw」フォルダ直下に「usercfg.txt」を作成し、ファイルに以下を記述してください。

1enable_uart=1

Wifiドライバの準備

イメージファイルにはwifiドライバが無いらしいので、公式に記載されている通り、GitHubから必要なファイルを取得します。

1mkdir -p zw/firmware/brcm
2cd zw/firmware/brcm
3curl -LO https://raw.githubusercontent.com/RPi-Distro/firmware-nonfree/master/brcm/brcmfmac43430-sdio.bin
4curl -LO https://raw.githubusercontent.com/RPi-Distro/firmware-nonfree/master/brcm/brcmfmac43430-sdio.txt
5cd ../../

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の情報に書き換えてください。

1cp headless.apkovl.tar.gz zw
2echo "ssid WPA2-PSK password" >> zw/wifi.txt

LinuxやWSL2が利用できない方は、手動で「headless.apkovl.tar.gz」をコピーして、「wifi.txt」を作成しWifi接続情報を記載してください。

SDカード準備

「Raspberry Pi」で使用するSDカードをFAT32でフォーマットしてください。以下のツールを使うと良いらしいです。

SDカードのフォーマットが完了したら、「zw」フォルダの中身をSDカードにコピーしてください。(「zw」フォルダごとコピーするのではありません)

電源接続

SDカードを「Raspberry Pi」に接続し、電源に接続してください。緑色のLEDが点滅していると思いますが、しばらく経つと点灯したままとなります。

DHCPサーバー(ルーターなど)を確認し、新しいIPアドレスの払い出しがあった場合、それが「Raspberry Pi」のアドレスになりますので、控えておいてください。

インストール作業

IPアドレスが判明しているので、SSH接続(TeraTermなど)で「Raspberry Pi」に接続してください。 「root」ユーザのパスワードなしで接続可能です。

通常であれば「setup-alpine」を実行しますが、ある程度のコマンドがすでに実行された後のため、以下のコマンド順次実行してください。(各種設定値は自分の環境に合わせて指定してください)

1setup-ntp
2setup-keymap
3setup-hostname
4setup-timezone
5setup-apkrepos
6setup-lbu
7setup-apkcache

ルートユーザのパスワードを設定します。

1passwd

あと、公式サイトでおすすめされているので、以下のコマンドも実行します。

1apk add rng-tools
2rc-update add rngd boot
3rc-update add wpa_supplicant boot
4rc-update add urandom boot

ヘッドレスインストール時のごみファイルを削除します。

1mount -o remount,rw /media/mmcblk0p1
2rm /media/mmcblk0p1/*.apkovl.tar.gz
3rm /media/mmcblk0p1/wifi.txt
4rc-update del local default
5rm /etc/local.d/headless.start

SSH環境設定

ここで再起動してしまうと、次回起動時にSSH接続出来なくなるので、SSH設定ファイルを編集します。

1apk add vim
2vi /mnt/etc/ssh/sshd_config

以下を追記します。vi使わずにechoで追記しても良いかもしれません。

1PermitRootLogin yes

ここまで出来たら、以下のコマンドで再起動します。

1lbu commit -d
2reboot

「Alpine Linux」は、UbuntuとかでよくあったLiveCDと同じような感じで起動しているようなので、再起動すると変更した内容が消えます。「lbu commit -d」を実行すると、現在の状態が保持(永続化)されます。

SSDの自動マウント

SSDを「Raspberry Pi」に接続してください。自分はバスパワーのみで接続可能でしたが、場合によっては電源供給ありのハブを使用するなどしてください。

接続後、「mount」コマンドなどでマウントすることは可能ですが、再起動した場合など、そのたびにマウントする必要があります。これを解決します。

autofsのインストール

他に方法(fstabとか)があるのかもしれませんが、情報が無かったので「autofs」を使用します。ネットで調べればわかりますが、testingのリポジトリに存在します。その為、デフォルトのままだと「apk add」で追加できません。

1vi /etc/apk/repositories

「repositories」の一番最後にあると思いますが、最後が「testing」で終わるURLの行のコメントアウトを削除して有効にしてください。

1apk add autofs

でインストール可能になっているはずです。

autofsの設定

正しい設定方法は分かりませんが、「/etc/autofs/auto.master」に自動マウントの設定を記載していきます。

1vi /etc/autofs/auto.master

以下を「/misc /etc/autofs/auto.misc」の下に追記します。

1/mnt /etc/autofs/auto.filesv --ghost

設定値の意味は「/mnt」をベースディレクトリにして、「/etc/autofs/auto.filesv」の設定値の通りにマウントします。

「/etc/autofs/auto.filesv」は以下のコマンドで作成します。(UUIDなどの変更が必要)

1echo "filesv -fstype=exfat,rw UUID=××○○" > /etc/autofs/auto.filesv

この設定値は、「/mnt/filesv」にUUIDが「××○○」で、ファイルシステムが「exfat」のデバイスをマウントします。
デバイスのファイルシステムやUUIDは色々な方法で確認可能ですが、自分は「blkid」で確認しました。

1apk add blkid
2blkid

SAMBAインストール&設定

ファイル共有をするので、sambaをインストールします。sambaの設定値を永続化するためには以下の2行目、3行目の実行が必要になります。 4行目では、ファイル共有で使用するrootユーザを追加しています。

1apk add samba
2lbu include /var/lib/samba/private/
3lbu exclude /var/lib/samba/private/msg.sock/
4pdbedit -a -u root

マウントしたフォルダをrootユーザで共有します。「/etc/samba/smb.conf」の最後に以下を追記してください。

 1[root]
 2comment = root
 3path = /mnt/filesv/
 4browseable = yes
 5writeable = yes
 6create mask = 0777
 7directory mask = 0777
 8guest ok = no
 9guest only = no
10valid users = pi,root
11force user = root

以下のコマンドを実行して、設定を永続化してください。

1lbu commit -d

LEDを消す

別に必須ではありませんが、常に電源が入っているので、LEDが光っている必要性があまりないので、消灯しておきます。 以下のコマンドを実行してください。

1echo 0 /sys/class/leds/led0/brightness