リードオンリー化(1)
aufs&fsprotectによるリードオンリー化
aufs化
http://www.pc-links.com/blog/raspberrypi/aufs/
http://aufs.sourceforge.net/
http://karaage.hatenadiary.jp/entry/2015/10/07/073000
関連パッケージの導入
$ sudo su - # rpi-update # apt-get update # apt-get upgrade # apt-get install bc # apt-get -y install libncurses5-dev libxml2-dev subversion libssl-dev libspandsp-dev libsqlite3-dev sqlite3 libgtk2.0-dev libslang2-dev libnewt-dev libghc-zlib-dev libkrb5-dev git libreadline6-dev
ソースの取得
# cd /usr/src # git clone --depth 1 https://github.com/raspberrypi/linux.git # uname -a 4.1.20-v7+ # cd linux # git checkout rpi-4.1.y
パッチの取得
$ cd /usr/src $ git clone git://github.com/sfjro/aufs4-standalone.git $ cd aufs4-standalone/ ( http://aufs.sourceforge.net/ を見てverを確認) $ git checkout origin/aufs4.1.13+
$ ls -rw-r--r-- 1 root root 2902 3月 2 17:55 aufs3-base.patch -rw-r--r-- 1 root root 957 3月 2 17:55 aufs3-kbuild.patch -rw-r--r-- 1 root root 8281 3月 2 17:55 aufs3-loopback.patch -rw-r--r-- 1 root root 6959 3月 2 17:55 aufs3-proc_map.patch -rw-r--r-- 1 root root 8103 3月 2 17:55 aufs3-standalone.patch $ cp -rp *.patch /usr/src/linux $ cp -rp fs /usr/src/linux $ cp -rp Documentation/ /usr/src/linux $ cp -a include/uapi/linux/* /usr/src/linux/include/uapi/linux/
# cd /usr/src/linux
$ sudo patch -p1 < aufs4-kbuild.patch patching file fs/Kconfig patching file fs/Makefile patching file include/uapi/linux/Kbuild Hunk #1 FAILED at 59. 1 out of 1 hunk FAILED -- saving rejects to file include/uapi/linux/Kbuild.rej (無視) # patch -p1 < aufs4-base.patch # patch -p1 < aufs4-mmap.patch # patch -p1 < ./aufs4-standalone.patch (module modeを使わないので不要)
MENUの実行
$ cd /usr/src/linux $ modprobe configs $ zcat /proc/config.gz > .config $make menuconfig 「Load an Alternate Configuration File」を選択 「.config」を読み込み 「General Setup」を選択 「 Initial RAM filesystem and RAM disk (initramfs/initrd) support」をchekck[*]を表示し、EXIT 「File system」を選択 「Miscellaneous filesystems」を選択 「<*> Aufs (Advanced multi layered unification filesystem) support」を追加 (Mでなく*で) 「NFS-exportable aufs」を追加 「Rams(initramfs/rootfs) as an aufs branch」を追加 「Fuse fs an aufs branch」を追加 変更内容を.configへ上書きします。
「.config」設定の確認
CONFIG_BLK_DEV_INITRD=y , CONFIG_AUFS_FS=y ならOK
makefile修正
$ vi Makefile EXTRAVERSION = -aufs
make開始
# usr/src/linux # make clean # make -j 4 # make -j 4 zImage modules dtbs
インストール
$ sudo make modules_install $ sudo cp arch/arm/boot/dts/*.dtb /boot/ $ sudo cp arch/arm/boot/dts/overlays/*.dtb* /boot/overlays/ $ sudo cp arch/arm/boot/dts/overlays/README /boot/overlays/ $ sudo scripts/mkknlimg arch/arm/boot/zImage /boot/kernel7.img
fsprotect
# apt-get install fsprotect # update-initramfs -c -k `uname -r` # ls /boot/initrd* (確認) /boot/initrd.img-4.1.20-aufs-v7+ # vi /boot/config.txt (追記) ---- initramfs initrd.img-4.1.20-aufs-v7+ # vi /boot/cmdline.tx ---- dwc_otg.lpm_enable=0 console=ttyAMA0,115200 kgdboc=ttyAMA0,115200 console=tty1 root=/dev/mmcblk0p6 rootfstype=ext4 elevator=deadline rootwait fsprotect
確認
$ mount|grep fsprotect /dev/mmcblk0p2 on /fsprotect/system type ext4 (ro,relatime,data=ordered) none on /fsprotect/tmp type tmpfs (rw,relatime,size=524288k,mode=755) (/dev/mmcblk0p6 (本来の root パーティション)が/fsprotect下にro (read only)でマウント) $ mount|grep aufs none on / type aufs (rw,noatime,si=ea3115bd) (aufsの記述があること)
$ df none 524288 3240 521048 1% / / が none でマウントされていれば OK。
$ sudo vi /etc/default/fsprotect ---- PROTECT=”/boot=32M”
$ sudo vi /etc/fstab ---- /dev/mmcblk0p1 /boot vfat defaults 0 2 -> 0 /dev/mmcblk0p2 / ext4 defaults,noatime 0 1 ->0
設定の切り替え
cmdline.txt ファイルをエディタで修正します。最後に記述している fsprotect を nofsprotect に変更します。
設定の保存
# dd if=/dev/mmcblk0p1 of=/root/bin/nofsprotect.img
設定の切り替え2
# vi nofsprotect ---- #!/bin/sh if [ `grep -c nofsprotect /boot/cmdline.txt` = 1 ] then echo nofsprotect else sync sync sync umount /boot dd if=/root/bin/nofsprotect.img of=/dev/mmcblk0p1 reboot fi
# vi fsprotect ---- #!/bin/sh if [ `grep -c nofsprotect /boot/cmdline.txt` = 1 ] then sed -i -e "s/nofsprotect/fsprotect/g" /boot/cmdline.txt reboot else echo fsprotect fi