Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/sh
- # initrd generated by:
- # $Revision: 12530 $ $Date:: 2012-03-30 14:41:13 +0000 #$
- [ -f /proc/cmdline ] || mount -t proc none /proc
- # builtin defaults from geninitrd
- ROOT=/dev/datavg/rootlv
- ROOTFS=reiserfs
- read CMDLINE < /proc/cmdline
- for arg in $CMDLINE; do
- if [ "${arg}" = "debuginitrd" ]; then
- DEBUGINITRD=yes
- fi
- if [ "${arg##debuginitrd=}" != "${arg}" ]; then
- DEBUGINITRD=${arg##debuginitrd=}
- fi
- if [ "${arg##root=}" != "${arg}" ]; then
- ROOT=${arg##root=}
- fi
- if [ "${arg##rootfsflags=}" != "${arg}" ]; then
- ROOTFSFLAGS=${arg##rootfsflags=}
- fi
- if [ "${arg##init=}" != "${arg}" ]; then
- INIT=${arg##init=}
- fi
- done
- # make debugshell() invoke subshell if $DEBUGINITRD=sh
- if [ "$DEBUGINITRD" = "sh" ]; then
- debugshell() {
- echo "debug shell disabled by /etc/sysconfig/system: RUN_SULOGIN_ON_ERR setting"
- }
- else
- debugshell() {
- :
- }
- fi
- if [ "$DEBUGINITRD" ]; then
- set -x
- fi
- insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/scsi_mod.ko scan=sync
- insmod /lib/modules/3.3.2-1/kernel/drivers/ata/libata.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/ata/libahci.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/ata/ahci.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/md/dm-mod.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/md/md-mod.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/md/raid1.ko
- insmod /lib/modules/3.3.2-1/kernel/lib/crc-t10dif.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/sd_mod.ko
- insmod /lib/modules/3.3.2-1/kernel/fs/reiserfs/reiserfs.ko
- insmod /lib/modules/3.3.2-1/kernel/fs/mbcache.ko
- insmod /lib/modules/3.3.2-1/kernel/fs/jbd/jbd.ko
- insmod /lib/modules/3.3.2-1/kernel/fs/ext3/ext3.ko
- insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/scsi_wait_scan.ko
- rmmod scsi_wait_scan
- : 'Creating /dev'
- if ! mount -t devtmpfs -o mode=0755,nosuid devtmpfs /dev > /dev/null 2>&1; then
- mount -o mode=0755,nosuid -t tmpfs tmpfs /dev
- mknod /dev/console c 5 1
- mknod /dev/null c 1 3
- mknod /dev/zero c 1 5
- mknod /dev/random c 1 8
- mknod /dev/snapshot c 10 231
- mknod /dev/urandom c 1 9
- mknod /dev/ptmx c 5 2
- mknod /dev/kmsg c 1 11
- fi
- mkdir /dev/pts
- mkdir /dev/shm
- mount -t sysfs none /sys
- mount -t tmpfs run /run
- : 'Starting udev'
- mkdir /run/udev
- /sbin/udevd --daemon
- /sbin/udevadm trigger --type=subsystems --action=add
- /sbin/udevadm trigger --type=devices --action=add
- /sbin/udevadm settle
- : 'Making device nodes'
- cat /proc/partitions | (
- # ignore first two lines: header, empty line
- read b; read b
- while read major minor blocks dev rest; do
- node=/dev/$dev
- mkdir -p ${node%/*}
- [ -e $node ] || mknod $node b $major $minor
- done
- )
- # if built with blkid change ROOT=LABEL=something into ROOT=/dev/somethingelse -
- # parsed by blkid
- if [ "${ROOT##LABEL=}" != "${ROOT}" -o "${ROOT##UUID=}" != "${ROOT}" ]; then
- ROOT="$(/bin/blkid -t $ROOT -o device -l)"
- fi
- mdassemble
- if [ "" ]; then
- [ -e /proc/mdstat ] && echo "/proc/mdstat contents:" && cat /proc/mdstat
- fi
- cat /etc/lvm.conf > /tmp/lvm.conf
- ROOTDEV=/dev/datavg/rootlv
- LVM_ROOTVG="datavg"
- LVM_SUSPENDVG=""
- # parse rootdev from kernel commandline if it begins with /
- case "$ROOT" in
- /*)
- # rewrite:
- # /dev/mapper/sys-rootfs -> /dev/sys/rootfs
- # /dev/mapper/blodnatt-blah--bleh -> /dev/blodnatt/blah-bleh
- # /dev/mapper/vg--meaw-root -> /dev/vg-meaw/root
- case "$ROOT" in
- /dev/mapper/*-*)
- # change "--" to / (as "/" is impossible in LV name)
- local dev=$(awk -vdev="${ROOT#/dev/mapper/}" 'BEGIN{gsub(/--/, "/", dev); print dev}')
- local VG=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[1]); print v[1]}')
- local LV=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[2]); print v[2]}')
- ROOT=/dev/$VG/$LV
- ;;
- esac
- if [ "$ROOT" != "$ROOTDEV" ]; then
- ROOTDEV=$ROOT
- echo "LVM: Using 'root=$ROOTDEV' from kernel commandline"
- local tmp=${ROOTDEV#/dev/}
- if [ "$tmp" != "$ROOTDEV" ]; then
- LVM_ROOTVG=${tmp%/*}
- echo "LVM: Using Volume Group '$LVM_ROOTVG' for rootfs"
- fi
- fi
- ;;
- esac
- # skip duplicate VG
- if [ "$LVM_SUSPENDVG" = "$LVM_ROOTVG" ]; then
- LVM_VGVOLUMES="$LVM_ROOTVG"
- else
- LVM_VGVOLUMES="$LVM_SUSPENDVG $LVM_ROOTVG"
- fi
- # disable noise from LVM accessing devices that aren't ready.
- read printk < /proc/sys/kernel/printk
- if [ ! "$DEBUGINITRD" ]; then
- echo 0 > /proc/sys/kernel/printk
- fi
- export LVM_SYSTEM_DIR=/tmp
- : 'Scanning for Volume Groups'
- lvm.static vgscan --mknodes --ignorelockingfailure 2>/dev/null
- : 'Activating Volume Groups'
- for vol in $LVM_VGVOLUMES; do
- lvm.static vgchange --ignorelockingfailure -a y $vol 2>/dev/null
- done
- echo "$printk" > /proc/sys/kernel/printk
- # Find out major/minor
- attrs="$(lvm.static lvdisplay --ignorelockingfailure -c $ROOTDEV 2>/dev/null)"
- if [ "$attrs" ]; then
- majmin="${attrs#*$ROOTDEV*:*:*:*:*:*:*:*:*:*:*:*}"
- if [ "$majmin" != "$attrs" ]; then
- major="${majmin%:*}"
- minor="${majmin#*:}"
- fi
- fi
- if [ "$major" -a "$minor" ]; then
- # Pass it to kernel
- echo $((256 * $major + $minor)) > /proc/sys/kernel/real-root-dev
- fi
- unset LVM_SYSTEM_DIR
- if [ "${ROOT##/dev/}" != "${ROOT}" ]; then
- rootnr="$(busybox awk -v rootnode="${ROOT##/dev/}" '$4 == rootnode { print 256 * $1 + $2 }' /proc/partitions)"
- # fallback to ls
- if [ -z "$rootnr" ]; then
- rootnr="$(busybox ls -lL ${ROOT} | busybox awk '{if (/^b/) { print 256 * $3 + $4; }}')"
- fi
- if [ -n "$rootnr" ]; then
- echo "$rootnr" > /proc/sys/kernel/real-root-dev
- fi
- fi
- /sbin/udevadm control --exit
- /sbin/udevadm info --cleanup-db
- ifs=$IFS
- IFS="
- "
- for i in $(export -p); do
- i=${i#declare -x } # ksh/bash
- i=${i#export } # busybox
- case "$i" in
- *=*)
- : ;;
- *)
- continue ;;
- esac
- i=${i%%=*}
- [ -z "$i" ] && continue
- case "$i" in
- ROOT|PATH|HOME|TERM)
- :
- ;;
- *)
- unset $i
- ;;
- esac
- done
- IFS=$ifs
- device=
- eval "$(busybox awk -v c="$ROOT" '
- BEGIN {
- num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
- num_pattern = "[0-9a-f]" num_pattern_short;
- dev_pattern = "[hms][a-z][a-z]([0-9])+";
- partition = "";
- min = -1; maj = -1;
- sub("^0x", "", c);
- if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
- if (c ~ "^" num_pattern "$") {
- maj = sprintf("%d",substr(c,1,2));
- min = sprintf("%d",substr(c,3));
- }
- if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
- if (c ~ "^" dev_pattern "$") partition = c;
- }
- partition && $4 == partition { maj = $1; min = $2; }
- $1 == maj && $2 == min { partition = $4; }
- END {
- if (maj >= 0 && min >= 0) {
- printf("maj=%s; min=%s;\n", maj, min);
- }
- if (partition) {
- printf("device=/dev/%s;\n", partition);
- }
- }
- ' /proc/partitions)"
- if [ -z "$device" ]; then
- device=$ROOT
- fi
- if [ "$device" -a ! -b $device ]; then
- mknod $device b $maj $min
- fi
- [ -n "$ROOTFSFLAGS" ] && ROOTFSFLAGS="-o $ROOTFSFLAGS"
- mount -t $ROOTFS -r $device $ROOTFSFLAGS /newroot || echo "Mount of rootfs failed."
- init=$INIT
- if [ -z "$init" -o ! -x "/newroot$init" ]; then
- init=/sbin/init
- fi
- : Last shell before umounting all and giving control over to real init.
- debugshell
- mount --bind /run /newroot/run
- umount /run
- umount /dev
- umount /sys
- umount /proc
- [ ! -e /newroot/dev/console ] && mknod -m 660 /newroot/dev/console c 5 1
- exec switch_root /newroot $init ${1:+"$@"}
- echo "Error! initramfs should not reach this place."
- echo "It probably means you've got old version of busybox, with broken"
- echo "initramfs support. Trying to boot anyway, but won't promise anything."
- exec chroot /newroot $init ${1:+"$@"}
- echo "Failed to chroot!"
- debugshell
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement