slitaz-modular annotate mkiso.sh @ rev 19

Updated mkiso.sh script and initramfs.list.
author Christopher Rogers <slaxemulator@gmail.com>
date Fri Dec 24 12:31:39 2010 +0000 (2010-12-24)
parents a2d01b846a2a
children addad59ccab5
rev   line source
slaxemulator@0 1 #!/bin/sh
slaxemulator@0 2
slaxemulator@0 3 if [ -f "./tazwok.conf" ]; then
slaxemulator@0 4 . ./tazwok.conf
slaxemulator@0 5 elif [ -f "/etc/tazwok.conf" ]; then
slaxemulator@0 6 . /etc/tazwok.conf
slaxemulator@0 7 else
slaxemulator@0 8 echo -e "\nUnable to find tazwok configuration file : /etc/tazwok.conf"
slaxemulator@0 9 exit 1
slaxemulator@0 10 fi
slaxemulator@0 11
slaxemulator@0 12 QUIET="y"
slaxemulator@0 13 FORCE="y"
slaxemulator@0 14 export LABEL="slitaz_$(date +%Y%m)"
slaxemulator@0 15 PUBLISHER="Slitaz"
slaxemulator@0 16 APPLICATION="Slitaz"
slaxemulator@0 17 CREATE_DEFAULT="n"
slaxemulator@17 18 BASEDIR="$(pwd)"
slaxemulator@17 19 PROFILE="$BASEDIR/$1"
slaxemulator@0 20 ver=""
slaxemulator@0 21 CDNAME="slitaz"
slaxemulator@0 22 RMSTUFF=n
slaxemulator@0 23 MVSTUFF=n
slaxemulator@0 24 UNGZIP=n
slaxemulator@15 25 EXT="xz"
slaxemulator@15 26 COMPRESSION="xz -Xbcj x86"
slaxemulator@0 27 MKOPTION="-b 256k"
slaxemulator@0 28 MODULES=""
slaxemulator@0 29 WORKING="$PROFILE/working"
slaxemulator@0 30 INITRAMFS="$WORKING/initramfs"
slaxemulator@0 31 UNION="$WORKING/union"
slaxemulator@0 32 LOG="$WORKING/log"
slaxemulator@0 33 ISODIR="$WORKING/iso"
slaxemulator@0 34 IMGNAME="$PROFILE/$CDNAME-$(date +%F).iso"
slaxemulator@0 35 IMGMD5NAME="$IMGNAME.md5"
slaxemulator@15 36 LASTBR="$INITRAMFS"
slaxemulator@0 37 SGNFILE="$ISODIR/$CDNAME/livecd.sgn"
slaxemulator@0 38 MODULES_DIR="$WORKING/modules"
slaxemulator@0 39 HG_DIR="$WORKING/hg"
slaxemulator@0 40 COPY_HG="no"
slaxemulator@0 41 UPDATE_HG="no"
slaxemulator@0 42 BACKUP_SOURCES="no"
slaxemulator@0 43 BACKUP_PACKAGES="no"
slaxemulator@0 44 CLEAN_MODULES_DIR="no"
slaxemulator@2 45 CLEAN_INITRAMFS="no"
slaxemulator@0 46 HG_LIST="flavors flavors-stable slitaz-base-files slitaz-boot-scripts slitaz-configs slitaz-doc slitaz-pizza slitaz-tools tank tazlito tazpkg tazusb tazwok website wok"
slaxemulator@0 47
slaxemulator@0 48 error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
slaxemulator@0 49 warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
slaxemulator@0 50 info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }
slaxemulator@0 51
slaxemulator@0 52 # do UID checking here so someone can at least get usage instructions
slaxemulator@0 53 #if [ "$EUID" != "0" ]; then
slaxemulator@0 54 # error "error: This script must be run as root."
slaxemulator@0 55 # exit 1
slaxemulator@0 56 #fi
slaxemulator@19 57 if [ ! -d $PROFILE -o "$1" = "" ]; then
slaxemulator@17 58 echo "$0 profile-name"
slaxemulator@17 59 echo "ex $0 core"
slaxemulator@17 60 exit 1
slaxemulator@17 61 fi
slaxemulator@0 62
slaxemulator@19 63 ROOT_MOD="$(ls -1 ${PROFILE}/list | head -1)"
slaxemulator@19 64 INST_ROOT="${MODULES_DIR}/$(basename ${ROOT_MOD} .list)"
slaxemulator@19 65
slaxemulator@0 66 if [ -f ${PROFILE}/config ]; then
slaxemulator@0 67 source ${PROFILE}/config
slaxemulator@0 68 fi
slaxemulator@0 69
slaxemulator@0 70 _overlay()
slaxemulator@0 71 {
slaxemulator@0 72 if [ -d ${MODULES_DIR}/overlay ]; then
slaxemulator@0 73 rm -rf ${MODULES_DIR}/overlay
slaxemulator@0 74 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
slaxemulator@0 75 else
slaxemulator@0 76 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
slaxemulator@0 77 fi
slaxemulator@0 78
slaxemulator@0 79 if [ "${QUIET}" = "y" ]; then
slaxemulator@0 80 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION} >/dev/null
slaxemulator@0 81 else
slaxemulator@0 82 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION}
slaxemulator@0 83 fi
slaxemulator@0 84 }
slaxemulator@0 85
slaxemulator@0 86 lzma_switches()
slaxemulator@0 87 {
slaxemulator@0 88 echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)"
slaxemulator@0 89 }
slaxemulator@0 90
slaxemulator@0 91 # Pack rootfs
slaxemulator@0 92 pack_rootfs()
slaxemulator@0 93 {
slaxemulator@0 94 ( cd $1 ; find . -print | cpio -o -H newc ) | \
slaxemulator@0 95 if [ -x /usr/bin/lzma ]; then
slaxemulator@0 96 info "Generating lzma'ed initramfs... "
slaxemulator@0 97 lzma e -si -so $(lzma_switches $1) > $2
slaxemulator@0 98 else
slaxemulator@0 99 info "Generating gziped initramfs... "
slaxemulator@0 100 gzip -9 > $2
slaxemulator@0 101 fi
slaxemulator@0 102 echo 1 > /tmp/rootfs
slaxemulator@0 103 }
slaxemulator@0 104
slaxemulator@0 105 initramfs () {
slaxemulator@0 106
slaxemulator@17 107 if [ ! -e "$BASEDIR/initramfs/initramfs.list" ]; then
slaxemulator@19 108 error "error: $BASEDIR/initramfs/initramfs.list doesn't exist, aborting."
slaxemulator@0 109 exit 1
slaxemulator@0 110 fi
slaxemulator@0 111
slaxemulator@2 112 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
slaxemulator@2 113 if [ -d ${INITRAMFS} ]; then
slaxemulator@2 114 rm -Rf ${INITRAMFS}
slaxemulator@2 115 fi
slaxemulator@2 116 fi
slaxemulator@4 117
slaxemulator@4 118 if [ ! -d ${INITRAMFS} ]; then
slaxemulator@4 119 mkdir -p $INITRAMFS
slaxemulator@4 120 fi
slaxemulator@4 121
slaxemulator@0 122 info "Making bootable image"
slaxemulator@17 123 cat "$BASEDIR/initramfs/initramfs.list" | grep -v "^#" | while read pkgname; do
slaxemulator@5 124 if [ ! -f ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
slaxemulator@0 125 tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log
slaxemulator@0 126 sleep 1
slaxemulator@0 127 else
slaxemulator@0 128 info "${pkgname} installed"
slaxemulator@0 129 fi
slaxemulator@0 130 done
slaxemulator@0 131
slaxemulator@0 132 if [ ! -d $ISODIR/boot ]; then
slaxemulator@0 133 mkdir -p $ISODIR/boot
slaxemulator@0 134 fi
slaxemulator@0 135
slaxemulator@15 136 #if [ ! -f $ISODIR/boot/bzImage ]; then
slaxemulator@0 137 cp -f $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
slaxemulator@0 138 rm -f $INITRAMFS/boot/vmlinuz*
slaxemulator@15 139 #fi
slaxemulator@0 140
slaxemulator@17 141 if [ -d $BASEDIR/initramfs ]; then
slaxemulator@17 142 cp -af $BASEDIR/initramfs/* $INITRAMFS
slaxemulator@0 143 fi
slaxemulator@0 144 }
slaxemulator@0 145
slaxemulator@0 146 copy_hg() {
slaxemulator@0 147 if [ ! -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
slaxemulator@0 148 info "Cloning $1 repo ..."
slaxemulator@0 149 hg clone http://hg.slitaz.org/$1 ${HG_DIR}/hg-${1}/home/slitaz/hg/$1
slaxemulator@0 150 elif [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 -a ${UPDATE_HG} = "yes" ]; then
slaxemulator@0 151 info "Updating $1 repo ..."
slaxemulator@0 152 cd ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 &&
slaxemulator@2 153 hg pull -u
slaxemulator@0 154 cd $PROFILE
slaxemulator@0 155 fi
slaxemulator@0 156 }
slaxemulator@0 157
slaxemulator@0 158 squashfs_hg() {
slaxemulator@0 159 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
slaxemulator@0 160 mkdir -p "$ISODIR/$CDNAME/modules/hg"
slaxemulator@0 161 fi
slaxemulator@0 162 if [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
slaxemulator@0 163 _mksquash ${HG_DIR}/hg-${1} "$ISODIR/$CDNAME/modules/hg" /home/slitaz/hg/$1
slaxemulator@0 164 fi
slaxemulator@0 165 }
slaxemulator@0 166
slaxemulator@0 167 slitaz_union () {
slaxemulator@0 168
slaxemulator@0 169 if [ -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
slaxemulator@0 170 echo "${mod} module exist. Moving on."
slaxemulator@0 171 elif [ ! -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
slaxemulator@0 172 if [ -f "$PROFILE/list/${mod}.list" ]; then
slaxemulator@0 173 cat "$PROFILE/list/${mod}.list" | grep -v "^#" | while read pkgname; do
slaxemulator@5 174 if [ ! -f ${UNION}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
slaxemulator@0 175 tazpkg get-install $pkgname --root=${UNION} | tee -a ${LOG}/${mod}-current.log
slaxemulator@0 176 sleep 1
slaxemulator@0 177 else
slaxemulator@0 178 info "${pkgname} installed"
slaxemulator@0 179 fi
slaxemulator@0 180 done
slaxemulator@0 181 fi
slaxemulator@0 182
slaxemulator@0 183 if [ -f $PROFILE/list/${mod}.removelist ]; then
slaxemulator@0 184 cat "$PROFILE/list/${mod}.removelist" | grep -v "^#" | while read pkgname; do
slaxemulator@5 185 if [ -f ${UNION}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
slaxemulator@0 186 echo "y" | tazpkg remove ${pkgname} --root=${UNION} | tee -a ${LOG}/${mod}-current.log
slaxemulator@0 187 sleep 1
slaxemulator@0 188 else
slaxemulator@0 189 info "${pkgname} removed"
slaxemulator@0 190 fi
slaxemulator@0 191 done
slaxemulator@0 192 fi
slaxemulator@0 193 fi
slaxemulator@0 194 }
slaxemulator@0 195
slaxemulator@0 196 union () {
slaxemulator@0 197 mkdir -p $WORKING
slaxemulator@0 198 mkdir -p $UNION
slaxemulator@0 199 mkdir -p $LOG
slaxemulator@0 200 mkdir -p $ISODIR/${CDNAME}/base
slaxemulator@0 201 mkdir -p $ISODIR/${CDNAME}/modules
slaxemulator@0 202 mkdir -p $ISODIR/${CDNAME}/optional
slaxemulator@0 203 mkdir -p $ISODIR/${CDNAME}/rootcopy
slaxemulator@0 204 mkdir -p $ISODIR/${CDNAME}/tmp
slaxemulator@0 205 mkdir -p $LASTBR
slaxemulator@0 206 touch $SGNFILE
slaxemulator@0 207
slaxemulator@0 208 modprobe aufs
slaxemulator@0 209 if [ $? -ne 0 ]; then
slaxemulator@0 210 error "Error loading Union filesystem module. (aufs)"
slaxemulator@0 211 exit 1
slaxemulator@0 212 fi
slaxemulator@15 213
slaxemulator@15 214 # $INITRAMFS is now $LASTBR
slaxemulator@15 215 # This will be copyed to /mnt/memory/changes on boot
slaxemulator@15 216 initramfs
slaxemulator@0 217
slaxemulator@0 218 mount -t aufs -o br:${LASTBR}=rw aufs ${UNION}
slaxemulator@0 219 if [ $? -ne 0 ]; then
slaxemulator@0 220 error "Error mounting $union."
slaxemulator@0 221 exit 1
slaxemulator@0 222 fi
slaxemulator@15 223
slaxemulator@0 224 info "====> Installing packages to '$UNION'"
slaxemulator@0 225 for mod in $MODULES; do
slaxemulator@0 226
slaxemulator@0 227 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
slaxemulator@0 228 if [ -d $MODULES_DIR/$mod ]; then
slaxemulator@0 229 rm -Rf $MODULES_DIR/$mod
slaxemulator@0 230 fi
slaxemulator@0 231 fi
slaxemulator@0 232
slaxemulator@0 233 if [ ! -d $MODULES_DIR/$mod ]; then
slaxemulator@0 234 mkdir -p $MODULES_DIR/$mod
slaxemulator@0 235 fi
slaxemulator@0 236 info "Adding $MODULES_DIR/$mod as top branch of union."
slaxemulator@0 237 mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION
slaxemulator@0 238 info "Adding $LASTBR as lower branch of union."
slaxemulator@0 239 mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION
slaxemulator@0 240 LASTBR="$MODULES_DIR/${mod}"
slaxemulator@0 241
slaxemulator@0 242 slitaz_union
slaxemulator@0 243 done
slaxemulator@0 244
slaxemulator@0 245 info "Unmounting union"
slaxemulator@0 246 umount -l "${UNION}"
slaxemulator@0 247
slaxemulator@0 248 info "Removing unionfs .wh. files."
slaxemulator@0 249 find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \;
slaxemulator@0 250 find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \;
slaxemulator@0 251 }
slaxemulator@0 252
slaxemulator@0 253
slaxemulator@0 254 # _mksquash dirname
slaxemulator@0 255 _mksquash () {
slaxemulator@0 256 if [ ! -d "$1" ]; then
slaxemulator@0 257 error "Error: '$1' is not a directory"
slaxemulator@0 258 return 1
slaxemulator@0 259 fi
slaxemulator@0 260
slaxemulator@0 261 if [ ! -d "$2" ]; then
slaxemulator@0 262 error "Error: '$2' is not a directory"
slaxemulator@0 263 return 1
slaxemulator@0 264 fi
slaxemulator@0 265
slaxemulator@0 266 if [ ! -d "${1}${3}" ]; then
slaxemulator@0 267 error "Error: '${1}${3}' is not a directory"
slaxemulator@0 268 return 1
slaxemulator@0 269 fi
slaxemulator@0 270
slaxemulator@0 271 time_dir="${3}"
slaxemulator@0 272 sqimg="${2}/$(basename ${1}).${EXT}"
slaxemulator@0 273 info "====> Generating SquashFS image for '${1}'"
slaxemulator@0 274 if [ -e "${sqimg}" ]; then
slaxemulator@0 275 dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
slaxemulator@0 276 if [ "${dirhaschanged}" != "" ]; then
slaxemulator@0 277 info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
slaxemulator@0 278 rm "${sqimg}"
slaxemulator@0 279 else
slaxemulator@0 280 info "SquashFS image '${sqimg}' is up to date, skipping."
slaxemulator@0 281 return
slaxemulator@0 282 fi
slaxemulator@0 283 fi
slaxemulator@0 284
slaxemulator@0 285 info "Creating SquashFS image. This may take some time..."
slaxemulator@0 286 start=$(date +%s)
slaxemulator@0 287 if [ "${QUIET}" = "y" ]; then
slaxemulator@0 288 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null
slaxemulator@0 289 else
slaxemulator@0 290 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION}
slaxemulator@0 291 fi
slaxemulator@0 292 minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }')
slaxemulator@0 293 info "Image creation done in $minutes minutes."
slaxemulator@0 294 }
slaxemulator@0 295
slaxemulator@0 296 imgcommon () {
slaxemulator@0 297 if [ "${MODULES}" != "" ]; then
slaxemulator@0 298 for MOD in ${MODULES}; do
slaxemulator@0 299 if [ -d "${MODULES_DIR}/${MOD}" ]; then
slaxemulator@0 300 _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/base" /var/lib/tazpkg/installed
slaxemulator@0 301 fi
slaxemulator@0 302 done
slaxemulator@0 303 fi
slaxemulator@0 304
slaxemulator@0 305 if [ "$HG_LIST" != "" ]; then
slaxemulator@0 306 if [ "$COPY_HG" = "yes" ]; then
slaxemulator@0 307 for hg in $HG_LIST; do
slaxemulator@0 308 copy_hg $hg
slaxemulator@0 309 squashfs_hg $hg
slaxemulator@0 310 done
slaxemulator@0 311 fi
slaxemulator@0 312 fi
slaxemulator@0 313
slaxemulator@0 314 if [ "${HG_LIST}" != "" ]; then
slaxemulator@0 315 for hg in ${HG_LIST}; do
slaxemulator@0 316 if [ -d "${MODULES_DIR}/hg-${hg}" ]; then
slaxemulator@0 317 squashfs_hg $hg
slaxemulator@0 318 fi
slaxemulator@0 319 done
slaxemulator@0 320 fi
slaxemulator@0 321
slaxemulator@0 322 info "====> Making bootable image"
slaxemulator@0 323
slaxemulator@0 324 # Sanity checks
slaxemulator@0 325 if [ ! -d "${ISODIR}" ]; then
slaxemulator@0 326 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
slaxemulator@0 327 exit 1
slaxemulator@0 328 fi
slaxemulator@0 329
slaxemulator@0 330 if [ ! -f "${SGNFILE}" ]; then
slaxemulator@0 331 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
slaxemulator@0 332 error " Protecting you from yourself and erroring out here..."
slaxemulator@0 333 exit 1
slaxemulator@0 334 fi
slaxemulator@0 335
slaxemulator@0 336
slaxemulator@0 337 if [ -e "${IMGNAME}" ]; then
slaxemulator@0 338 if [ "${FORCE}" = "y" ]; then
slaxemulator@0 339 info "Removing existing bootable image..."
slaxemulator@0 340 rm -rf "${IMGNAME}"
slaxemulator@0 341 else
slaxemulator@0 342 error "Error: Image '${IMGNAME}' already exists, aborting."
slaxemulator@0 343 exit 1
slaxemulator@0 344 fi
slaxemulator@0 345 fi
slaxemulator@0 346
slaxemulator@0 347 }
slaxemulator@0 348
slaxemulator@0 349 make_iso () {
slaxemulator@0 350 imgcommon
slaxemulator@15 351
slaxemulator@15 352 info "Creating rootfs.gz"
slaxemulator@15 353 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
slaxemulator@0 354
slaxemulator@19 355 if [ -d $PROFILE/rootcd ]; then
slaxemulator@19 356 cp -af $PROFILE/rootcd/* $ISODIR/
slaxemulator@19 357 fi
slaxemulator@19 358
slaxemulator@19 359 info "Copying isolinux files..."
slaxemulator@19 360 if [ -d $INITRAMFS/boot/isolinux ]; then
slaxemulator@19 361 cp -a $INITRAMFS/boot/isolinux $ISODIR/boot
slaxemulator@19 362 fi
slaxemulator@19 363
slaxemulator@0 364 if [ -d ${PROFILE}/overlay ]; then
slaxemulator@0 365 _overlay
slaxemulator@0 366 fi
slaxemulator@0 367
slaxemulator@0 368 info "Creating ISO image..."
slaxemulator@17 369 genisoimage -R -o $IMGNAME -b boot/isolinux/isolinux.bin \
slaxemulator@17 370 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
slaxemulator@17 371 -V "SliTaz" -input-charset iso8859-1 -boot-info-table $ISODIR
slaxemulator@0 372 if [ -x /usr/bin/isohybrid ]; then
slaxemulator@0 373 info "Creating hybrid ISO..."
slaxemulator@0 374 isohybrid "${IMGNAME}"
slaxemulator@0 375 fi
slaxemulator@17 376 md5sum "${IMGNAME}" > $IMGMD5NAME
slaxemulator@0 377 }
slaxemulator@0 378
slaxemulator@2 379 if [ "$MODULES" != "" ]; then
slaxemulator@2 380 union
slaxemulator@2 381 else
slaxemulator@2 382 error "MODULES was empty. exiting."
slaxemulator@2 383 exit 1
slaxemulator@2 384 fi
slaxemulator@0 385
slaxemulator@0 386 make_iso