rev |
line source |
spode@0
|
1 #!/bin/sh
|
spode@0
|
2 # Tazusb - SliTaz LiveUSB
|
spode@0
|
3 #
|
spode@0
|
4 # Tazusb is an utility to generate, configure and manipulate SliTaz LiveUSB
|
spode@0
|
5 # bootable media and/or USB /home partition, such as flash keys, SD card or
|
pankso@86
|
6 # USB harddisk. Authors : see AUTHORS
|
spode@0
|
7 #
|
erjo@91
|
8 VERSION=3.0.1
|
erjo@91
|
9
|
erjo@91
|
10 # Include gettext helper script.
|
erjo@91
|
11 . /usr/bin/gettext.sh
|
erjo@91
|
12
|
erjo@91
|
13 # Export package name for gettext.
|
erjo@91
|
14 TEXTDOMAIN='tazusb'
|
erjo@91
|
15 export TEXTDOMAIN
|
spode@0
|
16
|
spode@0
|
17 COMMAND=$1
|
spode@0
|
18 TARGET_ROOT=/media/flash
|
spode@0
|
19 DRIVE_NAME=`cat /proc/sys/dev/cdrom/info | grep "drive name" | cut -f 3`
|
spode@0
|
20 CDROM=/dev/$DRIVE_NAME
|
erjo@47
|
21 LOG=/tmp/$(basename $0).log
|
spode@0
|
22
|
spode@0
|
23 #
|
spode@0
|
24 # Tazusb functions
|
spode@0
|
25 #
|
spode@0
|
26
|
spode@0
|
27 # Print the usage.
|
spode@0
|
28 usage ()
|
spode@0
|
29 {
|
erjo@94
|
30 echo -e "`gettext \"SliTaz Live USB - Version:\"` $VERSION\n
|
erjo@95
|
31 \033[1m`gettext \"Usage: \"`\033[0m `basename $0` [command] [compression|device]
|
erjo@95
|
32 \033[1m`gettext \"Commands:\"`\033[0m\n
|
erjo@91
|
33 usage `gettext \"Print this short usage.\"`
|
erjo@91
|
34 writefs `gettext \"Write the current filesystem to rootfs.gz.
|
erjo@94
|
35 Supported compression: lzma. gzip, none.\"`
|
erjo@91
|
36 format `gettext \"Format and label device with ext3, ext2 or fat32 filesystem
|
erjo@91
|
37 (for LiveUSB or /home). Default is ext3.\"`
|
erjo@91
|
38 gen-liveusb `gettext \"Generate a bootable LiveUSB using files from the LiveCD.\"`
|
erjo@91
|
39 gen-swap `gettext \"Create or recreate and activate additional swap memory.\"`
|
erjo@91
|
40 gen-iso2usb `gettext \"Generate a bootable LiveUSB using files from ISO file.\"`
|
erjo@91
|
41 clean `gettext \"Remove old backup filesystems to free disk space.\"`\n"
|
spode@0
|
42 }
|
spode@0
|
43
|
spode@0
|
44 # Status function.
|
spode@0
|
45 status()
|
spode@0
|
46 {
|
spode@0
|
47 local CHECK=$?
|
spode@0
|
48 echo -en "\\033[70G[ "
|
spode@0
|
49 if [ $CHECK = 0 ]; then
|
erjo@91
|
50 echo -en "\\033[1;33m`gettext \"OK\"`"
|
spode@0
|
51 else
|
erjo@91
|
52 echo -en "\\033[1;31m`gettext \"Failed\"`"
|
spode@0
|
53 fi
|
spode@0
|
54 echo -e "\\033[0;39m ]"
|
spode@0
|
55 }
|
spode@0
|
56
|
spode@0
|
57 # Exit if user is not root.
|
spode@0
|
58 check_root()
|
spode@0
|
59 {
|
spode@0
|
60 if test $(id -u) != 0 ; then
|
erjo@91
|
61 # echo -e "\nThis program requires being run as root.\n"
|
erjo@91
|
62 gettext "This program requires being run as root."
|
erjo@91
|
63 echo ""
|
spode@0
|
64 exit 0
|
spode@0
|
65 fi
|
spode@0
|
66 }
|
spode@0
|
67
|
paul@41
|
68 # Display a list of available partitions.
|
hacker@12
|
69 fdisk_list()
|
hacker@12
|
70 {
|
pankso@16
|
71 echo "----"
|
hacker@12
|
72 fdisk -l | grep ^/dev/sd*
|
pankso@16
|
73 echo "----"
|
hacker@12
|
74 }
|
hacker@12
|
75
|
hacker@12
|
76 # We need a USB media to install.
|
hacker@12
|
77 ask_for_device()
|
hacker@12
|
78 {
|
erjo@91
|
79 gettext "\
|
hacker@12
|
80 Please specify the target USB device to $COMMAND. You can type 'list' to
|
hacker@12
|
81 get a list of devices, type 'exit' or give an empty value to exit.
|
hacker@12
|
82
|
hacker@12
|
83 Device to use : "; read anser
|
hacker@12
|
84 while [ "$anser" == "list" ]; do
|
hacker@12
|
85 fdisk_list
|
erjo@91
|
86 gettext "Device to use : "; read anser
|
hacker@12
|
87 done
|
hacker@12
|
88 if [ "$anser" = "" -o "$anser" = "exit" ]; then
|
erjo@91
|
89 echo ""
|
erjo@91
|
90 gettext "No specified device or exit."
|
erjo@91
|
91 echo ""
|
hacker@12
|
92 exit 0
|
hacker@12
|
93 else
|
hacker@12
|
94 DEVICE=$anser
|
hacker@12
|
95 fi
|
hacker@12
|
96 }
|
hacker@12
|
97
|
spode@0
|
98 # Verify a device exists before format or install
|
spode@0
|
99 check_for_device()
|
spode@0
|
100 {
|
spode@9
|
101 IFDEV=`fdisk -l | grep $DEVICE`
|
spode@9
|
102 if [ -z "$IFDEV" ]; then
|
erjo@91
|
103 echo ""
|
erjo@91
|
104 gettext "Unable to find device: $DEVICE"
|
erjo@91
|
105 echo ""
|
spode@0
|
106 exit 0
|
spode@0
|
107 fi
|
spode@0
|
108 }
|
spode@0
|
109
|
paul@41
|
110 # gets the UUID and filesystem type
|
spode@0
|
111 get_part_info()
|
spode@0
|
112 {
|
spode@9
|
113 UUID=`blkid -s UUID -o value $DEVICE`
|
spode@9
|
114 FSTYPE=`blkid -s TYPE -o value $DEVICE`
|
spode@0
|
115 }
|
spode@0
|
116
|
spode@0
|
117 # Format target device and label partition.
|
spode@0
|
118 mkfs_ext3()
|
spode@0
|
119 {
|
erjo@91
|
120 gettext "Please specify a label for the partition (TazUSB): "
|
spode@0
|
121 read label
|
spode@0
|
122
|
spode@0
|
123 if [ -z $label ]; then
|
spode@0
|
124 label=TazUSB
|
spode@0
|
125 fi
|
spode@0
|
126
|
erjo@91
|
127 gettext "Label : $label"; echo ""
|
erjo@91
|
128 gettext "Mkfs : mkfs.ext3 -L \"$label\" $DEVICE" ; echo ""
|
spode@0
|
129 echo "" && sleep 2
|
spode@9
|
130 mkfs.ext3 -L "$label" $DEVICE
|
spode@0
|
131
|
spode@0
|
132 }
|
spode@0
|
133
|
paul@77
|
134 # Get label for device
|
erjo@47
|
135 get_label()
|
erjo@47
|
136 {
|
erjo@91
|
137 gettext "Please specify a label for the partition (TazUSB): "
|
erjo@47
|
138 read label
|
erjo@47
|
139
|
erjo@47
|
140 if [ -z $label ]; then
|
erjo@47
|
141 label=TazUSB
|
erjo@47
|
142 fi
|
erjo@47
|
143 }
|
erjo@47
|
144
|
paul@77
|
145 # Get fs type. Supported fs are ext3, ext2, fat32
|
erjo@47
|
146 get_fs_type()
|
erjo@47
|
147 {
|
erjo@91
|
148 gettext "Please specify a filesystem type ext2, ext3 or fat32 (ext3): "
|
erjo@47
|
149 read fs_type
|
erjo@47
|
150
|
erjo@47
|
151 if [ -z $fs_type ]; then
|
erjo@47
|
152 fs_type=ext3
|
erjo@47
|
153 fi
|
erjo@47
|
154 }
|
erjo@47
|
155
|
erjo@47
|
156 # We can chose the filesystem type.
|
erjo@47
|
157 ask_for_fs_type()
|
erjo@47
|
158 {
|
erjo@91
|
159 gettext "\
|
erjo@47
|
160 Please specify the filesystem type to $COMMAND.
|
paul@48
|
161 Available formats are ext3(default), ext2 or fat32.
|
erjo@47
|
162 Press enter to keep the default value.
|
erjo@47
|
163
|
erjo@47
|
164 File system type : "; read anser
|
erjo@47
|
165 if [ "$anser" = "" ]; then
|
erjo@47
|
166 FS_TYPE=ext3
|
erjo@47
|
167 else
|
erjo@47
|
168 FS_TYPE=$anser
|
erjo@47
|
169 fi
|
erjo@47
|
170 }
|
erjo@47
|
171
|
erjo@47
|
172 # Format target device in ext3, ext2 or fat32.
|
erjo@49
|
173 # Usage: make_fs ext2|fat32|ext3 (default)
|
erjo@47
|
174 make_fs()
|
erjo@47
|
175 {
|
erjo@47
|
176 local answer
|
erjo@47
|
177
|
erjo@47
|
178 FS=$(echo $fs_type | tr [A-Z] [a-z])
|
erjo@47
|
179 case "$FS" in
|
erjo@47
|
180 ext3|ext2)
|
erjo@91
|
181 echo ""; gettext "Processing..." ; echo ""
|
erjo@91
|
182 gettext "Label : $label" ; echo ""
|
erjo@91
|
183 gettext "Mkfs : mkfs.$FS -L \"$label\" $DEVICE"
|
erjo@47
|
184 echo "" && sleep 2
|
erjo@47
|
185 mkfs.$@ -L "$label" $DEVICE > $LOG 2>&1
|
erjo@47
|
186 ;;
|
erjo@47
|
187 [Ff]at32)
|
erjo@47
|
188 if [ -x /sbin/mkdosfs ];then
|
erjo@91
|
189 echo "" ; gettext "Processing..."; echo ""
|
erjo@91
|
190 gettext "Label : $label" ; echo ""
|
erjo@91
|
191 gettext "Mkfs : mkdosfs -F 32 -n \"$label\" $DEVICE"; echo ""
|
erjo@47
|
192 echo "" && sleep 2
|
erjo@47
|
193 mkdosfs -F 32 -n "$label" $DEVICE
|
erjo@47
|
194 else
|
erjo@91
|
195 gettext "Can't find mkdosfs tool.\nWould you like to install dosfstools from repository [y/N] ? "; read answer
|
erjo@47
|
196 case $answer in
|
erjo@47
|
197 y|Y)
|
erjo@47
|
198 yes | tazpkg get-install dosfstools && make_fs fat32;;
|
erjo@47
|
199 *)
|
erjo@47
|
200 exit 1 ;;
|
erjo@47
|
201 esac
|
erjo@47
|
202 fi
|
erjo@47
|
203 ;;
|
erjo@47
|
204 *)
|
erjo@91
|
205 gettext "Sorry. Filesystem $FS is not supported."; echo ""
|
erjo@47
|
206 exit
|
erjo@47
|
207 esac
|
erjo@47
|
208 }
|
erjo@47
|
209
|
spode@0
|
210 # Mount an existing USB device.
|
spode@0
|
211 unmount_target_usb()
|
spode@0
|
212 {
|
spode@0
|
213 # If mount point is in use, unmount
|
erjo@47
|
214 if mount | grep -q $TARGET_ROOT; then
|
spode@0
|
215 umount $TARGET_ROOT
|
spode@0
|
216 fi
|
spode@0
|
217
|
spode@0
|
218 # Device could be mounted elsewhere, so unmount
|
erjo@47
|
219 if mount | grep -q $DEVICE; then
|
erjo@91
|
220 gettext "Unmounting USB target device..."; echo ""
|
spode@9
|
221 umount $DEVICE
|
spode@0
|
222 fi
|
spode@0
|
223 }
|
spode@0
|
224
|
spode@0
|
225 # Mount an existing USB device.
|
spode@0
|
226 mount_target_usb()
|
spode@0
|
227 {
|
erjo@91
|
228 gettext "Mounting USB target device..." ; echo ""
|
spode@0
|
229 mkdir -p $TARGET_ROOT
|
spode@9
|
230 mount $DEVICE $TARGET_ROOT 2>/dev/null
|
spode@0
|
231 }
|
spode@0
|
232
|
spode@0
|
233 # Mount SliTaz LiveCD to get needed files.
|
spode@0
|
234 mount_cdrom()
|
spode@0
|
235 {
|
erjo@91
|
236 gettext "Mounting cdrom device..."; echo ""
|
spode@0
|
237
|
spode@0
|
238 if mount | grep /media/cdrom; then
|
spode@0
|
239 umount /media/cdrom
|
spode@0
|
240 fi
|
spode@0
|
241
|
spode@0
|
242 mkdir -p /media/cdrom
|
hacker@12
|
243 mount -r -t iso9660 $CDROM /media/cdrom 2>/dev/null
|
spode@0
|
244
|
pascal@78
|
245 if [ ! -f /media/cdrom/boot/rootfs.gz -a \
|
pascal@78
|
246 ! -f /media/cdrom/boot/rootfs1.gz ]; then
|
erjo@91
|
247 echo ""; gettext "Unable to mount cdrom or to find a filesystem on it (rootfs.gz)."; ehco ""
|
spode@0
|
248 exit 0
|
spode@0
|
249 fi
|
spode@0
|
250 }
|
spode@0
|
251
|
erjo@24
|
252 # Mount SliTaz ISO to get needed files.
|
erjo@24
|
253 mount_iso()
|
erjo@24
|
254 {
|
erjo@24
|
255 if mount | grep /media/cdrom ; then
|
erjo@24
|
256 umount /media/cdrom
|
erjo@24
|
257 fi
|
erjo@24
|
258
|
erjo@24
|
259 test -d /media/cdrom || mkdir -p /media/cdrom
|
erjo@24
|
260
|
erjo@34
|
261 # Add support to other distros.
|
erjo@34
|
262 if [ ! -f /etc/slitaz-version ]; then
|
erjo@34
|
263 OPTIONS="-o loop"
|
erjo@34
|
264 else
|
erjo@34
|
265 OPTIONS=""
|
erjo@34
|
266 fi
|
erjo@34
|
267
|
erjo@94
|
268 gettext "Mounting"
|
erjo@94
|
269 echo "`basename $ISO`..."; echo ""
|
erjo@34
|
270 mount $OPTIONS $ISO /media/cdrom 2>/dev/null
|
erjo@24
|
271
|
pascal@78
|
272 if [ ! -f /media/cdrom/boot/rootfs.gz -a \
|
pascal@78
|
273 ! -f /media/cdrom/boot/rootfs1.gz ]; then
|
erjo@91
|
274 gettext "Unable to mount iso or to find a filesystem on it (rootfs.gz)."; echo ""
|
erjo@24
|
275 exit 0
|
erjo@24
|
276 fi
|
erjo@24
|
277 }
|
erjo@24
|
278
|
paul@48
|
279 # All needed files are in the boot directory of the cdrom.
|
spode@0
|
280 copy_cdrom_files()
|
spode@0
|
281 {
|
erjo@91
|
282 gettext "Copying needed files from cdrom..."
|
spode@0
|
283 mkdir -p $TARGET_ROOT/boot
|
spode@0
|
284 cp /media/cdrom/boot/bzImage $TARGET_ROOT/boot
|
pascal@78
|
285 rem=0
|
pascal@78
|
286 for i in $(ls /media/cdrom/boot/rootfs*.gz | sort -r); do
|
pascal@78
|
287 [ $rem -ne 0 ] &&
|
pascal@78
|
288 dd if=/dev/zero bs=1 count=$((4 - $rem)) 2> /dev/null
|
pascal@78
|
289 cat $i
|
pascal@78
|
290 rem=$(stat -c %s $i)
|
pascal@78
|
291 rem=$(($rem % 4))
|
pascal@78
|
292 done > $TARGET_ROOT/boot/rootfs.gz
|
spode@0
|
293 status
|
spode@0
|
294 }
|
spode@0
|
295
|
spode@0
|
296 install_mbr()
|
spode@0
|
297 {
|
spode@0
|
298 # MBR
|
pankso@11
|
299 DISK=${DEVICE%[1-99]}
|
pascal@22
|
300 if [ -f /usr/share/boot/mbr.bin ]; then
|
erjo@91
|
301 gettext "Installing a new MBR to: $DISK"
|
pascal@22
|
302 cat /usr/share/boot/mbr.bin > $DISK
|
spode@0
|
303 status
|
spode@0
|
304 else
|
spode@0
|
305 # Skip MBR install (tazpkg get-install syslinux-extra ? and then cat)
|
erjo@91
|
306 gettext "No new MBR installed to: $DISK"; echo ""
|
spode@0
|
307 fi
|
spode@0
|
308 }
|
spode@0
|
309
|
spode@0
|
310 # ext/syslinux install
|
spode@0
|
311 install_boot()
|
spode@0
|
312 {
|
MikeDSmith25@31
|
313 # Decide if we're installing syslinux or extlinux
|
spode@0
|
314 if [ "$FSTYPE" = "vfat" ]; then
|
spode@0
|
315 ST=syslinux
|
pascal@78
|
316 STC="syslinux --install -d /boot/syslinux/ $DEVICE"
|
spode@0
|
317 STE=cfg
|
spode@0
|
318 else
|
spode@0
|
319 ST=extlinux
|
spode@0
|
320 STC="extlinux --install $TARGET_ROOT/boot/$ST"
|
spode@0
|
321 STE=conf
|
spode@0
|
322 fi
|
spode@0
|
323
|
erjo@91
|
324 gettext "Installing bootloader: $ST"; echo ""
|
spode@0
|
325 mkdir -p $TARGET_ROOT/boot/$ST
|
spode@0
|
326 $STC
|
spode@0
|
327
|
erjo@23
|
328 # Use existing isolinux.cfg for extlinux.conf or syslinux.cfg
|
erjo@23
|
329 cp /media/cdrom/boot/isolinux/isolinux.cfg $TARGET_ROOT/boot/$ST/$ST.$STE
|
pascal@78
|
330 sed -i "s/isolinux.msg/$ST.msg/" $TARGET_ROOT/boot/$ST/$ST.$STE
|
erjo@23
|
331
|
pascal@90
|
332 # Update DVD autoinstall
|
pascal@90
|
333 sed -i "s/LABEL=packages-[^,]*/UUID=$UUID/g" $(grep -l append $TARGET_ROOT/boot/$ST/*)
|
pascal@90
|
334
|
MikeDSmith25@31
|
335 # Add home= to append in extlinux or syslinux.cfg
|
pascal@44
|
336 sed -i -e "s/\(append.*\)/\1 home=$UUID/" $(grep -l append $TARGET_ROOT/boot/$ST/*)
|
erjo@23
|
337
|
pankso@16
|
338 # Splash screen and help files.
|
erjo@23
|
339 cp /media/cdrom/boot/isolinux/isolinux.msg $TARGET_ROOT/boot/$ST/$ST.msg
|
erjo@23
|
340 sed -i s/'SliTaz GNU\/Linux'/'SliTaz GNU\/Linux LiveUSB'/ $TARGET_ROOT/boot/$ST/$ST.msg
|
pankso@16
|
341 cp /media/cdrom/boot/isolinux/splash.lss $TARGET_ROOT/boot/$ST
|
pankso@16
|
342 cp /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/$ST
|
erjo@23
|
343 cp /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/$ST
|
erjo@23
|
344 cp /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/$ST
|
erjo@23
|
345 cp /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/$ST
|
erjo@23
|
346
|
erjo@23
|
347 # Modifing all cfg files.
|
erjo@23
|
348 for cfg in $TARGET_ROOT/boot/$ST/*.cfg
|
erjo@23
|
349 do
|
erjo@23
|
350 sed -i s/isolinux.msg/$ST.msg/ $cfg
|
erjo@23
|
351 done
|
erjo@23
|
352
|
MikeDSmith25@31
|
353 # Modifing include file if exists.
|
erjo@30
|
354 if [ -f $TARGET_ROOT/boot/$ST/common.inc ]; then
|
erjo@30
|
355 sed -i -e "s/isolinux.msg/$ST.msg/" $TARGET_ROOT/boot/$ST/common.inc
|
erjo@30
|
356 fi
|
erjo@23
|
357
|
pascal@78
|
358 # Un-meta-ize a multi-in-one flavor
|
pascal@79
|
359 if grep -qs "label slitaz" $TARGET_ROOT/boot/$ST/common.cfg ; then
|
pascal@79
|
360 sed -i "s/isolinux/$ST/;s/label slitaz/label multi/" $TARGET_ROOT/boot/$ST/common.cfg
|
pascal@79
|
361 sed -i 's/\(.*\), flavors.*/ \1/' \
|
pascal@79
|
362 $TARGET_ROOT/boot/$ST/$ST.msg
|
pascal@79
|
363 for i in $TARGET_ROOT/boot/$ST/$ST.$STE \
|
pascal@79
|
364 $TARGET_ROOT/boot/$ST/??.$STE \
|
pascal@79
|
365 $TARGET_ROOT/boot/$ST/??_??.$STE; do
|
pascal@79
|
366 sed '/label /!d;/label /{s/label .*/\nlabel slitaz/;NN;s/rootfs..gz.*gz /rootfs.gz /;N;q}' \
|
pascal@79
|
367 < $i >> $i
|
pascal@79
|
368 done
|
pascal@79
|
369 fi
|
pascal@78
|
370
|
spode@0
|
371 }
|
spode@0
|
372
|
spode@0
|
373 # Let user exit or reboot.
|
spode@0
|
374 exit_or_reboot()
|
spode@0
|
375 {
|
pankso@16
|
376 echo "==============================================================================="
|
spode@0
|
377 echo ""
|
erjo@91
|
378 gettext "Do you want to exit Tazusb or reboot system (Exit/reboot) ? "
|
spode@0
|
379 read anser
|
spode@0
|
380 if [ "$anser" == "reboot" ]; then
|
spode@0
|
381 umount $TARGET_ROOT
|
spode@0
|
382 umount /media/cdrom
|
spode@0
|
383 reboot || reboot -f
|
spode@0
|
384 else
|
pankso@37
|
385 umount $TARGET_ROOT
|
spode@0
|
386 umount /media/cdrom
|
spode@0
|
387 echo ""
|
spode@0
|
388 exit 0
|
spode@0
|
389 fi
|
spode@0
|
390 }
|
spode@0
|
391
|
spode@0
|
392 set_bootable()
|
spode@0
|
393 {
|
spode@0
|
394 # As the boot flag is toggable, need to check it before hand
|
pankso@16
|
395 DISK=${DEVICE%[1-99]}
|
pankso@16
|
396 ISSET=`fdisk -l $DISK | grep $DEVICE | grep "\*"`
|
spode@0
|
397
|
spode@0
|
398 # If not set, set bootable
|
pankso@16
|
399 if [ "$ISSET" == "" ]; then
|
pankso@16
|
400 umount $TARGET_ROOT 2>/dev/null
|
erjo@91
|
401 gettext "Setting $DEVICE as bootable..."
|
pankso@16
|
402 fdisk $DISK >/dev/null << EOF
|
spode@0
|
403 a
|
spode@0
|
404 1
|
spode@0
|
405 w
|
spode@0
|
406 EOF
|
pankso@16
|
407 status
|
spode@0
|
408 fi
|
spode@0
|
409 }
|
spode@0
|
410
|
paul@41
|
411 # Generate a virtual swap file in /home/swap. SliTaz boot scripts
|
paul@41
|
412 # will activate it, useful for low memory systems
|
pankso@13
|
413 gen_swap_file()
|
pankso@13
|
414 {
|
pankso@13
|
415 echo ""
|
erjo@91
|
416 echo -en "\033[1m`gettext \"Gen swap\"`\033[0m
|
erjo@91
|
417 ==============================================================================="
|
erjo@91
|
418 gettext "Generate a swap file in /home/swap that will be activated on each boot to have
|
pankso@13
|
419 more memory available (Empty value to exit).
|
pankso@13
|
420
|
pankso@13
|
421 Swap file in Mb : "
|
pankso@13
|
422 read size
|
pankso@13
|
423 if [ -z "$size" ]; then
|
erjo@91
|
424 gettext "Empty value. Exiting..."; echo ""
|
pankso@13
|
425 exit 0
|
pankso@13
|
426 fi
|
pankso@13
|
427 cd /home
|
pankso@13
|
428 # Sanity check
|
pankso@13
|
429 if [ -f swap ]; then
|
pankso@13
|
430 swapoff swap 2>/dev/null
|
pankso@13
|
431 fi
|
pankso@13
|
432 # DD to gen a virtual disk.
|
pankso@13
|
433 dd if=/dev/zero of=swap bs=1M count=$size
|
pankso@13
|
434 # Make swap filesystem.
|
pankso@13
|
435 mkswap swap
|
pankso@13
|
436 swapon swap
|
pankso@13
|
437 echo ""
|
pankso@13
|
438 }
|
pankso@13
|
439
|
paul@26
|
440 # Clean out old backups to save disk space
|
paul@26
|
441 clean_usb()
|
paul@26
|
442 {
|
paul@26
|
443 echo ""
|
erjo@91
|
444 echo -en "\033[1m`gettext \"Clean\"`\033[0m
|
erjo@91
|
445 ==============================================================================="
|
erjo@91
|
446 gettext "Remove old rootfs.gz.unixtimestamp backup filesystems to free up disk space."; echo -e "\n\n"
|
MikeDSmith25@31
|
447 # Locate and interactively remove old filesystems from /home directory
|
paul@26
|
448 for file in `find /home/boot/rootfs.gz.[0-9]*`
|
paul@26
|
449 do
|
erjo@91
|
450 gettext "Do you wish to remove: `basename $file` (Yes/no/exit) ? "
|
paul@26
|
451 read answer
|
paul@26
|
452 case $answer in
|
paul@26
|
453 e|E|"exit"|Exit)
|
paul@26
|
454 exit 0 ;;
|
paul@26
|
455 y|Y|yes|Yes)
|
paul@26
|
456 rm -f $file ;;
|
paul@26
|
457 *)
|
erjo@91
|
458 gettext "No filesystems selected, exiting..." ; echo "" ;;
|
paul@26
|
459 esac
|
paul@26
|
460 done
|
paul@26
|
461 }
|
paul@26
|
462
|
spode@0
|
463 #
|
spode@0
|
464 # Tazusb sequence
|
spode@0
|
465 #
|
spode@0
|
466
|
spode@0
|
467 case $COMMAND in
|
spode@0
|
468 writefs)
|
MikeDSmith25@31
|
469 # Writefs to rootfs.gz
|
spode@0
|
470 check_root
|
spode@0
|
471 if [ -z $2 ]; then
|
spode@0
|
472 COMPRESSION=none
|
spode@0
|
473 else
|
spode@0
|
474 COMPRESSION=$2
|
spode@0
|
475 fi
|
MikeDSmith25@31
|
476 # Start info
|
spode@0
|
477 echo ""
|
erjo@91
|
478 echo -e "\033[1m`gettext \nWrite filesystem\"`\033[0m
|
erjo@91
|
479 ==============================================================================="
|
erjo@91
|
480 gettext "The command writefs will write all the current filesystem into a suitable cpio
|
spode@0
|
481 archive (rootfs.gz) usable on a bootable LiveUSB media.
|
spode@0
|
482
|
spode@0
|
483 Archive compression: $COMPRESSION"
|
spode@0
|
484 echo ""
|
spode@0
|
485
|
MikeDSmith25@31
|
486 # Clear out tazpkg cache
|
spode@0
|
487 rm /var/cache/tazpkg/* -r -f
|
spode@0
|
488
|
MikeDSmith25@31
|
489 # Optionally remove sound card selection
|
erjo@91
|
490 gettext "Do you wish to remove the sound card selection (No/yes/exit) ? "
|
pankso@5
|
491 read anser
|
pankso@5
|
492 case $anser in
|
pankso@5
|
493 e|E|"exit"|Exit)
|
pankso@35
|
494 exit 0 ;;
|
pankso@5
|
495 y|Y|yes|Yes)
|
erjo@91
|
496 gettext "Removing current sound card selection..."
|
pankso@5
|
497 rm -f /var/lib/sound-card-driver
|
paul@80
|
498 rm -f /var/lib/alsa/asound.state ;;
|
pankso@5
|
499 *)
|
erjo@91
|
500 gettext "Keeping current sound card selection..." ;;
|
pankso@35
|
501 esac
|
pankso@35
|
502 status
|
pankso@35
|
503 # Optionally remove screen resolution
|
erjo@91
|
504 gettext "Do you wish to remove the screen resolution (No/yes/exit) ? "
|
pankso@35
|
505 read anser
|
pankso@35
|
506 case $anser in
|
pankso@35
|
507 e|E|"exit"|Exit)
|
pankso@35
|
508 exit 0 ;;
|
pankso@35
|
509 y|Y|yes|Yes)
|
erjo@91
|
510 gettext "Removing current screen resolution..."
|
pankso@35
|
511 rm -f /etc/X11/screen.conf ;;
|
pankso@35
|
512 *)
|
erjo@91
|
513 gettext "Keeping current screen resolution..." ;;
|
pankso@5
|
514 esac
|
spode@0
|
515 status
|
spode@0
|
516
|
MikeDSmith25@31
|
517 # Create list of files
|
pascal@27
|
518 find /bin /etc /init /sbin /var /dev /lib /root /usr >/tmp/list
|
spode@0
|
519
|
pascal@27
|
520 for dir in /home /proc /sys /tmp /mnt /media /media/cdrom /media/flash /media/usbdisk
|
spode@0
|
521 do
|
spode@0
|
522 echo $dir >>/tmp/list
|
spode@0
|
523 done
|
spode@0
|
524
|
MikeDSmith25@31
|
525 # Generate initramfs with specified compression
|
spode@0
|
526 if [ "$COMPRESSION" = "lzma" ]; then
|
erjo@91
|
527 gettext "Creating rootfs.gz with lzma compression... "
|
spode@0
|
528 cat /tmp/list | cpio -o -H newc | lzma e -si -so > /rootfs.gz
|
spode@0
|
529
|
spode@0
|
530 elif [ "$COMPRESSION" = "gzip" ]; then
|
erjo@91
|
531 gettext "Creating rootfs.gz with gzip compression... "
|
spode@0
|
532 cat /tmp/list | cpio -o -H newc | gzip -9 > /rootfs.gz
|
spode@0
|
533
|
spode@0
|
534 else
|
erjo@91
|
535 gettext "Creating rootfs.gz without compression... "
|
spode@0
|
536 cat /tmp/list | cpio -o -H newc > /rootfs.gz
|
spode@0
|
537 fi
|
spode@0
|
538
|
MikeDSmith25@31
|
539 # Get initramfs size
|
spode@0
|
540 size=`du -sh /rootfs.gz | cut -f 1`
|
spode@0
|
541
|
MikeDSmith25@31
|
542 # If the bootable medium is where it should be, copy across
|
spode@0
|
543 if (test -e /home/boot/bzImage); then
|
erjo@91
|
544 gettext "Moving rootfs.gz to media. Remember to unmount for delayed writes!"; echo ""
|
spode@0
|
545
|
MikeDSmith25@31
|
546 # Move the old filesystem with the unix timestamp for reference
|
spode@0
|
547 if (test -e /home/boot/previous.gz); then
|
spode@0
|
548 mv /home/boot/previous.gz /home/boot/rootfs.gz.$(date +%s)
|
spode@0
|
549 fi
|
spode@0
|
550
|
spode@0
|
551 mv /home/boot/rootfs.gz /home/boot/previous.gz
|
spode@0
|
552 mv /rootfs.gz /home/boot/.
|
spode@0
|
553 else
|
erjo@91
|
554 gettext "rootfs.gz is located in /"; echo ""
|
spode@0
|
555 fi
|
spode@0
|
556
|
spode@0
|
557 echo "==============================================================================="
|
erjo@91
|
558 gettext "Root filesystem size: $size"; echo ""
|
spode@0
|
559 echo ""
|
erjo@91
|
560 echo "----"
|
erjo@91
|
561 gettext "ENTER to continue..."; read i
|
spode@0
|
562 ;;
|
spode@0
|
563 format)
|
paul@54
|
564 # Format a partition.
|
spode@0
|
565 check_root
|
spode@0
|
566 echo ""
|
erjo@91
|
567 echo -e "\033[1m`gettext \"Format a device\"`\033[0m"
|
spode@0
|
568 echo "==============================================================================="
|
spode@0
|
569 DEVICE=$2
|
erjo@47
|
570 label=$3
|
erjo@47
|
571 fs_type=$4
|
spode@0
|
572 if [ -z $DEVICE ]; then
|
hacker@12
|
573 ask_for_device
|
hacker@12
|
574 check_for_device
|
hacker@12
|
575 else
|
hacker@12
|
576 echo "Device : $DEVICE"
|
spode@0
|
577 fi
|
erjo@47
|
578 test -z $fs_type && get_fs_type
|
paul@54
|
579 get_label
|
erjo@47
|
580 unmount_target_usb
|
erjo@47
|
581 make_fs "$fs_type"
|
paul@77
|
582 # mkfs_ext3
|
spode@0
|
583 echo "==============================================================================="
|
erjo@91
|
584 gettext "Device $label ($DEVICE) is ready to use as LiveUSB and/or /home partition."
|
spode@0
|
585 echo ""
|
spode@0
|
586 ;;
|
spode@0
|
587 gen-liveusb)
|
spode@0
|
588 # Generate a LiveUSB media using files from a LiveCD.
|
spode@0
|
589 check_root
|
spode@0
|
590 echo ""
|
erjo@91
|
591 echo -e "\033[1m`gettext \"Gen a LiveUSB media\"`\033[0m"
|
spode@0
|
592 echo "==============================================================================="
|
spode@0
|
593 DEVICE=$2
|
spode@0
|
594 if [ -z $DEVICE ]; then
|
hacker@12
|
595 ask_for_device
|
spode@0
|
596 fi
|
spode@0
|
597
|
spode@0
|
598 check_for_device
|
pankso@11
|
599 mount_cdrom
|
spode@0
|
600 get_part_info
|
spode@0
|
601 unmount_target_usb
|
spode@0
|
602 install_mbr
|
spode@0
|
603 set_bootable
|
spode@0
|
604 mount_target_usb
|
spode@0
|
605 copy_cdrom_files
|
spode@0
|
606 install_boot
|
spode@0
|
607 exit_or_reboot
|
spode@0
|
608 ;;
|
pankso@13
|
609 gen-swap)
|
pankso@13
|
610 check_root
|
pankso@13
|
611 gen_swap_file
|
pankso@13
|
612 ;;
|
erjo@47
|
613 gen-iso2usb|iso2usb)
|
erjo@24
|
614 check_root
|
erjo@24
|
615
|
erjo@24
|
616 # Check if file exists
|
erjo@24
|
617 ISO=$2
|
erjo@24
|
618 if [ -z $ISO ] || [ ! -f $ISO ]; then
|
erjo@91
|
619 gettext "Please specify a valid filename on the command line."; echo ""
|
erjo@24
|
620 exit 1
|
erjo@24
|
621 fi
|
erjo@24
|
622 echo ""
|
erjo@91
|
623 echo -e "\033[1m`gettext \"Copy ISO file to SliTaz LiveUSB media\"`\033[0m"
|
erjo@24
|
624 echo "==============================================================================="
|
erjo@24
|
625 echo ""
|
erjo@24
|
626 DEVICE=$3
|
erjo@24
|
627 if [ -z $DEVICE ]; then
|
erjo@24
|
628 ask_for_device
|
erjo@24
|
629 fi
|
erjo@24
|
630 check_for_device
|
erjo@24
|
631 mount_iso
|
erjo@24
|
632 get_part_info
|
erjo@24
|
633 unmount_target_usb
|
erjo@24
|
634 install_mbr
|
erjo@24
|
635 set_bootable
|
erjo@24
|
636 mount_target_usb
|
erjo@24
|
637 copy_cdrom_files
|
erjo@24
|
638 install_boot
|
pascal@83
|
639 umount /media/cdrom
|
pankso@66
|
640 losetup -d /dev/loop0
|
erjo@24
|
641 exit_or_reboot
|
paul@26
|
642 ;;
|
paul@26
|
643 clean)
|
paul@28
|
644 check_root
|
paul@28
|
645 clean_usb
|
paul@28
|
646 ;;
|
spode@0
|
647 usage|*)
|
spode@0
|
648 # Display usage by default.
|
spode@0
|
649 usage
|
spode@0
|
650 ;;
|
spode@0
|
651 esac
|
spode@0
|
652
|
spode@0
|
653 exit 0
|