OpenSDE Framework (without history before r20070)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

167 lines
3.9 KiB

#!/bin/sh
# --- SDE-COPYRIGHT-NOTE-BEGIN ---
# This copyright note is auto-generated by ./scripts/Create-CopyPatch.
#
# Filename: target/early/initramfs/init.sh
# Copyright (C) 2007 - 2013 The OpenSDE Project
#
# More information can be found in the files COPYING and README.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; version 2 of the License. A copy of the
# GNU General Public License can be found in the file COPYING.
# --- SDE-COPYRIGHT-NOTE-END ---
export PATH=/usr/bin:/usr/sbin:/bin:/sbin
modules=
root=
mode=
init=/sbin/init
NOCOLOR=
initargs="$*"
want_mdadm=
want_lvm=
want_shell=
# read kernel arguments
[ -e /proc/cmdline ] || mount -n -t proc none /proc
set -- $( cat /proc/cmdline )
for x; do
v="${x#*=}"
case "$x" in
root=*) root="$v" ;;
init=*) init="$v" ;;
rw|ro) mode="$x" ;;
modules=*) modules=$( echo "$v" | tr ',' ' ' ) ;;
nocolor) export NOCOLOR=yes ;;
initrdopt=*) for y in $( echo "$v" | tr ',' ' ' ); do
case "$y" in
mdadm) want_mdadm=yes ;;
mdadm=*) want_mdadm="${y#mdadm=}" ;;
lvm) want_lvm=yes ;;
lvm=*) want_lvm="${y#lvm=}" ;;
shell) want_shell=yes ;;
shell=*) want_shell="${y#shell=}" ;;
esac
done
;;
esac
done
. /etc/init.d/functions.in
banner "Starting Early User Space environment"
title "Mounting /proc and /sys"
check mount -n -t sysfs none /sys
status
[ -x /bin/dmesg ] && /bin/dmesg -n 3
if grep -q devtmpfs /proc/filesystems; then
title "Preparing /dev (devtmpfs)"
check mount -n -t devtmpfs devtmpfs /dev
status
else
title "Preparing /dev (tmpfs)"
check mount -n -t tmpfs none /dev
status
title "Populating initial device nodes"
check mdev -s
status
fi
title "Setting mdev as kernel hotplug helper"
echo "/sbin/mdev" > /proc/sys/kernel/hotplug
status
if [ -x /sbin/modprobe -a -n "$modules" ]; then
title "Preloading requested kernel modules"
for x in $modules; do
echo -n " $x"
check modprobe -q $x
done
status
fi
title "Triggering coldplug"
find /sys/devices -name "uevent" | while read x; do echo -n "add" > $x; done
status
sleep 2
[ -n "$root" ] || echo "No root device defined."
if [ ! -e "$root" ]; then
if [ "$want_mdadm" = yes ]; then
title "Detecting possible RAID devices"
check mdadm -E --scan > /etc/mdadm.conf
status
fi
if [ "$want_mdadm" != no -a -s /etc/mdadm.conf ]; then
# try activating software raids
title "Activating RAID devices"
modprobe -q md-mod 2> /dev/null
check mdadm -As --auto=yes
status
fi
fi
if [ ! -e "$root" ]; then
if [ "$want_lvm" = yes ]; then
title "Detecting possible LVM devices"
check lvm vgscan
status
fi
if [ "$want_lvm" != no -a -d /etc/lvm/archive ]; then
title "Activating LVM devices"
modprobe -q dm_mod 2> /dev/null
check lvm vgchange -ay
status
fi
fi
if [ -n "$root" ]; then
# give it a second chance to appear (delay 2s)
[ -e "$root" ] || sleep 2;
if [ -e "$root" ]; then
# store detected root filesystem in ROOT_FS_TYPE
eval ROOT_FS_$(blkid $root | cut -d ' ' -f3)
title "Mounting $root (${ROOT_FS_TYPE:-unknown}) "
[ -z "$ROOT_FS_TYPE" ] || modprobe -q "$ROOT_FS_TYPE" 2> /dev/null
check mount ${ROOT_FS_TYPE:+-t $ROOT_FS_TYPE} ${mode:+-o $mode} "$root" /rootfs
status
else
echo "root device ($root) not found on time."
fi
fi
# wait for /sbin/init
while [ ! -x "/rootfs$init" ]; do
# one shell is enough
want_shell=no
echo "Please mount root device on /rootfs and exit to continue"
setsid /bin/sh < /dev/console > /dev/console 2> /dev/console
done
if [ "$want_shell" = yes ]; then
echo "A last-minute shell was requested, please exit to continue"
setsid /bin/sh < /dev/console > /dev/console 2> /dev/console
fi
title "Cleaning up"
check mount -t none -o move /dev /rootfs/dev
check mount -t none -o move /sys /rootfs/sys
check mount -t none -o move /proc /rootfs/proc
status
exec switch_root /rootfs "$init" $initargs
#FIXME: what if it fails?