Subversion Repositories livecd

Rev

Rev 149 | 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
8
 
9
export PATH=.:/:/usr/sbin:/usr/bin:/sbin:/bin
10
. liblinuxlive
11
 
12
 
13
echolog "mounting /proc and /sys filesystems"
14
mount -t proc proc /proc
15
mount -t sysfs sysfs /sys
36 beyerle@PS 16
ln -sf /proc/mounts /etc/mtab # this allows us to use umount -a
1 beyerle@PS 17
 
18
# setup DEBUGCMD variable. If debug boot option is present, call debug()
19
# function several times during script's execution
20
if [ "`cmdline_parameter debug`" ]; then DEBUGCMD="debug"; else DEBUGCMD=""; fi
21
 
22
$DEBUGCMD
23
 
36 beyerle@PS 24
# amount of RAM to store changes
25
RAMSIZE="`cmdline_value ramsize`"
26
if [ "$RAMSIZE" = "" ]; then RAMSIZE="70%"; fi
27
 
1 beyerle@PS 28
# I have to set these variables very carefully
29
UNION=/union
30
MEMORY=/memory
31
MOUNTDIR=livecd
32
CHANGES=$MEMORY/changes
33
COPY2RAM=$MEMORY/copy2ram
34
IMAGES=$MEMORY/images
35
INITRAMDISK=$MOUNTDIR/live
36
 
37
# set NFSROOT if nfsroot= in boot parameter 
38
NFSROOT="`cmdline_value nfsroot`"
39
 
37 beyerle@PS 40
# we need cdrom support, isofs support, unionfs/aufs support, etc
1 beyerle@PS 41
modprobe_essential_modules
84 beyerle@PS 42
 
43
# disable DMA if nodma parameter is used
1 beyerle@PS 44
setup_dma
45
 
46
$DEBUGCMD
47
 
36 beyerle@PS 48
# if NFSROOT is set:
1 beyerle@PS 49
echolog "check for nfsroot"
50
if [ "$NFSROOT" != "" ]; then
36 beyerle@PS 51
 
52
   # load network modules, if NFSROOT is set
1 beyerle@PS 53
   echolog "nfsroot: $NFSROOT"
36 beyerle@PS 54
   load_network_modules
1 beyerle@PS 55
 
36 beyerle@PS 56
   $DEBUGCMD
1 beyerle@PS 57
 
36 beyerle@PS 58
   # get DHCP lease
150 beyerle@PS 59
   get_dhcp_lease
36 beyerle@PS 60
 
61
   $DEBUGCMD
1 beyerle@PS 62
 
36 beyerle@PS 63
    # we need nfs modules loaded, if NFSROOT is set
64
    modprobe_nfs_modules
1 beyerle@PS 65
 
66
fi
67
 
68
$DEBUGCMD
69
 
70
# $UNION will be used as a root directory, livecd modules will be added soon.
71
echolog "setup union on $UNION"
72
mkdir -p $UNION
73
mkdir -p $MEMORY
74
 
75
CHANGESDEV="`cmdline_value changes`"
76
if [ "$CHANGESDEV" != "" ]; then
77
   echo "mounting $CHANGESDEV to $MEMORY"
78
   mount_device $CHANGESDEV $MEMORY
79
else false; fi
80
 
81
# mount tmpfs only in the case when changes= boot parameter was empty
82
# or we were not able to mount the storage device
36 beyerle@PS 83
if [ $? -ne 0 ]; then mount -t tmpfs -o "size=$RAMSIZE" tmpfs $MEMORY; fi
1 beyerle@PS 84
 
85
mkdir -p $CHANGES
86
mkdir -p $COPY2RAM
87
mkdir -p $IMAGES
88
 
37 beyerle@PS 89
# mount unionfs or aufs
90
lsmod | grep -q ^unionfs
91
if [ $? -eq 0 ]; then  
92
    mount -t unionfs -o dirs=$CHANGES=rw unionfs $UNION
48 beyerle@PS 93
    if [ $? -ne 0 ]; then fatal "can't setup union in $UNION directory"; fi
100 beyerle@PS 94
    echolog "unionfs mounted"
37 beyerle@PS 95
else
96
    mount -t aufs -o br:$CHANGES=rw aufs $UNION
48 beyerle@PS 97
    if [ $? -ne 0 ]; then fatal "can't setup union (aufs) in $UNION directory"; fi
100 beyerle@PS 98
    echolog "aufs mounted"
37 beyerle@PS 99
fi
100
 
1 beyerle@PS 101
$DEBUGCMD
102
 
103
# try to find livecd data directory. If not found, try modprobing
104
# USB and SATA kernel modules and repeat the find procedure again
105
echolog "looking for data modules"
106
DATA="`find_live_data_dir $MOUNTDIR`";
107
if [ "$DATA" = "" ]; then modprobe_usb_sata_modules; DATA="`find_live_data_dir $MOUNTDIR`"; fi
126 beyerle@PS 108
if [ "$DATA" = "" ]; then fatal "Data for LiveCD not found."; fi
1 beyerle@PS 109
echolog "LiveCD found in: $DATA"
110
 
111
$DEBUGCMD
112
 
113
# If toram or copy2ram boot parameter is present, copy all .mo modules to RAM.
114
# (skip modules from /optional/ which are not listed in load= boot option)
115
# Finaly modify DATA variable so it will point to correct directory
116
if [ "`cmdline_parameter toram`" != "" -o "`cmdline_parameter copy2ram`" != "" ]; then
117
   echolog "copying modules to RAM, this may take some time"
118
   copy_to_ram $DATA $COPY2RAM
119
   cd_autoeject 1
120
   umount $DATA 2>/dev/null
121
   if [ $? -ne 0 ]; then umount `dirname $DATA` 2>/dev/null; fi
122
   DATA=$COPY2RAM
123
   cd_autoeject 0
124
fi
125
 
126
mkdir -p $UNION/boot
127
mount -o bind $DATA $UNION/boot
128
 
129
$DEBUGCMD
130
 
131
# DATA contains path to the base directory of all .mo images which need
132
# to be mounted and inserted into live filesystem. Do it now.
133
echolog "inserting all modules and creating live filesystem"
134
union_insert_modules $UNION $DATA $IMAGES
135
 
136
$DEBUGCMD
137
 
138
echo "copying rootchanges"
139
copy_rootchanges $DATA $UNION
140
 
141
$DEBUGCMD
142
 
143
echo "creating /etc/fstab"
144
activate_fstab $UNION
145
 
146
# More likely these directories aren't there.
147
# Even if they are, this won't hurt.
148
mkdir -p $UNION/proc
149
mkdir -p $UNION/sys
150
mkdir -p $UNION/tmp
36 beyerle@PS 151
chmod 1777 $UNION/tmp
1 beyerle@PS 152
mkdir -p $UNION/dev
36 beyerle@PS 153
mkdir -p $UNION/initrd
1 beyerle@PS 154
 
155
$DEBUGCMD
156
 
48 beyerle@PS 157
# no X? (set runlevel to 3)
158
if [ "`cmdline_parameter nox`" ]; then
159
  echo "set runlevel to 3"
64 beyerle@PS 160
  sed -i "s/id:.:initdefault:/id:3:initdefault:/" $UNION/etc/inittab
48 beyerle@PS 161
fi
162
 
163
$DEBUGCMD
164
 
1 beyerle@PS 165
# Union contains all the files and directories unioned from all modules.
166
# Change root directory to it, and move initrd's root to /livecd/live/initramdisk
167
# Finaly execute /sbin/init to start the distribution.
168
echolog "changing root directory..."
169
cd $UNION
170
mkdir -p $INITRAMDISK
171
 
172
umount /sys # we won't need it anymore
173
if [ ! -e $UNION/dev/console ]; then mknod $UNION/dev/console c 5 1; fi
174
 
175
if [ -x $UNION/usr/sbin/chroot ];
176
  then CHROOT=/usr/sbin/chroot
177
  else CHROOT=/usr/bin/chroot
178
fi
179
 
180
echolog "End of linux live scripts"
181
 
182
# pure magic ;-)
183
cat $UNION/bin/true >/dev/null
184
 
185
$DEBUGCMD
186
 
187
pivot_root . $INITRAMDISK
36 beyerle@PS 188
exec $CHROOT . sbin/init <dev/console >dev/console 2>&1
1 beyerle@PS 189
 
190
header "ERROR!"
191
echolog "You are not supposed to be here, something went wrong!"
192
echolog "Even Ctrl+Alt+Del won't help you in kernel panic."
193