tazusb annotate tazusb @ rev 102

Add 4in1 support and skip *.msg or *.lss file
author Eric Joseph-Alexandre <erjo@slitaz.org>
date Mon Feb 20 01:33:51 2012 +0100 (2012-02-20)
parents e1123d4a9a68
children 6de164926943
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@102 8 VERSION=3.0.2
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@102 268 gettext "Mounting "
erjo@94 269 echo "`basename $ISO`..."; echo ""
erjo@102 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
erjo@102 285 cp /media/cdrom/boot/rootfs*.gz $TARGET_ROOT/boot
erjo@102 286 #rem=0
erjo@102 287 #~ for i in $(ls /media/cdrom/boot/rootfs*.gz | sort -r); do
erjo@102 288 #~ [ $rem -ne 0 ] &&
erjo@102 289 #~ dd if=/dev/zero bs=1 count=$((4 - $rem)) 2> /dev/null
erjo@102 290 #~ cat $i
erjo@102 291 #~ rem=$(stat -c %s $i)
erjo@102 292 #~ rem=$(($rem % 4))
erjo@102 293 #~ done > $TARGET_ROOT/boot/rootfs.gz
spode@0 294 status
spode@0 295 }
spode@0 296
spode@0 297 install_mbr()
spode@0 298 {
spode@0 299 # MBR
pankso@11 300 DISK=${DEVICE%[1-99]}
pascal@22 301 if [ -f /usr/share/boot/mbr.bin ]; then
erjo@91 302 gettext "Installing a new MBR to: $DISK"
pascal@22 303 cat /usr/share/boot/mbr.bin > $DISK
spode@0 304 status
spode@0 305 else
spode@0 306 # Skip MBR install (tazpkg get-install syslinux-extra ? and then cat)
erjo@91 307 gettext "No new MBR installed to: $DISK"; echo ""
spode@0 308 fi
spode@0 309 }
spode@0 310
spode@0 311 # ext/syslinux install
spode@0 312 install_boot()
spode@0 313 {
MikeDSmith25@31 314 # Decide if we're installing syslinux or extlinux
spode@0 315 if [ "$FSTYPE" = "vfat" ]; then
spode@0 316 ST=syslinux
pascal@78 317 STC="syslinux --install -d /boot/syslinux/ $DEVICE"
spode@0 318 STE=cfg
spode@0 319 else
spode@0 320 ST=extlinux
spode@0 321 STC="extlinux --install $TARGET_ROOT/boot/$ST"
spode@0 322 STE=conf
spode@0 323 fi
spode@0 324
erjo@91 325 gettext "Installing bootloader: $ST"; echo ""
spode@0 326 mkdir -p $TARGET_ROOT/boot/$ST
spode@0 327 $STC
spode@0 328
erjo@23 329 # Use existing isolinux.cfg for extlinux.conf or syslinux.cfg
erjo@23 330 cp /media/cdrom/boot/isolinux/isolinux.cfg $TARGET_ROOT/boot/$ST/$ST.$STE
pascal@78 331 sed -i "s/isolinux.msg/$ST.msg/" $TARGET_ROOT/boot/$ST/$ST.$STE
erjo@23 332
pascal@90 333 # Update DVD autoinstall
pascal@90 334 sed -i "s/LABEL=packages-[^,]*/UUID=$UUID/g" $(grep -l append $TARGET_ROOT/boot/$ST/*)
pascal@90 335
MikeDSmith25@31 336 # Add home= to append in extlinux or syslinux.cfg
pascal@44 337 sed -i -e "s/\(append.*\)/\1 home=$UUID/" $(grep -l append $TARGET_ROOT/boot/$ST/*)
erjo@23 338
pankso@16 339 # Splash screen and help files.
erjo@102 340 if [ -f /media/cdrom/boot/isolinux/isolinux.msg ]; then
erjo@102 341 cp /media/cdrom/boot/isolinux/isolinux.msg $TARGET_ROOT/boot/$ST/$ST.msg
erjo@102 342 sed -i s/'SliTaz GNU\/Linux'/'SliTaz GNU\/Linux LiveUSB'/ $TARGET_ROOT/boot/$ST/$ST.msg
erjo@102 343 fi
erjo@102 344 if [ -f /media/cdrom/boot/isolinux/splash.lss ]; then
erjo@102 345 cp /media/cdrom/boot/isolinux/splash.lss $TARGET_ROOT/boot/$ST
erjo@102 346 fi
pankso@16 347 cp /media/cdrom/boot/isolinux/*.txt $TARGET_ROOT/boot/$ST
erjo@23 348 cp /media/cdrom/boot/isolinux/*.cfg $TARGET_ROOT/boot/$ST
erjo@23 349 cp /media/cdrom/boot/isolinux/*.kbd $TARGET_ROOT/boot/$ST
erjo@23 350 cp /media/cdrom/boot/isolinux/*.c32 $TARGET_ROOT/boot/$ST
erjo@23 351
erjo@23 352 # Modifing all cfg files.
erjo@23 353 for cfg in $TARGET_ROOT/boot/$ST/*.cfg
erjo@23 354 do
erjo@23 355 sed -i s/isolinux.msg/$ST.msg/ $cfg
erjo@23 356 done
erjo@23 357
MikeDSmith25@31 358 # Modifing include file if exists.
erjo@30 359 if [ -f $TARGET_ROOT/boot/$ST/common.inc ]; then
erjo@30 360 sed -i -e "s/isolinux.msg/$ST.msg/" $TARGET_ROOT/boot/$ST/common.inc
erjo@30 361 fi
erjo@23 362
pascal@78 363 # Un-meta-ize a multi-in-one flavor
pascal@79 364 if grep -qs "label slitaz" $TARGET_ROOT/boot/$ST/common.cfg ; then
pascal@79 365 sed -i "s/isolinux/$ST/;s/label slitaz/label multi/" $TARGET_ROOT/boot/$ST/common.cfg
erjo@102 366 if [ -f "$TARGET_ROOT/boot/$ST/$ST.msg" ]; then
erjo@102 367 sed -i 's/\(.*\), flavors.*/ \1/' \
erjo@102 368 $TARGET_ROOT/boot/$ST/$ST.msg
erjo@102 369 fi
pascal@79 370 for i in $TARGET_ROOT/boot/$ST/$ST.$STE \
pascal@79 371 $TARGET_ROOT/boot/$ST/??.$STE \
pascal@79 372 $TARGET_ROOT/boot/$ST/??_??.$STE; do
pascal@79 373 sed '/label /!d;/label /{s/label .*/\nlabel slitaz/;NN;s/rootfs..gz.*gz /rootfs.gz /;N;q}' \
pascal@79 374 < $i >> $i
pascal@79 375 done
pascal@79 376 fi
pascal@78 377
spode@0 378 }
spode@0 379
spode@0 380 # Let user exit or reboot.
spode@0 381 exit_or_reboot()
spode@0 382 {
pankso@16 383 echo "==============================================================================="
spode@0 384 echo ""
erjo@91 385 gettext "Do you want to exit Tazusb or reboot system (Exit/reboot) ? "
spode@0 386 read anser
spode@0 387 if [ "$anser" == "reboot" ]; then
spode@0 388 umount $TARGET_ROOT
spode@0 389 umount /media/cdrom
spode@0 390 reboot || reboot -f
spode@0 391 else
pankso@37 392 umount $TARGET_ROOT
spode@0 393 umount /media/cdrom
spode@0 394 echo ""
spode@0 395 exit 0
spode@0 396 fi
spode@0 397 }
spode@0 398
spode@0 399 set_bootable()
spode@0 400 {
spode@0 401 # As the boot flag is toggable, need to check it before hand
pankso@16 402 DISK=${DEVICE%[1-99]}
pankso@16 403 ISSET=`fdisk -l $DISK | grep $DEVICE | grep "\*"`
spode@0 404
spode@0 405 # If not set, set bootable
pankso@16 406 if [ "$ISSET" == "" ]; then
pankso@16 407 umount $TARGET_ROOT 2>/dev/null
erjo@91 408 gettext "Setting $DEVICE as bootable..."
pankso@16 409 fdisk $DISK >/dev/null << EOF
spode@0 410 a
spode@0 411 1
spode@0 412 w
spode@0 413 EOF
pankso@16 414 status
spode@0 415 fi
spode@0 416 }
spode@0 417
paul@41 418 # Generate a virtual swap file in /home/swap. SliTaz boot scripts
paul@41 419 # will activate it, useful for low memory systems
pankso@13 420 gen_swap_file()
pankso@13 421 {
pankso@13 422 echo ""
erjo@91 423 echo -en "\033[1m`gettext \"Gen swap\"`\033[0m
erjo@91 424 ==============================================================================="
erjo@91 425 gettext "Generate a swap file in /home/swap that will be activated on each boot to have
pankso@13 426 more memory available (Empty value to exit).
pankso@13 427
pankso@13 428 Swap file in Mb : "
pankso@13 429 read size
pankso@13 430 if [ -z "$size" ]; then
erjo@91 431 gettext "Empty value. Exiting..."; echo ""
pankso@13 432 exit 0
pankso@13 433 fi
pankso@13 434 cd /home
pankso@13 435 # Sanity check
pankso@13 436 if [ -f swap ]; then
pankso@13 437 swapoff swap 2>/dev/null
pankso@13 438 fi
pankso@13 439 # DD to gen a virtual disk.
pankso@13 440 dd if=/dev/zero of=swap bs=1M count=$size
pankso@13 441 # Make swap filesystem.
pankso@13 442 mkswap swap
pankso@13 443 swapon swap
pankso@13 444 echo ""
pankso@13 445 }
pankso@13 446
paul@26 447 # Clean out old backups to save disk space
paul@26 448 clean_usb()
paul@26 449 {
paul@26 450 echo ""
erjo@91 451 echo -en "\033[1m`gettext \"Clean\"`\033[0m
erjo@91 452 ==============================================================================="
erjo@91 453 gettext "Remove old rootfs.gz.unixtimestamp backup filesystems to free up disk space."; echo -e "\n\n"
MikeDSmith25@31 454 # Locate and interactively remove old filesystems from /home directory
paul@26 455 for file in `find /home/boot/rootfs.gz.[0-9]*`
paul@26 456 do
erjo@91 457 gettext "Do you wish to remove: `basename $file` (Yes/no/exit) ? "
paul@26 458 read answer
paul@26 459 case $answer in
paul@26 460 e|E|"exit"|Exit)
paul@26 461 exit 0 ;;
paul@26 462 y|Y|yes|Yes)
paul@26 463 rm -f $file ;;
paul@26 464 *)
erjo@91 465 gettext "No filesystems selected, exiting..." ; echo "" ;;
paul@26 466 esac
paul@26 467 done
paul@26 468 }
paul@26 469
spode@0 470 #
spode@0 471 # Tazusb sequence
spode@0 472 #
spode@0 473
spode@0 474 case $COMMAND in
spode@0 475 writefs)
MikeDSmith25@31 476 # Writefs to rootfs.gz
spode@0 477 check_root
spode@0 478 if [ -z $2 ]; then
spode@0 479 COMPRESSION=none
spode@0 480 else
spode@0 481 COMPRESSION=$2
spode@0 482 fi
MikeDSmith25@31 483 # Start info
spode@0 484 echo ""
erjo@91 485 echo -e "\033[1m`gettext \nWrite filesystem\"`\033[0m
erjo@91 486 ==============================================================================="
erjo@91 487 gettext "The command writefs will write all the current filesystem into a suitable cpio
spode@0 488 archive (rootfs.gz) usable on a bootable LiveUSB media.
spode@0 489
spode@0 490 Archive compression: $COMPRESSION"
spode@0 491 echo ""
spode@0 492
MikeDSmith25@31 493 # Clear out tazpkg cache
spode@0 494 rm /var/cache/tazpkg/* -r -f
spode@0 495
MikeDSmith25@31 496 # Optionally remove sound card selection
erjo@91 497 gettext "Do you wish to remove the sound card selection (No/yes/exit) ? "
pankso@5 498 read anser
pankso@5 499 case $anser in
pankso@5 500 e|E|"exit"|Exit)
pankso@35 501 exit 0 ;;
pankso@5 502 y|Y|yes|Yes)
erjo@91 503 gettext "Removing current sound card selection..."
pankso@5 504 rm -f /var/lib/sound-card-driver
paul@80 505 rm -f /var/lib/alsa/asound.state ;;
pankso@5 506 *)
erjo@91 507 gettext "Keeping current sound card selection..." ;;
pankso@35 508 esac
pankso@35 509 status
pankso@35 510 # Optionally remove screen resolution
erjo@91 511 gettext "Do you wish to remove the screen resolution (No/yes/exit) ? "
pankso@35 512 read anser
pankso@35 513 case $anser in
pankso@35 514 e|E|"exit"|Exit)
pankso@35 515 exit 0 ;;
pankso@35 516 y|Y|yes|Yes)
erjo@91 517 gettext "Removing current screen resolution..."
pankso@35 518 rm -f /etc/X11/screen.conf ;;
pankso@35 519 *)
erjo@91 520 gettext "Keeping current screen resolution..." ;;
pankso@5 521 esac
spode@0 522 status
spode@0 523
MikeDSmith25@31 524 # Create list of files
pascal@27 525 find /bin /etc /init /sbin /var /dev /lib /root /usr >/tmp/list
spode@0 526
pascal@27 527 for dir in /home /proc /sys /tmp /mnt /media /media/cdrom /media/flash /media/usbdisk
spode@0 528 do
spode@0 529 echo $dir >>/tmp/list
spode@0 530 done
spode@0 531
MikeDSmith25@31 532 # Generate initramfs with specified compression
spode@0 533 if [ "$COMPRESSION" = "lzma" ]; then
erjo@91 534 gettext "Creating rootfs.gz with lzma compression... "
spode@0 535 cat /tmp/list | cpio -o -H newc | lzma e -si -so > /rootfs.gz
spode@0 536
spode@0 537 elif [ "$COMPRESSION" = "gzip" ]; then
erjo@91 538 gettext "Creating rootfs.gz with gzip compression... "
spode@0 539 cat /tmp/list | cpio -o -H newc | gzip -9 > /rootfs.gz
spode@0 540
spode@0 541 else
erjo@91 542 gettext "Creating rootfs.gz without compression... "
spode@0 543 cat /tmp/list | cpio -o -H newc > /rootfs.gz
spode@0 544 fi
spode@0 545
MikeDSmith25@31 546 # Get initramfs size
spode@0 547 size=`du -sh /rootfs.gz | cut -f 1`
spode@0 548
MikeDSmith25@31 549 # If the bootable medium is where it should be, copy across
spode@0 550 if (test -e /home/boot/bzImage); then
erjo@91 551 gettext "Moving rootfs.gz to media. Remember to unmount for delayed writes!"; echo ""
spode@0 552
MikeDSmith25@31 553 # Move the old filesystem with the unix timestamp for reference
spode@0 554 if (test -e /home/boot/previous.gz); then
spode@0 555 mv /home/boot/previous.gz /home/boot/rootfs.gz.$(date +%s)
spode@0 556 fi
spode@0 557
spode@0 558 mv /home/boot/rootfs.gz /home/boot/previous.gz
spode@0 559 mv /rootfs.gz /home/boot/.
spode@0 560 else
erjo@91 561 gettext "rootfs.gz is located in /"; echo ""
spode@0 562 fi
spode@0 563
spode@0 564 echo "==============================================================================="
erjo@91 565 gettext "Root filesystem size: $size"; echo ""
spode@0 566 echo ""
erjo@91 567 echo "----"
erjo@91 568 gettext "ENTER to continue..."; read i
spode@0 569 ;;
spode@0 570 format)
paul@54 571 # Format a partition.
spode@0 572 check_root
spode@0 573 echo ""
erjo@91 574 echo -e "\033[1m`gettext \"Format a device\"`\033[0m"
spode@0 575 echo "==============================================================================="
spode@0 576 DEVICE=$2
erjo@47 577 label=$3
erjo@47 578 fs_type=$4
spode@0 579 if [ -z $DEVICE ]; then
hacker@12 580 ask_for_device
hacker@12 581 check_for_device
hacker@12 582 else
hacker@12 583 echo "Device : $DEVICE"
spode@0 584 fi
erjo@47 585 test -z $fs_type && get_fs_type
paul@54 586 get_label
erjo@47 587 unmount_target_usb
erjo@47 588 make_fs "$fs_type"
paul@77 589 # mkfs_ext3
spode@0 590 echo "==============================================================================="
erjo@91 591 gettext "Device $label ($DEVICE) is ready to use as LiveUSB and/or /home partition."
spode@0 592 echo ""
spode@0 593 ;;
spode@0 594 gen-liveusb)
spode@0 595 # Generate a LiveUSB media using files from a LiveCD.
spode@0 596 check_root
spode@0 597 echo ""
erjo@91 598 echo -e "\033[1m`gettext \"Gen a LiveUSB media\"`\033[0m"
spode@0 599 echo "==============================================================================="
spode@0 600 DEVICE=$2
spode@0 601 if [ -z $DEVICE ]; then
hacker@12 602 ask_for_device
spode@0 603 fi
spode@0 604
spode@0 605 check_for_device
pankso@11 606 mount_cdrom
spode@0 607 get_part_info
spode@0 608 unmount_target_usb
spode@0 609 install_mbr
spode@0 610 set_bootable
spode@0 611 mount_target_usb
spode@0 612 copy_cdrom_files
spode@0 613 install_boot
spode@0 614 exit_or_reboot
spode@0 615 ;;
pankso@13 616 gen-swap)
pankso@13 617 check_root
pankso@13 618 gen_swap_file
pankso@13 619 ;;
erjo@47 620 gen-iso2usb|iso2usb)
erjo@24 621 check_root
erjo@24 622
erjo@24 623 # Check if file exists
erjo@24 624 ISO=$2
erjo@24 625 if [ -z $ISO ] || [ ! -f $ISO ]; then
erjo@91 626 gettext "Please specify a valid filename on the command line."; echo ""
erjo@24 627 exit 1
erjo@24 628 fi
erjo@24 629 echo ""
erjo@91 630 echo -e "\033[1m`gettext \"Copy ISO file to SliTaz LiveUSB media\"`\033[0m"
erjo@24 631 echo "==============================================================================="
erjo@24 632 echo ""
erjo@24 633 DEVICE=$3
erjo@24 634 if [ -z $DEVICE ]; then
erjo@24 635 ask_for_device
erjo@24 636 fi
erjo@24 637 check_for_device
erjo@24 638 mount_iso
erjo@24 639 get_part_info
erjo@24 640 unmount_target_usb
erjo@24 641 install_mbr
erjo@24 642 set_bootable
erjo@24 643 mount_target_usb
erjo@24 644 copy_cdrom_files
erjo@24 645 install_boot
pascal@83 646 umount /media/cdrom
pankso@66 647 losetup -d /dev/loop0
erjo@24 648 exit_or_reboot
paul@26 649 ;;
paul@26 650 clean)
paul@28 651 check_root
paul@28 652 clean_usb
paul@28 653 ;;
spode@0 654 usage|*)
spode@0 655 # Display usage by default.
spode@0 656 usage
spode@0 657 ;;
spode@0 658 esac
spode@0 659
spode@0 660 exit 0