Subversion Repositories livecd

Rev

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