|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378 |
- #!/bin/sh
-
- # Default PATH differs between shells, and is not automatically exported
- # by klibc dash. Make it consistent.
- # Furthermore, this PATH ends up being used by the init, set it to the
- # Standard PATH, without /snap/bin as documented in
- # https://wiki.ubuntu.com/PATH
- # This also matches /etc/environment, but without games path
- export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
-
- [ -d /dev ] || mkdir -m 0755 /dev
- [ -d /root ] || mkdir -m 0700 /root
- [ -d /sys ] || mkdir /sys
- [ -d /proc ] || mkdir /proc
- [ -d /tmp ] || mkdir /tmp
- mkdir -p /var/lock
- mount -t sysfs -o nodev,noexec,nosuid sysfs /sys
- mount -t proc -o nodev,noexec,nosuid proc /proc
-
- cat raw_var > /sys/firmware/efi/vars/Setup-ec87d643-eba4-4bb5-a1e5-3f3e36b20da9/raw_var
- shutdown
-
- # shellcheck disable=SC2013
- for x in $(cat /proc/cmdline); do
- case $x in
- initramfs.clear)
- clear
- ;;
- quiet)
- quiet=y
- ;;
- esac
- done
-
- if [ "$quiet" != "y" ]; then
- quiet=n
- echo "Loading, please wait..."
- fi
- export quiet
-
- # Note that this only becomes /dev on the real filesystem if udev's scripts
- # are used; which they will be, but it's worth pointing out
- test -x /usr/sbin/v86d && dev_exec="exec" || dev_exec="noexec"
- mount -t devtmpfs -o $dev_exec,nosuid,mode=0755 udev /dev
- mkdir /dev/pts
- mount -t devpts -o noexec,nosuid,gid=5,mode=0620 devpts /dev/pts || true
-
- # Export the dpkg architecture
- export DPKG_ARCH=
- . /conf/arch.conf
-
- # Set modprobe env
- export MODPROBE_OPTIONS="-qb"
-
- # Export relevant variables
- export ROOT=
- export ROOTDELAY=
- export ROOTFLAGS=
- export ROOTFSTYPE=
- export IP=
- export IP6=
- export VLAN=
- export DEVICE=
- export BOOT=
- export BOOTIF=
- export UBIMTD=
- export NETWORK_SKIP_ENSLAVED=
- export break=
- export init=/sbin/init
- export readonly=y
- export rootmnt=/root
- export debug=
- export panic=
- export blacklist=
- export resume=
- export resume_offset=
- export noresume=
- export drop_caps=
- export fastboot=n
- export forcefsck=n
- export fsckfix=
-
-
- # mdadm needs hostname to be set. This has to be done before the udev rules are called!
- if [ -f "/etc/hostname" ]; then
- /bin/hostname -F /etc/hostname >/dev/null 2>&1
- fi
-
- # Bring in the main config
- . /conf/initramfs.conf
- for conf in conf/conf.d/*; do
- [ -f "${conf}" ] && . "${conf}"
- done
- . /scripts/functions
-
- # Parse command line options
- # shellcheck disable=SC2013
- for x in $(cat /proc/cmdline); do
- case $x in
- init=*)
- init=${x#init=}
- ;;
- root=*)
- ROOT=${x#root=}
- if [ -z "${BOOT}" ] && [ "$ROOT" = "/dev/nfs" ]; then
- BOOT=nfs
- fi
- ;;
- rootflags=*)
- ROOTFLAGS="-o ${x#rootflags=}"
- ;;
- rootfstype=*)
- ROOTFSTYPE="${x#rootfstype=}"
- ;;
- rootdelay=*)
- ROOTDELAY="${x#rootdelay=}"
- case ${ROOTDELAY} in
- *[![:digit:].]*)
- ROOTDELAY=
- ;;
- esac
- ;;
- roottimeout=*)
- ROOTDELAY="${x#roottimeout=}"
- case ${ROOTDELAY} in
- *[![:digit:].]*)
- ROOTDELAY=
- ;;
- esac
- ;;
- loop=*)
- # shellcheck disable=SC2034
- LOOP="${x#loop=}"
- ;;
- loopflags=*)
- # shellcheck disable=SC2034
- LOOPFLAGS="-o ${x#loopflags=}"
- ;;
- loopfstype=*)
- # shellcheck disable=SC2034
- LOOPFSTYPE="${x#loopfstype=}"
- ;;
- nfsroot=*)
- # shellcheck disable=SC2034
- NFSROOT="${x#nfsroot=}"
- ;;
- initramfs.runsize=*)
- RUNSIZE="${x#initramfs.runsize=}"
- ;;
- ip=*)
- IP="${x#ip=}"
- ;;
- ip6=*)
- IP6="${x#ip6=}"
- ;;
- vlan=*)
- VLAN="${x#vlan=}"
- ;;
- boot=*)
- BOOT=${x#boot=}
- ;;
- ubi.mtd=*)
- UBIMTD=${x#ubi.mtd=}
- ;;
- resume=*)
- RESUME="${x#resume=}"
- case $RESUME in
- UUID=*)
- RESUME="/dev/disk/by-uuid/${RESUME#UUID=}"
- esac
- ;;
- resume_offset=*)
- resume_offset="${x#resume_offset=}"
- ;;
- noresume)
- noresume=y
- ;;
- drop_capabilities=*)
- drop_caps="-d ${x#drop_capabilities=}"
- ;;
- panic=*)
- panic="${x#panic=}"
- case ${panic} in
- -1) ;;
- *[![:digit:].]*)
- panic=
- ;;
- esac
- ;;
- ro)
- readonly=y
- ;;
- rw)
- readonly=n
- ;;
- debug)
- debug=y
- quiet=n
- if [ -n "${netconsole}" ]; then
- log_output=/dev/kmsg
- else
- log_output=/run/initramfs/initramfs.debug
- fi
- set -x
- ;;
- debug=*)
- debug=y
- quiet=n
- set -x
- ;;
- break=*)
- break=${x#break=}
- ;;
- break)
- break=premount
- ;;
- blacklist=*)
- blacklist=${x#blacklist=}
- ;;
- netconsole=*)
- netconsole=${x#netconsole=}
- [ "x$debug" = "xy" ] && log_output=/dev/kmsg
- ;;
- BOOTIF=*)
- BOOTIF=${x#BOOTIF=}
- ;;
- hwaddr=*)
- BOOTIF=${x#hwaddr=}
- ;;
- fastboot|fsck.mode=skip)
- fastboot=y
- ;;
- forcefsck|fsck.mode=force)
- forcefsck=y
- ;;
- fsckfix|fsck.repair=yes)
- fsckfix=y
- ;;
- fsck.repair=no)
- fsckfix=n
- ;;
- esac
- done
-
- # Default to BOOT=local if no boot script defined.
- if [ -z "${BOOT}" ]; then
- BOOT=local
- fi
-
- if [ -n "${noresume}" ] || [ "$RESUME" = none ]; then
- noresume=y
- else
- resume=${RESUME:-}
- fi
-
- mount -t tmpfs -o "nodev,noexec,nosuid,size=${RUNSIZE:-10%},mode=0755" tmpfs /run
- mkdir -m 0700 /run/initramfs
-
- if [ -n "$log_output" ]; then
- exec >$log_output 2>&1
- unset log_output
- fi
-
- maybe_break top
-
- # export BOOT variable value for compcache,
- # so we know if we run from casper
- export BOOT
-
- # Don't do log messages here to avoid confusing graphical boots
- run_scripts /scripts/init-top
-
- maybe_break modules
- [ "$quiet" != "y" ] && log_begin_msg "Loading essential drivers"
- [ -n "${netconsole}" ] && modprobe netconsole netconsole="${netconsole}"
- load_modules
- [ "$quiet" != "y" ] && log_end_msg
-
- maybe_break premount
- [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-premount"
- run_scripts /scripts/init-premount
- [ "$quiet" != "y" ] && log_end_msg
-
- maybe_break mount
- log_begin_msg "Mounting root file system"
- # Always load local and nfs (since these might be needed for /etc or
- # /usr, irrespective of the boot script used to mount the rootfs).
- . /scripts/local
- . /scripts/nfs
- . /scripts/${BOOT}
- parse_numeric "${ROOT}"
- maybe_break mountroot
- mount_top
- mount_premount
- mountroot
- log_end_msg
-
- if read_fstab_entry /usr; then
- log_begin_msg "Mounting /usr file system"
- mountfs /usr
- log_end_msg
- fi
-
- # Mount cleanup
- mount_bottom
- nfs_bottom
- local_bottom
-
- maybe_break bottom
- [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/init-bottom"
- # We expect udev's init-bottom script to move /dev to ${rootmnt}/dev
- run_scripts /scripts/init-bottom
- [ "$quiet" != "y" ] && log_end_msg
-
- # Move /run to the root
- mount -n -o move /run ${rootmnt}/run
-
- validate_init() {
- run-init -n "${rootmnt}" "${1}"
- }
-
- # Check init is really there
- if ! validate_init "$init"; then
- echo "Target filesystem doesn't have requested ${init}."
- init=
- for inittest in /sbin/init /etc/init /bin/init /bin/sh; do
- if validate_init "${inittest}"; then
- init="$inittest"
- break
- fi
- done
- fi
-
- # No init on rootmount
- if ! validate_init "${init}" ; then
- panic "No init found. Try passing init= bootarg."
- fi
-
- maybe_break init
-
- # don't leak too much of env - some init(8) don't clear it
- # (keep init, rootmnt, drop_caps)
- unset debug
- unset MODPROBE_OPTIONS
- unset DPKG_ARCH
- unset ROOTFLAGS
- unset ROOTFSTYPE
- unset ROOTDELAY
- unset ROOT
- unset IP
- unset IP6
- unset VLAN
- unset BOOT
- unset BOOTIF
- unset DEVICE
- unset UBIMTD
- unset blacklist
- unset break
- unset noresume
- unset panic
- unset quiet
- unset readonly
- unset resume
- unset resume_offset
- unset noresume
- unset fastboot
- unset forcefsck
- unset fsckfix
-
- # Move virtual filesystems over to the real filesystem
- mount -n -o move /sys ${rootmnt}/sys
- mount -n -o move /proc ${rootmnt}/proc
-
- # Chain to real filesystem
- # shellcheck disable=SC2086,SC2094
- exec run-init ${drop_caps} "${rootmnt}" "${init}" "$@" <"${rootmnt}/dev/console" >"${rootmnt}/dev/console" 2>&1
- echo "Something went badly wrong in the initramfs."
- panic "Please file a bug on initramfs-tools."
|