リードオンリー化(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
raspberry_pi/0050fsprotect.txt · 最終更新: 2017/07/07 06:13 by admin
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0