aufs-ro-linux.setup 2.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/bin/bash
  2. set -e
  3. ############
  4. # Prepends #
  5. ############
  6. dpkg -l | grep aufs-tools > /dev/null || aptitude install aufs-tools
  7. ################
  8. # Hook anlegen #
  9. ################
  10. cat <<EOF > /etc/initramfs-tools/hooks/ro_root
  11. #!/bin/sh
  12. PREREQ=''
  13. prereqs() {
  14. echo "\$PREREQ"
  15. }
  16. case \$1 in
  17. prereqs)
  18. prereqs
  19. exit 0
  20. ;;
  21. esac
  22. . /usr/share/initramfs-tools/hook-functions
  23. manual_add_modules aufs
  24. manual_add_modules tmpfs
  25. copy_exec /bin/chmod /bin
  26. EOF
  27. chmod +x /etc/initramfs-tools/hooks/ro_root
  28. ##################
  29. # Script anlegen #
  30. ##################
  31. cat <<EOF > /etc/initramfs-tools/scripts/init-bottom/ro_root
  32. #!/bin/sh
  33. PREREQ=''
  34. prereqs() {
  35. echo "\$PREREQ"
  36. }
  37. case \$1 in
  38. prereqs)
  39. prereqs
  40. exit 0
  41. ;;
  42. esac
  43. # Wenn der Single-User-Mode gewählt ist, boote normal
  44. if grep single /proc/cmdline >/dev/null; then
  45. exit 0
  46. fi
  47. # Erstelle die Mount-Points
  48. rom_mount_point="\${rootmnt%/}.rom"
  49. ram_mount_point="\${rootmnt%/}.ram"
  50. mkdir "\${rom_mount_point}" "\${ram_mount_point}"
  51. # Verschiebe das rootfs auf den ro-Mount-Point und mounte eine Ramdisk
  52. mount --move "\${rootmnt}" "\${rom_mount_point}"
  53. mount -t tmpfs root.ram "\${ram_mount_point}"
  54. # Mounte das Union-Filesystem
  55. mount -t aufs -o "dirs=\${ram_mount_point}=rw:\${rom_mount_point}=ro" root.union "\${rootmnt}"
  56. chmod 755 "\${rootmnt}"
  57. # Die Komponenten des Union-Filesystems unter rootfs zugänglich machen.
  58. mkdir -p "\${rootmnt}/root/.rootfs.rom" "\${rootmnt}/root/.rootfs.ram"
  59. mount --move "\${rom_mount_point}" "\${rootmnt}/root/.rootfs.rom"
  60. mount --move "\${ram_mount_point}" "\${rootmnt}/root/.rootfs.ram"
  61. # checkroot.sh an der Ausführung hindern, da dies zu Fehlverhalten oder Remounts führt.
  62. rm -f "\${rootmnt}/etc/rcS.d"/S[0-9][0-9]checkroot.sh
  63. EOF
  64. chmod +x /etc/initramfs-tools/scripts/init-bottom/ro_root
  65. update-initramfs -u -v
  66. #####################
  67. # Logs deaktivieren #
  68. #####################
  69. mkdir -p /etc/cron.hourly
  70. cat <<EOF > /etc/cron.hourly/purgelogs
  71. #!/bin/bash
  72. for logfile in \$(find /var/log/ -type f); do echo -n "" > \$logfile; done
  73. EOF
  74. chmod +x /etc/cron.hourly/purgelogs
  75. echo "*/15 * * * * root /etc/cron.hourly/purgelogs" >> /etc/crontab
  76. #################
  77. # MOTD anpassen #
  78. #################
  79. cat <<EOF >> /etc/motd
  80. ### WARNUNG ###
  81. Sie befinden sich auf einem ro-Dateisystem
  82. mit flüchtigem Overlay. Der nicht-flüchtige
  83. Speicher ist unter /root/.rootfs.rom ein-
  84. gehängt, der flüchtige Overlay-Speicher ist
  85. unter /root/.rootfs.ram eingehängt.
  86. EOF