tazlito annotate tazlito @ rev 97
Prepa for release (2.0)
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Thu Apr 16 02:06:52 2009 +0200 (2009-04-16) |
parents | 27d126171d7f |
children | 68003451883c |
rev | line source |
---|---|
pankso@1 | 1 #!/bin/sh |
pankso@1 | 2 # TazLito - SliTaz Live Tool. |
pankso@1 | 3 # |
MikeDSmith25@83 | 4 # Tazlito is a tool to help generate and configure SliTaz LiveCD |
MikeDSmith25@83 | 5 # ISO images. You can create a custom distro in one command from a list of |
MikeDSmith25@83 | 6 # packages, extract an existing ISO image to hack it, create a new initramfs |
MikeDSmith25@83 | 7 # and/or a new ISO. Most commands must be run by root, except the stats |
pankso@1 | 8 # and the configuration file manipulation. |
pankso@1 | 9 # |
pankso@92 | 10 # (C) 2007-2009 SliTaz - GNU General Public License. |
pankso@1 | 11 # |
pankso@28 | 12 # Authors : Christophe Lincoln <pankso@slitaz.org> |
pankso@28 | 13 # Pascal Bellard <pascal.bellard@slitaz.org> |
pankso@28 | 14 # |
pankso@97 | 15 VERSION=2.0 |
pankso@1 | 16 |
pankso@1 | 17 # Tazlito configuration variables to be shorter |
paul@94 | 18 # and to use words rather than numbers. |
pankso@1 | 19 COMMAND=$1 |
pankso@1 | 20 LIST_NAME=$2 |
pankso@1 | 21 TMP_DIR=/tmp/tazlito-$$-$RANDOM |
pascal@19 | 22 TMP_MNT=/media/tazlito-$$-$RANDOM |
pankso@1 | 23 TOP_DIR=`pwd` |
pankso@1 | 24 INITRAMFS=rootfs.gz |
pascal@11 | 25 LOCALSTATE=/var/lib/tazpkg |
pascal@11 | 26 INSTALLED=$LOCALSTATE/installed |
pascal@12 | 27 CACHE_DIR=/var/cache/tazpkg |
pascal@12 | 28 MIRROR=$LOCALSTATE/mirror |
pascal@85 | 29 DEFAULT_MIRROR="http://mirror.slitaz.org/packages/`cat /etc/slitaz-release`/" |
pankso@1 | 30 |
pankso@1 | 31 # Try to include config file, continue if command is gen-config or exit. |
pankso@4 | 32 # The main config used by default is in /etc/tazlito. |
pankso@4 | 33 if [ -f "/etc/tazlito/tazlito.conf" ] ; then |
pankso@4 | 34 CONFIG_FILE="/etc/tazlito/tazlito.conf" |
pankso@1 | 35 fi |
pankso@1 | 36 # Specific distro config file can be put in a distro tree. |
pankso@1 | 37 if [ -f "$TOP_DIR/tazlito.conf" ] ; then |
pankso@1 | 38 CONFIG_FILE="$TOP_DIR/tazlito.conf" |
pankso@1 | 39 fi |
pankso@1 | 40 if [ ! "$CONFIG_FILE" = "" ] ; then |
pankso@1 | 41 . $CONFIG_FILE |
pankso@1 | 42 else |
pankso@1 | 43 if [ "$COMMAND" = "gen-config" ] ; then |
pankso@1 | 44 continue |
pankso@1 | 45 else |
pankso@1 | 46 echo "Unable to find any configuration file. Please read the doc" |
pankso@1 | 47 echo "or run '`basename $0` gen-config' to get an empty config file." |
pankso@1 | 48 exit 0 |
pankso@1 | 49 fi |
pankso@1 | 50 fi |
pankso@1 | 51 |
pankso@49 | 52 # While Tazpkg is not used the default mirror url file does not exist |
pankso@49 | 53 # and user can't recharge the list of flavors. |
pankso@49 | 54 if test $(id -u) = 0 ; then |
pankso@49 | 55 if [ ! -f "$MIRROR" ]; then |
pankso@49 | 56 echo "$DEFAULT_MIRROR" > $MIRROR |
pankso@49 | 57 fi |
pankso@49 | 58 fi |
pankso@49 | 59 |
pankso@1 | 60 # Set the rootfs and rootcd path with $DISTRO |
pankso@1 | 61 # configuration variable. |
pankso@1 | 62 ROOTFS=$DISTRO/rootfs |
pankso@1 | 63 ROOTCD=$DISTRO/rootcd |
pankso@1 | 64 |
pankso@1 | 65 ##################### |
pankso@1 | 66 # Tazlito functions # |
pankso@1 | 67 ##################### |
pankso@1 | 68 |
pankso@1 | 69 # Print the usage. |
pankso@1 | 70 usage () |
pankso@1 | 71 { |
pankso@1 | 72 echo -e "\nSliTaz Live Tool - Version: $VERSION\n |
pascal@22 | 73 \033[1mUsage: \033[0m `basename $0` [command] [list|iso|flavor] [dir] |
pankso@1 | 74 \033[1mCommands: \033[0m\n |
pankso@1 | 75 usage Print this short usage. |
pankso@1 | 76 stats View Tazlito and distro configuration statistics. |
pankso@1 | 77 gen-config Generate a new configuration file for a distro. |
pankso@1 | 78 configure Configure the main config file or a specific tazlito.conf. |
pankso@1 | 79 gen-iso Generate a new ISO from a distro tree. |
pankso@1 | 80 gen-initiso Generate a new initramfs and ISO from the distro tree. |
pascal@22 | 81 list-flavors List all available package lists on the mirror. |
pascal@22 | 82 gen-flavor Generate a new live-CD description. |
pascal@60 | 83 gen-liveflavor Generate a live-CD description from current system. |
pascal@22 | 84 show-flavor Show live-CD description. |
pascal@22 | 85 get-flavor Get a flavor's list of packages. |
pankso@92 | 86 check-list Check a distro-packages.list for updates. |
MikeDSmith25@83 | 87 extract-distro Extract an ISO to a directory and rebuild LiveCD tree. |
paul@94 | 88 gen-distro Generate a Live distro and ISO from a list of packages. |
pankso@1 | 89 clean-distro Remove all files generated by gen-distro. |
pankso@1 | 90 check-distro Help to check if distro is ready to release. |
pankso@1 | 91 burn-iso Burn ISO image to a cdrom using Wodim.\n" |
pankso@1 | 92 } |
pankso@1 | 93 |
pankso@1 | 94 # Status function. |
pankso@1 | 95 status() |
pankso@1 | 96 { |
pankso@1 | 97 local CHECK=$? |
pankso@1 | 98 echo -en "\\033[70G[ " |
pankso@1 | 99 if [ $CHECK = 0 ]; then |
pankso@1 | 100 echo -en "\\033[1;33mOK" |
pankso@1 | 101 else |
pankso@1 | 102 echo -en "\\033[1;31mFailed" |
pankso@1 | 103 fi |
pankso@1 | 104 echo -e "\\033[0;39m ]" |
pankso@1 | 105 } |
pascal@12 | 106 |
pascal@12 | 107 yesorno() |
pascal@12 | 108 { |
pascal@12 | 109 echo -n "$1" |
pascal@12 | 110 case "$DEFAULT_ANSWER" in |
pascal@12 | 111 Y|y) answer="y";; |
pascal@12 | 112 N|n) answer="n";; |
pascal@12 | 113 *) read answer;; |
pascal@12 | 114 esac |
pascal@12 | 115 } |
pascal@12 | 116 |
pascal@22 | 117 field() |
pascal@22 | 118 { |
pascal@22 | 119 grep "^$1" "$2" | sed 's/.*: \([0-9KMG\.]*\).*/\1/' |
pascal@22 | 120 } |
pascal@22 | 121 |
pankso@1 | 122 todomsg() |
pankso@1 | 123 { |
pankso@1 | 124 echo -e "\\033[70G[ \\033[1;31mTODO\\033[0;39m ]" |
pankso@1 | 125 } |
pankso@1 | 126 |
pascal@86 | 127 # Download a file from this mirror |
pascal@86 | 128 download_from() |
pascal@86 | 129 { |
pascal@86 | 130 local i |
pascal@86 | 131 local mirrors |
pascal@86 | 132 mirrors="$1" |
pascal@86 | 133 shift |
pascal@86 | 134 for i in $mirrors; do |
pascal@86 | 135 case "$i" in |
pascal@86 | 136 http://*|ftp://*) wget -c $i$@ && break;; |
pascal@86 | 137 *) cp $i/$1 . && break;; |
pascal@86 | 138 esac |
pascal@86 | 139 done |
pascal@86 | 140 } |
pascal@86 | 141 |
pascal@86 | 142 # Download a file trying all mirrors |
pascal@12 | 143 download() |
pascal@12 | 144 { |
pascal@86 | 145 local i |
pascal@86 | 146 for i in $(cat $MIRROR $LOCALSTATE/undigest/*/mirror 2> /dev/null); do |
pascal@86 | 147 download_from "$i" "$@" && break |
pascal@12 | 148 done |
pascal@12 | 149 } |
pascal@12 | 150 |
MikeDSmith25@83 | 151 # Execute hooks provided by some packages |
pascal@13 | 152 genisohooks() |
pascal@13 | 153 { |
pascal@13 | 154 local here=`pwd` |
pascal@13 | 155 cd $ROOTFS |
pascal@13 | 156 for i in $(ls etc/tazlito/*.$1 2> /dev/null); do |
pascal@13 | 157 . $i $ROOTCD |
pascal@13 | 158 done |
pascal@13 | 159 cd $here |
pascal@13 | 160 } |
pascal@13 | 161 |
pascal@19 | 162 cleanup() |
pascal@19 | 163 { |
pascal@19 | 164 if [ -d $TMP_MNT ]; then |
pascal@19 | 165 umount $TMP_MNT |
pascal@19 | 166 rmdir $TMP_MNT |
pascal@19 | 167 rm -f /boot |
pascal@19 | 168 fi |
pascal@19 | 169 } |
pascal@19 | 170 |
MikeDSmith25@83 | 171 # Echo the package name if the tazpkg is already installed |
pascal@18 | 172 installed_package_name() |
pascal@18 | 173 { |
pascal@18 | 174 local tazpkg |
pascal@18 | 175 local package |
pascal@18 | 176 local VERSION |
pascal@78 | 177 local EXTRAVERSION |
pascal@18 | 178 tazpkg=$1 |
MikeDSmith25@83 | 179 # Try to find package name and version to be able |
pascal@18 | 180 # to repack it from installation |
MikeDSmith25@83 | 181 # A dash (-) can exist in name *and* in version |
pascal@18 | 182 package=${tazpkg%-*} |
pascal@18 | 183 i=$package |
pascal@18 | 184 while true; do |
pascal@18 | 185 VERSION="" |
pascal@18 | 186 eval $(grep -s ^VERSION= $INSTALLED/$i/receipt) |
pascal@78 | 187 EXTRAVERSION="" |
pascal@78 | 188 eval $(grep -s ^EXTRAVERSION= $INSTALLED/$i/receipt) |
pascal@78 | 189 if [ "$i-$VERSION$EXTRAVERSION" = "$tazpkg" ]; then |
pascal@18 | 190 echo $i |
pascal@18 | 191 break |
pascal@18 | 192 fi |
pascal@18 | 193 case "$i" in |
pascal@18 | 194 *-*);; |
pascal@18 | 195 *) break;; |
pascal@18 | 196 esac |
pascal@18 | 197 i=${i%-*} |
pascal@18 | 198 done |
pascal@18 | 199 } |
pascal@18 | 200 |
pankso@1 | 201 # Check if user is root. |
pankso@1 | 202 check_root() |
pankso@1 | 203 { |
pankso@1 | 204 if test $(id -u) != 0 ; then |
pankso@1 | 205 echo -e "\nYou must be root to run `basename $0` with this option." |
pankso@1 | 206 echo -e "Please type 'su' and root password to become super-user.\n" |
pankso@1 | 207 exit 0 |
pankso@1 | 208 fi |
pankso@1 | 209 } |
pankso@1 | 210 |
pascal@11 | 211 # Check for the rootfs tree. |
pascal@11 | 212 check_rootfs() |
pascal@11 | 213 { |
pascal@13 | 214 if [ ! -d "$ROOTFS/etc" ] ; then |
pascal@13 | 215 echo -e "\nUnable to find a distro rootfs...\n" |
pascal@11 | 216 exit 0 |
pascal@11 | 217 fi |
pascal@11 | 218 } |
pascal@11 | 219 |
pankso@1 | 220 # Check for the boot dir into the root CD tree. |
pankso@1 | 221 verify_rootcd() |
pankso@1 | 222 { |
pankso@1 | 223 if [ ! -d "$ROOTCD/boot" ] ; then |
pankso@1 | 224 echo -e "\nUnable to find the rootcd boot directory...\n" |
pankso@1 | 225 exit 0 |
pankso@1 | 226 fi |
pankso@1 | 227 } |
pankso@1 | 228 |
MikeDSmith25@83 | 229 # Generate a new ISO image using isolinux. |
pankso@1 | 230 gen_livecd_isolinux() |
pankso@1 | 231 { |
pascal@13 | 232 # Some packages may want to alter iso |
pascal@13 | 233 genisohooks iso |
pankso@35 | 234 if [ ! -f "$ROOTCD/boot/isolinux/isolinux.bin" ]; then |
pankso@1 | 235 echo -e "\nUnable to find isolinux binary.\n" |
pascal@19 | 236 cleanup |
pankso@1 | 237 exit 0 |
pankso@1 | 238 fi |
pankso@35 | 239 # Set date for boot msg. |
pankso@35 | 240 if grep -q 'XXXXXXXX' $ROOTCD/boot/isolinux/isolinux.msg; then |
pankso@35 | 241 DATE=`date +%Y%m%d` |
pascal@56 | 242 echo -n "Setting build date to: $DATE..." |
pankso@35 | 243 sed -i s/'XXXXXXXX'/"$DATE"/ $ROOTCD/boot/isolinux/isolinux.msg |
pankso@35 | 244 status |
pankso@35 | 245 fi |
pascal@51 | 246 cd $ROOTCD |
pascal@51 | 247 echo -n "Computing md5..." |
pascal@66 | 248 find * -type f ! -name md5sum -exec md5sum {} \; > md5sum |
pascal@51 | 249 status |
pankso@1 | 250 cd $DISTRO |
pankso@1 | 251 echo "" |
pankso@1 | 252 echo -e "\033[1mGenerating ISO image\033[0m" |
pankso@1 | 253 echo "================================================================================" |
pankso@1 | 254 genisoimage -R -o $ISO_NAME.iso -b boot/isolinux/isolinux.bin \ |
pankso@1 | 255 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ |
pankso@1 | 256 -V "$VOLUM_NAME" -p "$PREPARED" -input-charset iso8859-1 \ |
pankso@1 | 257 -boot-info-table $ROOTCD |
pascal@91 | 258 if [ -x /usr/bin/isohybrid ]; then |
pascal@91 | 259 echo -n "Create hybrid ISO..." |
pascal@91 | 260 /usr/bin/isohybrid $ISO_NAME.iso 2> /dev/null |
pascal@91 | 261 status |
pascal@91 | 262 fi |
pankso@53 | 263 echo -n "Creating the ISO md5sum..." |
pankso@53 | 264 md5sum $ISO_NAME.iso > $ISO_NAME.md5 |
pankso@53 | 265 status |
pankso@1 | 266 echo "================================================================================" |
pascal@37 | 267 # Some packages may want to alter final iso |
pascal@37 | 268 genisohooks final |
pankso@1 | 269 } |
pankso@1 | 270 |
paul@94 | 271 # Generate a new initramfs from the root filesystem. |
pankso@1 | 272 gen_initramfs() |
pankso@1 | 273 { |
pascal@56 | 274 # Just in case CTRL+c |
pascal@56 | 275 rm -f $DISTRO/gen |
pascal@13 | 276 # Some packages may want to alter rootfs |
pascal@13 | 277 genisohooks rootfs |
pankso@1 | 278 cd $ROOTFS |
pankso@1 | 279 echo "" |
pascal@57 | 280 |
pascal@57 | 281 # Link duplicate files |
pascal@69 | 282 find . -type f -size +0c -exec stat -c '%s-%a-%u-%g %i %h %n' {} \; | \ |
pascal@69 | 283 sort | ( save=0; old_attr=""; old_inode=""; old_link=""; old_file="" |
pascal@69 | 284 while read attr inode link file; do |
pascal@69 | 285 if [ "$attr" = "$old_attr" -a "$inode" != "$old_inode" ]; then |
pascal@57 | 286 if cmp "$file" "$old_file" >/dev/null; then |
pascal@57 | 287 rm -f "$file" |
pascal@57 | 288 ln "$old_file" "$file" |
pascal@70 | 289 inode="$old_inode" |
pascal@69 | 290 [ "$link" = "1" ] && save="$(expr $save + ${attr%%-*})" |
pascal@57 | 291 fi |
pascal@57 | 292 fi |
pascal@69 | 293 old_attr="$attr" ; old_inode="$inode" ; old_file="$file" |
pascal@59 | 294 done |
pascal@59 | 295 echo "$save bytes saved in duplicate files." |
pascal@59 | 296 ) |
pascal@69 | 297 |
pankso@7 | 298 # Use lzma if installed |
pascal@34 | 299 if [ "$COMPRESSION" = "none" ]; then |
pascal@34 | 300 echo -n "Generating uncompressed initramfs... " |
pascal@34 | 301 find . -print | cpio -o -H newc > $DISTRO/$INITRAMFS |
pascal@34 | 302 elif [ -x /usr/bin/lzma -a "$COMPRESSION" != "gzip" ]; then |
pascal@14 | 303 echo -n "Generating lzma'ed initramfs... " |
pascal@72 | 304 find . -print | cpio -o -H newc | lzma e -si -so -d24 > $DISTRO/$INITRAMFS |
pankso@7 | 305 else |
pankso@7 | 306 echo -n "Generating gziped initramfs... " |
pankso@7 | 307 find . -print | cpio -o -H newc | gzip -9 > $DISTRO/$INITRAMFS |
pankso@7 | 308 fi |
pascal@14 | 309 cd $DISTRO |
pascal@14 | 310 mv $INITRAMFS $ROOTCD/boot |
pankso@1 | 311 } |
pankso@1 | 312 |
pascal@22 | 313 distro_sizes() |
pankso@1 | 314 { |
pankso@1 | 315 echo "Build date : `date +%Y%m%d\ \at\ \%H:%M:%S`" |
pascal@19 | 316 echo "Packages : `ls -1 $ROOTFS$INSTALLED | wc -l`" |
pankso@95 | 317 echo "Rootfs size : `du -sh $ROOTFS | awk '{ print $1 }'`" |
pankso@95 | 318 echo "Initramfs size : `du -sh $ROOTCD/boot/$INITRAMFS | awk '{ print $1 }'`" |
pankso@95 | 319 echo "ISO image size : `du -sh $ISO_NAME.iso | awk '{ print $1 }'`" |
pankso@1 | 320 echo "================================================================================" |
pankso@95 | 321 echo "Image is ready: $ISO_NAME.iso" |
pankso@1 | 322 echo "" |
pankso@1 | 323 } |
pankso@1 | 324 |
pascal@22 | 325 # Print ISO and rootfs size. |
pascal@22 | 326 distro_stats() |
pascal@22 | 327 { |
pascal@22 | 328 echo "" |
pankso@95 | 329 echo -e "\033[1mDistro statistics\033[0m ($DISTRO)" |
pascal@22 | 330 echo "================================================================================" |
pascal@22 | 331 distro_sizes |
pascal@22 | 332 } |
pascal@22 | 333 |
MikeDSmith25@83 | 334 # Create an empty configuration file. |
pankso@1 | 335 empty_config_file() |
pankso@1 | 336 { |
pankso@1 | 337 cat >> tazlito.conf << "EOF" |
pankso@1 | 338 # tazlito.conf: Tazlito (SliTaz Live Tool) |
pankso@1 | 339 # configuration file. |
pankso@1 | 340 # |
pankso@1 | 341 |
pankso@1 | 342 # Name of the ISO image to generate. |
pankso@1 | 343 ISO_NAME="" |
pankso@1 | 344 |
MikeDSmith25@83 | 345 # ISO image volume name. |
pankso@1 | 346 VOLUM_NAME="SliTaz" |
pankso@1 | 347 |
MikeDSmith25@83 | 348 # Name of the preparer. |
pankso@1 | 349 PREPARED="$USER" |
pankso@1 | 350 |
pankso@1 | 351 # Path to the packages repository and the packages.list. |
pankso@1 | 352 PACKAGES_REPOSITORY="" |
pankso@1 | 353 |
pankso@1 | 354 # Path to the distro tree to gen-distro from a |
pankso@1 | 355 # list of packages. |
pankso@1 | 356 DISTRO="" |
pankso@1 | 357 |
MikeDSmith25@83 | 358 # Path to the directory containing additional files |
pankso@1 | 359 # to copy into the rootfs and rootcd of the LiveCD. |
pankso@1 | 360 ADDFILES="$DISTRO/addfiles" |
pascal@12 | 361 |
pascal@12 | 362 # Default answer for binary question (Y or N) |
pascal@12 | 363 DEFAULT_ANSWER="ASK" |
pascal@21 | 364 |
pascal@38 | 365 # Compression utility (lzma, gzip or none) |
pascal@21 | 366 COMPRESSION="lzma" |
pankso@1 | 367 EOF |
pankso@1 | 368 } |
pankso@1 | 369 |
pankso@1 | 370 #################### |
pankso@1 | 371 # Tazlito commands # |
pankso@1 | 372 #################### |
pankso@1 | 373 |
pankso@1 | 374 case "$COMMAND" in |
pankso@1 | 375 stats) |
pankso@1 | 376 # Tazlito general statistics from the config file. |
pankso@1 | 377 # |
pankso@1 | 378 echo "" |
pankso@1 | 379 echo -e "\033[1mTazlito statistics\033[0m |
pankso@1 | 380 =============================================================================== |
pankso@1 | 381 Config file : $CONFIG_FILE |
pankso@1 | 382 ISO name : $ISO_NAME.iso |
paul@94 | 383 Volume name : $VOLUM_NAME |
pankso@1 | 384 Prepared : $PREPARED |
pankso@1 | 385 Packages repository : $PACKAGES_REPOSITORY |
pankso@1 | 386 Distro directory : $DISTRO" |
pankso@1 | 387 if [ ! "$ADDFILES" = "" ] ; then |
pankso@1 | 388 echo -e "Additional files : $ADDFILES" |
pankso@1 | 389 fi |
pankso@1 | 390 echo "================================================================================" |
pankso@1 | 391 echo "" |
pankso@1 | 392 ;; |
pankso@1 | 393 gen-config) |
MikeDSmith25@83 | 394 # Generate a new config file in the current dir or the specified |
pankso@1 | 395 # directory by $2. |
pankso@1 | 396 # |
pankso@1 | 397 if [ -n "$2" ] ; then |
pankso@1 | 398 mkdir -p $2 && cd $2 |
pankso@1 | 399 fi |
pankso@1 | 400 echo -n "Generating empty tazlito.conf..." |
pankso@1 | 401 empty_config_file |
pankso@1 | 402 status |
pankso@1 | 403 echo "" |
pankso@1 | 404 if [ -f "tazlito.conf" ] ; then |
pankso@1 | 405 echo "Configuration file is ready to edit." |
pankso@1 | 406 echo "File location : `pwd`/tazlito.conf" |
pankso@1 | 407 echo "" |
pankso@1 | 408 fi |
pankso@1 | 409 ;; |
pankso@1 | 410 configure) |
pankso@1 | 411 # Configure a tazlito.conf config file. Start by getting |
pankso@1 | 412 # a empty config file and sed it. |
pankso@1 | 413 # |
pankso@1 | 414 if [ -f "tazlito.conf" ] ; then |
pankso@1 | 415 rm tazlito.conf |
pankso@1 | 416 else |
pankso@1 | 417 if test $(id -u) = 0 ; then |
pankso@1 | 418 cd /etc |
pankso@1 | 419 else |
pankso@1 | 420 echo "You must be root to configure the main config file or in" |
pankso@1 | 421 echo "the same directory of the file you want to configure." |
pankso@1 | 422 exit 0 |
pankso@1 | 423 fi |
pankso@1 | 424 fi |
pankso@1 | 425 empty_config_file |
pankso@1 | 426 echo"" |
pankso@1 | 427 echo -e "\033[1mConfiguring :\033[0m `pwd`/tazlito.conf" |
pankso@1 | 428 echo "================================================================================" |
pankso@1 | 429 # ISO name. |
pascal@11 | 430 echo -n "ISO name : " ; read answer |
pascal@11 | 431 sed -i s#'ISO_NAME=\"\"'#"ISO_NAME=\"$answer\""# tazlito.conf |
pascal@14 | 432 # Volume name. |
pascal@14 | 433 echo -n "Volume name : " ; read answer |
pascal@11 | 434 sed -i s/'VOLUM_NAME=\"SliTaz\"'/"VOLUM_NAME=\"$answer\""/ tazlito.conf |
pankso@1 | 435 # Packages repository. |
pascal@11 | 436 echo -n "Packages repository : " ; read answer |
pascal@11 | 437 sed -i s#'PACKAGES_REPOSITORY=\"\"'#"PACKAGES_REPOSITORY=\"$answer\""# tazlito.conf |
pankso@1 | 438 # Distro path. |
pascal@11 | 439 echo -n "Distro path : " ; read answer |
pascal@11 | 440 sed -i s#'DISTRO=\"\"'#"DISTRO=\"$answer\""# tazlito.conf |
pankso@1 | 441 echo "================================================================================" |
pankso@1 | 442 echo "Config file is ready to use." |
pankso@1 | 443 echo "You can now extract an ISO or generate a distro." |
pankso@1 | 444 echo "" |
pankso@1 | 445 ;; |
pankso@1 | 446 gen-iso) |
paul@94 | 447 # Simply generate a new iso. |
pankso@1 | 448 # |
pankso@1 | 449 check_root |
pankso@1 | 450 verify_rootcd |
pankso@1 | 451 gen_livecd_isolinux |
pankso@1 | 452 distro_stats |
pankso@1 | 453 ;; |
pankso@1 | 454 gen-initiso) |
paul@94 | 455 # Simply generate a new initramfs with a new iso. |
pankso@1 | 456 # |
pankso@1 | 457 check_root |
pankso@1 | 458 verify_rootcd |
pankso@1 | 459 gen_initramfs |
pankso@1 | 460 gen_livecd_isolinux |
pankso@1 | 461 distro_stats |
pankso@1 | 462 ;; |
pankso@1 | 463 extract-distro) |
MikeDSmith25@83 | 464 # Extract an ISO image to a directory and rebuild the LiveCD tree. |
pankso@1 | 465 # |
pankso@1 | 466 check_root |
pankso@1 | 467 ISO_IMAGE=$2 |
pankso@1 | 468 if [ -z "$ISO_IMAGE" ] ; then |
pankso@1 | 469 echo -e "\nPlease specify the path to the ISO image." |
pankso@1 | 470 echo -e "Example : `basename $0` image.iso /path/target\n" |
pankso@1 | 471 exit 0 |
pankso@1 | 472 fi |
pankso@1 | 473 # Set the distro path by checking for $3 on cmdline. |
pankso@1 | 474 if [ -n "$3" ] ; then |
pankso@1 | 475 TARGET=$3 |
pankso@1 | 476 else |
pankso@1 | 477 TARGET=$DISTRO |
pankso@1 | 478 fi |
pankso@1 | 479 # Exit if existing distro is found. |
pankso@1 | 480 if [ -d "$TARGET/rootfs" ] ; then |
paul@94 | 481 echo -e "\nA rootfs exists in : $TARGET" |
pankso@1 | 482 echo -e "Please clean the distro tree or change directory path.\n" |
pankso@1 | 483 exit 0 |
pankso@1 | 484 fi |
pankso@1 | 485 echo "" |
erjo@84 | 486 echo -e "\033[1mTazlito extracting :\033[0m `basename $ISO_IMAGE`" |
pankso@1 | 487 echo "================================================================================" |
pankso@1 | 488 # Start to mount the ISO. |
pankso@1 | 489 echo "" |
pankso@1 | 490 echo "Mounting ISO image..." |
pankso@1 | 491 mkdir -p $TMP_DIR |
pankso@1 | 492 # Get ISO file size. |
erjo@84 | 493 isosize=`du -sh $ISO_IMAGE | cut -f1` |
pankso@1 | 494 mount -o loop $ISO_IMAGE $TMP_DIR |
pankso@1 | 495 sleep 2 |
pankso@1 | 496 # Prepare target dir, copy the kernel and the rootfs. |
pankso@1 | 497 mkdir -p $TARGET/rootfs |
pankso@1 | 498 mkdir -p $TARGET/rootcd/boot |
pankso@1 | 499 echo -n "Copying the Linux kernel..." |
pascal@16 | 500 if cp $TMP_DIR/boot/vmlinuz* $TARGET/rootcd/boot 2> /dev/null; then |
pascal@20 | 501 ln $TARGET/rootcd/boot/vmlinuz* $TARGET/rootcd/boot/bzImage |
pascal@16 | 502 else |
pascal@16 | 503 cp $TMP_DIR/boot/bzImage $TARGET/rootcd/boot |
pascal@16 | 504 fi |
pankso@1 | 505 status |
pankso@1 | 506 echo -n "Copying isolinux files..." |
pankso@1 | 507 cp -a $TMP_DIR/boot/isolinux $TARGET/rootcd/boot |
pascal@41 | 508 for i in $(ls $TMP_DIR); do |
pascal@41 | 509 [ "$i" = "boot" ] && continue |
pascal@41 | 510 cp -a $TMP_DIR/$i $TARGET/rootcd |
pascal@41 | 511 done |
pankso@1 | 512 status |
erjo@31 | 513 if [ -d $TMP_DIR/boot/syslinux ]; then |
erjo@33 | 514 echo -n "Copying syslinux files..." |
erjo@31 | 515 cp -a $TMP_DIR/boot/syslinux $TARGET/rootcd/boot |
erjo@31 | 516 status |
erjo@31 | 517 fi |
erjo@31 | 518 if [ -d $TMP_DIR/boot/extlinux ]; then |
erjo@33 | 519 echo -n "Copying extlinux files..." |
erjo@31 | 520 cp -a $TMP_DIR/boot/extlinux $TARGET/rootcd/boot |
erjo@31 | 521 status |
erjo@31 | 522 fi |
erjo@31 | 523 if [ -d $TMP_DIR/boot/grub ]; then |
erjo@33 | 524 echo -n "Copying GRUB files..." |
erjo@31 | 525 cp -a $TMP_DIR/boot/grub $TARGET/rootcd/boot |
erjo@31 | 526 status |
erjo@31 | 527 fi |
erjo@31 | 528 |
pankso@1 | 529 echo -n "Copying the rootfs..." |
pascal@11 | 530 cp $TMP_DIR/boot/rootfs.?z $TARGET/rootcd/boot |
pankso@1 | 531 status |
paul@94 | 532 # Extract initramfs. |
pankso@1 | 533 cd $TARGET/rootfs |
pankso@1 | 534 echo -n "Extracting the rootfs... " |
pascal@11 | 535 ( zcat ../rootcd/boot/rootfs.gz 2>/dev/null || \ |
pascal@38 | 536 lzma d ../rootcd/boot/rootfs.?z -so 2>/dev/null || \ |
pascal@38 | 537 cat ../rootcd/boot/rootfs.gz ) | cpio -id |
pascal@38 | 538 # unpack /usr |
pascal@48 | 539 for i in etc/tazlito/*.extract; do |
pascal@50 | 540 [ -f "$i" ] && . $i ../rootcd |
pascal@48 | 541 done |
pankso@1 | 542 # Umount and remove temp directory and cd to $TARGET to get stats. |
pankso@1 | 543 umount $TMP_DIR && rm -rf $TMP_DIR |
pankso@1 | 544 cd .. |
pankso@1 | 545 echo "" |
pankso@1 | 546 echo "================================================================================" |
erjo@84 | 547 echo "Extracted : `basename $ISO_IMAGE` ($isosize)" |
pankso@1 | 548 echo "Distro tree : `pwd`" |
pankso@1 | 549 echo "Rootfs size : `du -sh rootfs`" |
pankso@1 | 550 echo "Rootcd size : `du -sh rootcd`" |
pankso@1 | 551 echo "================================================================================" |
pankso@1 | 552 echo "" |
pankso@1 | 553 ;; |
pascal@22 | 554 list-flavors) |
pascal@22 | 555 # Show available flavors. |
pascal@22 | 556 if [ ! -s /etc/tazlito/flavors.list -o "$2" == "--recharge" ]; then |
pascal@22 | 557 download flavors.list -O - > /etc/tazlito/flavors.list |
pascal@22 | 558 fi |
pankso@27 | 559 echo "" |
pankso@27 | 560 echo -e "\033[1mList of flavors\033[0m" |
pankso@27 | 561 echo "================================================================================" |
pascal@22 | 562 cat /etc/tazlito/flavors.list |
pankso@27 | 563 echo "" |
pascal@22 | 564 ;; |
pascal@22 | 565 show-flavor) |
pascal@22 | 566 # Show flavor description. |
pascal@22 | 567 FLAVOR=$2 |
pascal@22 | 568 if [ ! -f "$FLAVOR.flavor" ]; then |
pascal@22 | 569 echo "File $FLAVOR.flavor not found." |
pascal@22 | 570 exit 1 |
pascal@22 | 571 fi |
pascal@22 | 572 mkdir $TMP_DIR |
pascal@22 | 573 zcat $FLAVOR.flavor | ( cd $TMP_DIR; cpio -i 2> /dev/null ) |
pascal@22 | 574 if [ "$3" = "--brief" ]; then |
pascal@22 | 575 if [ "$4" != "--noheader" ]; then |
pascal@22 | 576 echo "Name Sizes Description" |
pascal@22 | 577 echo "================================================================================" |
pascal@22 | 578 fi |
pascal@22 | 579 printf "%-15.15s %5.5s/%5.5s %-51s\n" "$FLAVOR" \ |
pascal@22 | 580 "$(field ISO $TMP_DIR/$FLAVOR.desc)" \ |
pascal@22 | 581 "$(field Rootfs $TMP_DIR/$FLAVOR.desc)" \ |
pascal@22 | 582 "$(grep ^Description $TMP_DIR/$FLAVOR.desc | cut -d: -f2)" |
pascal@22 | 583 else |
pascal@22 | 584 echo "================================================================================" |
pascal@22 | 585 cat $TMP_DIR/$FLAVOR.desc |
pascal@22 | 586 fi |
pascal@22 | 587 rm -Rf $TMP_DIR |
pascal@22 | 588 ;; |
pascal@60 | 589 gen-liveflavor) |
pascal@60 | 590 # Generate a new flavor form the live system. |
pascal@60 | 591 FLAVOR=$2 |
pascal@60 | 592 DESC="" |
pascal@60 | 593 case "$FLAVOR" in |
pascal@60 | 594 '') echo -n "Flavor name : " |
pascal@60 | 595 read FLAVOR |
pascal@60 | 596 [ -z "$FLAVOR" ] && exit 1;; |
pascal@65 | 597 -?|-h*|--help) echo -e " |
pascal@60 | 598 |
pascal@60 | 599 SliTaz Live Tool - Version: $VERSION |
pascal@60 | 600 \033[1mUsage: \033[0m `basename $0` gen-liveflavor flavor-name [flavor-patch-file] |
pascal@60 | 601 \033[1mflavor-patch-file format: \033[0m |
pascal@60 | 602 code data |
pascal@60 | 603 + package to add |
pascal@60 | 604 - package to remove |
pascal@65 | 605 ! non-free package to add |
pascal@60 | 606 ? display message |
pascal@60 | 607 @ flavor description |
pascal@60 | 608 |
pascal@60 | 609 \033[1mExample: \033[0m |
MikeDSmith25@83 | 610 @ Developer tools for slitaz maintainers |
pascal@60 | 611 + slitaz-toolchain |
pascal@60 | 612 + mercurial |
pascal@65 | 613 " |
pascal@60 | 614 exit 1;; |
pascal@60 | 615 esac |
pascal@60 | 616 mv /etc/tazlito/distro-packages.list \ |
pascal@60 | 617 /etc/tazlito/distro-packages.list.$$ 2> /dev/null |
pascal@60 | 618 rm -f distro-packages.list non-free.list 2> /dev/null |
pascal@60 | 619 tazpkg recharge |
pascal@60 | 620 [ -n "$3" ] && while read action pkg; do |
pascal@60 | 621 case "$action" in |
pascal@60 | 622 +) yes | tazpkg get-install $pkg;; |
pascal@60 | 623 -) yes | tazpkg remove $pkg;; |
pascal@65 | 624 !) echo $pkg >> non-free.list;; |
pascal@60 | 625 @) DESC="$pkg";; |
pascal@60 | 626 \?) echo -en "$pkg"; read action;; |
pascal@60 | 627 esac |
pascal@60 | 628 done < $3 |
pascal@60 | 629 yes '' | tazlito gen-distro |
pascal@60 | 630 echo "$DESC" | tazlito gen-flavor "$FLAVOR" |
pascal@60 | 631 mv /etc/tazlito/distro-packages.list.$$ \ |
pascal@60 | 632 /etc/tazlito/distro-packages.list 2> /dev/null |
pascal@60 | 633 ;; |
pascal@22 | 634 gen-flavor) |
paul@94 | 635 # Generate a new flavor from the last iso image generated. |
pascal@22 | 636 FLAVOR=$2 |
pankso@35 | 637 echo "" |
pankso@35 | 638 echo -e "\033[1mFlavor generation\033[0m" |
pankso@35 | 639 echo "================================================================================" |
pascal@22 | 640 if [ -z "$FLAVOR" ]; then |
pascal@22 | 641 echo -n "Flavor name : " |
pascal@22 | 642 read FLAVOR |
pascal@22 | 643 [ -z "$FLAVOR" ] && exit 1 |
pascal@22 | 644 fi |
pascal@22 | 645 check_rootfs |
pascal@68 | 646 FILES="$FLAVOR.pkglist" |
pascal@22 | 647 echo -n "Creating file $FLAVOR.flavor..." |
pascal@22 | 648 for i in rootcd rootfs; do |
pascal@22 | 649 if [ -d "$ADDFILES/$i" ] ; then |
pascal@22 | 650 FILES="$FILES\n$FLAVOR.$i" |
pascal@22 | 651 ( cd "$ADDFILES/$i"; find . | \ |
pascal@22 | 652 cpio -o -H newc 2> /dev/null | gzip -9 ) > $FLAVOR.$i |
pascal@22 | 653 fi |
pascal@22 | 654 done |
pankso@35 | 655 status |
pascal@22 | 656 answer=`grep -s ^Description $FLAVOR.desc` |
pascal@22 | 657 answer=${answer#Description : } |
pascal@22 | 658 if [ -z "$answer" ]; then |
pankso@35 | 659 echo -n "Description : " |
pascal@22 | 660 read answer |
pascal@22 | 661 fi |
pankso@35 | 662 echo -n "Compressing flavor $FLAVOR..." |
pascal@22 | 663 echo "Flavor : $FLAVOR" > $FLAVOR.desc |
pascal@22 | 664 echo "Description : $answer" >> $FLAVOR.desc |
pascal@22 | 665 ( cd $DISTRO; distro_sizes) >> $FLAVOR.desc |
pascal@68 | 666 \rm -f $FLAVOR.pkglist $FLAVOR.nonfree 2> /dev/null |
pascal@22 | 667 for i in $(ls $ROOTFS$INSTALLED); do |
pascal@22 | 668 eval $(grep ^VERSION= $ROOTFS$INSTALLED/$i/receipt) |
pascal@78 | 669 EXTRAVERSION="" |
pascal@78 | 670 eval $(grep ^EXTRAVERSION= $ROOTFS$INSTALLED/$i/receipt) |
pascal@61 | 671 eval $(grep ^CATEGORY= $ROOTFS$INSTALLED/$i/receipt) |
pascal@61 | 672 if [ "$CATEGORY" = "non-free" -a "${i%%-*}" != "get" ] |
pascal@61 | 673 then |
pascal@61 | 674 echo "$i" >> $FLAVOR.nonfree |
pascal@61 | 675 else |
pascal@78 | 676 echo "$i-$VERSION$EXTRAVERSION" >> $FLAVOR.pkglist |
pascal@61 | 677 fi |
pascal@22 | 678 done |
pascal@68 | 679 [ -s $FLAVOR.nonfree ] && $FILES="$FILES\n$FLAVOR.nonfree" |
pascal@68 | 680 echo -e "$FLAVOR.desc\n$FILES" | cpio -o -H newc 2>/dev/null | \ |
pascal@68 | 681 gzip -9 > $FLAVOR.flavor |
pascal@22 | 682 rm `echo -e $FILES` |
pascal@22 | 683 status |
pankso@35 | 684 echo "================================================================================" |
pankso@35 | 685 echo "Flavor size : `du -sh $FLAVOR.flavor`" |
pankso@35 | 686 echo "" |
pascal@22 | 687 ;; |
pascal@22 | 688 get-flavor) |
pascal@22 | 689 # Get a flavor's files and prepare for gen-distro. |
pascal@22 | 690 FLAVOR=$2 |
pascal@22 | 691 if [ -f $FLAVOR.flavor ] || download $FLAVOR.flavor; then |
pascal@22 | 692 echo -n "Cleaning $DISTRO..." |
pascal@22 | 693 rm -R $DISTRO 2> /dev/null |
pascal@22 | 694 mkdir -p $DISTRO |
pascal@22 | 695 status |
pascal@22 | 696 mkdir $TMP_DIR |
pascal@22 | 697 zcat $FLAVOR.flavor | ( cd $TMP_DIR; cpio -i 2>/dev/null ) |
pascal@22 | 698 echo -n "Create distro-packages.list..." |
pascal@68 | 699 mv $TMP_DIR/$FLAVOR.nonfree non-free.list 2> /dev/null |
pascal@22 | 700 mv $TMP_DIR/$FLAVOR.pkglist distro-packages.list |
pascal@22 | 701 status |
pascal@22 | 702 for i in rootcd rootfs; do |
pascal@22 | 703 if [ -f $TMP_DIR/$FLAVOR.$i ]; then |
pascal@22 | 704 mkdir -p "$ADDFILES/$i" |
pascal@22 | 705 zcat $TMP_DIR/$FLAVOR.$i | \ |
pascal@22 | 706 ( cd "$ADDFILES/$i"; cpio -id 2> /dev/null) |
pascal@22 | 707 fi |
pascal@22 | 708 done |
pascal@22 | 709 echo -n "Update tazlito.conf..." |
pascal@22 | 710 [ -f tazlito.conf ] || cp /etc/tazlito/tazlito.conf . |
pascal@22 | 711 cat tazlito.conf | grep -v "^#VOLUM_NAME" | \ |
pascal@22 | 712 sed "s/^VOLUM_NA/VOLUM_NAME=\"SliTaz $FLAVOR\"\\n#VOLUM_NA/" \ |
pascal@22 | 713 > tazlito.conf.$$ && mv tazlito.conf.$$ tazlito.conf |
pascal@22 | 714 status |
pascal@22 | 715 rm -Rf $TMP_DIR |
pascal@22 | 716 fi |
pascal@22 | 717 ;; |
pankso@92 | 718 check-list) |
pankso@92 | 719 # Use current packages list in $PWD by default. |
pankso@92 | 720 DISTRO_PKGS_LIST=distro-packages.list |
pankso@92 | 721 [ -d "$2" ] && DISTRO_PKGS_LIST=$2/distro-packages.list |
pankso@92 | 722 [ -f "$2" ] && DISTRO_PKGS_LIST=$2 |
pankso@92 | 723 [ ! -f $DISTRO_PKGS_LIST ] && echo "No packages list found." && exit 0 |
pankso@92 | 724 echo "" |
pankso@92 | 725 echo -e "\033[1mLiveCD packages list check\033[0m" |
pankso@92 | 726 echo "================================================================================" |
pankso@92 | 727 for pkg in `cat $DISTRO_PKGS_LIST` |
pankso@92 | 728 do |
pankso@92 | 729 if ! grep -q "$pkg" /var/lib/tazpkg/packages.list; then |
pankso@92 | 730 echo "Update: $pkg" |
pankso@92 | 731 up=$(($up + 1)) |
pankso@92 | 732 fi |
pankso@92 | 733 done |
pankso@92 | 734 [ -z $up ] && echo -e "List is up-to-date\n" && exit 0 |
pankso@92 | 735 echo "================================================================================" |
pankso@92 | 736 echo -e "Updates: $up\n" ;; |
pankso@1 | 737 gen-distro) |
pankso@1 | 738 # Generate a live distro tree with a set of packages. |
pankso@1 | 739 # |
pankso@1 | 740 check_root |
pankso@1 | 741 if [ -d $ROOTFS ] ; then |
paul@94 | 742 echo -e "\nA rootfs exists in : $DISTRO" |
pankso@1 | 743 echo -e "Please clean the distro tree or change directory path.\n" |
pankso@1 | 744 exit 0 |
pankso@1 | 745 fi |
pascal@19 | 746 # Check if a package list was specified on cmdline. |
pascal@19 | 747 LIST_NAME="distro-packages.list" |
pascal@19 | 748 CDROM="" |
pascal@19 | 749 while [ -n "$2" ]; do |
pascal@19 | 750 case "$2" in |
pascal@19 | 751 --iso=*) |
pascal@19 | 752 CDROM="-o loop ${2#--iso=}" |
pascal@19 | 753 ;; |
pascal@19 | 754 --cdrom) |
pascal@19 | 755 CDROM="/dev/cdrom" |
pascal@19 | 756 ;; |
pascal@19 | 757 *) if [ ! -f "$2" ] ; then |
pascal@19 | 758 echo -e "\nUnable to find the specified packages list." |
pascal@19 | 759 echo -e "List name : $2\n" |
pascal@19 | 760 exit 1 |
pascal@19 | 761 fi |
pankso@1 | 762 LIST_NAME=$2 |
pascal@19 | 763 ;; |
pascal@19 | 764 esac |
pascal@19 | 765 shift |
pascal@19 | 766 done |
pascal@19 | 767 if [ ! -f "$LIST_NAME" -a -d $INSTALLED ] ; then |
pascal@19 | 768 # Build list with installed packages |
pascal@19 | 769 for i in $(ls $INSTALLED); do |
pascal@19 | 770 eval $(grep ^VERSION= $INSTALLED/$i/receipt) |
pascal@78 | 771 EXTRAVERSION="" |
pascal@78 | 772 eval $(grep ^EXTRAVERSION= $INSTALLED/$i/receipt) |
pascal@78 | 773 echo "$i-$VERSION$EXTRAVERSION" >> $LIST_NAME |
pascal@19 | 774 done |
pankso@1 | 775 fi |
pankso@1 | 776 # Exit if no list name. |
pascal@18 | 777 if [ ! -f "$LIST_NAME" ]; then |
paul@94 | 778 echo -e "\nNo packages list found or specified. Please read the docs.\n" |
pankso@1 | 779 exit 0 |
pankso@1 | 780 fi |
pankso@1 | 781 # Start generation. |
pankso@1 | 782 echo "" |
pankso@1 | 783 echo -e "\033[1mTazlito generating a distro\033[0m" |
pankso@1 | 784 echo "================================================================================" |
pascal@18 | 785 # Misc checks |
pascal@18 | 786 [ -n "$PACKAGES_REPOSITORY" ] || PACKAGES_REPOSITORY="." |
pascal@18 | 787 [ -d $PACKAGES_REPOSITORY ] || mkdir -p $PACKAGES_REPOSITORY |
pankso@1 | 788 # Get the list of packages using cat for a file list. |
pankso@1 | 789 LIST=`cat $LIST_NAME` |
MikeDSmith25@83 | 790 # Verify if all packages in list are present in $PACKAGES_REPOSITORY. |
pascal@18 | 791 REPACK="" |
pascal@18 | 792 DOWNLOAD="" |
pankso@1 | 793 for pkg in $LIST |
pankso@1 | 794 do |
pascal@19 | 795 [ "$pkg" = "" ] && continue |
pankso@1 | 796 pkg=${pkg%.tazpkg} |
pascal@18 | 797 [ -f $PACKAGES_REPOSITORY/$pkg.tazpkg ] && continue |
pascal@18 | 798 PACKAGE=$(installed_package_name $pkg) |
pascal@18 | 799 [ -n "$PACKAGE" -a "$REPACK" = "y" ] && continue |
pascal@18 | 800 [ -z "$PACKAGE" -a -n "$DOWNLOAD" ] && continue |
pascal@18 | 801 echo -e "\nUnable to find $pkg in the repository." |
pascal@18 | 802 echo -e "Path : $PACKAGES_REPOSITORY\n" |
pascal@18 | 803 if [ -n "$PACKAGE" -a -z "$REPACK" ]; then |
pascal@18 | 804 yesorno "Repack packages from rootfs (y/N) ? " |
pascal@18 | 805 REPACK="$answer" |
pascal@18 | 806 [ "$answer" = "y" ] || REPACK="n" |
pascal@18 | 807 [ "$DOWNLOAD" = "y" ] && break |
pascal@18 | 808 fi |
pascal@18 | 809 if [ -f $MIRROR -a -z "$DOWNLOAD" ]; then |
pascal@18 | 810 yesorno "Download packages from mirror (Y/n) ? " |
pascal@18 | 811 DOWNLOAD="$answer" |
pascal@18 | 812 if [ "$answer" = "n" ]; then |
pascal@18 | 813 [ -z "$PACKAGE" ] && exit 1 |
pascal@18 | 814 else |
pascal@18 | 815 DOWNLOAD="y" |
pascal@18 | 816 [ -n "$REPACK" ] && break |
pascal@12 | 817 fi |
pankso@1 | 818 fi |
pascal@18 | 819 [ "$REPACK" = "n" -a "$DOWNLOAD" = "n" ] && exit 1 |
pankso@1 | 820 done |
pascal@19 | 821 |
MikeDSmith25@83 | 822 # Mount cdrom to be able to repack boot-loader packages |
pascal@19 | 823 if [ ! -e /boot -a -n "$CDROM" ]; then |
pascal@19 | 824 mkdir $TMP_MNT |
pascal@20 | 825 if mount -r $CDROM $TMP_MNT 2> /dev/null; then |
pascal@19 | 826 ln -s $TMP_MNT/boot / |
pascal@19 | 827 if [ ! -d "$ADDFILES/rootcd" ] ; then |
pascal@19 | 828 mkdir -p $ADDFILES/rootcd |
pascal@19 | 829 for i in $(ls $TMP_MNT); do |
pascal@19 | 830 [ "$i" = "boot" ] && continue |
pascal@19 | 831 cp -a $TMP_MNT/$i $ADDFILES/rootcd |
pascal@19 | 832 done |
pascal@19 | 833 fi |
pascal@19 | 834 else |
pascal@19 | 835 rmdir $TMP_MNT |
pascal@19 | 836 fi |
pascal@19 | 837 fi |
pascal@19 | 838 |
pankso@1 | 839 # Root fs stuff. |
pankso@1 | 840 echo "Preparing the rootfs directory..." |
pankso@1 | 841 mkdir -p $ROOTFS |
pankso@1 | 842 sleep 2 |
pankso@1 | 843 for pkg in $LIST |
pankso@1 | 844 do |
pascal@19 | 845 [ "$pkg" = "" ] && continue |
pankso@1 | 846 # First copy and extract the package in tmp dir. |
pankso@1 | 847 pkg=${pkg%.tazpkg} |
pascal@18 | 848 PACKAGE=$(installed_package_name $pkg) |
pankso@1 | 849 mkdir -p $TMP_DIR |
pascal@12 | 850 if [ ! -f $PACKAGES_REPOSITORY/$pkg.tazpkg ]; then |
MikeDSmith25@83 | 851 # Look for package in cache |
pascal@12 | 852 if [ -f $CACHE_DIR/$pkg.tazpkg ]; then |
pascal@12 | 853 ln -s $CACHE_DIR/$pkg.tazpkg $PACKAGES_REPOSITORY |
MikeDSmith25@83 | 854 # Look for package in running distribution |
pascal@18 | 855 elif [ -n "$PACKAGE" -a "$REPACK" = "y" ]; then |
pascal@18 | 856 tazpkg repack $PACKAGE && \ |
pascal@18 | 857 mv $pkg.tazpkg $PACKAGES_REPOSITORY |
pascal@18 | 858 fi |
pascal@18 | 859 fi |
pascal@18 | 860 if [ ! -f $PACKAGES_REPOSITORY/$pkg.tazpkg ]; then |
MikeDSmith25@83 | 861 # Get package from mirror |
pascal@18 | 862 [ "$DOWNLOAD" = "y" ] && \ |
pascal@18 | 863 download $pkg.tazpkg && \ |
pascal@18 | 864 mv $pkg.tazpkg $PACKAGES_REPOSITORY |
pascal@12 | 865 fi |
pascal@12 | 866 if [ ! -f $PACKAGES_REPOSITORY/$pkg.tazpkg ]; then |
pascal@12 | 867 echo "Missing package $pkg." |
pascal@19 | 868 cleanup |
pascal@12 | 869 exit 1 |
pascal@12 | 870 fi |
pankso@1 | 871 done |
pascal@61 | 872 if [ -f non-free.list ]; then |
pascal@61 | 873 echo "Preparing non-free packages..." |
pascal@61 | 874 cp non-free.list $ROOTFS/etc/tazlito/non-free.list |
pascal@61 | 875 for pkg in $(cat non-free.list); do |
pascal@61 | 876 if [ ! -d $INSTALLED/$pkg ]; then |
pascal@61 | 877 if [ ! -d $INSTALLED/get-$pkg ]; then |
pascal@61 | 878 tazpkg get-install get-$pkg |
pascal@61 | 879 fi |
pascal@61 | 880 get-$pkg |
pascal@61 | 881 fi |
pascal@61 | 882 tazpkg repack $pkg |
pascal@79 | 883 pkg=$(ls $pkg*.tazpkg) |
pascal@79 | 884 grep -q "^$pkg$" $LIST_NAME || \ |
pascal@79 | 885 echo $pkg >>$LIST_NAME |
pascal@79 | 886 mv $pkg $PACKAGES_REPOSITORY |
pascal@61 | 887 done |
pascal@61 | 888 fi |
pankso@1 | 889 echo "" |
pascal@80 | 890 cp $LIST_NAME $DISTRO/distro-packages.list |
pascal@80 | 891 sed 's/\(.*\)/\1.tazpkg/' < $DISTRO/distro-packages.list > $DISTRO/list-packages |
pascal@79 | 892 cd $PACKAGES_REPOSITORY |
pascal@79 | 893 yes y | tazpkg install-list \ |
pascal@80 | 894 $DISTRO/list-packages --root=$ROOTFS |
pankso@1 | 895 cd $DISTRO |
pascal@80 | 896 cp distro-packages.list $ROOTFS/etc/tazlito |
pankso@1 | 897 # Copy all files from $ADDFILES/rootfs to the rootfs. |
pankso@1 | 898 if [ -d "$ADDFILES/rootfs" ] ; then |
pankso@1 | 899 echo -n "Copying addfiles content to the rootfs... " |
pascal@11 | 900 cp -a $ADDFILES/rootfs/* $ROOTFS |
pascal@11 | 901 status |
pankso@1 | 902 fi |
pankso@1 | 903 echo "Root file system is generated..." |
pankso@1 | 904 # Root CD part. |
pankso@1 | 905 echo -n "Preparing the rootcd directory..." |
pankso@1 | 906 mkdir -p $ROOTCD |
pankso@1 | 907 status |
pankso@1 | 908 # Move the boot dir with the Linux kernel from rootfs. |
pankso@1 | 909 # The boot dir goes directly on the CD. |
pankso@1 | 910 if [ -d "$ROOTFS/boot" ] ; then |
pankso@1 | 911 echo -n "Moving the boot directory..." |
pankso@1 | 912 mv $ROOTFS/boot $ROOTCD |
pankso@1 | 913 cd $ROOTCD/boot |
pascal@11 | 914 ln vmlinuz-* bzImage |
pankso@1 | 915 status |
pankso@1 | 916 fi |
pankso@1 | 917 cd $DISTRO |
pankso@1 | 918 # Copy all files from $ADDFILES/rootcd to the rootcd. |
pankso@1 | 919 if [ -d "$ADDFILES/rootcd" ] ; then |
pankso@1 | 920 echo -n "Copying addfiles content to the rootcd... " |
pascal@11 | 921 cp -a $ADDFILES/rootcd/* $ROOTCD |
pascal@11 | 922 status |
pankso@1 | 923 fi |
pankso@95 | 924 # Execute the distro script (used to perform tasks in the rootfs |
pankso@95 | 925 # before compression. Give rootfs path in arg |
pankso@95 | 926 [ -z $DISTRO_SCRIPT ] && DISTRO_SCRIPT=$TOP_DIR/distro.sh |
pankso@95 | 927 if [ -x $DISTRO_SCRIPT ]; then |
pankso@95 | 928 echo "Executing distro script..." |
pankso@95 | 929 sh $DISTRO_SCRIPT $DISTRO |
pankso@95 | 930 fi |
pankso@1 | 931 # Initramfs and ISO image stuff. |
pankso@1 | 932 gen_initramfs |
pankso@1 | 933 gen_livecd_isolinux |
pankso@1 | 934 distro_stats |
pascal@19 | 935 cleanup |
pankso@1 | 936 ;; |
pankso@1 | 937 clean-distro) |
pankso@1 | 938 # Remove old distro tree. |
pankso@1 | 939 # |
pankso@1 | 940 check_root |
pankso@1 | 941 echo "" |
pankso@1 | 942 echo -e "\033[1mCleaning :\033[0m $DISTRO" |
pankso@1 | 943 echo "================================================================================" |
pankso@1 | 944 if [ -d "$DISTRO" ] ; then |
pankso@1 | 945 if [ -d "$ROOTFS" ] ; then |
pankso@1 | 946 echo -n "Removing the rootfs..." |
pankso@1 | 947 rm -f $DISTRO/$INITRAMFS |
pascal@11 | 948 rm -rf $ROOTFS |
pascal@11 | 949 status |
pankso@1 | 950 fi |
pankso@1 | 951 if [ -d "$ROOTCD" ] ; then |
pankso@1 | 952 echo -n "Removing the rootcd..." |
pascal@11 | 953 rm -rf $ROOTCD |
pascal@11 | 954 status |
pankso@1 | 955 fi |
pankso@1 | 956 echo -n "Removing eventual ISO image..." |
pascal@11 | 957 rm -f $DISTRO/$ISO_NAME.iso |
pascal@56 | 958 rm -f $DISTRO/$ISO_NAME.md5 |
pascal@11 | 959 status |
pankso@1 | 960 fi |
pankso@1 | 961 echo "================================================================================" |
pankso@1 | 962 echo "" |
pankso@1 | 963 ;; |
pankso@1 | 964 check-distro) |
pankso@1 | 965 # Check for a few LiveCD needed files not installed by packages. |
pankso@1 | 966 # |
pascal@11 | 967 check_rootfs |
pankso@1 | 968 echo "" |
pankso@1 | 969 echo -e "\033[1mChecking distro :\033[0m $ROOTFS" |
pankso@1 | 970 echo "================================================================================" |
pankso@1 | 971 # SliTaz release info. |
pankso@1 | 972 if [ ! -f "$ROOTFS/etc/slitaz-release" ]; then |
pascal@11 | 973 echo "Missing release info : /etc/slitaz-release" |
pankso@1 | 974 else |
pankso@1 | 975 release=`cat $ROOTFS/etc/slitaz-release` |
pankso@1 | 976 echo -n "Release : $release" |
pankso@1 | 977 status |
pankso@1 | 978 fi |
pankso@1 | 979 # Tazpkg mirror. |
pankso@1 | 980 if [ ! -f "$ROOTFS/var/lib/tazpkg/mirror" ]; then |
pankso@1 | 981 echo -n "Mirror URL : Missing /var/lib/tazpkg/mirror" |
pankso@1 | 982 todomsg |
pankso@1 | 983 else |
pankso@1 | 984 echo -n "Mirror configuration exist..." |
pankso@1 | 985 status |
pankso@1 | 986 fi |
pankso@1 | 987 # Isolinux msg |
pankso@1 | 988 if grep -q "cooking-XXXXXXXX" /$ROOTCD/boot/isolinux/isolinux.msg; then |
pankso@1 | 989 echo -n "Isolinux msg : Missing cooking date XXXXXXXX (ex `date +%Y%m%d`)" |
pankso@1 | 990 todomsg |
pankso@1 | 991 else |
pankso@1 | 992 echo -n "Isolinux message seems good..." |
pankso@1 | 993 status |
pankso@1 | 994 fi |
pankso@1 | 995 echo "================================================================================" |
pankso@1 | 996 echo "" |
pankso@1 | 997 ;; |
pankso@1 | 998 burn-iso) |
pankso@1 | 999 # Guess cdrom device, ask user and burn the ISO. |
pankso@1 | 1000 # |
pankso@1 | 1001 check_root |
pankso@1 | 1002 DRIVE_NAME=`cat /proc/sys/dev/cdrom/info | grep "drive name" | cut -f 3` |
pankso@1 | 1003 DRIVE_SPEED=`cat /proc/sys/dev/cdrom/info | grep "drive speed" | cut -f 3` |
pankso@1 | 1004 # We can specify an alternative ISO from the cmdline. |
pankso@1 | 1005 if [ -n "$2" ] ; then |
pankso@1 | 1006 iso=$2 |
pankso@1 | 1007 else |
pankso@1 | 1008 iso=$DISTRO/$ISO_NAME.iso |
pankso@1 | 1009 fi |
pankso@1 | 1010 if [ ! -f "$iso" ]; then |
pankso@1 | 1011 echo -e "\nUnable to find ISO : $iso\n" |
pankso@1 | 1012 exit 0 |
pankso@1 | 1013 fi |
pankso@1 | 1014 echo "" |
pankso@1 | 1015 echo -e "\033[1mTazlito burn ISO\033[0m " |
pankso@1 | 1016 echo "================================================================================" |
pankso@1 | 1017 echo "Cdrom device : /dev/$DRIVE_NAME" |
pankso@1 | 1018 echo "Drive speed : $DRIVE_SPEED" |
pankso@1 | 1019 echo "ISO image : $iso" |
pankso@1 | 1020 echo "================================================================================" |
pankso@1 | 1021 echo "" |
pascal@12 | 1022 yesorno "Burn ISO image (y/N) ? " |
pascal@11 | 1023 if [ "$answer" == "y" ]; then |
pankso@1 | 1024 echo "" |
pankso@1 | 1025 echo "Starting Wodim to burn the iso..." && sleep 2 |
pankso@1 | 1026 echo "================================================================================" |
pankso@25 | 1027 wodim speed=$DRIVE_SPEED dev=/dev/$DRIVE_NAME $iso |
pankso@1 | 1028 echo "================================================================================" |
pankso@1 | 1029 echo "ISO image is burned to cdrom." |
pankso@1 | 1030 else |
pankso@1 | 1031 echo -e "\nExiting. No ISO burned." |
pankso@1 | 1032 fi |
pankso@1 | 1033 echo "" |
pankso@1 | 1034 ;; |
pankso@1 | 1035 usage|*) |
MikeDSmith25@83 | 1036 # Clear and print usage also for all unknown commands. |
pankso@1 | 1037 # |
pankso@1 | 1038 clear |
pankso@1 | 1039 usage |
pankso@1 | 1040 ;; |
pankso@1 | 1041 |
pankso@1 | 1042 esac |
pankso@1 | 1043 |
pankso@1 | 1044 exit 0 |