Advertisement
Guest User

Untitled

a guest
Apr 16th, 2012
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.30 KB | None | 0 0
  1. #!/bin/sh
  2. # initrd generated by:
  3. # $Revision: 12530 $ $Date:: 2012-03-30 14:41:13 +0000 #$
  4.  
  5. [ -f /proc/cmdline ] || mount -t proc none /proc
  6. # builtin defaults from geninitrd
  7. ROOT=/dev/datavg/rootlv
  8. ROOTFS=reiserfs
  9. read CMDLINE < /proc/cmdline
  10.  
  11. for arg in $CMDLINE; do
  12. if [ "${arg}" = "debuginitrd" ]; then
  13. DEBUGINITRD=yes
  14. fi
  15. if [ "${arg##debuginitrd=}" != "${arg}" ]; then
  16. DEBUGINITRD=${arg##debuginitrd=}
  17. fi
  18. if [ "${arg##root=}" != "${arg}" ]; then
  19. ROOT=${arg##root=}
  20. fi
  21. if [ "${arg##rootfsflags=}" != "${arg}" ]; then
  22. ROOTFSFLAGS=${arg##rootfsflags=}
  23. fi
  24. if [ "${arg##init=}" != "${arg}" ]; then
  25. INIT=${arg##init=}
  26. fi
  27. done
  28.  
  29. # make debugshell() invoke subshell if $DEBUGINITRD=sh
  30. if [ "$DEBUGINITRD" = "sh" ]; then
  31. debugshell() {
  32. echo "debug shell disabled by /etc/sysconfig/system: RUN_SULOGIN_ON_ERR setting"
  33. }
  34. else
  35. debugshell() {
  36. :
  37. }
  38. fi
  39.  
  40. if [ "$DEBUGINITRD" ]; then
  41. set -x
  42. fi
  43. insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/scsi_mod.ko scan=sync
  44. insmod /lib/modules/3.3.2-1/kernel/drivers/ata/libata.ko
  45. insmod /lib/modules/3.3.2-1/kernel/drivers/ata/libahci.ko
  46. insmod /lib/modules/3.3.2-1/kernel/drivers/ata/ahci.ko
  47. insmod /lib/modules/3.3.2-1/kernel/drivers/md/dm-mod.ko
  48. insmod /lib/modules/3.3.2-1/kernel/drivers/md/md-mod.ko
  49. insmod /lib/modules/3.3.2-1/kernel/drivers/md/raid1.ko
  50. insmod /lib/modules/3.3.2-1/kernel/lib/crc-t10dif.ko
  51. insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/sd_mod.ko
  52. insmod /lib/modules/3.3.2-1/kernel/fs/reiserfs/reiserfs.ko
  53. insmod /lib/modules/3.3.2-1/kernel/fs/mbcache.ko
  54. insmod /lib/modules/3.3.2-1/kernel/fs/jbd/jbd.ko
  55. insmod /lib/modules/3.3.2-1/kernel/fs/ext3/ext3.ko
  56. insmod /lib/modules/3.3.2-1/kernel/drivers/scsi/scsi_wait_scan.ko
  57. rmmod scsi_wait_scan
  58. : 'Creating /dev'
  59. if ! mount -t devtmpfs -o mode=0755,nosuid devtmpfs /dev > /dev/null 2>&1; then
  60. mount -o mode=0755,nosuid -t tmpfs tmpfs /dev
  61. mknod /dev/console c 5 1
  62. mknod /dev/null c 1 3
  63. mknod /dev/zero c 1 5
  64. mknod /dev/random c 1 8
  65. mknod /dev/snapshot c 10 231
  66. mknod /dev/urandom c 1 9
  67. mknod /dev/ptmx c 5 2
  68. mknod /dev/kmsg c 1 11
  69. fi
  70. mkdir /dev/pts
  71. mkdir /dev/shm
  72. mount -t sysfs none /sys
  73. mount -t tmpfs run /run
  74. : 'Starting udev'
  75. mkdir /run/udev
  76. /sbin/udevd --daemon
  77. /sbin/udevadm trigger --type=subsystems --action=add
  78. /sbin/udevadm trigger --type=devices --action=add
  79. /sbin/udevadm settle
  80. : 'Making device nodes'
  81. cat /proc/partitions | (
  82. # ignore first two lines: header, empty line
  83. read b; read b
  84.  
  85. while read major minor blocks dev rest; do
  86. node=/dev/$dev
  87. mkdir -p ${node%/*}
  88. [ -e $node ] || mknod $node b $major $minor
  89. done
  90. )
  91. # if built with blkid change ROOT=LABEL=something into ROOT=/dev/somethingelse -
  92. # parsed by blkid
  93. if [ "${ROOT##LABEL=}" != "${ROOT}" -o "${ROOT##UUID=}" != "${ROOT}" ]; then
  94. ROOT="$(/bin/blkid -t $ROOT -o device -l)"
  95. fi
  96. mdassemble
  97.  
  98. if [ "" ]; then
  99. [ -e /proc/mdstat ] && echo "/proc/mdstat contents:" && cat /proc/mdstat
  100. fi
  101. cat /etc/lvm.conf > /tmp/lvm.conf
  102. ROOTDEV=/dev/datavg/rootlv
  103. LVM_ROOTVG="datavg"
  104. LVM_SUSPENDVG=""
  105. # parse rootdev from kernel commandline if it begins with /
  106. case "$ROOT" in
  107. /*)
  108.  
  109. # rewrite:
  110. # /dev/mapper/sys-rootfs -> /dev/sys/rootfs
  111. # /dev/mapper/blodnatt-blah--bleh -> /dev/blodnatt/blah-bleh
  112. # /dev/mapper/vg--meaw-root -> /dev/vg-meaw/root
  113. case "$ROOT" in
  114. /dev/mapper/*-*)
  115. # change "--" to / (as "/" is impossible in LV name)
  116. local dev=$(awk -vdev="${ROOT#/dev/mapper/}" 'BEGIN{gsub(/--/, "/", dev); print dev}')
  117. local VG=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[1]); print v[1]}')
  118. local LV=$(awk -vdev="$dev" 'BEGIN{split(dev, v, "-"); gsub("/", "-", v[2]); print v[2]}')
  119. ROOT=/dev/$VG/$LV
  120. ;;
  121. esac
  122.  
  123. if [ "$ROOT" != "$ROOTDEV" ]; then
  124. ROOTDEV=$ROOT
  125.  
  126. echo "LVM: Using 'root=$ROOTDEV' from kernel commandline"
  127. local tmp=${ROOTDEV#/dev/}
  128. if [ "$tmp" != "$ROOTDEV" ]; then
  129. LVM_ROOTVG=${tmp%/*}
  130. echo "LVM: Using Volume Group '$LVM_ROOTVG' for rootfs"
  131. fi
  132. fi
  133. ;;
  134. esac
  135.  
  136. # skip duplicate VG
  137. if [ "$LVM_SUSPENDVG" = "$LVM_ROOTVG" ]; then
  138. LVM_VGVOLUMES="$LVM_ROOTVG"
  139. else
  140. LVM_VGVOLUMES="$LVM_SUSPENDVG $LVM_ROOTVG"
  141. fi
  142.  
  143. # disable noise from LVM accessing devices that aren't ready.
  144. read printk < /proc/sys/kernel/printk
  145. if [ ! "$DEBUGINITRD" ]; then
  146. echo 0 > /proc/sys/kernel/printk
  147. fi
  148.  
  149. export LVM_SYSTEM_DIR=/tmp
  150. : 'Scanning for Volume Groups'
  151. lvm.static vgscan --mknodes --ignorelockingfailure 2>/dev/null
  152.  
  153. : 'Activating Volume Groups'
  154. for vol in $LVM_VGVOLUMES; do
  155. lvm.static vgchange --ignorelockingfailure -a y $vol 2>/dev/null
  156. done
  157.  
  158. echo "$printk" > /proc/sys/kernel/printk
  159.  
  160. # Find out major/minor
  161. attrs="$(lvm.static lvdisplay --ignorelockingfailure -c $ROOTDEV 2>/dev/null)"
  162. if [ "$attrs" ]; then
  163. majmin="${attrs#*$ROOTDEV*:*:*:*:*:*:*:*:*:*:*:*}"
  164. if [ "$majmin" != "$attrs" ]; then
  165. major="${majmin%:*}"
  166. minor="${majmin#*:}"
  167. fi
  168. fi
  169.  
  170. if [ "$major" -a "$minor" ]; then
  171. # Pass it to kernel
  172. echo $((256 * $major + $minor)) > /proc/sys/kernel/real-root-dev
  173. fi
  174.  
  175. unset LVM_SYSTEM_DIR
  176. if [ "${ROOT##/dev/}" != "${ROOT}" ]; then
  177. rootnr="$(busybox awk -v rootnode="${ROOT##/dev/}" '$4 == rootnode { print 256 * $1 + $2 }' /proc/partitions)"
  178. # fallback to ls
  179. if [ -z "$rootnr" ]; then
  180. rootnr="$(busybox ls -lL ${ROOT} | busybox awk '{if (/^b/) { print 256 * $3 + $4; }}')"
  181. fi
  182. if [ -n "$rootnr" ]; then
  183. echo "$rootnr" > /proc/sys/kernel/real-root-dev
  184. fi
  185. fi
  186. /sbin/udevadm control --exit
  187. /sbin/udevadm info --cleanup-db
  188. ifs=$IFS
  189. IFS="
  190. "
  191. for i in $(export -p); do
  192. i=${i#declare -x } # ksh/bash
  193. i=${i#export } # busybox
  194.  
  195. case "$i" in
  196. *=*)
  197. : ;;
  198. *)
  199. continue ;;
  200. esac
  201.  
  202. i=${i%%=*}
  203.  
  204. [ -z "$i" ] && continue
  205.  
  206. case "$i" in
  207. ROOT|PATH|HOME|TERM)
  208. :
  209. ;;
  210. *)
  211. unset $i
  212. ;;
  213. esac
  214. done
  215. IFS=$ifs
  216. device=
  217. eval "$(busybox awk -v c="$ROOT" '
  218. BEGIN {
  219. num_pattern_short = "[0-9a-f][0-9a-f][0-9a-f]";
  220. num_pattern = "[0-9a-f]" num_pattern_short;
  221. dev_pattern = "[hms][a-z][a-z]([0-9])+";
  222. partition = "";
  223. min = -1; maj = -1;
  224.  
  225. sub("^0x", "", c);
  226. if (c ~ "^" num_pattern_short "$") sub("^", "0", c);
  227. if (c ~ "^" num_pattern "$") {
  228. maj = sprintf("%d",substr(c,1,2));
  229. min = sprintf("%d",substr(c,3));
  230. }
  231. if (c ~ "^\/dev\/" dev_pattern "$") sub("^/dev/","", c);
  232. if (c ~ "^" dev_pattern "$") partition = c;
  233. }
  234.  
  235. partition && $4 == partition { maj = $1; min = $2; }
  236. $1 == maj && $2 == min { partition = $4; }
  237.  
  238. END {
  239. if (maj >= 0 && min >= 0) {
  240. printf("maj=%s; min=%s;\n", maj, min);
  241. }
  242. if (partition) {
  243. printf("device=/dev/%s;\n", partition);
  244. }
  245. }
  246. ' /proc/partitions)"
  247.  
  248. if [ -z "$device" ]; then
  249. device=$ROOT
  250. fi
  251.  
  252. if [ "$device" -a ! -b $device ]; then
  253. mknod $device b $maj $min
  254. fi
  255.  
  256. [ -n "$ROOTFSFLAGS" ] && ROOTFSFLAGS="-o $ROOTFSFLAGS"
  257.  
  258. mount -t $ROOTFS -r $device $ROOTFSFLAGS /newroot || echo "Mount of rootfs failed."
  259. init=$INIT
  260. if [ -z "$init" -o ! -x "/newroot$init" ]; then
  261. init=/sbin/init
  262. fi
  263. : Last shell before umounting all and giving control over to real init.
  264. debugshell
  265. mount --bind /run /newroot/run
  266. umount /run
  267. umount /dev
  268. umount /sys
  269. umount /proc
  270. [ ! -e /newroot/dev/console ] && mknod -m 660 /newroot/dev/console c 5 1
  271. exec switch_root /newroot $init ${1:+"$@"}
  272.  
  273. echo "Error! initramfs should not reach this place."
  274. echo "It probably means you've got old version of busybox, with broken"
  275. echo "initramfs support. Trying to boot anyway, but won't promise anything."
  276.  
  277. exec chroot /newroot $init ${1:+"$@"}
  278.  
  279. echo "Failed to chroot!"
  280. debugshell
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement