Magellan Linux

Diff of /trunk/mkinitrd-magellan/livecd/linuxrc.sh

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 673 by niro, Fri Jan 25 11:12:52 2008 UTC revision 1809 by niro, Mon Apr 23 13:07:35 2012 UTC
# Line 1  Line 1 
1  #!/bin/sh  #!/bin/sh
2  # $Header: /home/cvsd/magellan-cvs/magellan-src/mkinitrd-magellan/livecd/linuxrc.sh,v 1.5 2008-01-25 11:12:52 niro Exp $  # $Id$
3    
4  # loads given kernel modules  # loads given kernel modules
5  load_kernel_modules()  load_kernel_modules()
# Line 55  check_drives() Line 55  check_drives()
55  ## some defaults ##  ## some defaults ##
56  DOSCSI=no  DOSCSI=no
57  DOUSB=no  DOUSB=no
58  DOSATA=no  DOSATA=yes
59  DOFB=no  DOFB=no
60  DOPATA=no  DOPATA=yes
61  FORCED_ROOTFS=""  FORCED_ROOTFS=""
62    INITEXEC="/sbin/init"
63    BREAK_ENABLED=no
64    UNIONFS=no
65    UNIONFS_FILE=""
66    SYSROOT="/sysroot"
67    CLOOPMOUNTDIR="${SYSROOT}/mnt/cloop"
68    
69  ## starts here ##  ## starts here ##
70    
71  # mount essential filesystems  # mount essential filesystems
72  mount -t proc proc /proc  mount -t proc proc /proc
73  mount -t sysfs sysfs /sys  mount -t sysfs sysfs /sys
74    if [[ -z $(grep '[[:space:]]/dev[[:space:]]' /proc/mounts | cut -d ' ' -f2) ]]
75    then
76     # many video drivers needed exec access
77     fstype=ramfs
78     # tmpfs was suggested by Greg Kroah-Hartman
79     [[ $(grep '[[:space:]]tmpfs' /proc/filesystems | cut -d $'\t' -f2) = tmpfs ]] && fstype=tmpfs
80     # mount devtmpfs if supported
81     [[ $(grep '[[:space:]]devtmpfs' /proc/filesystems | cut -d $'\t' -f2) = devtmpfs ]] && fstype=devtmpfs
82     mount -t ${fstype} dev /dev -o exec,nosuid,mode=0755,size=10M
83    fi
84    
85    # install all busybox applets
86    busybox --install -s
87    
88  # silencio  # silencio
89  echo 0 > /proc/sys/kernel/printk  echo 0 > /proc/sys/kernel/printk
# Line 73  echo 0 > /proc/sys/kernel/printk Line 92  echo 0 > /proc/sys/kernel/printk
92  for i in $(cat /proc/cmdline)  for i in $(cat /proc/cmdline)
93  do  do
94   case "${i}" in   case "${i}" in
95   doscsi)   doscsi) DOSCSI=yes;;
96   DOSCSI=yes   noscsi) DOSCSI=no;;
97   ;;   dousb) DOUSB=yes;;
98   dousb)   nousb) DOUSB=no;;
99   DOUSB=yes   dosata) DOSATA=yes ;;
100   ;;   nosata) DOSATA=no ;;
101   dosata)   dofb) DOFB=yes;;
102   DOSATA=yes   nofb) DOFB=no;;
103   ;;   dopata) DOPATA=yes;;
104   dofb)   nopata) DOPATA=no;;
105   DOFB=yes   rootfs=*) FORCED_ROOTFS="${i#*=}";;
106   ;;   init=*) INITEXEC="${i#*=}";;
107   dopata)   break) BREAK_ENABLED=yes ;;
108   DOPATA=yes   unionfs) UNIONFS=yes;;
109   ;;   unionfs_file=*) UNIONFS_FILE="${i#*=}";;
110   rootfs=*)   rootdelay=*) ROOTDELAY="${i#*=}";;
  FORCED_ROOTFS="${i#*=}"  
  ;;  
111   esac   esac
112  done  done
113    
# Line 102  load_kernel_modules "generic" Line 119  load_kernel_modules "generic"
119  [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"  [ "${DOUSB}" = "yes" ] && load_kernel_modules "usb"
120  [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"  [ "${DOSATA}" = "yes" ] && load_kernel_modules "sata"
121    
122    # populate dev
123    mdev -s
124    # handle hotplug events properly
125    echo /sbin/mdev > /proc/sys/kernel/hotplug
126    
127  # create newroot mount point  # create newroot mount point
128  mkdir -p /sysroot  mkdir -p ${SYSROOT}
129  # fake a new filesystem (also needed with an initramfs!!)  # fake a new filesystem (also needed with an initramfs!!)
130  mount -t tmpfs tmpfs /sysroot  mount -t tmpfs tmpfs ${SYSROOT}
131    
132  mkdir -p /sysroot/mnt/cdrom  mkdir -p ${SYSROOT}/mnt/cdrom
133  mkdir -p /sysroot/mnt/cloop  mkdir -p ${SYSROOT}/mnt/cloop
134  mkdir -p /sysroot/mnt/magellan  mkdir -p ${SYSROOT}/mnt/magellan
135    
136    
137  # needed for the usbstick, the timeout maybe to short  # needed for the usbstick, the timeout maybe to short
# Line 118  if [ "${DOUSB}" = "yes" ]; then Line 140  if [ "${DOUSB}" = "yes" ]; then
140   sleep 8   sleep 8
141  fi  fi
142    
143    # respect rootdelay kernel param
144    if [ ! -z "${ROOTDELAY}" ]; then
145     echo "-- Requested a rootdelay of ${ROOTDELAY} seconds ..."
146     sleep ${ROOTDELAY}
147    fi
148    
149  # searching cdrom with cdid  # searching cdrom with cdid
150  BOOT_DEVICE=""  BOOT_DEVICE=""
151  FSTYPE=""  FSTYPE=""
# Line 127  echo "Searching for a boot device ..." Line 155  echo "Searching for a boot device ..."
155  # searching usbstick  # searching usbstick
156  if [ "${DOUSB}" = "yes" ]; then  if [ "${DOUSB}" = "yes" ]; then
157   ROOTFS="vfat"   ROOTFS="vfat"
158   [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"   [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
159   check_drives "/dev/sd*" "${ROOTFS}"   check_drives "/dev/sd*" "${ROOTFS}"
160   check_drives "/dev/sg*" "${ROOTFS}"   check_drives "/dev/sg*" "${ROOTFS}"
161  fi  fi
162    
163  # for cdrom_device in $CDROM_LIST (ide)  # for cdrom_device in $CDROM_LIST (ide)
164  ROOTFS="iso9660"  ROOTFS="iso9660"
165  [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"  [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
166  check_drives "/dev/cdroms/*" "${ROOTFS}"  check_drives "/dev/cdroms/*" "${ROOTFS}"
167  check_drives "/dev/hd*" "${ROOTFS}"  check_drives "/dev/hd*" "${ROOTFS}"
168    
169  # scsi cdroms  # scsi cdroms
170  if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then  if [ "${DOSCSI}" = "yes" ] || [ "${DOSATA}" = "yes" ]; then
171   ROOTFS="iso9660"   ROOTFS="iso9660"
172   [[ -n ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"   [[ ! -z ${FORCED_ROOTFS} ]] && ROOTFS="${FORCED_ROOTFS}"
173   check_drives "/dev/sr*" "${ROOTFS}"   check_drives "/dev/sr*" "${ROOTFS}"
174   check_drives "/dev/sg*" "${ROOTFS}"   check_drives "/dev/sg*" "${ROOTFS}"
175   check_drives "/dev/scd*" "${ROOTFS}"   check_drives "/dev/scd*" "${ROOTFS}"
# Line 155  then Line 183  then
183   exit 1   exit 1
184  else  else
185   echo -e "Booting from: $BOOT_DEVICE ..."   echo -e "Booting from: $BOOT_DEVICE ..."
186   mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" /sysroot/mnt/cdrom >/dev/null 2>&1   mount -o ro -t "${FSTYPE}" "${BOOT_DEVICE}" ${SYSROOT}/mnt/cdrom >/dev/null 2>&1
187    
188   # write our boot_device to /mnt/.bootdev for later use (mtab)   # write our boot_device to /mnt/.bootdev for later use (mtab)
189   echo "BOOTDEV=${BOOT_DEVICE}" > /sysroot/.bootdev   echo "BOOTDEV=${BOOT_DEVICE}" > ${SYSROOT}/.bootdev
190   echo "FSTYPE=${FSTYPE}" >> /sysroot/.bootdev   echo "FSTYPE=${FSTYPE}" >> ${SYSROOT}/.bootdev
191    
192   # mount squashfs   # mount squashfs
193   echo -e "Mounting squashfs system image ..."   echo -e "Mounting squashfs system image ..."
194   echo   echo
195   [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0   [ ! -e /dev/loop0 ] && mknod /dev/loop0 b 7 0
196   mount -o loop,ro -t squashfs /sysroot/mnt/cdrom/livecdrootfs.sqsh /sysroot/mnt/cloop   mount -o loop,ro -t squashfs ${SYSROOT}/mnt/cdrom/livecdrootfs.sqsh "${CLOOPMOUNTDIR}"
197    
198     # mount unionfs if enabled
199     if [[ ${UNIONFS} = yes ]]
200     then
201     echo -e "Mounting writeable cdbuffer (unionfs) ..."
202    
203     # default setting
204     CLOOPMOUNTDIR="${SYSROOT}/mnt/unionfs"
205     [[ -z ${UNIONFS_FILE} ]] && UNIONFS_FILE="${SYSROOT}/mnt/cdrom/unionfs"
206    
207     [[ ! -d ${SYSROOT}/mnt/unionfs ]] && install -d ${SYSROOT}/mnt/unionfs
208     mount -t unionfs dirs=${UNIONFS_FILE}=rw:${SYSROOT}/mnt/cloop=ro ${CLOOPMOUNTDIR}
209     fi
210    
211   # symlinking cloop rootfs to /mnt as newroot   # symlinking cloop rootfs to /mnt as newroot
212   cd /sysroot   cd ${SYSROOT}
213    
214   for x in bin sbin lib lib64 boot usr opt   for x in bin sbin lib lib64 boot usr opt
215   do   do
216   [ -d mnt/cloop/${x} ] && ln -s mnt/cloop/${x} ${x}   [ -d ${CLOOPMOUNTDIR}/${x} ] && ln -s ${CLOOPMOUNTDIR#${SYSROOT}}/${x} ${x}
217   done   done
218   mkdir -p initrd proc tmp sys var/tmp dev media   mkdir -p initrd proc tmp sys var/tmp dev media
219    
220   # make /sysroot/dev/console & /mnt/dev/null   # make ${SYSROOT}/dev/console & /mnt/dev/null
221   [ ! -e /sysroot/dev/console ] && mknod -m 600 /sysroot/dev/console c 5 1   [ ! -e ${SYSROOT}/dev/console ] && mknod -m 600 ${SYSROOT}/dev/console c 5 1
222   [ ! -e /sysroot/dev/null ] && mknod -m 666 /sysroot/dev/null c 1 3   [ ! -e ${SYSROOT}/dev/null ] && mknod -m 666 ${SYSROOT}/dev/null c 1 3
223     # only to be safe and to have a log channel
224     [ ! -e ${SYSROOT}/dev/tty ] && mknod ${SYSROOT}/dev/tty c 5 0
225     # busybox needs this one
226     [ ! -e ${SYSROOT}/dev/tty5 ] && mknod ${SYSROOT}/dev/tty5 c 4 5
227    
228     (cd ${CLOOPMOUNTDIR}; cp -a etc root home var ${SYSROOT})
229    
230   (cd /sysroot/mnt/cloop; cp -a etc root home var /sysroot)   # ensure that ${SYSROOT}/linurc exists
231     [ ! -e ${SYSROOT}/linuxrc ] && ln -snf ${INITEXEC} ${SYSROOT}/linuxrc
232    
233   # ensure the right permissions   # ensure the right permissions
234   chmod 1777 /sysroot/tmp   chmod 1777 ${SYSROOT}/tmp
235   chmod 1777 /sysroot/var/tmp   chmod 1777 ${SYSROOT}/var/tmp
236  fi  fi
237    
238  cd /  cd /
239    
240    # unset hotplug event-manager
241    echo > /proc/sys/kernel/hotplug
242    
243  # de-silencio  # de-silencio
244  echo 3 > /proc/sys/kernel/printk  echo 3 > /proc/sys/kernel/printk
245    
246    if [[ ${BREAK_ENABLED} = yes ]]
247    then
248     echo "-- Break requested, type 'exit' to resume operation ..."
249     ash
250    fi
251    
252  echo "-- Switching to real sysroot ..."  echo "-- Switching to real sysroot ..."
253  umount /sys  mount --move /dev ${SYSROOT}/dev
254  umount /proc  mount --move /sys ${SYSROOT}/sys
255    mount --move /proc ${SYSROOT}/proc
256    
257  exec run-init /sysroot /sbin/init $@ </sysroot/dev/console >/sysroot/dev/console  exec run-init ${SYSROOT} ${INITEXEC} $@ < ${SYSROOT}/dev/console > ${SYSROOT}/dev/console

Legend:
Removed from v.673  
changed lines
  Added in v.1809