Raspberry Pi Zero WにAlpine Linuxでファイルサーバー構築
スイッチサイエンスで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」をダウンロードしてください。それ以外だと起動しないと思います。(自分はうっかり別のものをダウンロードしていて、起動しないという事に悪戦苦闘してしまっていました。。。)
イメージファイルの展開
そこにダウンロードした「tar.gz」を展開してください。
Linuxを使用している方や、WSL2を使用している方は以下のコマンドで展開可能です。(以降に記載するコマンドも同様です)
Windowsの方は「7-zip」などで展開して、配置してください。「zw」フォルダ直下は以下のようなフォルダ構造になります。
Alpine Linuxのバグ対応
原因は良く分かりませんが、バグがあるらしいので、以下のコマンドを実行して「usercfg.txt」ファイルを作成してください。
LinuxやWSL2が利用できない方は「zw」フォルダ直下に「usercfg.txt」を作成し、ファイルに以下を記述してください。
Wifiドライバの準備
イメージファイルにはwifiドライバが無いらしいので、公式に記載されている通り、GitHubから必要なファイルを取得します。
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の情報に書き換えてください。
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」フォルダごとコピーするのではありません)
インストール作業
IPアドレスが判明しているので、SSH接続(TeraTermなど)で「Raspberry Pi」に接続してください。 「root」ユーザのパスワードなしで接続可能です。
通常であれば「setup-alpine」を実行しますが、ある程度のコマンドがすでに実行された後のため、以下のコマンド順次実行してください。(各種設定値は自分の環境に合わせて指定してください)
あと、公式サイトでおすすめされているので、以下のコマンドも実行します。
SSH環境設定
ここで再起動してしまうと、次回起動時にSSH接続出来なくなるので、SSH設定ファイルを編集します。
以下を追記します。vi使わずにechoで追記しても良いかもしれません。
「Alpine Linux」は、UbuntuとかでよくあったLiveCDと同じような感じで起動しているようなので、再起動すると変更した内容が消えます。「lbu commit -d」を実行すると、現在の状態が保持(永続化)されます。
SSDの自動マウント
SSDを「Raspberry Pi」に接続してください。自分はバスパワーのみで接続可能でしたが、場合によっては電源供給ありのハブを使用するなどしてください。
接続後、「mount」コマンドなどでマウントすることは可能ですが、再起動した場合など、そのたびにマウントする必要があります。これを解決します。
autofsのインストール
他に方法(fstabとか)があるのかもしれませんが、情報が無かったので「autofs」を使用します。ネットで調べればわかりますが、testingのリポジトリに存在します。その為、デフォルトのままだと「apk add」で追加できません。
「repositories」の一番最後にあると思いますが、最後が「testing」で終わるURLの行のコメントアウトを削除して有効にしてください。
でインストール可能になっているはずです。
autofsの設定
正しい設定方法は分かりませんが、「/etc/autofs/auto.master」に自動マウントの設定を記載していきます。
設定値の意味は「/mnt」をベースディレクトリにして、「/etc/autofs/auto.filesv」の設定値の通りにマウントします。
「/etc/autofs/auto.filesv」は以下のコマンドで作成します。(UUIDなどの変更が必要)
この設定値は、「/mnt/filesv」にUUIDが「××○○」で、ファイルシステムが「exfat」のデバイスをマウントします。
デバイスのファイルシステムやUUIDは色々な方法で確認可能ですが、自分は「blkid」で確認しました。