raspberrypi readonly

ICカードで施錠 https://qiita.com/carpenders/items/94d29098127faaffe1fc

### 作業開始
```
pi@raspberrypi:~ $ sudo bash
root@raspberrypi:/home/pi# cd /usr/share/initramfs-tools
root@raspberrypi:/usr/share/initramfs-tools# vi hook-functions
# ★497行目
        for arg in "$@" ; do
                case "$arg" in
                base)
                        modules="$modules btrfs ext2 ext3 ext4 ext4dev overlay" # ★overlayを追加
                        modules="$modules isofs jfs reiserfs udf xfs"
                        modules="$modules nfs nfsv2 nfsv3 nfsv4"
                        modules="$modules af_packet atkbd i8042 psmouse"
                        modules="$modules virtio_pci virtio_mmio"

root@raspberrypi:/usr/share/initramfs-tools# cd scripts
root@raspberrypi:/usr/share/initramfs-tools/scripts#
root@raspberrypi:/usr/share/initramfs-tools/scripts# cp local overlay
root@raspberrypi:/usr/share/initramfs-tools/scripts# cp -rp local-premount overlay-premount
root@raspberrypi:/usr/share/initramfs-tools/scripts# cp -rp local-bottom overlay-bottom
cp: cannot stat 'local-bottom': No such file or directory # ★エラーは無視する
root@raspberrypi:/usr/share/initramfs-tools/scripts# vi overlay

local_mount_root()を変更
local_mount_root()
{
        local_top
        local_device_setup "${ROOT}" "root file system"
        ROOT="${DEV}"

        # Get the root filesystem type if not set
        if [ -z "${ROOTFSTYPE}" ]; then
                FSTYPE=$(get_fstype "${ROOT}")
        else
                FSTYPE=${ROOTFSTYPE}
        fi

        local_premount

#        if [ "${readonly}" = "y" ]; then # ★コメントアウト
                roflag=-r
#        else # ★コメントアウト
#                roflag=-w # ★コメントアウト
#        fi # ★コメントアウト

        # FIXME This has no error checking
        modprobe ${FSTYPE}

        checkfs ${ROOT} root # ★"${FSTYPE}"を削除

        # FIXME This has no error checking
        # Mount root
        mkdir /upper /lower # ★１行追加
        if [ "${FSTYPE}" != "unknown" ]; then
                mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /lower # ★/lowerに変更
        else
                mount ${roflag} ${ROOTFLAGS} ${ROOT} /lower # ★/lowerに変更
        fi
        # ★以下を追加
        modprobe overlay
        mount -t tmpfs tmpfs /upper
        mkdir /upper/data /upper/work
        mount -t overlay -olowerdir=/lower,upperdir=/upper/data,workdir=/upper/work overlay ${rootmnt}
}
root@raspberrypi:/usr/share/initramfs-tools/scripts# update-initramfs -c -k $(uname -r)
update-initramfs: Generating /boot/initrd.img-4.14.98-v7+
root@raspberrypi:/usr/share/initramfs-tools/scripts# cd /boot
root@raspberrypi:/boot# mv initrd.img-$(uname -r) initrd7.img
root@raspberrypi:/boot# vi config.txt
★末尾に以下を追加
kernel=kernel7.img
initramfs initrd7.img
root@raspberrypi:/boot# vi cmdline.txt
★以下に変更 boot=overlay root=/dev/mmcblk0p2
boot=overlay dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/mmcblk0p2 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait
root@raspberrypi:/boot# reboot
```

### readonlyを確認する。
```
pi@raspberrypi:~ $ mount | fgrep ' / '
overlay on / type overlay (rw,noatime,lowerdir=/lower,upperdir=/upper/data,workdir=/upper/work)
```

### readonlyを解除する。
```/boot/cmdline.txt``` の ```boot=overlay``` を削除する

### 参考
https://flogics.com/wp/ja/2017/10/raspbian-os%E3%81%AEsd%E3%82%AB%E3%83%BC%E3%83%89%E3%82%92%E3%83%AA%E3%83%BC%E3%83%89%E3%82%AA%E3%83%B3%E3%83%AA%E3%83%BC%E5%8C%96%E3%81%99%E3%82%8B%EF%BC%88initrd-%E7%B7%A8%EF%BC%89/