Subversion Repositories livecd

Rev

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