Raspberry pi リードオンリー化のテスト
Raspberry pi Busbet OS での、microsd read only 化に挑戦します。
Andreas さんのやり方をそのまんま真似してみます。
Make your Raspberry Pi file system read-only (Raspbian Buster)
私は、Raspberry pi zero w を使用します。
はたして、うまくいくかな?
コマンドメモ
コピペで繰り返す用
$ sudo apt-get update && sudo apt-get upgrade $ sudo apt-get remove --purge triggerhappy logrotate dphys-swapfile $ sudo apt-get autoremove --purge
/boot/cmdline.txt
の行末に追加
fastboot noswap ro
ロガーの変更
$ sudo apt-get install busybox-syslogd
$ sudo apt-get remove --purge rsyslog
今後は sudo logread
を使用してね! とのこと。
/etc/fstab 改変。
ro
が追加されている。
tmpfs
が、3行追加されている。
proc /proc proc defaults 0 0 PARTUUID=fb0d460e-01 /boot vfat defaults,ro 0 2 PARTUUID=fb0d460e-02 / ext4 defaults,noatime,ro 0 1 #Also add the entries for the temporary file system at the end of the file: tmpfs /tmp tmpfs nosuid,nodev 0 0 tmpfs /var/log tmpfs nosuid,nodev 0 0 tmpfs /var/tmp tmpfs nosuid,nodev 0 0
いろいろ移動する
$ sudo rm -rf /var/lib/dhcp /var/lib/dhcpcd5 /var/spool /etc/resolv.conf $ sudo ln -s /tmp /var/lib/dhcp $ sudo ln -s /tmp /var/lib/dhcpcd5 $ sudo ln -s /tmp /var/spool $ sudo touch /tmp/dhcpcd.resolv.conf $ sudo ln -s /tmp/dhcpcd.resolv.conf /etc/resolv.conf $ sudo rm /var/lib/systemd/random-seed $ sudo ln -s /tmp/random-seed /var/lib/systemd/random-seed
/lib/systemd/system/systemd-random-seed.service 改変
ExecStartPre=/bin/echo "" >/tmp/random-seed
を、Serviceセクションに追加する。
こんな感じになるはず。
3行目?に追加している。
[Service] Type=oneshot RemainAfterExit=yes ExecStartPre=/bin/echo "" >/tmp/random-seed ExecStart=/lib/systemd/systemd-random-seed load ExecStop=/lib/systemd/systemd-random-seed save TimeoutSec=30s
おまけ機能
optional としてあるところですが、実に便利なので、ぜひ導入しましょう。
設定すると、$ ro
で、 Read Only mode となり、 $ rw
で、 Read and Write mode になります。
また、ログインシェルに (ro):~$
のように、現状の mode を表記してくれます。
/etc/bash.bashrc を編集する。
set_bash_prompt() { fs_mode=$(mount | sed -n -e "s/^\/dev\/.* on \/ .*(\(r[w|o]\).*/\1/p") PS1='\[\033[01;32m\]\u@\h${fs_mode:+($fs_mode)}\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ ' } alias ro='sudo mount -o remount,ro / ; sudo mount -o remount,ro /boot' alias rw='sudo mount -o remount,rw / ; sudo mount -o remount,rw /boot' PROMPT_COMMAND=set_bash_prompt
やってみたら、何がおきた?
crontab が消えた
/etc/crontab に書き込む
時刻が狂った
etc/crontab に、@reboot root ntpdate -v ntp.nict.jp
を入れた。
ファイルを保存できなくなった
これはちょっと意外でした。
/home/user/ に、ファイルを書き出そうとしたら、書き出せなかった。
「書き出せるけれども、再起動したら消える」のかと、なんとなく勘違いしておりました。
タイムラプス専用のマシンを作りたくて挑戦したのですが、ファイルを保存できなくなってしまった。
なので、撮影&転送コマンドを書き換える必要が出ました。
ビフォー
#!/bin/bash today=`date "+%Y%m%d"` t_stamp=`date "+%Y%m%d%H%M%S"` ssh iot_ssh@_IP_ADDR_ "mkdir -p ./zero_w/`echo $today`" raspistill -o ./out.png scp ./out.png iot_ssh@_IP_ADDR_:./zero_w/`echo $today`/`echo $t_stamp`.png
ファイルを作成し、spc で転送していた。
アフター
#!/bin/bash today=`date "+%Y%m%d"` t_stamp=`date "+%Y%m%d%H%M%S"` ssh iot_ssh@_IP_ADDR_ "mkdir -p ./zero_w/`echo $today`" raspistill -o - | ssh iot_ssh@_IP_ADDR_ "cat > ./zero_w/`echo $today`/`echo $t_stamp`.png"
ファイルを作成する代わりに、標準出力に出して、SSHで標準入力から読み込むようにしました。
ポイントは、raspistill の -o で - を指定すると、標準出力に出せる点と、
scpではなく、ssh を使用している点でしょうか。
フリスクネオの缶に収まった zero w
ピンヘッダー給電にしたので、縦長に収まりました。
カメラマウントがブサイクに大きいけれど、別に構わない。