Guest User

electronjunkie

a guest
Mar 4th, 2009
364
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. # Local filesystem mounting -*- shell-script -*-
  2. #
  3. ################################################################
  4. # File:
  5. # /scripts/local
  6. #
  7. # Root, or / in these notes is the initrd's (busybox) root,
  8. # not your system's root!
  9. #
  10. # You need the aufs module for this to work. To do this install
  11. # aufs on your base install, add aufs to: /etc/initramfs-tools/modules
  12. # Now using your target kernel run:
  13. # mkinitramfs -o initrd.img <kernel-name>
  14. #
  15. # make a directory, copy an initrd to it then cd to it and:
  16. #
  17. # mv initrd.img initrd.img.gz
  18. # gunzip initrd.img.gz
  19. #
  20. # make sure aufs exists somewhere in /lib/modules/<uname -r>/
  21. # After modifying local script, etc do the following in the initrd's
  22. # root folder where /bin and /lib etc is to create a new initrd:
  23. #
  24. # find ./ -print | cpio -H newc -o > ../newinitrd.img
  25. #
  26. # Now tell grub to use this initrd for a RO root filesystem
  27. #
  28. # Note fstab gets hosed, if you need an fstab, make sure this
  29. # script reflects that. I use an fstab for the default initrd for RW
  30. # and none for RO, but you can make this script use a different one for
  31. # RO if you want.
  32. ################################################################
  33. # Parameter: device node to check
  34. # Echos fstype to stdout
  35. # Return value: indicates if an fs could be recognized
  36. get_fstype ()
  37. {
  38. local FS FSTYPE FSSIZE RET
  39. FS="${1}"
  40.  
  41. # vol_id has a more complete list of file systems,
  42. # but fstype is more robust
  43. eval $(fstype "${FS}" 2> /dev/null)
  44. if [ "$FSTYPE" = "unknown" ] && [ -x /lib/udev/vol_id ]; then
  45. FSTYPE=$(/lib/udev/vol_id -t "${FS}" 2> /dev/null)
  46. fi
  47. RET=$?
  48.  
  49. if [ -z "${FSTYPE}" ]; then
  50. FSTYPE="unknown"
  51. fi
  52.  
  53. echo "${FSTYPE}"
  54. return ${RET}
  55. }
  56.  
  57. # Parameter: Where to mount the filesystem
  58. mountroot ()
  59. {
  60. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-top"
  61. run_scripts /scripts/local-top
  62. [ "$quiet" != "y" ] && log_end_msg
  63.  
  64. wait_for_udev 10
  65.  
  66. # If the root device hasn't shown up yet, give it a little while
  67. # to deal with removable devices
  68. if [ ! -e "${ROOT}" ] || ! $(get_fstype "${ROOT}" >/dev/null); then
  69. log_begin_msg "Waiting for root file system"
  70.  
  71. # Default delay is 180s
  72. if [ -z "${ROOTDELAY}" ]; then
  73. slumber=180
  74. else
  75. slumber=${ROOTDELAY}
  76. fi
  77. if [ -x /sbin/usplash_write ]; then
  78. /sbin/usplash_write "TIMEOUT ${slumber}" || true
  79. fi
  80.  
  81. slumber=$(( ${slumber} * 10 ))
  82. while [ ! -e "${ROOT}" ] \
  83. || ! $(get_fstype "${ROOT}" >/dev/null); do
  84. /bin/sleep 0.1
  85. slumber=$(( ${slumber} - 1 ))
  86. [ ${slumber} -gt 0 ] || break
  87. done
  88.  
  89. if [ ${slumber} -gt 0 ]; then
  90. log_end_msg 0
  91. else
  92. log_end_msg 1 || true
  93. fi
  94. if [ -x /sbin/usplash_write ]; then
  95. /sbin/usplash_write "TIMEOUT 15" || true
  96. fi
  97. fi
  98.  
  99. # We've given up, but we'll let the user fix matters if they can
  100. while [ ! -e "${ROOT}" ]; do
  101. # give hint about renamed root
  102. case "${ROOT}" in
  103. /dev/hd*)
  104. suffix="${ROOT#/dev/hd}"
  105. major="${suffix%[[:digit:]]}"
  106. major="${major%[[:digit:]]}"
  107. if [ -d "/sys/block/sd${major}" ]; then
  108. echo "WARNING bootdevice may be renamed. Try root=/dev/sd${suffix}"
  109. fi
  110. ;;
  111. /dev/sd*)
  112. suffix="${ROOT#/dev/sd}"
  113. major="${suffix%[[:digit:]]}"
  114. major="${major%[[:digit:]]}"
  115. if [ -d "/sys/block/hd${major}" ]; then
  116. echo "WARNING bootdevice may be renamed. Try root=/dev/hd${suffix}"
  117. fi
  118. ;;
  119. esac
  120. echo "Gave up waiting for root device. Common problems:"
  121. echo " - Boot args (cat /proc/cmdline)"
  122. echo " - Check rootdelay= (did the system wait long enough?)"
  123. echo " - Check root= (did the system wait for the right device?)"
  124. echo " - Missing modules (cat /proc/modules; ls /dev)"
  125. panic "ALERT! ${ROOT} does not exist. Dropping to a shell!"
  126. done
  127.  
  128. # Get the root filesystem type if not set
  129. if [ -z "${ROOTFSTYPE}" ]; then
  130. FSTYPE=$(get_fstype "${ROOT}")
  131. else
  132. FSTYPE=${ROOTFSTYPE}
  133. fi
  134.  
  135. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-premount"
  136. run_scripts /scripts/local-premount
  137. [ "$quiet" != "y" ] && log_end_msg
  138.  
  139. if [ "${readonly}" = "y" ]; then
  140. roflag=-r
  141. else
  142. roflag=-w
  143. fi
  144.  
  145. # FIXME This has no error checking
  146.  
  147. modprobe ${FSTYPE}
  148. ##########################################################################
  149. ###### Mod'd by Brian Phelps aka Electronjunkie ##########################
  150.  
  151. mkdir /root/.tmpfs
  152. mkdir /root/.rootfs
  153.  
  154. mount -r -t ext2 /dev/sda1 /root/.rootfs
  155.  
  156. modprobe aufs
  157. modprobe loop
  158. mount -t tmpfs -o size=20M tmpfs /root/.tmpfs
  159.  
  160. mount -t aufs -o br:/root/.tmpfs=rw:/root/.rootfs=ro none /root/
  161. mv /root/etc/fstab /root/etc/fstab.defunct
  162.  
  163. #########################################################################
  164.  
  165. # FIXME This has no error checking
  166. # Mount root
  167.  
  168. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"
  169. run_scripts /scripts/local-bottom
  170. [ "$quiet" != "y" ] && log_end_msg
  171. }
RAW Paste Data

Adblocker detected! Please consider disabling it...

We've detected AdBlock Plus or some other adblocking software preventing Pastebin.com from fully loading.

We don't have any obnoxious sound, or popup ads, we actively block these annoying types of ads!

Please add Pastebin.com to your ad blocker whitelist or disable your adblocking software.

×