Subversion Repositories livecd

Rev

Rev 307 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1 beyerle@PS 1
#!/bin/ash
2
#
3
# Original version from http://www.linux-live.org/
4
#
169 beyerle@PS 5
# modified by Urs Beyerle
1 beyerle@PS 6
# - to allow LiveCD mounted over NFS
7
# - add support for LiveCD on SATA devices
160 beyerle@PS 8
# - to allow LiveCD mounted over CIFS
1 beyerle@PS 9
 
10
export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin
11
. liblinuxlive
12
 
13
 
14
echolog "mounting /proc and /sys filesystems"
15
mount -t proc proc /proc
16
mount -t sysfs sysfs /sys
36 beyerle@PS 17
ln -sf /proc/mounts /etc/mtab # this allows us to use umount -a
1 beyerle@PS 18
 
19
# setup DEBUGCMD variable. If debug boot option is present, call debug()
20
# function several times during script's execution
21
if [ "`cmdline_parameter debug`" ]; then DEBUGCMD="debug"; else DEBUGCMD=""; fi
22
 
23
$DEBUGCMD
24
 
36 beyerle@PS 25
# amount of RAM to store changes
26
RAMSIZE="`cmdline_value ramsize`"
27
if [ "$RAMSIZE" = "" ]; then RAMSIZE="70%"; fi
28
 
241 beyerleu 29
# Set these variables very carefully
1 beyerle@PS 30
UNION=/union
31
MEMORY=/memory
32
MOUNTDIR=livecd
334 beyerleu 33
CHANGES=$MEMORY/SL57changes
1 beyerle@PS 34
COPY2RAM=$MEMORY/copy2ram
35
IMAGES=$MEMORY/images
36
INITRAMDISK=$MOUNTDIR/live
37
 
185 beyerle@PS 38
# set NFSROOT and NFSOPTS 
1 beyerle@PS 39
NFSROOT="`cmdline_value nfsroot`"
161 beyerle@PS 40
NFSOPTS="`cmdline_value nfsopts`"
241 beyerleu 41
if [ "$NFSOPTS" = "" ]; then NFSOPTS="nolock,ro,rsize=8192,wsize=8192,hard,intr"; fi
1 beyerle@PS 42
 
161 beyerle@PS 43
# set CIFSROOT and CIFSOPTS
160 beyerle@PS 44
CIFSROOT="`cmdline_value cifsroot`"
161 beyerle@PS 45
CIFSOPTS="`cmdline_value cifsopts`"
160 beyerle@PS 46
 
241 beyerleu 47
# set DHCPDELAY (in seconds)
48
DHCPDELAY="`cmdline_value dhcpdelay`"
49
if [ "$DHCPDELAY" = "" ]; then DHCPDELAY=8; fi
50
 
248 beyerleu 51
# set USBDELAY (in seconds)
52
USBDELAY="`cmdline_value usbdelay`"
53
if [ "$USBDELAY" = "" ]; then USBDELAY=8; fi
54
 
37 beyerle@PS 55
# we need cdrom support, isofs support, unionfs/aufs support, etc
1 beyerle@PS 56
modprobe_essential_modules
84 beyerle@PS 57
 
58
# disable DMA if nodma parameter is used
1 beyerle@PS 59
setup_dma
60
 
61
$DEBUGCMD
62
 
36 beyerle@PS 63
# if NFSROOT is set:
160 beyerle@PS 64
echolog "check for nfsroot or cifsroot"
1 beyerle@PS 65
if [ "$NFSROOT" != "" ]; then
36 beyerle@PS 66
 
160 beyerle@PS 67
   echolog "nfsroot: $NFSROOT"
68
   $DEBUGCMD
36 beyerle@PS 69
   load_network_modules
70
   $DEBUGCMD
150 beyerle@PS 71
   get_dhcp_lease
36 beyerle@PS 72
   $DEBUGCMD
163 beyerle@PS 73
   modprobe_nfs_modules
1 beyerle@PS 74
 
160 beyerle@PS 75
# if CIFSROOT is set
76
elif [ "$CIFSROOT" != "" ]; then
77
 
78
   echolog "cifsroot: $CIFSROOT"
79
   $DEBUGCMD
80
   load_network_modules
81
   $DEBUGCMD
82
   get_dhcp_lease
83
   $DEBUGCMD
163 beyerle@PS 84
   modprobe_cifs_modules
160 beyerle@PS 85
 
1 beyerle@PS 86
fi
87
 
88
$DEBUGCMD
89
 
90
# $UNION will be used as a root directory, livecd modules will be added soon.
91
echolog "setup union on $UNION"
92
mkdir -p $UNION
93
mkdir -p $MEMORY
94
 
170 beyerle@PS 95
# looking for changes= parameter
96
CHANGESVAL="`cmdline_value changes`"
97
if [ "$CHANGESVAL" != "" ]; then 
98
    # disable kernel warnings
99
    PRINTK=`cat /proc/sys/kernel/printk`
100
    echo "0" >/proc/sys/kernel/printk
101
    find_changes
102
    # enable kernel warnings
103
    echo "$PRINTK" >/proc/sys/kernel/printk
104
fi
173 beyerle@PS 105
mkdir -p $MEMORY
1 beyerle@PS 106
 
170 beyerle@PS 107
$DEBUGCMD
108
 
1 beyerle@PS 109
# mount tmpfs only in the case when changes= boot parameter was empty
170 beyerle@PS 110
if [ "$CHANGESVAL" = "" ]; then 
111
    echolog "mount tmpfs"
112
    mount -t tmpfs -o "size=$RAMSIZE" tmpfs $MEMORY
113
    $DEBUGCMD
114
fi
1 beyerle@PS 115
 
116
mkdir -p $CHANGES
117
mkdir -p $COPY2RAM
173 beyerle@PS 118
rm -rf $IMAGES
1 beyerle@PS 119
mkdir -p $IMAGES
120
 
37 beyerle@PS 121
# mount unionfs or aufs
122
lsmod | grep -q ^unionfs
123
if [ $? -eq 0 ]; then  
124
    mount -t unionfs -o dirs=$CHANGES=rw unionfs $UNION
48 beyerle@PS 125
    if [ $? -ne 0 ]; then fatal "can't setup union in $UNION directory"; fi
100 beyerle@PS 126
    echolog "unionfs mounted"
37 beyerle@PS 127
else
128
    mount -t aufs -o br:$CHANGES=rw aufs $UNION
48 beyerle@PS 129
    if [ $? -ne 0 ]; then fatal "can't setup union (aufs) in $UNION directory"; fi
100 beyerle@PS 130
    echolog "aufs mounted"
37 beyerle@PS 131
fi
132
 
1 beyerle@PS 133
$DEBUGCMD
134
 
135
# try to find livecd data directory. If not found, try modprobing
136
# USB and SATA kernel modules and repeat the find procedure again
137
echolog "looking for data modules"
170 beyerle@PS 138
 
139
# disable kernel warnings
140
PRINTK=`cat /proc/sys/kernel/printk`
141
echo "0" >/proc/sys/kernel/printk
142
DATA="`find_live_data_dir $MOUNTDIR`"
143
# enable kernel warnings
144
echo "$PRINTK" >/proc/sys/kernel/printk
145
 
1 beyerle@PS 146
if [ "$DATA" = "" ]; then modprobe_usb_sata_modules; DATA="`find_live_data_dir $MOUNTDIR`"; fi
126 beyerle@PS 147
if [ "$DATA" = "" ]; then fatal "Data for LiveCD not found."; fi
1 beyerle@PS 148
echolog "LiveCD found in: $DATA"
149
 
150
$DEBUGCMD
151
 
152
# If toram or copy2ram boot parameter is present, copy all .mo modules to RAM.
153
# (skip modules from /optional/ which are not listed in load= boot option)
154
# Finaly modify DATA variable so it will point to correct directory
155
if [ "`cmdline_parameter toram`" != "" -o "`cmdline_parameter copy2ram`" != "" ]; then
156
   echolog "copying modules to RAM, this may take some time"
157
   copy_to_ram $DATA $COPY2RAM
158
   cd_autoeject 1
159
   umount $DATA 2>/dev/null
160
   if [ $? -ne 0 ]; then umount `dirname $DATA` 2>/dev/null; fi
161
   DATA=$COPY2RAM
162
   cd_autoeject 0
163
fi
164
 
165
mkdir -p $UNION/boot
166
mount -o bind $DATA $UNION/boot
167
 
168
$DEBUGCMD
169
 
170
# DATA contains path to the base directory of all .mo images which need
171
# to be mounted and inserted into live filesystem. Do it now.
172
echolog "inserting all modules and creating live filesystem"
173
union_insert_modules $UNION $DATA $IMAGES
174
 
175
$DEBUGCMD
176
 
177
echo "copying rootchanges"
178
copy_rootchanges $DATA $UNION
179
 
180
$DEBUGCMD
181
 
182
echo "creating /etc/fstab"
183
activate_fstab $UNION
184
 
185
# More likely these directories aren't there.
186
# Even if they are, this won't hurt.
187
mkdir -p $UNION/proc
188
mkdir -p $UNION/sys
189
mkdir -p $UNION/tmp
36 beyerle@PS 190
chmod 1777 $UNION/tmp
1 beyerle@PS 191
mkdir -p $UNION/dev
36 beyerle@PS 192
mkdir -p $UNION/initrd
1 beyerle@PS 193
 
194
$DEBUGCMD
195
 
48 beyerle@PS 196
# no X? (set runlevel to 3)
197
if [ "`cmdline_parameter nox`" ]; then
198
  echo "set runlevel to 3"
64 beyerle@PS 199
  sed -i "s/id:.:initdefault:/id:3:initdefault:/" $UNION/etc/inittab
48 beyerle@PS 200
fi
201
 
249 beyerleu 202
# with X? (set runlevel to 5)
203
if [ "`cmdline_parameter withx`" ]; then
204
  echo "set runlevel to 5"
205
  sed -i "s/id:.:initdefault:/id:5:initdefault:/" $UNION/etc/inittab
206
fi
207
 
48 beyerle@PS 208
$DEBUGCMD
209
 
1 beyerle@PS 210
# Union contains all the files and directories unioned from all modules.
211
# Change root directory to it, and move initrd's root to /livecd/live/initramdisk
212
# Finaly execute /sbin/init to start the distribution.
213
echolog "changing root directory..."
214
cd $UNION
215
mkdir -p $INITRAMDISK
216
 
217
umount /sys # we won't need it anymore
218
 
160 beyerle@PS 219
# if [ ! -e $UNION/dev/console ]; then mknod $UNION/dev/console c 5 1; fi
220
 
221
# Copy all dev files (found by mdev) to unioned dev directory
222
# so at least disk devices exist (your Linux may need them).
223
# Two exceptions, do not copy pty* and tty* devs.
224
if [ ! -e /dev/console ]; then mknod /dev/console c 5 1; fi
225
cp -fdR /dev . 2>/dev/null
226
 
1 beyerle@PS 227
if [ -x $UNION/usr/sbin/chroot ];
228
  then CHROOT=/usr/sbin/chroot
229
  else CHROOT=/usr/bin/chroot
230
fi
231
 
232
echolog "End of linux live scripts"
233
 
234
# pure magic ;-)
235
cat $UNION/bin/true >/dev/null
236
 
237
$DEBUGCMD
238
 
239
pivot_root . $INITRAMDISK
36 beyerle@PS 240
exec $CHROOT . sbin/init <dev/console >dev/console 2>&1
1 beyerle@PS 241
 
242
header "ERROR!"
243
echolog "You are not supposed to be here, something went wrong!"
244
echolog "Even Ctrl+Alt+Del won't help you in kernel panic."
209 beyerleu 245
echolog "Try to boot with 'linux failsafe' or 'linux all_generic_ide'"
1 beyerle@PS 246