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