summaryrefslogtreecommitdiffstats
path: root/testing/source/mkinitrd/init
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--testing/source/mkinitrd/init367
1 files changed, 0 insertions, 367 deletions
diff --git a/testing/source/mkinitrd/init b/testing/source/mkinitrd/init
deleted file mode 100644
index 2969c2272..000000000
--- a/testing/source/mkinitrd/init
+++ /dev/null
@@ -1,367 +0,0 @@
-#!/bin/ash
-#
-# /init: init script to load kernel modules from an initramfs
-# This requires that your kernel supports initramfs!!!
-#
-# Copyright 2004 Slackware Linux, Inc., Concord, CA, USA
-# Copyright 2007, 2008, 2009, 2010, 2012 Patrick J. Volkerding, Sebeka, MN, USA
-# All rights reserved.
-#
-# Redistribution and use of this script, with or without modification, is
-# permitted provided that the following conditions are met:
-#
-# 1. Redistributions of this script must retain the above copyright
-# notice, this list of conditions and the following disclaimer.
-#
-# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED
-# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
-# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
-# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
-# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
-# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
-# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
-# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
-# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-#
-##################################################################################
-# With a generic kernel, you need to load the modules needed to mount the
-# root partition. This might mean a SCSI, RAID, or other drive controller
-# module, as well as the module to support the root filesystem. Once the
-# root partition is mounted all the other modules will be available so you
-# don't need to load them here.
-#
-# Config files used by this script:
-#
-# /rootdev Contains the name of the root device, such as: /dev/hda1
-#
-# /rootfs Contains the root filesystem type, such as: xfs
-#
-# /initrd-name Contains the name of the initrd file.
-#
-# /resumedev Contains the name of the device to resume from hibernation.
-#
-# /luksdev Contains colon separated list of luks encrypted devices to
-# be unlocked.
-#
-# /lukstrim Contains colon separated list of luks encrypted devices to
-# pass '--allow-discards' when unlocking
-#
-# /lukskey Contains the path to a LUKS key-file for automatic unlock
-# Format: LABEL=<partition_label>:/path/to/file
-# UUID=<partition_uuid>:/path/to/file
-#
-# /wait-for-root Contains a number - the init script will wait this amount
-# of seconds before creating device nodes.
-#
-# /keymap Contains the name for a custom keyboard map
-#
-# Optional:
-#
-# /load_kernel_modules
-# A script that uses modprobe to load the desired modules.
-#
-# There's an example in here. To actually use it, you'll
-# need to make it executable:
-#
-# chmod 755 load_kernel_modules
-##################################################################################
-# Changelog
-# 10-Dec-2012 <mozes@slackware.com>
-# * Added support for the official Kernel parameters to select root filesystem
-# type ('rootfstype') and pause before attempting to mount the root filesystem
-# ('rootdelay'). The original parameters may continue to be used.
-##################################################################################
-
-INITRD=$(cat /initrd-name)
-ROOTDEV=$(cat /rootdev)
-ROOTFS=$(cat /rootfs)
-LUKSDEV=$(cat /luksdev)
-LUKSTRIM=$(cat /lukstrim 2>/dev/null)
-LUKSKEY=$(cat /lukskey)
-RESUMEDEV=$(cat /resumedev)
-WAIT=$(cat /wait-for-root)
-KEYMAP=$(cat /keymap)
-INIT=/sbin/init
-
-PATH="/sbin:/bin:/usr/sbin:/usr/bin"
-
-# Mount /proc and /sys:
-mount -n proc /proc -t proc
-mount -n sysfs /sys -t sysfs
-mount -n tmpfs /run -t tmpfs -o mode=0755,size=32M,nodev,nosuid,noexec
-
-if grep devtmpfs /proc/filesystems 1>/dev/null 2>/dev/null ; then
- DEVTMPFS=1
- mount -n devtmpfs /dev -t devtmpfs -o size=8M
-fi
-
-# Parse command line
-for ARG in $(cat /proc/cmdline); do
- case $ARG in
- 0|1|2|3|4|5|6|S|s|single)
- RUNLEVEL=$ARG
- ;;
- init=*)
- INIT=$(echo $ARG | cut -f2 -d=)
- ;;
- luksdev=/dev/*)
- LUKSDEV=$(echo $ARG | cut -f2 -d=)
- ;;
- lukskey=*)
- LUKSKEY=$(echo $ARG | cut -f2- -d=)
- ;;
- rescue)
- RESCUE=1
- ;;
- resume=*)
- RESUMEDEV=$(echo $ARG | cut -f2- -d=)
- ;;
- root=/dev/*)
- ROOTDEV=$(echo $ARG | cut -f2 -d=)
- ;;
- root=LABEL=*)
- ROOTDEV=$(echo $ARG | cut -f2- -d=)
- ;;
- root=UUID=*)
- ROOTDEV=$(echo $ARG | cut -f2- -d=)
- ;;
- rootfs=*|rootfstype=*)
- ROOTFS=$(echo $ARG | cut -f2 -d=)
- ;;
- rootflags=*)
- ROOTFLAGS=$(echo $ARG | cut -f2- -d=)
- ;;
- waitforroot=*|rootdelay=*)
- WAIT=$(echo $ARG | cut -f2 -d=)
- ;;
- esac
-done
-
-# If udevd is available, use it to generate block devices
-# else use mdev to read sysfs and generate the needed devices
-if [ -x /sbin/udevd -a -x /sbin/udevadm ]; then
- /sbin/udevd --daemon --resolve-names=never
- /sbin/udevadm trigger --subsystem-match=block --action=add
- /sbin/udevadm settle --timeout=10
-else
- [ "$DEVTMPFS" != "1" ] && mdev -s
-fi
-
-# Load kernel modules (ideally this was already done by udev):
-if [ ! -d /lib/modules/$(uname -r) ]; then
- echo "No kernel modules found for Linux $(uname -r)."
-elif [ -x ./load_kernel_modules ]; then # use load_kernel_modules script:
- echo "${INITRD}: Loading kernel modules from initrd image:"
- . ./load_kernel_modules
-else # load modules (if any) in order:
- if ls /lib/modules/$(uname -r)/*.*o 1> /dev/null 2> /dev/null ; then
- echo "${INITRD}: Loading kernel modules from initrd image:"
- for module in /lib/modules/$(uname -r)/*.*o ; do
- /sbin/modprobe $module
- done
- unset module
- fi
-fi
-
-# Sometimes the devices need extra time to be available.
-# A root filesystem on USB is a good example of that.
-sleep $WAIT
-
-# Load a custom keyboard mapping:
-if [ -n "$KEYMAP" ]; then
- echo "${INITRD}: Loading '$KEYMAP' keyboard mapping:"
- tar xzOf /etc/keymaps.tar.gz ${KEYMAP}.bmap | loadkmap
-fi
-
-if [ "$RESCUE" = "" ]; then
- # Initialize RAID:
- if [ -x /sbin/mdadm ]; then
- # If /etc/mdadm.conf is present, udev should DTRT on its own;
- # If not, we'll make one and go from there:
- if [ ! -r /etc/mdadm.conf ]; then
- /sbin/mdadm -E -s >/etc/mdadm.conf
- /sbin/mdadm -S -s
- /sbin/mdadm -A -s
- # This seems to make the kernel see partitions more reliably:
- fdisk -l /dev/md* 1> /dev/null 2> /dev/null
- fi
- fi
-
- # Unlock any encrypted partitions necessary to access the
- # root filesystem, such as encrypted LVM Physical volumes, disk
- # partitions or mdadm arrays.
- # Unavailable devices such as LVM Logical Volumes will need to be
- # deferred until they become available after the vgscan.
-
- if [ -x /sbin/cryptsetup ]; then
-
- # Determine if we have to use a LUKS keyfile:
- if [ ! -z "$LUKSKEY" ]; then
- mkdir /mountkey
- KEYPART=$(echo $LUKSKEY |cut -f1 -d:)
- KEYNAME=$(echo $KEYPART |cut -f2 -d=)
- LUKSPATH="/mountkey$(echo $LUKSKEY |cut -f2 -d:)"
- # Catch possible mount failure:
- if blkid |grep "TYPE=\"vfat\"" |grep $KEYNAME 1>/dev/null 2>&1 ; then
- MOUNTOPTS="-t vfat -o shortname=mixed"
- else
- MOUNTOPTS="-t auto"
- fi
- mount $MOUNTOPTS $(findfs $KEYPART) /mountkey 2>/dev/null
- # Check if we can actually use this file:
- if [ ! -f $LUKSPATH ]; then
- LUKSKEY=""
- else
- echo ">>> Using LUKS key file: '$LUKSKEY'"
- LUKSKEY="-d $LUKSPATH"
- fi
- fi
-
- LUKSLIST_DEFERRED=""
- LUKSLIST=$(echo $LUKSDEV | tr -s ':' ' ')
- for LUKSDEV in $LUKSLIST ; do
- if echo $LUKSDEV | grep -q "LABEL=" || echo $LUKSDEV | grep -q "UUID=" ; then
- LUKSDEV=$(findfs $LUKSDEV)
- fi
- if /sbin/cryptsetup isLuks ${LUKSDEV} 1>/dev/null 2>/dev/null ; then
- if echo $ROOTDEV | grep -q "LABEL=" || echo $ROOTDEV | grep -q "UUID=" ; then
- CRYPTDEV="luks$(basename $LUKSDEV)"
- elif [ "x$ROOTDEV" = "x$(basename $ROOTDEV)" ]; then
- CRYPTDEV="$ROOTDEV"
- else
- CRYPTDEV="luks$(basename $LUKSDEV)"
- fi
- if echo $LUKSTRIM | grep -wq $LUKSDEV 2>/dev/null ; then
- LUKSOPTS="--allow-discards"
- else
- LUKSOPTS=""
- fi
- if [ -z "${LUKSOPTS}" ]; then
- echo "Unlocking LUKS encrypted device '${LUKSDEV}' as luks mapped device '$CRYPTDEV':"
- else
- echo "Unlocking LUKS encrypted device '${LUKSDEV}' as luks mapped device '$CRYPTDEV' with '$LUKSOPTS':"
- fi
- /sbin/cryptsetup ${LUKSOPTS} ${LUKSKEY} luksOpen ${LUKSDEV} ${CRYPTDEV} </dev/tty0 >/dev/tty0 2>&1
- if [ "$ROOTDEV" = "$LUKSDEV" -o "$ROOTDEV" = "$CRYPTDEV" ] ; then
- ROOTDEV="/dev/mapper/$CRYPTDEV"
- fi
- else
- LUKSLIST_DEFERRED="${LUKSLIST_DEFERRED} ${LUKSDEV}"
- fi
- done
- fi
-
- # Initialize LVM:
- if [ -x /sbin/vgchange ]; then
- mkdir -p /var/lock/lvm # this avoids useless warnings
- /sbin/vgchange -ay --ignorelockingfailure 2>/dev/null
- /sbin/udevadm settle --timeout=10
- fi
-
- # Unlock any LUKS encrypted devices that were deferred above but have now
- # become available due to the vgscan (i.e. filesystems on LVM Logical Volumes)
-
- if [ -x /sbin/cryptsetup -a -n "${LUKSLIST_DEFERRED}" ]; then
- for LUKSDEV in ${LUKSLIST_DEFERRED} ; do
- if /sbin/cryptsetup isLuks ${LUKSDEV} 1>/dev/null 2>/dev/null ; then
- if echo $ROOTDEV | grep -q "LABEL=" || echo $ROOTDEV | grep -q "UUID=" ; then
- CRYPTDEV="luks$(basename $LUKSDEV)"
- elif [ "x$ROOTDEV" = "x$(basename $ROOTDEV)" ]; then
- CRYPTDEV="$ROOTDEV"
- else
- CRYPTDEV="luks$(basename $LUKSDEV)"
- fi
- echo "Unlocking LUKS encrypted device '${LUKSDEV}' as luks mapped device '$CRYPTDEV':"
- /sbin/cryptsetup ${LUKSKEY} luksOpen ${LUKSDEV} ${CRYPTDEV} </dev/tty0 >/dev/tty0 2>&1
- if [ "$ROOTDEV" = "$LUKSDEV" -o "$ROOTDEV" = "$CRYPTDEV" ] ; then
- ROOTDEV="/dev/mapper/$CRYPTDEV"
- fi
- else
- echo "LUKS device '${LUKSDEV}' unavailable for unlocking!"
- fi
- done
- /sbin/udevadm settle --timeout=10
- fi
-
- # Scan for btrfs multi-device filesystems:
- if [ -x /sbin/btrfs ]; then
- /sbin/btrfs device scan
- fi
-
- # Find root device if a label or UUID was given:
- if echo $ROOTDEV | grep -q "LABEL=" || \
- echo $ROOTDEV | grep -q "UUID=" ; then
- ROOTDEV=$(findfs $ROOTDEV)
- fi
-
- # Clean up after LUKS unlock using a keyfile:
- if grep -q mountkey /proc/mounts 2>/dev/null ; then
- umount -l /mountkey
- rmdir /mountkey 2>/dev/null
- fi
-
- # Resume state from swap
- if [ "$RESUMEDEV" != "" ]; then
- # Find resume device if a label or UUID was given:
- if echo $RESUMEDEV | grep -q "LABEL=" || \
- echo $RESUMEDEV | grep -q "UUID=" ; then
- RESUMEDEV=$(findfs $RESUMEDEV)
- elif ls -l $RESUMEDEV | grep -q "^l" ; then
- RESUMEDEV=$(readlink -f $RESUMEDEV)
- fi
- echo "Trying to resume from $RESUMEDEV"
- RESMAJMIN=$(ls -l $RESUMEDEV | tr , : | awk '{ print $5$6 }')
- echo $RESMAJMIN > /sys/power/resume
- fi
-
- # Switch to real root partition:
- /sbin/udevadm settle --timeout=10
- echo 0x0100 > /proc/sys/kernel/real-root-dev
- mount -o ro${ROOTFLAGS:+,$ROOTFLAGS} -t $ROOTFS $ROOTDEV /mnt
-
- if [ ! -r /mnt/sbin/init ]; then
- echo "ERROR: No /sbin/init found on rootdev (or not mounted). Trouble ahead."
- echo " You can try to fix it. Type 'exit' when things are done."
- echo
- /bin/sh
- fi
-else
- echo
- echo "RESCUE mode"
- echo
- echo " You can try to fix or rescue your system now. If you want"
- echo " to boot into your fixed system, mount your root filesystem"
- echo " read-only under /mnt:"
- echo
- echo " # mount -o ro -t filesystem root_device /mnt"
- echo
- echo " Type 'exit' when things are done."
- echo
- /bin/sh
-fi
-
-# Mount additional filesystems
-if [ -f /addfstab ]; then
- while read DEV MNTPNT FS OPTS DUMP PASSNO ; do
- if echo $DEV | grep -qE '(LABEL|UUID)=' ; then
- DEV=$(findfs $DEV)
- fi
- echo $DEV "/mnt/"$MNTPNT $FS "ro,"$OPTS $DUMP $PASSNO >> /etc/fstab
- done < /addfstab
- mount -a
-fi
-
-# Need to make sure OPTIONS+="db_persist" exists for all dm devices
-# That should be handled in /sbin/mkinitrd now
-/sbin/udevadm info --cleanup-db
-/sbin/udevadm control --exit
-
-unset ERR
-mount -o move /proc /mnt/proc
-mount -o move /sys /mnt/sys
-mount -o move /run /mnt/run
-
-[ "$DEVTMPFS" = "1" ] && mount -o move /dev /mnt/dev
-echo "${INITRD}: exiting"
-exec switch_root /mnt $INIT $RUNLEVEL