slitaz-modular diff mkiso.sh @ rev 0
first release
author | Christopher Rogers <slaxemulator@gmail.com> |
---|---|
date | Thu Nov 25 03:30:16 2010 +0000 (2010-11-25) |
parents | |
children | 55ac28204029 |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/mkiso.sh Thu Nov 25 03:30:16 2010 +0000 1.3 @@ -0,0 +1,355 @@ 1.4 +#!/bin/sh 1.5 + 1.6 +if [ -f "./tazwok.conf" ]; then 1.7 + . ./tazwok.conf 1.8 +elif [ -f "/etc/tazwok.conf" ]; then 1.9 + . /etc/tazwok.conf 1.10 +else 1.11 + echo -e "\nUnable to find tazwok configuration file : /etc/tazwok.conf" 1.12 + exit 1 1.13 +fi 1.14 + 1.15 +QUIET="y" 1.16 +FORCE="y" 1.17 +export LABEL="slitaz_$(date +%Y%m)" 1.18 +PUBLISHER="Slitaz" 1.19 +APPLICATION="Slitaz" 1.20 +CREATE_DEFAULT="n" 1.21 +PROFILE="$(pwd)" 1.22 +ver="" 1.23 +CDNAME="slitaz" 1.24 +RMSTUFF=n 1.25 +MVSTUFF=n 1.26 +UNGZIP=n 1.27 +EXT="sqfs" 1.28 +COMPRESSION="gzip" 1.29 +MKOPTION="-b 256k" 1.30 +MODULES="" 1.31 +WORKING="$PROFILE/working" 1.32 +INITRAMFS="$WORKING/initramfs" 1.33 +UNION="$WORKING/union" 1.34 +LOG="$WORKING/log" 1.35 +ISODIR="$WORKING/iso" 1.36 +IMGNAME="$PROFILE/$CDNAME-$(date +%F).iso" 1.37 +IMGMD5NAME="$IMGNAME.md5" 1.38 +LASTBR="$WORKING/empty" 1.39 +SGNFILE="$ISODIR/$CDNAME/livecd.sgn" 1.40 +MODULES_DIR="$WORKING/modules" 1.41 +HG_DIR="$WORKING/hg" 1.42 +COPY_HG="no" 1.43 +UPDATE_HG="no" 1.44 +BACKUP_SOURCES="no" 1.45 +BACKUP_PACKAGES="no" 1.46 +CLEAN_MODULES_DIR="no" 1.47 +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" 1.48 + 1.49 +error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; } 1.50 +warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; } 1.51 +info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; } 1.52 + 1.53 +# do UID checking here so someone can at least get usage instructions 1.54 +#if [ "$EUID" != "0" ]; then 1.55 +# error "error: This script must be run as root." 1.56 +# exit 1 1.57 +#fi 1.58 + 1.59 +if [ -f ${PROFILE}/config ]; then 1.60 + source ${PROFILE}/config 1.61 +fi 1.62 + 1.63 +_overlay() 1.64 +{ 1.65 + if [ -d ${MODULES_DIR}/overlay ]; then 1.66 + rm -rf ${MODULES_DIR}/overlay 1.67 + cp -rf ${PROFILE}/overlay ${MODULES_DIR} 1.68 + else 1.69 + cp -rf ${PROFILE}/overlay ${MODULES_DIR} 1.70 + fi 1.71 + 1.72 + if [ "${QUIET}" = "y" ]; then 1.73 + mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION} >/dev/null 1.74 + else 1.75 + mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION} 1.76 + fi 1.77 +} 1.78 + 1.79 +lzma_switches() 1.80 +{ 1.81 + echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)" 1.82 +} 1.83 + 1.84 +# Pack rootfs 1.85 +pack_rootfs() 1.86 +{ 1.87 + ( cd $1 ; find . -print | cpio -o -H newc ) | \ 1.88 + if [ -x /usr/bin/lzma ]; then 1.89 + info "Generating lzma'ed initramfs... " 1.90 + lzma e -si -so $(lzma_switches $1) > $2 1.91 + else 1.92 + info "Generating gziped initramfs... " 1.93 + gzip -9 > $2 1.94 + fi 1.95 + echo 1 > /tmp/rootfs 1.96 +} 1.97 + 1.98 +initramfs () { 1.99 + 1.100 + if [ ! -e "$PROFILE/list/initramfs.list" ]; then 1.101 + error "error: $PROFILE/list/initramfs.list doesn't exist, aborting." 1.102 + exit 1 1.103 + fi 1.104 + 1.105 + info "Making bootable image" 1.106 + cat "$PROFILE/list/initramfs.list" | grep -v "^#" | while read pkgname; do 1.107 + if [ ! -d ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname} ]; then 1.108 + tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log 1.109 + sleep 1 1.110 + else 1.111 + info "${pkgname} installed" 1.112 + fi 1.113 + done 1.114 + 1.115 + if [ ! -d $ISODIR/boot ]; then 1.116 + mkdir -p $ISODIR/boot 1.117 + fi 1.118 + 1.119 + if [ ! -f $ISODIR/boot/bzImage ]; then 1.120 + cp -f $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage 1.121 + rm -f $INITRAMFS/boot/vmlinuz* 1.122 + fi 1.123 + 1.124 + info "Copying isolinux files..." 1.125 + if [ -d $INITRAMFS/boot/isolinux ]; then 1.126 + cp -a $INITRAMFS/boot/isolinux $ISODIR/boot 1.127 + fi 1.128 + 1.129 + if [ -d $PROFILE/initramfs ]; then 1.130 + cp -af $PROFILE/initramfs/* $INITRAMFS 1.131 + fi 1.132 + 1.133 + info "Creating rootfs.gz" 1.134 + pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz 1.135 +} 1.136 + 1.137 +copy_hg() { 1.138 + if [ ! -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then 1.139 + info "Cloning $1 repo ..." 1.140 + hg clone http://hg.slitaz.org/$1 ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 1.141 + elif [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 -a ${UPDATE_HG} = "yes" ]; then 1.142 + info "Updating $1 repo ..." 1.143 + cd ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 && 1.144 + hg pull && hg update 1.145 + cd $PROFILE 1.146 + fi 1.147 +} 1.148 + 1.149 +squashfs_hg() { 1.150 + if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then 1.151 + mkdir -p "$ISODIR/$CDNAME/modules/hg" 1.152 + fi 1.153 + if [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then 1.154 + _mksquash ${HG_DIR}/hg-${1} "$ISODIR/$CDNAME/modules/hg" /home/slitaz/hg/$1 1.155 + fi 1.156 +} 1.157 + 1.158 +slitaz_union () { 1.159 + 1.160 + if [ -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then 1.161 + echo "${mod} module exist. Moving on." 1.162 + elif [ ! -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then 1.163 + if [ -f "$PROFILE/list/${mod}.list" ]; then 1.164 + cat "$PROFILE/list/${mod}.list" | grep -v "^#" | while read pkgname; do 1.165 + if [ ! -d ${UNION}/var/lib/tazpkg/installed/${pkgname} ]; then 1.166 + tazpkg get-install $pkgname --root=${UNION} | tee -a ${LOG}/${mod}-current.log 1.167 + sleep 1 1.168 + else 1.169 + info "${pkgname} installed" 1.170 + fi 1.171 + done 1.172 + fi 1.173 + 1.174 + if [ -f $PROFILE/list/${mod}.removelist ]; then 1.175 + cat "$PROFILE/list/${mod}.removelist" | grep -v "^#" | while read pkgname; do 1.176 + if [ -d ${UNION}/var/lib/tazpkg/installed/${pkgname} ]; then 1.177 + echo "y" | tazpkg remove ${pkgname} --root=${UNION} | tee -a ${LOG}/${mod}-current.log 1.178 + sleep 1 1.179 + else 1.180 + info "${pkgname} removed" 1.181 + fi 1.182 + done 1.183 + fi 1.184 + fi 1.185 +} 1.186 + 1.187 +union () { 1.188 + mkdir -p $WORKING 1.189 + mkdir -p $UNION 1.190 + mkdir -p $LOG 1.191 + mkdir -p $INITRAMFS 1.192 + mkdir -p $ISODIR/${CDNAME}/base 1.193 + mkdir -p $ISODIR/${CDNAME}/modules 1.194 + mkdir -p $ISODIR/${CDNAME}/optional 1.195 + mkdir -p $ISODIR/${CDNAME}/rootcopy 1.196 + mkdir -p $ISODIR/${CDNAME}/tmp 1.197 + mkdir -p $LASTBR 1.198 + touch $SGNFILE 1.199 + 1.200 + modprobe aufs 1.201 + if [ $? -ne 0 ]; then 1.202 + error "Error loading Union filesystem module. (aufs)" 1.203 + exit 1 1.204 + fi 1.205 + 1.206 + mount -t aufs -o br:${LASTBR}=rw aufs ${UNION} 1.207 + if [ $? -ne 0 ]; then 1.208 + error "Error mounting $union." 1.209 + exit 1 1.210 + fi 1.211 + 1.212 + info "====> Installing packages to '$UNION'" 1.213 + for mod in $MODULES; do 1.214 + 1.215 + if [ "$CLEAN_MODULES_DIR" = "yes" ]; then 1.216 + if [ -d $MODULES_DIR/$mod ]; then 1.217 + rm -Rf $MODULES_DIR/$mod 1.218 + fi 1.219 + fi 1.220 + 1.221 + if [ ! -d $MODULES_DIR/$mod ]; then 1.222 + mkdir -p $MODULES_DIR/$mod 1.223 + fi 1.224 + info "Adding $MODULES_DIR/$mod as top branch of union." 1.225 + mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION 1.226 + info "Adding $LASTBR as lower branch of union." 1.227 + mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION 1.228 + LASTBR="$MODULES_DIR/${mod}" 1.229 + 1.230 + slitaz_union 1.231 + done 1.232 + 1.233 + info "Unmounting union" 1.234 + umount -l "${UNION}" 1.235 + 1.236 + info "Removing unionfs .wh. files." 1.237 + find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \; 1.238 + find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \; 1.239 +} 1.240 + 1.241 + 1.242 +# _mksquash dirname 1.243 +_mksquash () { 1.244 + if [ ! -d "$1" ]; then 1.245 + error "Error: '$1' is not a directory" 1.246 + return 1 1.247 + fi 1.248 + 1.249 + if [ ! -d "$2" ]; then 1.250 + error "Error: '$2' is not a directory" 1.251 + return 1 1.252 + fi 1.253 + 1.254 + if [ ! -d "${1}${3}" ]; then 1.255 + error "Error: '${1}${3}' is not a directory" 1.256 + return 1 1.257 + fi 1.258 + 1.259 + time_dir="${3}" 1.260 + sqimg="${2}/$(basename ${1}).${EXT}" 1.261 + info "====> Generating SquashFS image for '${1}'" 1.262 + if [ -e "${sqimg}" ]; then 1.263 + dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg}) 1.264 + if [ "${dirhaschanged}" != "" ]; then 1.265 + info "SquashFS image '${sqimg}' is not up to date, rebuilding..." 1.266 + rm "${sqimg}" 1.267 + else 1.268 + info "SquashFS image '${sqimg}' is up to date, skipping." 1.269 + return 1.270 + fi 1.271 + fi 1.272 + 1.273 + info "Creating SquashFS image. This may take some time..." 1.274 + start=$(date +%s) 1.275 + if [ "${QUIET}" = "y" ]; then 1.276 + mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null 1.277 + else 1.278 + mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION} 1.279 + fi 1.280 + minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }') 1.281 + info "Image creation done in $minutes minutes." 1.282 +} 1.283 + 1.284 +imgcommon () { 1.285 + if [ "${MODULES}" != "" ]; then 1.286 + for MOD in ${MODULES}; do 1.287 + if [ -d "${MODULES_DIR}/${MOD}" ]; then 1.288 + _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/base" /var/lib/tazpkg/installed 1.289 + fi 1.290 + done 1.291 + fi 1.292 + 1.293 + if [ "$HG_LIST" != "" ]; then 1.294 + if [ "$COPY_HG" = "yes" ]; then 1.295 + for hg in $HG_LIST; do 1.296 + copy_hg $hg 1.297 + squashfs_hg $hg 1.298 + done 1.299 + fi 1.300 + fi 1.301 + 1.302 + if [ "${HG_LIST}" != "" ]; then 1.303 + for hg in ${HG_LIST}; do 1.304 + if [ -d "${MODULES_DIR}/hg-${hg}" ]; then 1.305 + squashfs_hg $hg 1.306 + fi 1.307 + done 1.308 + fi 1.309 + 1.310 + info "====> Making bootable image" 1.311 + 1.312 + # Sanity checks 1.313 + if [ ! -d "${ISODIR}" ]; then 1.314 + error "Error: '${ISODIR}' doesn't exist. What did you do?!" 1.315 + exit 1 1.316 + fi 1.317 + 1.318 + if [ ! -f "${SGNFILE}" ]; then 1.319 + error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything" 1.320 + error " Protecting you from yourself and erroring out here..." 1.321 + exit 1 1.322 + fi 1.323 + 1.324 + 1.325 + if [ -e "${IMGNAME}" ]; then 1.326 + if [ "${FORCE}" = "y" ]; then 1.327 + info "Removing existing bootable image..." 1.328 + rm -rf "${IMGNAME}" 1.329 + else 1.330 + error "Error: Image '${IMGNAME}' already exists, aborting." 1.331 + exit 1 1.332 + fi 1.333 + fi 1.334 + 1.335 +} 1.336 + 1.337 +make_iso () { 1.338 + imgcommon 1.339 + initramfs 1.340 + 1.341 + if [ -d ${PROFILE}/overlay ]; then 1.342 + _overlay 1.343 + fi 1.344 + 1.345 + info "Creating ISO image..." 1.346 + genisoimage -R -o $IMGNAME -b boot/isolinux/isolinux.bin \ 1.347 + -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ 1.348 + -V "SliTaz" -input-charset iso8859-1 -boot-info-table $ISODIR 1.349 + if [ -x /usr/bin/isohybrid ]; then 1.350 + info "Creating hybrid ISO..." 1.351 + isohybrid "${IMGNAME}" 1.352 + fi 1.353 + md5sum "${IMGNAME}" > $IMGMD5NAME 1.354 +} 1.355 + 1.356 + 1.357 +union 1.358 +make_iso