=====リードオンリー化(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