rev |
line source |
domcox@599
|
1 #!/bin/sh
|
domcox@599
|
2 # slitaz-installer - SliTaz GNU/Linux installer.
|
domcox@599
|
3 #
|
domcox@599
|
4 # So this is the SliTaz installer. The script starts with a
|
domcox@599
|
5 # few main variables, then all the functions and then the
|
domcox@599
|
6 # full sequence of functions.
|
domcox@599
|
7 #
|
domcox@599
|
8 # (C) 2007-2011 SliTaz - GNU General Public License v3.
|
domcox@599
|
9 #
|
domcox@599
|
10 # Authors : Christophe Lincoln <pankso@slitaz.org>
|
domcox@599
|
11 #
|
domcox@599
|
12
|
domcox@599
|
13 VERSION=2.99
|
domcox@599
|
14
|
domcox@599
|
15 #
|
domcox@599
|
16 SOURCE_ROOT=/media/source
|
domcox@599
|
17 TARGET_ROOT=/mnt/target
|
domcox@599
|
18 LOG=/var/log/tazinst.log
|
domcox@599
|
19 BACKLIST="SliTaz GNU/Linux installer"
|
domcox@599
|
20
|
domcox@599
|
21 # Default debug
|
domcox@599
|
22 DEBUG=0
|
domcox@599
|
23
|
domcox@599
|
24 # Mirror urls
|
domcox@599
|
25 URL_STABLE="http://mirror.slitaz.org/iso/stable/slitaz-3.0.iso"
|
domcox@599
|
26 URL_COOKING="http://mirror.slitaz.org/iso/cooking/slitaz-cooking.iso"
|
domcox@599
|
27 URL_ROLLING="http://mirror.slitaz.org/iso/rolling/slitaz-core.iso"
|
domcox@599
|
28
|
domcox@599
|
29 # Print a short help
|
domcox@599
|
30 usage()
|
domcox@599
|
31 {
|
domcox@599
|
32 echo -e "\n`gettext \"Tazinst - SliTaz installer - Version\"`: $VERSION\n"
|
domcox@599
|
33 echo -e "\033[1m`gettext \"Usage\"`:"
|
domcox@599
|
34 echo -e "\033[0m `gettext \"tazinst [command] [config-file|options]\n\"`"
|
domcox@599
|
35 echo -e "\033[1m`gettext \"Commands\"`: \033[0m"
|
domcox@599
|
36 echo -e "usage Print this short usage."
|
domcox@599
|
37 echo -e "install Install SliTaz on HDD using a configuration file."
|
domcox@599
|
38 echo -e "upgrade Upgrade SLiTaz on HDD using a configuration file."
|
domcox@599
|
39 echo -e "config Generate a configuration file."
|
domcox@599
|
40 echo -e "cli Install or upgrade using command line options:"
|
domcox@599
|
41 echo -e " -i `gettext \"Full Install (not upgrading, all present data will be lost).\"`"
|
domcox@599
|
42 echo -e " -u `gettext \"Upgrade (Needs an active internet connection).\"`"
|
domcox@599
|
43 echo -e " -t <type> `gettext \"Install type (cdrom|usb|iso|web|weboot).\"`"
|
domcox@599
|
44 echo -e " -m <source> `gettext \"Source media (ex: file.iso|usb partition|web url)\"`"
|
domcox@599
|
45 echo -e " -p <partition> `gettext \"Partition where SliTaz will be installed (ex:/dev/hda3).\"`"
|
domcox@599
|
46 echo -e " -f <fs> `gettext \"Partition will be formatted (fs=ext2|ext3|ext4|etc..).\"`"
|
domcox@599
|
47 echo -e " -g `gettext \"Install Grub.\"`"
|
domcox@599
|
48 echo -e " -w `gettext \"Dual-boot a Windows partition (auto|hd<disk>,<part> ex:hd0,0).\"`"
|
domcox@599
|
49 echo -e " -d `gettext \"Debug mode.\"`"
|
domcox@599
|
50 exit 0
|
domcox@599
|
51 }
|
domcox@599
|
52
|
domcox@599
|
53 # Print an error msg & exit
|
domcox@599
|
54 # $1: exit code
|
domcox@599
|
55 # $@: err msg
|
domcox@599
|
56 abort()
|
domcox@599
|
57 {
|
domcox@599
|
58 # unmouting source & target
|
domcox@599
|
59 if mount | grep -q $SOURCE_ROOT; then
|
domcox@599
|
60 umount $SOURCE_ROOT 2>>$LOG
|
domcox@599
|
61 fi
|
domcox@599
|
62 if mount | grep -q $TARGET_ROOT; then
|
domcox@599
|
63 umount $TARGET_ROOT 2>>$LOG
|
domcox@599
|
64 fi
|
domcox@599
|
65 echo "Error $@"
|
domcox@599
|
66 echo "Installation canceled"
|
domcox@599
|
67 test $(id -u) = 0 && echo "Installation canceled on error $@" >> $LOG
|
domcox@599
|
68 exit $1
|
domcox@599
|
69 }
|
domcox@599
|
70
|
domcox@599
|
71 # Print a warning msg
|
domcox@599
|
72 warning()
|
domcox@599
|
73 {
|
domcox@599
|
74 echo "Warning: $@" | tee -a $LOG
|
domcox@599
|
75 }
|
domcox@599
|
76
|
domcox@599
|
77 # Print a debug msg
|
domcox@599
|
78 debug()
|
domcox@599
|
79 {
|
domcox@599
|
80 [ $DEBUG -gt 0 ] && echo -e "\033[1mDEBUG: \033[0m$1"
|
domcox@599
|
81 echo "DEBUG: $1" >>$LOG
|
domcox@599
|
82 }
|
domcox@599
|
83
|
domcox@599
|
84 # print a msg
|
domcox@599
|
85 msg()
|
domcox@599
|
86 {
|
domcox@599
|
87 STEP=$(($STEP+1))
|
domcox@599
|
88 echo "$STEP. $@" | tee -a $LOG
|
domcox@599
|
89 }
|
domcox@599
|
90
|
domcox@599
|
91 ########################
|
domcox@599
|
92 # Gen-config functions #
|
domcox@599
|
93 ########################
|
domcox@599
|
94
|
domcox@599
|
95 # Generate a config file
|
domcox@599
|
96 # $1: Configuration file
|
domcox@599
|
97 gen_config()
|
domcox@599
|
98 {
|
domcox@599
|
99 CONFILE=$1
|
domcox@599
|
100 touch $CONFILE || error 1 "Unable to write $CONFILE"
|
domcox@599
|
101 if [ -r "$CONFILE" ]; then
|
domcox@599
|
102 cat > $CONFILE << _EOF_
|
domcox@599
|
103 # tazinst.conf: SliTaz Installer configuration file.
|
domcox@599
|
104 #
|
domcox@599
|
105
|
domcox@599
|
106 # Install type : [cdrom|usb|iso|web|weboot]
|
domcox@599
|
107 INST_TYPE="cdrom"
|
domcox@599
|
108
|
domcox@599
|
109 # Install source
|
domcox@599
|
110 # usb:/dev/xxx, ex: SRC_FILE=/dev/sdb1
|
domcox@599
|
111 # iso:file.iso, ex: SRC_FILE=~/slitaz.3.0.iso
|
domcox@599
|
112 # web: url, ex: SRC_FILE=http://mirror.slitaz.org/iso/cooking/slitaz-cooking.iso
|
domcox@599
|
113 # web: predefinites (stable|cooking|rolling), ex: SRC_FILE=cooking
|
domcox@599
|
114 SRC_FILE=""
|
domcox@599
|
115
|
domcox@599
|
116 # Install Target (Root Partition).
|
domcox@599
|
117 TGT_PARTITION="/dev/hda5"
|
domcox@599
|
118
|
domcox@599
|
119 # Target File system.
|
domcox@599
|
120 # SliTaz uses ext3 by default but another filesystem can be used if wanted,
|
domcox@599
|
121 # for this please adjust your /etc/fstab after installation. Valid options are:
|
domcox@599
|
122 # (btrfs|ext2|ext3|ext4|fat16|fat32|hfs|hfs+|jfs|ntfs|reiser4|reiserfs|ufs|xfs)
|
domcox@599
|
123 TGT_FS="ext3"
|
domcox@599
|
124
|
domcox@599
|
125 # Home partition.
|
domcox@599
|
126 # On most GNU/Linux systems users personal files are stored in the directory
|
domcox@599
|
127 # /home. Home can be on a separate partition or another hard disk.
|
domcox@599
|
128 TGT_HOME=""
|
domcox@599
|
129 # Home File system (if /home is on a separate partition)
|
domcox@599
|
130 TGT_HOME_FS=""
|
domcox@599
|
131
|
domcox@599
|
132 # Hostname
|
domcox@599
|
133 TGT_HOSTNAME="slitaz"
|
domcox@599
|
134
|
domcox@599
|
135 # root password
|
domcox@599
|
136 # The root administrator privilege lets you manage and configure the full
|
domcox@599
|
137 # system. A root user can damage your system so you should always setup a
|
domcox@599
|
138 # strong password with special characters and/or numbers.
|
domcox@599
|
139 TGT_ROOT_PWD="root"
|
domcox@599
|
140
|
domcox@599
|
141 # The default user for the system will have his personal files stored
|
domcox@599
|
142 # in /home/*user* (and will be automatically added to the audio group).
|
domcox@599
|
143 TGT_USER="tux"
|
domcox@599
|
144 TGT_USER_PWD=""
|
domcox@599
|
145
|
domcox@599
|
146 # Grub bootloader
|
domcox@599
|
147 # install grub [yes|no]
|
domcox@599
|
148 TGT_GRUB="no"
|
domcox@599
|
149 # Where to find menu.lst (dedicated grub part. or multi-os install)
|
domcox@599
|
150 # If you don't know what to do, it's safe to leave it blank
|
domcox@599
|
151 TGT_MENU_PARTITION=""
|
domcox@599
|
152
|
domcox@599
|
153 # Windows dual-boot
|
domcox@599
|
154 # Dual boot is disabled if WINBOOT is empty: TGT_WINBOOT=""
|
domcox@599
|
155 # You may let tazinst find your win partition, mode=auto: TGT_WINBOOT="auto"
|
domcox@599
|
156 # or set manual setting: "hd[disk],[partition]" ex:TGT_WINBOOT=hd0,0
|
domcox@599
|
157 TGT_WINBOOT=""
|
domcox@599
|
158
|
domcox@599
|
159 _EOF_
|
domcox@599
|
160
|
domcox@599
|
161 else
|
domcox@599
|
162 abort 2 "Configuration file $CONFILE not found"
|
domcox@599
|
163 fi
|
domcox@599
|
164
|
domcox@599
|
165 }
|
domcox@599
|
166
|
domcox@599
|
167 ######################
|
domcox@599
|
168 # Checking functions #
|
domcox@599
|
169 ######################
|
domcox@599
|
170
|
domcox@599
|
171
|
domcox@599
|
172 # def values and start log
|
domcox@599
|
173 # $@ :
|
domcox@599
|
174 init()
|
domcox@599
|
175 {
|
domcox@599
|
176 echo "=== Tazinst start at `date` ===" >$LOG
|
domcox@599
|
177 echo "Command: $0 $@" >>$LOG
|
domcox@599
|
178
|
domcox@599
|
179 # Default Type
|
domcox@599
|
180 INST_TYPE=cdrom
|
domcox@599
|
181 # Default Hostname.
|
domcox@599
|
182 TGT_HOSTNAME=slitaz
|
domcox@599
|
183 # Default root passwd
|
domcox@599
|
184 TGT_ROOT_PWD=root
|
domcox@599
|
185 # Default user
|
domcox@599
|
186 TGT_USER=tux
|
domcox@599
|
187 # Default Grub Install
|
domcox@599
|
188 TGT_GRUB=no
|
domcox@599
|
189 }
|
domcox@599
|
190
|
domcox@599
|
191 # Read Conf
|
domcox@599
|
192 # $1: conf file
|
domcox@599
|
193 read_configuration_file()
|
domcox@599
|
194 {
|
domcox@599
|
195 CONFILE=$1
|
domcox@599
|
196 if [ -n "$CONFILE" ]; then
|
domcox@599
|
197 if [ -r "$CONFILE" ]; then
|
domcox@599
|
198 debug "Using config-file=$CONFILE"
|
domcox@599
|
199 # source doesn't like file without a path
|
domcox@599
|
200 [ $(echo "$CONFILE" | grep -c "/") == "0" ] && CONFILE="./$CONFILE"
|
domcox@599
|
201 source $CONFILE || abort 2 "Unable to read $CONFILE"
|
domcox@599
|
202 else
|
domcox@599
|
203 abort 2 "Configuration file not found"
|
domcox@599
|
204 fi
|
domcox@599
|
205 else
|
domcox@599
|
206 abort 2 "No configuration file provided"
|
domcox@599
|
207 fi
|
domcox@599
|
208 }
|
domcox@599
|
209
|
domcox@599
|
210 # Cli options
|
domcox@599
|
211 # $@: tazinst parms
|
domcox@599
|
212 check_cli_options()
|
domcox@599
|
213 {
|
domcox@599
|
214 shift
|
domcox@599
|
215 while getopts "c:df:ghip:s:t:uw:" opt ; do
|
domcox@599
|
216 case $opt in
|
domcox@599
|
217 d) DEBUG=1 ;;
|
domcox@599
|
218 f) TGT_FS=$OPTARG ;;
|
domcox@599
|
219 g) TGT_GRUB="yes" ;;
|
domcox@599
|
220 h) usage ;;
|
domcox@599
|
221 i) INSTALL="install" ;;
|
domcox@599
|
222 p) TGT_PARTITION=$OPTARG ;;
|
domcox@599
|
223 s) SRC_FILE=$OPTARG ;;
|
domcox@599
|
224 t) INST_TYPE=$OPTARG ;;
|
domcox@599
|
225 u) UPGRADE="upgrade" ;;
|
domcox@599
|
226 w) TGT_WINBOOT=$OPTARG ;;
|
domcox@599
|
227 [?]) abort 1 ;;
|
domcox@599
|
228 esac
|
domcox@599
|
229 done
|
domcox@599
|
230
|
domcox@599
|
231 # Duplicate install modes are forbidden
|
domcox@599
|
232 [ -n "$INSTALL" ] && [ -n "$UPGRADE" ] && abort 1 "Mismatched parameters"
|
domcox@599
|
233 INST_ACTION="$INSTALL$UPGRADE"
|
domcox@599
|
234 # Don't allow formatting on upgrades
|
domcox@599
|
235 [ "$INST_ACTION" == "upgrade" ] && [ -n "$TGT_FS" ] && \
|
domcox@599
|
236 warning "Partition $TGT_PARTITION will not be formatted during upgrade"
|
domcox@599
|
237 }
|
domcox@599
|
238
|
domcox@599
|
239 # check main vars
|
domcox@599
|
240 check_vars()
|
domcox@599
|
241 {
|
domcox@599
|
242 # error handling
|
domcox@599
|
243 local error=no
|
domcox@599
|
244 local found=no
|
domcox@599
|
245 local partition=""
|
domcox@599
|
246
|
domcox@599
|
247 debug "--- Tazinst main options ---"
|
domcox@599
|
248 debug "action=$INST_ACTION"
|
domcox@599
|
249 debug "type=$INST_TYPE"
|
domcox@599
|
250 debug "source=$SRC_FILE"
|
domcox@599
|
251 debug "/ partition=$TGT_PARTITION"
|
domcox@599
|
252 debug "/ filesystem=$TGT_FS"
|
domcox@599
|
253 debug "/home partition=$TGT_HOME"
|
domcox@599
|
254 debug "/home filesystem=$TGT_HOME_FS"
|
domcox@599
|
255 debug "hostname=$TGT_HOSTNAME"
|
domcox@599
|
256 debug "root-pwd=$TGT_ROOT_PWD"
|
domcox@599
|
257 debug "user=$TGT_USER"
|
domcox@599
|
258 debug "user-pwd=$TGT_USER_PWD"
|
domcox@599
|
259 debug "grub=$TGT_GRUB"
|
domcox@599
|
260 debug "winboot=$TGT_WINBOOT"
|
domcox@599
|
261 debug "--------------------------------------"
|
domcox@599
|
262
|
domcox@599
|
263 # Check Action
|
domcox@599
|
264 case $INST_ACTION in
|
domcox@599
|
265 install|upgrade) ;;
|
domcox@599
|
266 *) msg "INST_ACTION=$INST_ACTION: Invalid setting"; error=yes ;;
|
domcox@599
|
267 esac
|
domcox@599
|
268
|
domcox@599
|
269 # Check Type
|
domcox@599
|
270 case $INST_TYPE in
|
domcox@599
|
271 cdrom|weboot) ;;
|
domcox@599
|
272 usb|iso|web)
|
domcox@599
|
273 # We need a valid source
|
domcox@599
|
274 if [ -z "$SRC_FILE" ]; then
|
domcox@599
|
275 echo "Type is $INST_TYPE, but INST_SOURCE is not set"; error=yes
|
domcox@599
|
276 fi ;;
|
domcox@599
|
277 *) msg "INST_TYPE=$INST_TYPE: Invalid setting"; error=yes ;;
|
domcox@599
|
278 esac
|
domcox@599
|
279
|
domcox@599
|
280 # Check Source file
|
domcox@599
|
281 # 1. assign predefs
|
domcox@599
|
282 if [ "$INST_TYPE" == "web" ]; then
|
domcox@599
|
283 [ "$SRC_FILE" == "stable" ] && SRC_FILE=$URL_STABLE
|
domcox@599
|
284 [ "$SRC_FILE" == "cooking" ] && SRC_FILE=$URL_COOKING
|
domcox@599
|
285 [ "$SRC_FILE" == "rolling" ] && SRC_FILE=$URL_ROLLING
|
domcox@599
|
286 fi
|
domcox@599
|
287 # 2. check avail.
|
domcox@599
|
288 case $INST_TYPE in
|
domcox@599
|
289 iso)
|
domcox@599
|
290 if [ ! -r "$SRC_FILE" ]; then
|
domcox@599
|
291 msg "SRC_FILE=$SRC_FILE: file not found" ; error=yes
|
domcox@599
|
292 fi ;;
|
domcox@599
|
293 web)
|
domcox@599
|
294 if [ $(wget -sq "$SRC_FILE") ]; then
|
domcox@599
|
295 msg "SRC_FILE=$SRC_FILE: file not found" ; error=yes
|
domcox@599
|
296 fi ;;
|
domcox@599
|
297 esac
|
domcox@599
|
298
|
domcox@599
|
299 # Check Target Partition
|
domcox@599
|
300 found=no
|
domcox@599
|
301 LIST_PARTITION=$(fdisk -l | awk '/^\/dev/{printf "%s ",$1}')
|
domcox@599
|
302 for partition in $LIST_PARTITION; do
|
domcox@599
|
303 [ "$partition" == "$TGT_PARTITION" ] && found="yes"
|
domcox@599
|
304 done
|
domcox@599
|
305 if [ "$found" != "yes" ]; then
|
domcox@599
|
306 msg "TGT_PARTITION=$TGT_PARTITION Partition not found"; error=yes
|
domcox@599
|
307 fi
|
domcox@599
|
308
|
domcox@599
|
309 # Check Filesystem
|
domcox@599
|
310 case $TGT_FS in
|
domcox@599
|
311 "") ;;
|
domcox@599
|
312 btrfs|ext2|ext3|ext4|fat16|fat32|hfs|hfs+|jfs|ntfs|reiser4|reiserfs|ufs|xfs)
|
domcox@599
|
313 found=no
|
domcox@599
|
314 for xdir in /sbin /usr/sbin /usr/bin; do
|
domcox@599
|
315 [ -x "$xdir/mkfs.$TGT_FS" ] && found=yes
|
domcox@599
|
316 done
|
domcox@599
|
317 if [ "$found" == "no" ]; then
|
domcox@599
|
318 msg "$TGT_FS: mkfs.$TGT_FS is not installed."; error=yes
|
domcox@599
|
319 fi ;;
|
domcox@599
|
320 *) msg "TGT_FS=$TGT_FS: Invalid setting"; error=yes ;;
|
domcox@599
|
321 esac
|
domcox@599
|
322
|
domcox@599
|
323 # Check Home partition
|
domcox@599
|
324 if [ -n "$TGT_HOME" ]; then
|
domcox@599
|
325 found=no
|
domcox@599
|
326 for partition in $LIST_PARTITION; do
|
domcox@599
|
327 [ "$partition" == "$TGT_HOME" ] && found=yes
|
domcox@599
|
328 done
|
domcox@599
|
329 if [ "$found" != "yes" ]; then
|
domcox@599
|
330 msg "TGT_HOME=$TGT_HOME: Not found"; error=yes
|
domcox@599
|
331 fi
|
domcox@599
|
332 fi
|
domcox@599
|
333
|
domcox@599
|
334 # Check Home Filesystem
|
domcox@599
|
335 case $TGT_HOME_FS in
|
domcox@599
|
336 "") ;;
|
domcox@599
|
337 btrfs|ext2|ext3|ext4|fat16|fat32|hfs|hfs+|jfs|ntfs|reiser4|reiserfs|ufs|xfs)
|
domcox@599
|
338 found=no
|
domcox@599
|
339 for xdir in /sbin /usr/sbin /usr/bin; do
|
domcox@599
|
340 [ -x "$xdir/mkfs.$TGT_FS" ] && found=yes
|
domcox@599
|
341 done
|
domcox@599
|
342 if [ "$found" == "no" ]; then
|
domcox@599
|
343 msg "$TGT_FS: mkfs.$TGT_FS is not installed."; error=yes
|
domcox@599
|
344 fi ;;
|
domcox@599
|
345 *) msg "TGT_HOME_FS=$TGT_HOME_FS: Invalid setting"; error=yes ;;
|
domcox@599
|
346 esac
|
domcox@599
|
347
|
domcox@599
|
348 # Check Grub
|
domcox@599
|
349 case $TGT_GRUB in
|
domcox@599
|
350 yes|no) ;;
|
domcox@599
|
351 *) msg "TGT_GRUB=$TGT_GRUB: Invalid setting"; error=yes ;;
|
domcox@599
|
352 esac
|
domcox@599
|
353
|
domcox@599
|
354 # Check Winboot
|
domcox@599
|
355 case $TGT_WINBOOT in
|
domcox@599
|
356 "") ;;
|
domcox@599
|
357 auto) ;;
|
domcox@599
|
358 hd[[:digit:]],[[:digit:]]) ;;
|
domcox@599
|
359 *) msg "TGT_WINBOOT=$TGT_WINBOOT: Invalid format"; error=yes ;;
|
domcox@599
|
360 esac
|
domcox@599
|
361
|
domcox@599
|
362 # Stop on error
|
domcox@599
|
363 [ "$error" == "yes" ] && abort 1
|
domcox@599
|
364 }
|
domcox@599
|
365
|
domcox@599
|
366 # Exit install if user is not root.
|
domcox@599
|
367 check_root()
|
domcox@599
|
368 {
|
domcox@599
|
369 if test $(id -u) != 0 ; then
|
domcox@599
|
370 echo "You must be the root user (system administrator) to install SliTaz, \
|
domcox@599
|
371 please use 'su' to get a root SHell and restart installation."
|
domcox@599
|
372 exit 0
|
domcox@599
|
373 fi
|
domcox@599
|
374 }
|
domcox@599
|
375
|
domcox@599
|
376 # Mount cdrom
|
domcox@599
|
377 check_cdrom()
|
domcox@599
|
378 {
|
domcox@599
|
379 # Set device name
|
domcox@599
|
380 DRIVE_NAME=`cat /proc/sys/dev/cdrom/info | grep "drive name" | cut -f 3` [ -n "$DRIVE_NAME" ] || DRIVE_NAME=cdrom
|
domcox@599
|
381 CDROM=/dev/$DRIVE_NAME
|
domcox@599
|
382 # Try to mount a cdrom
|
domcox@599
|
383 if mount -t iso9660 $CDROM $SOURCE_ROOT 2>>$LOG; then
|
domcox@599
|
384 debug "Using files from cdrom ($CDROM)..."
|
domcox@599
|
385 sleep 2
|
domcox@599
|
386 else
|
domcox@599
|
387 warning "Failed to mount $CDROM"
|
domcox@599
|
388 fi
|
domcox@599
|
389 }
|
domcox@599
|
390
|
domcox@599
|
391 # Link LiveUSB
|
domcox@599
|
392 check_usb()
|
domcox@599
|
393 {
|
domcox@599
|
394 # /home is on USB dev
|
domcox@599
|
395 if [ -d /home/boot ]; then
|
domcox@599
|
396 debug "Using files from USB device..."
|
domcox@599
|
397 ln -s /home/boot $SOURCE_ROOT/boot
|
domcox@599
|
398 SOURCE_STATUS="link"
|
domcox@599
|
399 sleep 2
|
domcox@599
|
400 else
|
domcox@599
|
401 # Try to mount LiveUSB
|
domcox@599
|
402 if mount $SRC_FILE $SOURCE_ROOT 2>>$LOG; then
|
domcox@599
|
403 debug "Using files from USB device ($SRC_FILE)..."
|
domcox@599
|
404 SOURCE_STATUS="mount"
|
domcox@599
|
405 else
|
domcox@599
|
406 warning "Failed to mount USB device $SRC_FILE"
|
domcox@599
|
407 fi
|
domcox@599
|
408 fi
|
domcox@599
|
409 }
|
domcox@599
|
410
|
domcox@599
|
411 # Mount ISO file
|
domcox@599
|
412 check_iso()
|
domcox@599
|
413 {
|
domcox@599
|
414 local src_md5
|
domcox@599
|
415 # Integrity check
|
domcox@599
|
416 src_md5=$(echo $SRC_FILE | sed 's/.iso$/.md5/')
|
domcox@599
|
417 if [ -r "$src_md5" ]; then
|
domcox@599
|
418 [ $(md5sum $SRC_FILE | cut -d' ' -f1) == $(cat "$src_md5" | cut -d' ' -f1) ] || \
|
domcox@599
|
419 abort 3 "$SRC-FILE corrupted"
|
domcox@599
|
420 else
|
domcox@599
|
421 warning "$src_md5 not found, unable to check integrity of $SRC_FILE"
|
domcox@599
|
422 fi
|
domcox@599
|
423 # Try to mount ISO
|
domcox@599
|
424 if mount -o loop -t iso9660 $SRC_FILE $SOURCE_ROOT 2>>$LOG; then
|
domcox@599
|
425 debug "Using files from ISO ($SRC_FILE)..."
|
domcox@599
|
426 sleep 2
|
domcox@599
|
427 else
|
domcox@599
|
428 warning "Failed to mount ISO '$SRC_FILE'"
|
domcox@599
|
429 fi
|
domcox@599
|
430 }
|
domcox@599
|
431
|
domcox@599
|
432 # Source is on the web
|
domcox@599
|
433 check_web()
|
domcox@599
|
434 {
|
domcox@599
|
435 local src_md5
|
domcox@599
|
436 debug "Downloading $SRC_FILE"
|
domcox@599
|
437 if wget $SRC_FILE -P /tmp; then
|
domcox@599
|
438 debug "Download completed."
|
domcox@599
|
439 else
|
domcox@599
|
440 warning "Failed to download '$SRC_FILE'"
|
domcox@599
|
441 fi
|
domcox@599
|
442 src_md5=$(echo $SRC_FILE | sed 's/.iso$/.md5/')
|
domcox@599
|
443 debug "Downloading $src_md5"
|
domcox@599
|
444 wget $src_md5 -P /tmp || warning "Failed to download '$src_md5'"
|
domcox@599
|
445 tmpfile=$(echo $SRC_FILE | awk 'BEGIN{RS="/"}{out=$1}END{printf"%s",out}')
|
domcox@599
|
446 SRC_FILE="/tmp/$tmpfile"
|
domcox@599
|
447 check_iso
|
domcox@599
|
448 }
|
domcox@599
|
449
|
domcox@599
|
450 # We may be in Tiny Web boot mode
|
domcox@599
|
451 check_weboot()
|
domcox@599
|
452 {
|
domcox@599
|
453 if [ -d $SRC_FILE/boot ]; then
|
domcox@599
|
454 debug "Using files from HTTP device..."
|
domcox@599
|
455 ln -s $SRC_FILE/boot $SOURCE_ROOT/boot
|
domcox@599
|
456 sleep 2
|
domcox@599
|
457 else
|
domcox@599
|
458 abort 3 "Error: Web boot files not found"
|
domcox@599
|
459 fi
|
domcox@599
|
460 }
|
domcox@599
|
461
|
domcox@599
|
462 # set up source and check Slitaz' content
|
domcox@599
|
463 check_source()
|
domcox@599
|
464 {
|
domcox@599
|
465 debug "Creating mount point ($SOURCE_ROOT)..."
|
domcox@599
|
466 mkdir -p $SOURCE_ROOT
|
domcox@599
|
467 sleep 1
|
domcox@599
|
468 case $INST_TYPE in
|
domcox@599
|
469 cdrom)
|
domcox@599
|
470 check_cdrom ;;
|
domcox@599
|
471 usb)
|
domcox@599
|
472 check_usb ;;
|
domcox@599
|
473 iso)
|
domcox@599
|
474 check_iso ;;
|
domcox@599
|
475 web)
|
domcox@599
|
476 check_web ;;
|
domcox@599
|
477 weboot)
|
domcox@599
|
478 check_cdrom
|
domcox@599
|
479 check_web ;;
|
domcox@599
|
480 *)
|
domcox@599
|
481 abort 8 "Internal" ;;
|
domcox@599
|
482 esac
|
domcox@599
|
483
|
domcox@599
|
484 # Exit with error msg if no rootfs.gz found.
|
domcox@599
|
485 debug "Checking installation media..."
|
domcox@599
|
486 if [ ! -f $SOURCE_ROOT/boot/rootfs.gz -a \
|
domcox@599
|
487 ! -f $SOURCE_ROOT/boot/rootfs1.gz ]; then
|
domcox@599
|
488 abort 3 "Invalid source"
|
domcox@599
|
489 else
|
domcox@599
|
490 debug "Installation media checked ok"
|
domcox@599
|
491 fi
|
domcox@599
|
492 }
|
domcox@599
|
493
|
domcox@599
|
494 # Tiny summary
|
domcox@599
|
495 summary()
|
domcox@599
|
496 {
|
domcox@599
|
497 echo "Installation settings summary:"
|
domcox@599
|
498 STEP=0
|
domcox@599
|
499
|
domcox@599
|
500 if [ "$INST_ACTION" == "install" ]; then
|
domcox@599
|
501 if [ -n "$TGT_FS" ]; then
|
domcox@599
|
502 msg "Format root partition '$TGT_PARTITION' ($TGT_FS)"
|
domcox@599
|
503 fi
|
domcox@599
|
504 if [ -n "$TGT_HOME_FS" ]; then
|
domcox@599
|
505 msg "Format /home partition '$TGT_HOME' ($TGT_HOME_FS)"
|
domcox@599
|
506 fi
|
domcox@599
|
507 msg "Install SliTaz on '$TGT_PARTITION' from $INST_TYPE"
|
domcox@599
|
508 [ -n "$TGT_HOME" ] && msg "Set Home partition to '$TGT_HOME'"
|
domcox@599
|
509 msg "Set Hostname as '$TGT_HOSTNAME'"
|
domcox@599
|
510 msg "Set Default user as '$TGT_USER'"
|
domcox@599
|
511 else
|
domcox@599
|
512 msg "Check '$TGT_PARTITION'"
|
domcox@599
|
513 msg "Backup /etc, /home and the packages list"
|
domcox@599
|
514 msg "Upgrade SliTaz on '$TGT_PARTITION' from $INST_TYPE"
|
domcox@599
|
515 msg "Restore /etc, /home"
|
domcox@599
|
516 msg "Upgrade additional packages."
|
domcox@599
|
517 fi
|
domcox@599
|
518 if [ -n "$TGT_WINBOOT" ]; then
|
domcox@599
|
519 msg "Enable Windows dual-boot ($TGT_WINBOOT)"
|
domcox@599
|
520 fi
|
domcox@599
|
521 if [ "$TGT_GRUB" == "yes" ]; then
|
domcox@599
|
522 msg "Install Grub"
|
domcox@599
|
523 fi
|
domcox@599
|
524
|
domcox@599
|
525 echo -n "Continue:(y/n)"
|
domcox@599
|
526 read answer
|
domcox@599
|
527 case $answer in
|
domcox@599
|
528 [yY]) echo "Running $BACKLIST.." ;;
|
domcox@599
|
529 *) abort 4 "Cancelled by user" ;;
|
domcox@599
|
530 esac
|
domcox@599
|
531 STEP=0
|
domcox@599
|
532 }
|
domcox@599
|
533
|
domcox@599
|
534 #######################
|
domcox@599
|
535 # Installer functions #
|
domcox@599
|
536 #######################
|
domcox@599
|
537
|
domcox@599
|
538 # Mount and mkfs with progress.
|
domcox@599
|
539 prepare_install()
|
domcox@599
|
540 {
|
domcox@599
|
541 debug "Preparing target partition..."
|
domcox@599
|
542 # Mount point can be already used.
|
domcox@599
|
543 if mount | grep -q $TARGET_ROOT; then
|
domcox@599
|
544 umount $TARGET_ROOT 2>>$LOG
|
domcox@599
|
545 fi
|
domcox@599
|
546 sleep 2
|
domcox@599
|
547
|
domcox@599
|
548 # Formatting root partition
|
domcox@599
|
549 case $TGT_FS in
|
domcox@599
|
550 "")
|
domcox@599
|
551 debug "The partition ($TGT_PARTITION) will be cleaned..."
|
domcox@599
|
552 # ROOT_FS=$(parted /dev/hda5 print -m | grep "^1:" | cut -d':' -f5) ;;
|
domcox@599
|
553 ROOT_FS=auto ;;
|
domcox@599
|
554 *)
|
domcox@599
|
555 msg "Formatting $TGT_PARTITION ($TGT_FS)"
|
domcox@599
|
556 mkfs.$TGT_FS $TGT_PARTITION >>$LOG 2>>$LOG
|
domcox@599
|
557 ROOT_FS=$TGT_FS ;;
|
domcox@599
|
558 esac
|
domcox@599
|
559 sleep 2
|
domcox@599
|
560
|
domcox@599
|
561 # Formatting /home
|
domcox@599
|
562 if [ -n "$TGT_HOME" ]; then
|
domcox@599
|
563 case $TGT_HOME_FS in
|
domcox@599
|
564 "")
|
domcox@599
|
565 debug "The partition ($TGT_HOME) will be kept..." ;;
|
domcox@599
|
566 *)
|
domcox@599
|
567 msg "Formatting /home on $TGT_HOME ($TGT_HOME_FS)"
|
domcox@599
|
568 mkfs.$TGT_HOME_FS -L "Home" $TGT_HOME >>$LOG 2>>$LOG ;;
|
domcox@599
|
569 esac
|
domcox@599
|
570 sleep 2
|
domcox@599
|
571 fi
|
domcox@599
|
572
|
domcox@599
|
573 # Mount target.
|
domcox@599
|
574 debug "Creating mount point: $TARGET_ROOT"
|
domcox@599
|
575 mkdir -p $TARGET_ROOT >>$LOG
|
domcox@599
|
576 sleep 2
|
domcox@599
|
577
|
domcox@599
|
578 mount -t $ROOT_FS $TGT_PARTITION $TARGET_ROOT >>$LOG 2>>$LOG
|
domcox@599
|
579 if [ $(mount | grep -c "mnt/target") == "0" ]; then
|
domcox@599
|
580 abort 5 "Can't mount $TGT_PARTITION"
|
domcox@599
|
581 fi
|
domcox@599
|
582 }
|
domcox@599
|
583
|
domcox@599
|
584 # Get a clean target device (15%).
|
domcox@599
|
585 clean_target()
|
domcox@599
|
586 {
|
domcox@599
|
587 if [ -z "$TGT_FS" ]; then
|
domcox@599
|
588 # partition was not formatted
|
domcox@599
|
589 debug "Cleaning the root partition ($TGT_PARTITION)..."
|
domcox@599
|
590 # Keep /home in case of reinstall.
|
domcox@599
|
591 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
592 for dir in *
|
domcox@599
|
593 do
|
domcox@599
|
594 case "$dir" in
|
domcox@599
|
595 home)
|
domcox@599
|
596 debug "keeping /home found on: $TGT_PARTITION"
|
domcox@599
|
597 mv home home.bak ;;
|
domcox@599
|
598 lost+found)
|
domcox@599
|
599 continue ;;
|
domcox@599
|
600 *)
|
domcox@599
|
601 debug "removing target: $dir"
|
domcox@599
|
602 rm -rf $dir 2>>$LOG ;;
|
domcox@599
|
603 esac
|
domcox@599
|
604 done
|
domcox@599
|
605 if [ -d mklost+found ]; then
|
domcox@599
|
606 mklost+found 2>>$LOG
|
domcox@599
|
607 fi
|
domcox@599
|
608 fi
|
domcox@599
|
609 sleep 2
|
domcox@599
|
610 }
|
domcox@599
|
611
|
domcox@599
|
612 # Kernel is renamed to standard vmlinuz-$VERSION.
|
domcox@599
|
613 install_kernel()
|
domcox@599
|
614 {
|
domcox@599
|
615 if [ -d /$TARGET_ROOT/lib/modules ]; then
|
domcox@599
|
616 KERNEL=$(ls /$TARGET_ROOT/lib/modules | tail -1)
|
domcox@599
|
617 KERNEL="vmlinuz-$KERNEL"
|
domcox@599
|
618 else
|
domcox@599
|
619 warning "Falling back to running kernel name.."
|
domcox@599
|
620 KERNEL=vmlinuz-`uname -r`
|
domcox@599
|
621 fi
|
domcox@599
|
622 mkdir -p $TARGET_ROOT/boot
|
domcox@599
|
623 cp $SOURCE_ROOT/boot/bzImage $TARGET_ROOT/boot/$KERNEL
|
domcox@599
|
624 debug "install_kernel: $KERNEL"
|
domcox@599
|
625 sleep 2
|
domcox@599
|
626 }
|
domcox@599
|
627
|
domcox@599
|
628 # Copy isolinux r/w files (not syslinux, some files are read only).
|
domcox@599
|
629 copy_bootloaders()
|
domcox@599
|
630 {
|
domcox@599
|
631 if [ -d "$SOURCE/ROOT/boot/isolinux" ]; then
|
domcox@599
|
632 debug "Copy isolinux r/w files"
|
domcox@599
|
633 mkdir -p $TARGET_ROOT/boot/isolinux
|
domcox@599
|
634 cp -a $SOURCE_ROOT/boot/isolinux/*.cfg $TARGET_ROOT/boot/isolinux
|
domcox@599
|
635 cp -a $SOURCE_ROOT/boot/isolinux/*.kbd $TARGET_ROOT/boot/isolinux
|
domcox@599
|
636 cp -a $SOURCE_ROOT/boot/isolinux/*.txt $TARGET_ROOT/boot/isolinux
|
domcox@599
|
637 cp -a $SOURCE_ROOT/boot/isolinux/*.bin $TARGET_ROOT/boot/isolinux
|
domcox@599
|
638 cp -a $SOURCE_ROOT/boot/isolinux/*.msg $TARGET_ROOT/boot/isolinux
|
domcox@599
|
639 cp -a $SOURCE_ROOT/boot/isolinux/*.lss $TARGET_ROOT/boot/isolinux
|
domcox@599
|
640 cp -a $SOURCE_ROOT/boot/isolinux/*.c32 $TARGET_ROOT/boot/isolinux
|
domcox@599
|
641 fi
|
domcox@599
|
642 }
|
domcox@599
|
643
|
domcox@599
|
644 need_package()
|
domcox@599
|
645 {
|
domcox@599
|
646 [ -d /var/lib/tazpkg/installed/$1 ] || tazpkg get-install $1
|
domcox@599
|
647 }
|
domcox@599
|
648
|
domcox@599
|
649 # extract packed rootfs: squashfs or cromfs
|
domcox@599
|
650 extract_loramfs()
|
domcox@599
|
651 {
|
domcox@599
|
652 local i
|
domcox@599
|
653 for i in $(cpio -idvum 2> /dev/null); do
|
domcox@599
|
654 case "$i" in
|
domcox@599
|
655 rootfs*)
|
domcox@599
|
656 need_package squashfs
|
domcox@599
|
657 if ! unsquashfs $i ; then
|
domcox@599
|
658 need_package cromfs
|
domcox@599
|
659 unmkcromfs $i squashfs-root
|
domcox@599
|
660 fi
|
domcox@599
|
661 mv -f squashfs-root/* .
|
domcox@599
|
662 rmdir squashfs-root
|
domcox@599
|
663 rm -f $i
|
domcox@599
|
664 esac
|
domcox@599
|
665 done
|
domcox@599
|
666 }
|
domcox@599
|
667
|
domcox@599
|
668 # This is a loram rootfs.gz, skip loram bootstrap and extract
|
domcox@599
|
669 extract_first_loramfs()
|
domcox@599
|
670 {
|
domcox@599
|
671 (zcat $1 || unlzma -c $1) | cpio -i extractfs.cpio 2> /dev/null &&
|
domcox@599
|
672 ( cd / ; cpio -id ) < extractfs.cpio && rm -f extractfs.cpio
|
domcox@599
|
673 ofs=$(awk '/07070100/ { o+=index($0,"07070100"); printf "%d\n",o/4 ; exit } { o+=1+length() }' < $1)
|
domcox@599
|
674 dd if=$1 skip=$(($ofs / 1024)) bs=4k count=1 2> /dev/null | \
|
domcox@599
|
675 ( dd skip=$(($ofs % 1024)) bs=4 2> /dev/null ; \
|
domcox@599
|
676 dd if=$1 skip=$((1 + ($ofs / 1024) )) bs=4k ) | extract_loramfs
|
domcox@599
|
677 }
|
domcox@599
|
678
|
domcox@599
|
679 # Extract lzma'ed or gziped rootfs.
|
domcox@599
|
680 extract_rootfs()
|
domcox@599
|
681 {
|
domcox@599
|
682 local isloramfs
|
domcox@599
|
683 isloramfs=
|
domcox@599
|
684 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
685 if [ -d $1/../fs/etc ]; then
|
domcox@599
|
686 # This is a tazlitobox loram (cdrom)
|
domcox@599
|
687 cp -a $1/../fs/. .
|
domcox@599
|
688 else
|
domcox@599
|
689 for i in $(ls $1/rootfs* | sort -r); do
|
domcox@599
|
690 if [ ! -d etc ]; then
|
domcox@599
|
691 if [ $( (zcat $i 2>/dev/null || lzma d $i -so) | wc -c) \
|
domcox@599
|
692 -lt $(stat -c %s $i) ]; then
|
domcox@599
|
693 # This is a tazlitobox loram (ram)
|
domcox@599
|
694 isloramfs=$i
|
domcox@599
|
695 extract_first_loramfs $i
|
domcox@599
|
696 continue
|
domcox@599
|
697 fi
|
domcox@599
|
698 fi
|
domcox@599
|
699 if [ -n "$isloramfs" ]; then
|
domcox@599
|
700 extract_loramfs < $i
|
domcox@599
|
701 continue
|
domcox@599
|
702 fi
|
domcox@599
|
703 ( zcat $i 2>/dev/null || lzma d $i -so || \
|
domcox@599
|
704 cat $i ) 2>>$LOG | cpio -idu
|
domcox@599
|
705 done 2>>$LOG > /dev/null
|
domcox@599
|
706 fi
|
domcox@599
|
707 cp /etc/keymap.conf etc
|
domcox@599
|
708 # unpack /usr (double check...)
|
domcox@599
|
709 if ls etc/tazlito | grep -q ".extract"; then
|
domcox@599
|
710 for i in etc/tazlito/*.extract; do
|
domcox@599
|
711 [ -f "$i" ] && . $i /media/cdrom
|
domcox@599
|
712 done
|
domcox@599
|
713 fi
|
domcox@599
|
714 }
|
domcox@599
|
715
|
domcox@599
|
716 # Pre configure freshly installed system (60 - 80%).
|
domcox@599
|
717 pre_config_system()
|
domcox@599
|
718 {
|
domcox@599
|
719 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
720 # Restore backup of existing /home if exists.
|
domcox@599
|
721 # (created by prepare_target_dev)
|
domcox@599
|
722 if [ -d home.bak ]; then
|
domcox@599
|
723 debug "Restoring directory: /home..."
|
domcox@599
|
724 rm -rf home
|
domcox@599
|
725 mv home.bak home
|
domcox@599
|
726 sleep 1
|
domcox@599
|
727 fi
|
domcox@599
|
728 # Add root device to CHECK_FS in rcS.conf to check filesystem
|
domcox@599
|
729 # on each boot.
|
domcox@599
|
730 debug "Adding $TGT_PARTITION and CHECK_FS to file /etc/rcS.conf..."
|
domcox@599
|
731 sed -i s#'CHECK_FS=\"\"'#"CHECK_FS=\"$TGT_PARTITION\""# etc/rcS.conf
|
domcox@599
|
732 sleep 2
|
domcox@599
|
733 # Set hostname.
|
domcox@599
|
734 msg "Configuring host name: $TGT_HOSTNAME"
|
domcox@599
|
735 echo $TGT_HOSTNAME > etc/hostname
|
domcox@599
|
736 }
|
domcox@599
|
737
|
domcox@599
|
738 # Set root passwd and create user after rootfs extraction.
|
domcox@599
|
739 users_settings()
|
domcox@599
|
740 {
|
domcox@599
|
741 cat > $TARGET_ROOT/users.sh << _EOF_
|
domcox@599
|
742 #!/bin/sh
|
domcox@599
|
743 echo "root:$TGT_ROOT_PWD" | chpasswd
|
domcox@599
|
744 adduser -D -H $TGT_USER
|
domcox@599
|
745
|
domcox@599
|
746 for grp in audio cdrom floppy dialout disk kmem tape tty video; do
|
domcox@599
|
747 if ! grep \$grp /etc/group | grep -q $TGT_USER ; then
|
domcox@599
|
748 grep -q \$grp /etc/group && addgroup $TGT_USER \$grp
|
domcox@599
|
749 fi
|
domcox@599
|
750 done
|
domcox@599
|
751
|
domcox@599
|
752 echo "$TGT_USER:$TGT_USER_PWD" | chpasswd
|
domcox@599
|
753 if [ ! -d /home/$TGT_USER ]; then
|
domcox@599
|
754 cp -a /etc/skel /home/$TGT_USER
|
domcox@599
|
755 cp /root/.xinitrc /home/$TGT_USER
|
domcox@599
|
756 mkdir -p /home/$TGT_USER/.config/slitaz
|
domcox@599
|
757 cp -a /etc/slitaz/applications.conf /home/$TGT_USER/.config/slitaz
|
domcox@599
|
758 chown -R $TGT_USER.users /home/$TGT_USER
|
domcox@599
|
759 # Path for user desktop files.
|
domcox@599
|
760 for i in /home/$TGT_USER/.local/share/applications/*.desktop
|
domcox@599
|
761 do
|
domcox@599
|
762 [ -e "$i" ] && sed -i s/"user_name"/"$TGT_USER"/g \$i
|
domcox@599
|
763 done
|
domcox@599
|
764 fi
|
domcox@599
|
765 # Slim default user.
|
domcox@599
|
766 if [ -f /etc/slim.conf ]; then
|
domcox@599
|
767 sed -i s/"default_user .*"/"default_user $TGT_USER"/ \
|
domcox@599
|
768 /etc/slim.conf
|
domcox@599
|
769 fi
|
domcox@599
|
770 _EOF_
|
domcox@599
|
771 chmod +x $TARGET_ROOT/users.sh
|
domcox@599
|
772 chroot $TARGET_ROOT ./users.sh
|
domcox@599
|
773 rm $TARGET_ROOT/users.sh
|
domcox@599
|
774 sleep 2
|
domcox@599
|
775 }
|
domcox@599
|
776
|
domcox@599
|
777 # /home can be on a separate partition. If default user exist in /home
|
domcox@599
|
778 # we remove default file crated by users_settings().
|
domcox@599
|
779 home_config()
|
domcox@599
|
780 {
|
domcox@599
|
781 debug "home_config: $TGT_HOME"
|
domcox@599
|
782 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
783 mv home/$TGT_USER tmp
|
domcox@599
|
784 mount $TGT_HOME home
|
domcox@599
|
785 if [ -d $TARGET_ROOT/home/$TGTUSER ]; then
|
domcox@599
|
786 rm -rf tmp/$TGT_USER
|
domcox@599
|
787 else
|
domcox@599
|
788 mv tmp/$TGT_USER home
|
domcox@599
|
789 fi
|
domcox@599
|
790 echo "$TGT_HOME /home ext3 defaults 0 2" \
|
domcox@599
|
791 >> etc/fstab
|
domcox@599
|
792 umount home
|
domcox@599
|
793 }
|
domcox@599
|
794
|
domcox@599
|
795 # Search for a Windows partition
|
domcox@599
|
796 win_partition()
|
domcox@599
|
797 {
|
domcox@599
|
798 msg "Enabling Windows dual-boot"
|
domcox@599
|
799 if [ "$TGT_WINBOOT" == "auto" ];then
|
domcox@599
|
800 WINBOOT=$(fdisk -l | awk '
|
domcox@599
|
801 BEGIN{disk=-1, found=-1, winboot=""}
|
domcox@599
|
802 {
|
domcox@599
|
803 # Counting disk
|
domcox@599
|
804 if ($1=="Disk"){disk++, part=-1}
|
domcox@599
|
805 # Counting partition
|
domcox@599
|
806 if (substr($1,1,4)=="/dev"){part++}
|
domcox@599
|
807 # Read partition Id
|
domcox@599
|
808 if ($2=="*"){Id=$6} else {Id=$5}
|
domcox@599
|
809 # Detect Windows type
|
domcox@599
|
810 if (Id=="7" || Id=="b"){
|
domcox@599
|
811 if (found){
|
domcox@599
|
812 # record 1st Windows partition found
|
domcox@599
|
813 winboot=sprintf("hd%d,%d",disk,part),found++}
|
domcox@599
|
814 }
|
domcox@599
|
815 }
|
domcox@599
|
816 END{printf "%s", winboot}')
|
domcox@599
|
817 if [ -z "$WINBOOT" ]; then
|
domcox@599
|
818 warning "No windows partition found. Dual-boot disabled"
|
domcox@599
|
819 TGT_WINBOOT=""
|
domcox@599
|
820 fi
|
domcox@599
|
821 fi
|
domcox@599
|
822 }
|
domcox@599
|
823
|
domcox@599
|
824 # Determine GRUB partition number and GRUB disk number.
|
domcox@599
|
825 grub_partition()
|
domcox@599
|
826 {
|
domcox@599
|
827 DISK_LETTER=${TGT_PARTITION#/dev/[h-s]d}
|
domcox@599
|
828 DISK_LETTER=${DISK_LETTER%[0-9]}
|
domcox@599
|
829 GRUB_PARTITION=$((${TGT_PARTITION#/dev/[h-s]d[a-z]}-1))
|
domcox@599
|
830 for disk in a b c d e f g h
|
domcox@599
|
831 do
|
domcox@599
|
832 nb=$(($nb+1))
|
domcox@599
|
833 if [ "$disk" = "$DISK_LETTER" ]; then
|
domcox@599
|
834 GRUB_DISK=$(($nb-1))
|
domcox@599
|
835 break
|
domcox@599
|
836 fi
|
domcox@599
|
837 done
|
domcox@599
|
838 GRUB_ROOT="(hd${GRUB_DISK},${GRUB_PARTITION})"
|
domcox@599
|
839 }
|
domcox@599
|
840
|
domcox@599
|
841 # Create grub conf
|
domcox@599
|
842 grub_config()
|
domcox@599
|
843 {
|
domcox@599
|
844 grub_partition
|
domcox@599
|
845 win_partition
|
domcox@599
|
846 # Create the target GRUB configuration.
|
domcox@599
|
847 mkdir -p $TARGET_ROOT/boot/grub
|
domcox@599
|
848 . /etc/locale.conf
|
domcox@599
|
849 cat > $TARGET_ROOT/boot/grub/menu.lst << _EOF_
|
domcox@599
|
850 # /boot/grub/menu.lst: GRUB boot loader configuration.
|
domcox@599
|
851 #
|
domcox@599
|
852
|
domcox@599
|
853 # By default, boot the first entry.
|
domcox@599
|
854 default 0
|
domcox@599
|
855
|
domcox@599
|
856 # Boot automatically after 8 secs.
|
domcox@599
|
857 timeout 8
|
domcox@599
|
858
|
domcox@599
|
859 # Graphical splash image.
|
domcox@599
|
860 splashimage=/boot/grub/splash.xpm.gz
|
domcox@599
|
861
|
domcox@599
|
862 # Change the colors.
|
domcox@599
|
863 #color yellow/brown light-green/black
|
domcox@599
|
864
|
domcox@599
|
865 # For booting SliTaz from : $TGT_PARTITION
|
domcox@599
|
866 #
|
domcox@599
|
867 title SliTaz GNU/Linux (cooking) (Kernel $KERNEL)
|
domcox@599
|
868 root $GRUB_ROOT
|
domcox@599
|
869 kernel /boot/$KERNEL root=$TGT_PARTITION lang=$LANG
|
domcox@599
|
870
|
domcox@599
|
871 _EOF_
|
domcox@599
|
872 if [ -n "$TGT_WINBOOT" ]; then
|
domcox@599
|
873 cat >> $TARGET_ROOT/boot/grub/menu.lst << _EOF_
|
domcox@599
|
874 # For booting Windows :
|
domcox@599
|
875 #
|
domcox@599
|
876 title Microsoft Windows
|
domcox@599
|
877 rootnoverify ($WINBOOT)
|
domcox@599
|
878 chainloader +1
|
domcox@599
|
879
|
domcox@599
|
880 _EOF_
|
domcox@599
|
881 fi
|
domcox@599
|
882 # log
|
domcox@599
|
883 debug "grub_config: $TARGET_ROOT/boot/grub/menu.lst"
|
domcox@599
|
884 echo "--- menu.lst -------------" >>$LOG
|
domcox@599
|
885 cat $TARGET_ROOT/boot/grub/menu.lst >>$LOG
|
domcox@599
|
886 echo "--- menu.lst -------------" >>$LOG
|
domcox@599
|
887 sleep 2
|
domcox@599
|
888 }
|
domcox@599
|
889
|
domcox@599
|
890 # Files install, calling for functions or with cmds.
|
domcox@599
|
891 install_files()
|
domcox@599
|
892 {
|
domcox@599
|
893 msg "Installing SliTaz on $TGT_PARTITION"
|
domcox@599
|
894 # saving pwd
|
domcox@599
|
895 local save_pwd=$(pwd)
|
domcox@599
|
896
|
domcox@599
|
897 debug "Cleaning the root partition if necessary..."
|
domcox@599
|
898 clean_target
|
domcox@599
|
899
|
domcox@599
|
900 debug "Extracting the root system..."
|
domcox@599
|
901 extract_rootfs $SOURCE_ROOT/boot
|
domcox@599
|
902
|
domcox@599
|
903 debug "Installing the kernel..."
|
domcox@599
|
904 install_kernel
|
domcox@599
|
905
|
domcox@599
|
906 debug "Copying the bootloader syslinux/isolinux..."
|
domcox@599
|
907 copy_bootloaders
|
domcox@599
|
908
|
domcox@599
|
909 debug "Preconfiguring the system..."
|
domcox@599
|
910 pre_config_system
|
domcox@599
|
911
|
domcox@599
|
912 msg "Configuring root and default $USER account..."
|
domcox@599
|
913 users_settings
|
domcox@599
|
914
|
domcox@599
|
915 if [ "$TGT_HOME" != "" ]; then
|
domcox@599
|
916 msg "Configuring $TGT_HOME to be used as /home..."
|
domcox@599
|
917 home_config
|
domcox@599
|
918 sleep 2
|
domcox@599
|
919 fi
|
domcox@599
|
920
|
domcox@599
|
921 debug "Creating configuration file for GRUB (menu.lst)..."
|
domcox@599
|
922 grub_config
|
domcox@599
|
923
|
domcox@599
|
924 debug "Files installation completed"
|
domcox@599
|
925 sleep 2
|
domcox@599
|
926 # restoring pwd
|
domcox@599
|
927 cd $save_pwd
|
domcox@599
|
928 }
|
domcox@599
|
929
|
domcox@599
|
930 # GRUB info with disk name used for grub-install.
|
domcox@599
|
931 grub_install()
|
domcox@599
|
932 {
|
domcox@599
|
933 if [ "$TGT_GRUB" == "yes" ]; then
|
domcox@599
|
934 TARGET_DISK=`echo $TGT_PARTITION | sed s/"[0-9]"/''/`
|
domcox@599
|
935 msg "Running grub-install on : $TARGET_DISK"
|
domcox@599
|
936 grub-install --no-floppy \
|
domcox@599
|
937 --root-directory=$TARGET_ROOT $TARGET_DISK 2>>$LOG
|
domcox@599
|
938 debug "Grub installation done..."
|
domcox@599
|
939 else
|
domcox@599
|
940 debug "Grub not installed"
|
domcox@599
|
941 fi
|
domcox@599
|
942 }
|
domcox@599
|
943
|
domcox@599
|
944 # Copy log file, umount target and eject cdrom.
|
domcox@599
|
945 umount_devices()
|
domcox@599
|
946 {
|
domcox@599
|
947 # Log files
|
domcox@599
|
948 debug "Copying log files ($LOG)..."
|
domcox@599
|
949 cp -a $LOG $TARGET_ROOT/var/log
|
domcox@599
|
950 sleep 2
|
domcox@599
|
951
|
domcox@599
|
952 # Umount target
|
domcox@599
|
953 if mount | grep -q $TARGET_ROOT; then
|
domcox@599
|
954 echo "Unmounting target ($TGT_PARTITION)..."
|
domcox@599
|
955 umount $TARGET_ROOT 2>>$LOG
|
domcox@599
|
956 fi
|
domcox@599
|
957
|
domcox@599
|
958 # Umount source
|
domcox@599
|
959 if mount | grep -q $SOURCE_ROOT; then
|
domcox@599
|
960 echo "Unmounting $SOURCE_ROOT"
|
domcox@599
|
961 umount $SOURCE_ROOT
|
domcox@599
|
962 fi
|
domcox@599
|
963
|
domcox@599
|
964 # Eject cd
|
domcox@599
|
965 if [ "$INST_TYPE" == "cdrom" ]; then
|
domcox@599
|
966 echo "Ejecting cdrom..."
|
domcox@599
|
967 eject
|
domcox@599
|
968 fi
|
domcox@599
|
969 sleep 2
|
domcox@599
|
970 }
|
domcox@599
|
971
|
domcox@599
|
972 # End of installation.
|
domcox@599
|
973 end_of_install()
|
domcox@599
|
974 {
|
domcox@599
|
975 echo "Installation complete. You can now restart (reboot) \
|
domcox@599
|
976 from your SliTaz GNU/Linux system."
|
domcox@599
|
977 echo "=== Tazinst end at `date` ===" >>$LOG
|
domcox@599
|
978 umount_devices
|
domcox@599
|
979 }
|
domcox@599
|
980
|
domcox@599
|
981 #####################
|
domcox@599
|
982 # Upgrade functions #
|
domcox@599
|
983 #####################
|
domcox@599
|
984
|
domcox@599
|
985 # Mount.
|
domcox@599
|
986 prepare_upgrade()
|
domcox@599
|
987 {
|
domcox@599
|
988 debug "Preparing the target partition..."
|
domcox@599
|
989 # Mount point can be already used.
|
domcox@599
|
990 if mount | grep -q $TARGET_ROOT; then
|
domcox@599
|
991 umount $TARGET_ROOT 2>>$LOG
|
domcox@599
|
992 fi
|
domcox@599
|
993 mkdir -p $TARGET_ROOT && sleep 2
|
domcox@599
|
994 # Mount target.
|
domcox@599
|
995 mount $TGT_PARTITION $TARGET_ROOT >>$LOG 2>>$LOG
|
domcox@599
|
996 if [ $(mount | grep -c "mnt/target") == "0" ]; then
|
domcox@599
|
997 abort 5 "Can't mount $TGT_PARTITION"
|
domcox@599
|
998 fi
|
domcox@599
|
999 }
|
domcox@599
|
1000
|
domcox@599
|
1001 # Check for a valid SliTaz
|
domcox@599
|
1002 check_release()
|
domcox@599
|
1003 {
|
domcox@599
|
1004 if [ -f $TARGET_ROOT/etc/slitaz-release ]; then
|
domcox@599
|
1005 release=`cat $TARGET_ROOT/etc/slitaz-release`
|
domcox@599
|
1006 msg "Preparing upgrade of SliTaz release: $release"
|
domcox@599
|
1007 else
|
domcox@599
|
1008 abort 6 "The partition '$TGT_PARTITION' doesn't appear to contain \
|
domcox@599
|
1009 a SliTaz system, the file: /etc/slitaz-release doesn't exist."
|
domcox@599
|
1010 fi && sleep 2
|
domcox@599
|
1011 }
|
domcox@599
|
1012
|
domcox@599
|
1013 # Backup target packages list.
|
domcox@599
|
1014 backup_files()
|
domcox@599
|
1015 {
|
domcox@599
|
1016 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
1017 ls -1 var/lib/tazpkg/installed > home/packages-selection.list
|
domcox@599
|
1018 for dir in *
|
domcox@599
|
1019 do
|
domcox@599
|
1020 case "$dir" in
|
domcox@599
|
1021 boot)
|
domcox@599
|
1022 rm -rf boot/vmlinuz-* ;;
|
domcox@599
|
1023 home)
|
domcox@599
|
1024 mv home home.bak
|
domcox@599
|
1025 debug "keeping /home found on: $TGT_PARTITION" ;;
|
domcox@599
|
1026 etc)
|
domcox@599
|
1027 tar czf etc.tar.gz etc
|
domcox@599
|
1028 mv etc etc.bak
|
domcox@599
|
1029 debug "keeping /etc found on: $TGT_PARTITION" ;;
|
domcox@599
|
1030 var)
|
domcox@599
|
1031 if [ -d var/www ]; then
|
domcox@599
|
1032 mv var/www www.bak
|
domcox@599
|
1033 debug "keeping /var/www found on: $TGT_PARTITION"
|
domcox@599
|
1034 fi
|
domcox@599
|
1035 rm -rf var 2>>$LOG ;;
|
domcox@599
|
1036 lost+found)
|
domcox@599
|
1037 continue ;;
|
domcox@599
|
1038 *)
|
domcox@599
|
1039 debug "removing target: $dir"
|
domcox@599
|
1040 rm -rf $dir 2>>$LOG ;;
|
domcox@599
|
1041 esac
|
domcox@599
|
1042 done
|
domcox@599
|
1043 if [ -d mklost+found ]; then
|
domcox@599
|
1044 mklost+found 2>>$LOG
|
domcox@599
|
1045 fi
|
domcox@599
|
1046 sleep 2
|
domcox@599
|
1047 }
|
domcox@599
|
1048
|
domcox@599
|
1049 # Restore backups.
|
domcox@599
|
1050 restore_files()
|
domcox@599
|
1051 {
|
domcox@599
|
1052 rm -rf $TARGET_ROOT/home
|
domcox@599
|
1053 mv $TARGET_ROOT/home.bak $TARGET_ROOT/home
|
domcox@599
|
1054 rm -rf $TARGET_ROOT/etc
|
domcox@599
|
1055 mv $TARGET_ROOT/etc.bak $TARGET_ROOT/etc
|
domcox@599
|
1056 if [ -d $TARGET_ROOT/www.bak ]; then
|
domcox@599
|
1057 rm -rf $TARGET_ROOT/var/www
|
domcox@599
|
1058 mv $TARGET_ROOT/www.bak $TARGET_ROOT/var/www
|
domcox@599
|
1059 fi
|
domcox@599
|
1060 debug "backups restored: `date`"
|
domcox@599
|
1061
|
domcox@599
|
1062 # /var/lib/slitaz-installer
|
domcox@599
|
1063 mkdir -p $TARGET_ROOT/var/lib/tazinst
|
domcox@599
|
1064 mv $TARGET_ROOT/etc.tar.gz $TARGET_ROOT/var/lib/tazinst
|
domcox@599
|
1065 mv $TARGET_ROOT/home/packages-selection.list $TARGET_ROOT/var/lib/tazinst
|
domcox@599
|
1066 }
|
domcox@599
|
1067
|
domcox@599
|
1068 # Added pkgs
|
domcox@599
|
1069 install_pkgs()
|
domcox@599
|
1070 {
|
domcox@599
|
1071 # Check if the pkg is on the mirror.
|
domcox@599
|
1072 debug "Checking the availability of packages..."
|
domcox@599
|
1073 touch packages-to-install.list
|
domcox@599
|
1074 packages=0
|
domcox@599
|
1075 diff=`cat packages-selection.diff | sort`
|
domcox@599
|
1076 for pkg in $diff
|
domcox@599
|
1077 do
|
domcox@599
|
1078 if grep -q ^$pkg-[0-9] /var/lib/tazpkg/packages.list; then
|
domcox@599
|
1079 packages=$(($packages+1))
|
domcox@599
|
1080 echo "$pkg" >> packages-to-install.list
|
domcox@599
|
1081 fi
|
domcox@599
|
1082 done
|
domcox@599
|
1083
|
domcox@599
|
1084 # Calculate the percent for one package and install.
|
domcox@599
|
1085 debug "Installing any packages..."
|
domcox@599
|
1086 sleep 2
|
domcox@599
|
1087 if [ "$packages" == "0" ]; then
|
domcox@599
|
1088 debug "packages to install: 0"
|
domcox@599
|
1089 else
|
domcox@599
|
1090 onepkg=$((48/$packages))
|
domcox@599
|
1091 pct=50
|
domcox@599
|
1092 # Get-install all missing pkgs.
|
domcox@599
|
1093 for pkg in `cat packages-to-install.list`
|
domcox@599
|
1094 do
|
domcox@599
|
1095 pct=$(($pct+$onepkg))
|
domcox@599
|
1096 echo $pct
|
domcox@599
|
1097 debug "Installing: $pkg..."
|
domcox@599
|
1098 # Get install package and answer yes in case of dependencies.
|
domcox@599
|
1099 pkgname=`grep ^$pkg /var/lib/tazpkg/packages.list`
|
domcox@599
|
1100 tazpkg get $pkg >/dev/null 2>/dev/null
|
domcox@599
|
1101 yes "" | tazpkg install $pkgname.tazpkg --root=$TARGET_ROOT >/dev/null 2>/dev/null
|
domcox@599
|
1102 rm -f $pkgname.tazpkg
|
domcox@599
|
1103 done
|
domcox@599
|
1104 fi
|
domcox@599
|
1105 echo 100
|
domcox@599
|
1106 debug "Installation of packages complete..."
|
domcox@599
|
1107 sleep 2
|
domcox@599
|
1108 }
|
domcox@599
|
1109
|
domcox@599
|
1110 # Search for added pkgs
|
domcox@599
|
1111 update_pkgs()
|
domcox@599
|
1112 {
|
domcox@599
|
1113 cd $TARGET_ROOT/var/lib/tazinst || abort 8 "Internal"
|
domcox@599
|
1114 # LiveCD packages list.
|
domcox@599
|
1115 debug "Creating package lists..."
|
domcox@599
|
1116 ls -1 $TARGET_ROOT/var/lib/tazpkg/installed > packages-source.list || exit 1
|
domcox@599
|
1117 debug "packages-source.list: done"
|
domcox@599
|
1118 # Diff
|
domcox@599
|
1119 diff packages-source.list packages-selection.list | \
|
domcox@599
|
1120 grep ^+[a-z] | sed s/^+// > packages-selection.diff
|
domcox@599
|
1121 debug "packages-selection.diff: done"
|
domcox@599
|
1122 # Get mirror list.
|
domcox@599
|
1123 tazpkg recharge >>$LOG 2>>$LOG
|
domcox@599
|
1124 if [ -f /var/lib/tazpkg/packages.list ]; then
|
domcox@599
|
1125 install_pkgs
|
domcox@599
|
1126 else
|
domcox@599
|
1127 touch packages-to-install.list
|
domcox@599
|
1128 warning "The list of available packages on the mirror could not be \
|
domcox@599
|
1129 downloaded. No missing packages will be reinstalled now, but \
|
domcox@599
|
1130 you can do so later by looking at the following list: \
|
domcox@599
|
1131 /var/lib/tazinst/packages-selection.diff"
|
domcox@599
|
1132 fi
|
domcox@599
|
1133 sleep 2
|
domcox@599
|
1134 }
|
domcox@599
|
1135
|
domcox@599
|
1136 # Update grub conf
|
domcox@599
|
1137 grub_update()
|
domcox@599
|
1138 {
|
domcox@599
|
1139 # Backup and create a new grub menu.lst.
|
domcox@599
|
1140 if [ "$TGT_GRUB" == "yes" ]; then
|
domcox@599
|
1141 msg "Grub update"
|
domcox@599
|
1142 mv $TARGET_ROOT/boot/grub/menu.lst \
|
domcox@599
|
1143 $TARGET_ROOT/boot/grub/menu.lst.bak 2>/dev/null
|
domcox@599
|
1144 grub_config
|
domcox@599
|
1145 fi
|
domcox@599
|
1146 }
|
domcox@599
|
1147
|
domcox@599
|
1148 # Prepare the partition to upgrade, backup, install, restore configs
|
domcox@599
|
1149 # and reinstall pkgs.
|
domcox@599
|
1150 upgrade_files()
|
domcox@599
|
1151 {
|
domcox@599
|
1152 # saving pwd
|
domcox@599
|
1153 local save_pwd=$(pwd)
|
domcox@599
|
1154 cd $TARGET_ROOT || abort 8 "Internal"
|
domcox@599
|
1155
|
domcox@599
|
1156 debug "Searching for /etc/slitaz-release"
|
domcox@599
|
1157 check_release
|
domcox@599
|
1158
|
domcox@599
|
1159 msg "Backup /etc, /home and the packages list..."
|
domcox@599
|
1160 backup_files
|
domcox@599
|
1161
|
domcox@599
|
1162 msg "Upgrading SliTaz on $TGT_PARTITION"
|
domcox@599
|
1163
|
domcox@599
|
1164 debug "Copying the bootloader syslinux/isolinux..."
|
domcox@599
|
1165 copy_bootloaders
|
domcox@599
|
1166
|
domcox@599
|
1167 debug "Extracting the root system..."
|
domcox@599
|
1168 extract_rootfs $SOURCE_ROOT/boot
|
domcox@599
|
1169
|
domcox@599
|
1170 msg "Restoring configuration files..."
|
domcox@599
|
1171 restore_files
|
domcox@599
|
1172
|
domcox@599
|
1173 debug "Installing the kernel..."
|
domcox@599
|
1174 install_kernel
|
domcox@599
|
1175
|
domcox@599
|
1176 msg "Upgrading added packages..."
|
domcox@599
|
1177 update_pkgs
|
domcox@599
|
1178
|
domcox@599
|
1179 # restoring pwd
|
domcox@599
|
1180 cd $save_pwd
|
domcox@599
|
1181 }
|
domcox@599
|
1182
|
domcox@599
|
1183 # End of system upgrade.
|
domcox@599
|
1184 end_of_upgrade()
|
domcox@599
|
1185 {
|
domcox@599
|
1186 pkgscd=`cat $TARGET_ROOT/var/lib/tazinst/packages-source.list | wc -l`
|
domcox@599
|
1187 pkginst=`cat $TARGET_ROOT/var/lib/tazinst/packages-to-install.list | wc -l`
|
domcox@599
|
1188 echo -e "Upgrade finished. You can now restart (reboot) \
|
domcox@599
|
1189 from your SliTaz GNU/Linux system.
|
domcox@599
|
1190 Packages on the cdrom : $pkgscd
|
domcox@599
|
1191 Packages installed from the mirror : $pkginst"
|
domcox@599
|
1192 echo "=== Tazinst end at `date` ===" >>$LOG
|
domcox@599
|
1193 umount_devices
|
domcox@599
|
1194 }
|
domcox@599
|
1195
|
domcox@599
|
1196 ######################
|
domcox@599
|
1197 # Installer sequence #
|
domcox@599
|
1198 ######################
|
domcox@599
|
1199
|
domcox@599
|
1200 case $1 in
|
domcox@599
|
1201 install)
|
domcox@599
|
1202 INST_ACTION=install
|
domcox@599
|
1203 check_root
|
domcox@599
|
1204 init $@
|
domcox@599
|
1205 read_configuration_file $2
|
domcox@599
|
1206 check_vars
|
domcox@599
|
1207 check_source
|
domcox@599
|
1208 prepare_install
|
domcox@599
|
1209 install_files
|
domcox@599
|
1210 grub_install
|
domcox@599
|
1211 end_of_install ;;
|
domcox@599
|
1212 upgrade)
|
domcox@599
|
1213 INST_ACTION=upgrade
|
domcox@599
|
1214 check_root
|
domcox@599
|
1215 init $@
|
domcox@599
|
1216 read_configuration_file $2
|
domcox@599
|
1217 check_vars
|
domcox@599
|
1218 check_source
|
domcox@599
|
1219 prepare_upgrade
|
domcox@599
|
1220 upgrade_files
|
domcox@599
|
1221 grub_update
|
domcox@599
|
1222 end_of_upgrade ;;
|
domcox@599
|
1223 config)
|
domcox@599
|
1224 gen_config $2 ;;
|
domcox@599
|
1225 cli)
|
domcox@599
|
1226 check_root
|
domcox@599
|
1227 init $@
|
domcox@599
|
1228 check_cli_options $@
|
domcox@599
|
1229 check_vars
|
domcox@599
|
1230 check_source
|
domcox@599
|
1231 summary
|
domcox@599
|
1232 case $INST_ACTION in
|
domcox@599
|
1233 upgrade)
|
domcox@599
|
1234 prepare_upgrade
|
domcox@599
|
1235 upgrade_files
|
domcox@599
|
1236 grub_update
|
domcox@599
|
1237 end_of_upgrade ;;
|
domcox@599
|
1238 install)
|
domcox@599
|
1239 prepare_install
|
domcox@599
|
1240 install_files
|
domcox@599
|
1241 grub_install
|
domcox@599
|
1242 end_of_install ;;
|
domcox@599
|
1243 esac ;;
|
domcox@599
|
1244 usage|*)
|
domcox@599
|
1245 usage ;;
|
domcox@599
|
1246 esac
|
domcox@599
|
1247
|
domcox@599
|
1248 exit 0
|