「Raspberry Pi」の版間の差分
編集の要約なし |
(相違点なし)
|
2024年7月1日 (月) 14:20時点における最新版
ハードウェアを直接叩けるお手軽なLinuxコンソールホストとして、また、radikoの常時録音サーバとして、Raspberry Piシリーズをファンレスかつヘッドレスで24x7運用しているが、Raspberry Piシリーズは本体に装着できる唯一のストレージがフラッシュメモリのmicroSDメモリカードなので、結構な頻度で、microSDの寿命により使用不能となる[1]。その理由はフラッシュメモリの構造にある。それまでの磁気を利用したストレージと較べ、アクセス速度・耐衝撃性・静音性・省電力では大きな利点があるものの、書き換え可能回数に上限があるという致命的かつ回避不可能の欠点がある。この上限に達したmicroSDは、データを正常に保存できなくなるか、保存されているデータが破損するからだ。管理人のRaspberry Piシリーズの運用経験では、概ね1〜1.5年に1度、ext4ファイルシステムが破損したことが原因で、sshによるリモートログインやコマンド実行が不可能となり故障を知ることが殆どだ。
microSDが故障した場合、新品のmicroSDを用意し、ゼロから再インストール作業を実施せざるを得ないのだが、その際にいちいち自分の欲する情報や細かいtipsを検索するのが面倒なので、以下に、管理人なりのRaspberry Piシリーズの基本的なインストール手順を整理する。
Raspberry Piの運用ポリシはCPUやメモリが極めて貧弱で、かつ、ストレージの書き換え寿命が極端に短いので、通常運用中の動作に不要なソフトやプロセスは全て削除し、軽快さを極めることに尽きる。
前提条件
以下は運用開始当初から実施済である。
- microSDは高耐久仕様を
ファンレスかつ24x7運用であるため、監視カメラやドライブレコーダ向けの、高温かつ常時書き換えが発生する環境でもある程度の長寿命が期待できるモデルを採用する。
2020年06月12日21時45分に再インストールした際はKIOXIA(旧東芝メモリ株式会社)のEXCERIA HIGH ENDURANCE32GBを選定している。購入価格は消費税込1,480円。 - ACアダプタは高出力仕様を
ACアダプタは2.4A以上出力可能なものを採用する。特にRaspberry Pi 4 Model Bは起動時だけ2A以上が必要なので、高出力のACアダプタを用意しないと起動すらできない。
Raspberry Pi 1 Model B+は起動時でもそこまで電流が不要らしく、PCのUSBポートから電源を取ることができる。 - ヒートシンクは必ず装着を
Raspberry Piシリーズはシングルボードコンピュータとして販売されており、そのまま使用すると自ずとファンレスで運用することになるが、運用中のCPUやSoCは、触れると低温火傷する程度の高熱を発するため、放熱手段は運用者が運用形態を考慮して準備する必要がある。
管理人は24x7で運用するため、Raspberry Pi 1 Model B+であればCPUやSoCに別売のヒートシンクを貼り付けたうえでケースに収めてから、Raspberry Pi 4 Model Bであればケースそのものがヒートシンクとなっているメタルケースに収めてから、それぞれ運用を開始する。
インストール手順
インストールするRaspberry Pi OS (旧Raspbian)はLinuxディストリビューションであるDebianを基盤としたRaspberry Piシリーズ向けLinuxディストリビューションだが、公開されている公式インストール手順とディストリビューションの仕組みから、先人による様々なtipsが存在する。それらを先述の運用ポリシに従ってまとめると、以下が最小手数のインストール手順となる。行頭にビュレット(•)があるものは実際に入力コマンドや列挙する項目を、無いものはファイルに書き込まれる内容を示す。
- イメージファイルをmicroSDに焼く
作業時の最新版イメージファイルを32ビット版公式バージョンまたは64ビット版βバージョンからダウンロードする。解凍するとimgファイルが出て来るので、ddコマンドでmicroSDに焼く。
以下では、真っ新なmicroSDをPCに挿したところ、dmesgコマンドで、/dev/sdb
に論理ブロックサイズが512バイトのストレージデバイスとして認識されたことが確認できたため、それに2020-05-27-raspios-buster-lite-armhf.imgを焼くときのコマンド入力例である。- dd bs=512 if=2020-05-27-raspios-buster-lite-armhf.img of=/dev/sdb
- デフォルトユーザを変更する
イメージファイルを焼いたmicroSDをRaspberry Piに装着し起動させると、一般ユーザはデフォルトでpi
(デフォルトパスワードはraspberry)のみが、特権ユーザのroot
はパスワード未設定で有効である。これらは知れ渡っているので、セキュリティ面から速やかに変更しなければならない。pi
でログイン後、root
にパスワードを設定する。# sudo passwd root
- ログアウト後、
root
でログインし直し、pi
を希望するユーザ名に変更する。以下では例としてXXX
としている。# usermod -l XXX pi
- ホームディレクトリを
pi
からXXX
へ変更する。# usermod -d /home/XXX -m XXX
- ユーザグループを
pi
から希望するユーザ名XXX
へ変更する。# groupmod -n XXX pi
- 変更した
XXX
のログインパスワードをデフォルトパスワードから変更する。# sudo passwd XXX
- emacs-noxをインストールする
これは管理人個人の完全な好みだが、今後の作業を円滑に進めるため、エディタとしてemacs-noxをインストールする。# apt-get install emacs-nox
- aptのリポジトリを変更してからupdate→upgradeする
デフォルトで設定されているaptのリポジトリが、著しくレスポンスが悪いWIDE Project Tsukuba NOCなので、比較的高速なJAIST(北陸先端科学技術大学院大学)へ変更する。これを実施しないと、今後の作業でも時間のロスが激しい。Debianと同様、/etc/apt/source.list
を公式に公開されているリポジトリからJAISTのホストへ変更する。その後、インストールされているソフトを最新版へアップデートする。# apt-get update
# apt-get upgrade
# apt-get dist-upgrade
- 固定IPアドレスに設定する
公開されている公式の手順ではDHCPクライアントソフトdhcpcdの設定/etc/dhcpcd.conf
を変更するようアナウンスされているが、管理人が運用しているサーバファームネットワークではDHCPを使用していないためDHCPプロセスは無駄なリソース消費となる。故に、通常のDebianと同様、/etc/network/interfaces
にインタフェース名eth0
で設定する。このときループバックインタフェースlo
も設定する。eth0
に設定する各IPアドレスは各自がRaspberry Piを接続するネットワーク仕様に合わせる必要があるのは言うまでもない。# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
address 192.168.0.xxx
netmask 255.255.255.xxx
network 192.168.0.0
gateway 192.168.0.xxx
dns-nameservers 192.168.0.xxx - 64ビットカーネルを有効にする
Raspberry Pi 4 Model BはCPUが64ビットだが、特に指定しない限り、Raspberry Pi OSが32ビットカーネルで起動する。リソースを有効活用するため、64ビットカーネルを有効にする。
Raspberry Pi OSの起動時の設定を記述している/boot/config.txt
にarm_64bit=1
を追記する。 - 無線LANを無効にする
管理人が運用しているサーバファームネットワークではRaspberry Piを無線LANで使用しないため無効とし、リソースと消費電力を節約する。
Raspberry Pi OSの起動時の設定を記述している/boot/config.txt
にdtoverlay=disable-wifi
を追記する。
dtoverlayの引数はRaspberry Pi OSのVersionで変更される可能性があるので/boot/overlays/README
を確認すること。2020-05-27-raspios-buster-lite-armhf.imgでは以下のように記述されている。Name: disable-wifi
Info: Disable onboard WiFi on Pi 3B, 3B+, 3A+, 4B and Zero W.
Load: dtoverlay=disable-wifi
Params: <None> - Buetoothを無効にする
管理人が運用しているサーバファームネットワークではRaspberry PiでBluetoothを使用しないため無効とし、リソースと消費電力を節約する。
Raspberry Pi OSの起動時の設定を記述している/boot/config.txt
にdtoverlay=disable-bt
を追記する。
dtoverlayの引数はRaspberry Pi OSのVersionで変更される可能性があるので/boot/overlays/README
を確認すること。2020-05-27-raspios-buster-lite-armhf.imgでは以下のように記述されている。Name: disable-bt
Info: Disable onboard Bluetooth on Pi 3B, 3B+, 3A+, 4B and Zero W, restoring UART0/ttyAMA0 over GPIOs 14 & 15. N.B. To disable the systemd service that initialises the modem so it doesn't use the UART, use 'sudo systemctl disable hciuart'.
Load: dtoverlay=disable-bt
Params: <None>/boot/config.txt
を変更する上記3設定は冒頭にまとめて以下のように記述すると忘れない。# enable 64bit
arm_64bit=1
# disable bluetooth and wi-fi
dtoverlay=disable-bt
dtoverlay=disable-wifi - IPv6アドレスを無効にする
管理人が運用しているサーバファームネットワークではIPv6を使用しないため無効とし、リソースと名前解決時間を節約する。
以下の2行を/etc/sysctl.conf
の最下行に追加する。net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1 - 再起動する
ここまで実施後、再起動する。再起動が完了すると以下が反映される。- カーネルが64ビット
- 固定IPv4アドレス
- IPv6アドレス無効
- 無線LAN無効
- Bluetooth無効
- 各種ソフトウェアが最新版
- 不要なソフトウェアとプロセスを削除する
管理人が使用しないソフトウェアとプロセスを削除する。具体的には以下。- avahi-daemon
- bluetooth
- dhcpcd
- exim4
- iw
- rpcbind
- rsync
- rsyslog
- wpasupplicant
- microSDの書き込みや書き換えを極力無くし延命化する
swap領域を無効化し、/tmp
と/vat/tmp
と/var/log
をRAMへ追い出し、ext4ファイルシステムのジャーナルを無効化する。- swap領域を無効化し、swap領域マネジャをパケージごと削除する
# sudo swapoff --all
# apt-get --purge remove dphys-swapfile
# sudo rm -fr /var/swap
/etc/fstab
に以下を追記するtmpfs /tmp tmpfs defaults,size=496m,noatime,mode=1777 0 0
tmpfs /var/tmp tmpfs defaults,size=8m,noatime,mode=1777 0 0
tmpfs /var/log tmpfs defaults,size=8m,noatime,mode=0755 0 0- 現在microSDに存在している各ディレクトリを削除する
# sudo rm -fr /tmp
# sudo rm -fr /var/tmp
# sudo rm -fr /var/log
/var/log
のディレクトリ構成を復元するスクリプトを/etc/rc.local
のexit 0
の手前に下記を追記する。mkdir -p /var/log/apt
mkdir -p /var/log/fsck
mkdir -p /var/log/ntpstats
mkdir -p /var/log/samba
chmod 750 /var/log/samba
chown ntp:ntp /var/log/ntpstats
chown root:adm /var/log/samba
touch /var/log/btmp
touch /var/log/lastlog
touch /var/log/wtmp
chmod 600 /var/log/btmp
chmod 664 /var/log/lastlog
chmod 664 /var/log/wtmp
chown root:utmp /var/log/btmp
chown root:utmp /var/log/lastlog
chown root:utmp /var/log/wtmp- ext4ファイルシステムのジャーナルを無効化する
# sudo umount /dev/mmcblk0p2
# sudo tune2fs -O ^has_journal /dev/mmcblk0p2
- swap領域を無効化し、swap領域マネジャをパケージごと削除する
- 再度再起動する
無事に再起動が完了すれば、microSDの書き換え頻度が著しく下げられた、24x7運用可能なRaspberry Piの基盤が出来上がる。
その後は必要なソフトをインストールする。
脚注
- ↑ 録音スクリプトでは、ストリーミングデータとして受信したReal-Time Messaging ProtocolテンポラリファイルはRAMに追い出した
/tmp
に、それをffmpegで生成したmp3ファイルは管理人がサーバファームネットワークで運用しているNASにCIFSでマウントした先に、それぞれ置くようにしているため、radikoを録音するだけではRaspberry Piに装着したmicroSDへの書き換え頻度は少ないどころかほぼ無いはずだが、それでもこのぐらいの頻度で不意にext4ファイルシステムが壊れ、使用不能に陥る。microSDが置かれている高温環境も一因なのだろう。