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