home *** CD-ROM | disk | FTP | other *** search
/ Mac Easy 2010 May / Mac Life Ubuntu.iso / casper / filesystem.squashfs / usr / share / initramfs-tools / init < prev    next >
Encoding:
Text File  |  2009-04-02  |  4.7 KB  |  260 lines

  1. #!/bin/sh
  2.  
  3. echo "Loading, please wait..."
  4.  
  5. [ -d /dev ] || mkdir -m 0755 /dev
  6. [ -d /root ] || mkdir -m 0700 /root
  7. [ -d /sys ] || mkdir /sys
  8. [ -d /proc ] || mkdir /proc
  9. [ -d /tmp ] || mkdir /tmp
  10. mkdir -p /var/lock
  11. mount -t sysfs -o nodev,noexec,nosuid none /sys 
  12. mount -t proc -o nodev,noexec,nosuid none /proc 
  13.  
  14. # Note that this only becomes /dev on the real filesystem if udev's scripts
  15. # are used; which they will be, but it's worth pointing out
  16. mount -t tmpfs -o mode=0755 udev /dev
  17. [ -e /dev/console ] || mknod -m 0600 /dev/console c 5 1
  18. [ -e /dev/null ] || mknod /dev/null c 1 3
  19. > /dev/.initramfs-tools
  20. mkdir /dev/.initramfs
  21.  
  22. # Export the dpkg architecture
  23. export DPKG_ARCH=
  24. . /conf/arch.conf
  25.  
  26. # Set modprobe env
  27. export MODPROBE_OPTIONS="-qb"
  28.  
  29. # Export relevant variables
  30. export ROOT=
  31. export ROOTDELAY=
  32. export ROOTFLAGS=
  33. export ROOTFSTYPE=
  34. export break=
  35. export init=/sbin/init
  36. export quiet=n
  37. export readonly=y
  38. export rootmnt=/root
  39. export debug=
  40. export panic=
  41. export blacklist=
  42. export resume_offset=
  43.  
  44. # Bring in the main config
  45. . /conf/initramfs.conf
  46. for conf in conf/conf.d/*; do
  47.     [ -f ${conf} ] && . ${conf}
  48. done
  49. . /scripts/functions
  50.  
  51. # Parse command line options
  52. for x in $(cat /proc/cmdline); do
  53.     case $x in
  54.     init=*)
  55.         init=${x#init=}
  56.         ;;
  57.     root=*)
  58.         ROOT=${x#root=}
  59.         case $ROOT in
  60.         LABEL=*)
  61.             ROOT="${ROOT#LABEL=}"
  62.  
  63.             # support / in LABEL= paths (escape to \x2f)
  64.             case "${ROOT}" in
  65.             *[/]*)
  66.             if [ -x "$(command -v sed)" ]; then
  67.                 ROOT="$(echo ${ROOT} | sed 's,/,\\x2f,g')"
  68.             else
  69.                 if [ "${ROOT}" != "${ROOT#/}" ]; then
  70.                     ROOT="\x2f${ROOT#/}"
  71.                 fi
  72.                 if [ "${ROOT}" != "${ROOT%/}" ]; then
  73.                     ROOT="${ROOT%/}\x2f"
  74.                 fi
  75.                 IFS='/'
  76.                 newroot=
  77.                 for s in $ROOT; do
  78.                     if [ -z "${newroot}" ]; then
  79.                         newroot="${s}"
  80.                     else
  81.                         newroot="${newroot}\\x2f${s}"
  82.                     fi
  83.                 done
  84.                 unset IFS
  85.                 ROOT="${newroot}"
  86.             fi
  87.             esac
  88.             ROOT="/dev/disk/by-label/${ROOT}"
  89.             ;;
  90.         UUID=*)
  91.             ROOT="/dev/disk/by-uuid/${ROOT#UUID=}"
  92.             ;;
  93.         /dev/nfs)
  94.             [ -z "${BOOT}" ] && BOOT=nfs
  95.             ;;
  96.         esac
  97.         ;;
  98.     rootflags=*)
  99.         ROOTFLAGS="-o ${x#rootflags=}"
  100.         ;;
  101.     rootfstype=*)
  102.         ROOTFSTYPE="${x#rootfstype=}"
  103.         ;;
  104.     rootdelay=*)
  105.         ROOTDELAY="${x#rootdelay=}"
  106.         case ${ROOTDELAY} in
  107.         *[![:digit:].]*)
  108.             ROOTDELAY=
  109.             ;;
  110.         esac
  111.         ;;
  112.     resumedelay=*)
  113.         RESUMEDELAY="${x#resumedelay=}"
  114.         ;;
  115.     loop=*)
  116.         LOOP="${x#loop=}"
  117.         ;;
  118.     loopflags=*)
  119.         LOOPFLAGS="-o ${x#loopflags=}"
  120.         ;;
  121.     loopfstype=*)
  122.         LOOPFSTYPE="${x#loopfstype=}"
  123.         ;;
  124.     cryptopts=*)
  125.         cryptopts="${x#cryptopts=}"
  126.         ;;
  127.     nfsroot=*)
  128.         NFSROOT="${x#nfsroot=}"
  129.         ;;
  130.     netboot=*)
  131.         NETBOOT="${x#netboot=}"
  132.         ;;
  133.     ip=*)
  134.         IPOPTS="${x#ip=}"
  135.         ;;
  136.     boot=*)
  137.         BOOT=${x#boot=}
  138.         ;;
  139.     resume=*)
  140.         RESUME="${x#resume=}"
  141.         ;;
  142.     resume_offset=*)
  143.         resume_offset="${x#resume_offset=}"
  144.         ;;
  145.     noresume)
  146.         noresume=y
  147.         ;;
  148.     panic=*)
  149.         panic="${x#panic=}"
  150.         case ${panic} in
  151.         *[![:digit:].]*)
  152.             panic=
  153.             ;;
  154.         esac
  155.         ;;
  156.     quiet)
  157.         quiet=y
  158.         ;;
  159.     ro)
  160.         readonly=y
  161.         ;;
  162.     rw)
  163.         readonly=n
  164.         ;;
  165.     debug)
  166.         debug=y
  167.         quiet=n
  168.         exec >/dev/.initramfs/initramfs.debug 2>&1
  169.         set -x
  170.         ;;
  171.     debug=*)
  172.         debug=y
  173.         quiet=n
  174.         set -x
  175.         ;;
  176.     break=*)
  177.         break=${x#break=}
  178.         ;;
  179.     break)
  180.         break=premount
  181.         ;;
  182.     blacklist=*)
  183.         blacklist=${x#blacklist=}
  184.         ;;
  185.     esac
  186. done
  187.  
  188. if [ -z "${noresume}" ]; then
  189.     export resume=${RESUME}
  190. else
  191.     export noresume
  192. fi
  193.  
  194. depmod -a
  195. maybe_break top
  196.  
  197. # export BOOT variable value for compcache,
  198. # so we know if we run from casper
  199. export BOOT
  200.  
  201. # Don't do log messages here to avoid confusing usplash
  202. run_scripts /scripts/init-top
  203.  
  204. maybe_break modules
  205. log_begin_msg "Loading essential drivers..."
  206. load_modules
  207. log_end_msg
  208.  
  209. maybe_break premount
  210. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
  211. run_scripts /scripts/init-premount
  212. [ "$quiet" != "y" ] && log_end_msg
  213.  
  214. maybe_break mount
  215. log_begin_msg "Mounting root file system..."
  216. . /scripts/${BOOT}
  217. parse_numeric ${ROOT}
  218. mountroot
  219. log_end_msg
  220.  
  221. maybe_break bottom
  222. [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
  223. run_scripts /scripts/init-bottom
  224. [ "$quiet" != "y" ] && log_end_msg
  225.  
  226. # Move virtual filesystems over to the real filesystem
  227. mount -n -o move /sys ${rootmnt}/sys
  228. mount -n -o move /proc ${rootmnt}/proc
  229.  
  230. # Check init bootarg
  231. if [ -n "${init}" ] && [ ! -x "${rootmnt}${init}" ]; then
  232.     echo "Target filesystem doesn't have ${init}."
  233.     init=
  234. fi
  235.  
  236. # Search for valid init
  237. if [ -z "${init}" ] ; then
  238.     for init in /sbin/init /etc/init /bin/init /bin/sh; do
  239.         if [ ! -x "${rootmnt}${init}" ]; then
  240.             continue
  241.         fi
  242.         break
  243.     done
  244. fi
  245.  
  246. # No init on rootmount
  247. if [ ! -x "${rootmnt}${init}" ]; then
  248.     panic "No init found. Try passing init= bootarg."
  249. fi
  250.  
  251. # Confuses /etc/init.d/rc
  252. if [ -n ${debug} ]; then
  253.     unset debug
  254. fi
  255.  
  256. # Chain to real filesystem
  257. maybe_break init
  258. exec run-init ${rootmnt} ${init} "$@" <${rootmnt}/dev/console >${rootmnt}/dev/console 2>&1
  259. panic "Could not execute run-init."
  260.