slitaz-modular rev 52
Add slitaz-modular script to initramfs/usr/bin/ folder. This will allow it to be used on the server end since it doesn't need to make a aufs union.
author | Christopher Rogers <slaxemulator@gmail.com> |
---|---|
date | Sat Apr 09 22:21:30 2011 +0000 (2011-04-09) |
parents | 4d79a7bb8683 |
children | 44477f7be4ce |
files | initramfs/usr/bin/slitaz-modular |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/initramfs/usr/bin/slitaz-modular Sat Apr 09 22:21:30 2011 +0000 1.3 @@ -0,0 +1,392 @@ 1.4 +#!/bin/sh 1.5 + 1.6 +. /etc/slitaz/slitaz.conf 1.7 + 1.8 +BASEDIR="$LOCAL_REPOSITORY/slitaz-modular" 1.9 +PROFILE="$BASEDIR/$1" 1.10 +WORKING="$BASEDIR/working" 1.11 +CDNAME="slitaz" 1.12 +QUIET="y" 1.13 +FORCE="y" 1.14 +export LABEL="slitaz_${1}_$(date +%Y%m)" 1.15 +PUBLISHER="Slitaz-$1" 1.16 +APPLICATION="Slitaz-$1" 1.17 +EXT="xz" 1.18 +COMPRESSION="xz -Xbcj x86" 1.19 +WORKING="$PROFILE/working" 1.20 +INITRAMFS="$WORKING/initramfs" 1.21 +UNION="$WORKING/union" 1.22 +LOG="$WORKING/log" 1.23 +ISODIR="$WORKING/iso" 1.24 +IMGNAME="$PROFILE/$CDNAME-$1-$(date +%F).iso" 1.25 +IMGMD5NAME="$IMGNAME.md5" 1.26 +SGNFILE="$ISODIR/$CDNAME/livecd.sgn" 1.27 +MODULES_DIR="$WORKING/modules" 1.28 +HG_DIR="$WORKING/hg" 1.29 +HG_URL="http://hg.slitaz.org" 1.30 +HG_PATH="home/slitaz/repos" 1.31 +COPY_HG="no" 1.32 +UPDATE_HG="no" 1.33 +BACKUP_SOURCES="no" 1.34 +BACKUP_PACKAGES="no" 1.35 +MIRROR_DIR="mirror" 1.36 +PKGISO_DIR="$ISODIR/$MIRROR_DIR/packages" 1.37 +SRCISO_DIR="$ISODIR/$MIRROR_DIR/src" 1.38 +BACKUP_ALL="no" 1.39 +KEY_FILES="init liblinuxlive linuxrc" 1.40 +INSTALL_FILES="files.list md5sum receipt volatile.cpio.gz" 1.41 +CLEAN_MODULES_DIR="no" 1.42 +CLEAN_INITRAMFS="no" 1.43 +PACKAGES_REPOSITORY="$LOCAL_REPOSITORY/packages" 1.44 +INCOMING_REPOSITORY="$LOCAL_REPOSITORY/packages-incoming" 1.45 +SOURCES_REPOSITORY="$LOCAL_REPOSITORY/src" 1.46 +HG_LIST="flavors flavors-stable slitaz-base-files slitaz-boot-scripts \ 1.47 + slitaz-configs slitaz-dev-tools slitaz-doc slitaz-doc-wiki-data slitaz-forge \ 1.48 + slitaz-modular slitaz-pizza slitaz-tools tazlito tazpanel tazpkg tazusb tazweb \ 1.49 + tazwok website wok wok-stable wok-tiny wok-undigest" 1.50 + 1.51 +error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; } 1.52 +warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; } 1.53 +info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; } 1.54 + 1.55 + 1.56 +if [ ! -f "$PROFILE/packages.list" ]; then 1.57 + echo "$PROFILE/packages.list doesn't exist." 1.58 + exit 1 1.59 +elif [ ! -f "$PROFILE/config" ]; then 1.60 + echo "$PROFILE/config doesn't exist." 1.61 + exit 1 1.62 +fi 1.63 + 1.64 +cd $PROFILE 1.65 + 1.66 +lzma_switches() 1.67 +{ 1.68 + echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)" 1.69 +} 1.70 + 1.71 +# Pack rootfs 1.72 +pack_rootfs() 1.73 +{ 1.74 + ( cd $1 ; find . -print | cpio -o -H newc ) | \ 1.75 + if [ -x /usr/bin/lzma ]; then 1.76 + info "Generating lzma'ed initramfs... " 1.77 + lzma e -si -so $(lzma_switches $1) > $2 1.78 + else 1.79 + info "Generating gziped initramfs... " 1.80 + gzip -9 > $2 1.81 + fi 1.82 + echo 1 > /tmp/rootfs 1.83 +} 1.84 + 1.85 +look_for_dep() 1.86 +{ 1.87 + grep -m1 ^$1$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \ 1.88 + cut -f 2 | sed 's|^[ \t]*||g' | sed 's| |\n|g' | sed '/^$/d' 1.89 +} 1.90 + 1.91 +_overlay() 1.92 +{ 1.93 + if [ -d ${MODULES_DIR}/overlay ]; then 1.94 + rm -rf ${MODULES_DIR}/overlay 1.95 + cp -rf ${PROFILE}/overlay ${MODULES_DIR} 1.96 + cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay 1.97 + else 1.98 + cp -rf ${PROFILE}/overlay ${MODULES_DIR} 1.99 + cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay 1.100 + fi 1.101 + 1.102 + if [ -f ${MODULES_DIR}/overlay/etc/local-mirror.conf ]; then 1.103 + sed -i "s|^#PKGDIR|PKGDIR=/packages|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf 1.104 + sed -i "s|^#SRCDIR|SRCDIR=/src|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf 1.105 + fi 1.106 + create_module "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" >/dev/null 1.107 +} 1.108 + 1.109 +initramfs () { 1.110 + 1.111 + if [ ! -e "$BASEDIR/initramfs/initramfs.list" ]; then 1.112 + error "error: $BASEDIR/initramfs/initramfs.list doesn't exist, aborting." 1.113 + exit 1 1.114 + fi 1.115 + 1.116 + if [ "$CLEAN_INITRAMFS" = "yes" ]; then 1.117 + if [ -d ${INITRAMFS} ]; then 1.118 + rm -Rf ${INITRAMFS} 1.119 + fi 1.120 + fi 1.121 + 1.122 + if [ ! -d ${INITRAMFS} ]; then 1.123 + mkdir -p $INITRAMFS 1.124 + fi 1.125 + 1.126 + info "Making bootable image" 1.127 + cat "$BASEDIR/initramfs/initramfs.list" | grep -v "^#" | while read pkgname; do 1.128 + if [ ! -f ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then 1.129 + tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log 1.130 + echo "$pkgname" >> $ISODIR/packages-order.txt 1.131 + sleep 1 1.132 + else 1.133 + info "${pkgname} installed" 1.134 + fi 1.135 + done 1.136 + 1.137 + if [ ! -d $ISODIR/boot ]; then 1.138 + mkdir -p $ISODIR/boot 1.139 + fi 1.140 + 1.141 + #if [ ! -f $ISODIR/boot/bzImage ]; then 1.142 + cp -a $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage 1.143 + rm -f $INITRAMFS/boot/vmlinuz* 1.144 + if [ -f $INITRAMFS/boot/gpxe ]; then 1.145 + cp -a $INITRAMFS/boot/gpxe $ISODIR/boot/gpxe 1.146 + rm -f $INITRAMFS/boot/gpxe 1.147 + fi 1.148 + #fi 1.149 + if [ -d $BASEDIR/initramfs ]; then 1.150 + for i in $KEY_FILES; do 1.151 + if [ -f $BASEDIR/initramfs/$i ]; then 1.152 + cp -af $BASEDIR/initramfs/$i $INITRAMFS 1.153 + fi 1.154 + done 1.155 + fi 1.156 + 1.157 + if [ -f $INITRAMFS/liblinuxlive ]; then 1.158 + sed -i "s|^#MIRROR|MIRROR=$MIRROR_DIR|g" $INITRAMFS/liblinuxlive 1.159 + fi 1.160 + 1.161 +} 1.162 + 1.163 +copy_hg() { 1.164 + if [ ! -d ${HG_DIR}/${1}/${HG_PATH}/${1} ]; then 1.165 + info "Cloning $1 repo ..." 1.166 + hg clone $HG_URL/${1} ${HG_DIR}/${1}/${HG_PATH}/${1} 1.167 + if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then 1.168 + if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then 1.169 + echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc 1.170 + fi 1.171 + fi 1.172 + elif [ -d ${HG_DIR}/${1}/${HG_PATH}/${1} -a ${UPDATE_HG} = "yes" ]; then 1.173 + info "Updating $1 repo ..." 1.174 + cd ${HG_DIR}/${1}/${HG_PATH}/${1} 1.175 + hg pull $HG_URL/${1} -u 1.176 + if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then 1.177 + if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then 1.178 + echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc 1.179 + fi 1.180 + fi 1.181 + cd $PROFILE 1.182 + fi 1.183 +} 1.184 + 1.185 +mktaz2xz() 1.186 +{ 1.187 + CUR_DIR="$2" 1.188 + 1.189 + tazpkg get $1 || exit 1 1.190 + PACKAGE_FILE="$(find -name "$1*.tazpkg")" 1.191 + if [ -f "$PACKAGE_FILE" ]; then 1.192 + { cpio --quiet -i receipt > /dev/null 2>&1; } < $PACKAGE_FILE 1.193 + source receipt || exit 1 1.194 + tazpkg extract $PACKAGE-$VERSION.tazpkg 1.195 + for i in $INSTALL_FILES; do 1.196 + if [ -f "$PACKAGE-$VERSION/$i" ]; then 1.197 + mkdir -p $PACKAGE-$VERSION/fs/$INSTALLED/$PACKAGE 1.198 + cp -a $PACKAGE-$VERSION/$i $PACKAGE-$VERSION/fs/$INSTALLED/$PACKAGE/$i 1.199 + fi 1.200 + done 1.201 + md5sum $PACKAGE-$VERSION.tazpkg > $PACKAGE-$VERSION/fs/$INSTALLED/$PACKAGE/pkgmd5 1.202 + create_module $PACKAGE-$VERSION/fs $CUR_DIR/$PACKAGE-$VERSION.$EXT /var/lib/tazpkg/installed 1.203 + fi 1.204 +} 1.205 + 1.206 +backup_all() 1.207 +{ 1.208 + if [ "${BACKUP_ALL}" = "yes" ]; then 1.209 + [ -d $SRCISO_DIR ] || ln -sf $SOURCES_REPOSITORY $SRCISO_DIR 1.210 + [ -d $PKGISO_DIR ] || ln -sf $PACKAGES_REPOSITORY $PKGISO_DIR 1.211 + fi 1.212 +} 1.213 + 1.214 +create_module() 1.215 +{ 1.216 + if [ ! -d "$1" ]; then 1.217 + error "Error: '$1' is not a directory" 1.218 + return 1 1.219 + fi 1.220 + 1.221 + #if [ -d "${1}${3}" ]; then 1.222 + # time_dir="${3}" 1.223 + # sqimg="${2}/$(basename ${1}).${EXT}" 1.224 + # info "====> Generating SquashFS image for '${1}'" 1.225 + # if [ -e "${sqimg}" ]; then 1.226 + # dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg}) 1.227 + # if [ "${dirhaschanged}" != "" ]; then 1.228 + # info "SquashFS image '${sqimg}' is not up to date, rebuilding..." 1.229 + # rm -f "${sqimg}" 1.230 + # else 1.231 + # info "SquashFS image '${sqimg}' is up to date, skipping." 1.232 + # return 1.233 + # fi 1.234 + # fi 1.235 + #fi 1.236 + rm -f "$2" # overwrite, never append to existing file 1.237 + mksquashfs "$1" "$2" -b 256K -comp $COMPRESSION >/dev/null 1.238 + if [ $? -ne 0 ]; then return 1; fi 1.239 + chmod a-wx "$2" # remove execute and write attrib 1.240 + chmod a+r "$2" # add read for everyone 1.241 +} 1.242 + 1.243 +squashfs_hg() { 1.244 + if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then 1.245 + mkdir -p "$ISODIR/$CDNAME/modules/hg" 1.246 + fi 1.247 + if [ -d ${HG_DIR}/${1}/ ]; then 1.248 + create_module ${HG_DIR}/${1} "$ISODIR/$CDNAME/modules/hg/" /${HG_PATH}/${1} 1.249 + fi 1.250 +} 1.251 + 1.252 +build_modules() 1.253 +{ 1.254 + mkdir -p $WORKING 1.255 + mkdir -p $LOG 1.256 + mkdir -p $ISODIR/${CDNAME}/base 1.257 + mkdir -p $ISODIR/${CDNAME}/modules 1.258 + mkdir -p $ISODIR/${CDNAME}/optional 1.259 + mkdir -p $ISODIR/${CDNAME}/rootcopy 1.260 + mkdir -p $ISODIR/${CDNAME}/tmp 1.261 + 1.262 + touch $SGNFILE 1.263 + 1.264 + [ -f $ISODIR/packages-order.txt ] && rm -f $ISODIR/packages-order.txt 1.265 + touch $ISODIR/packages-order.txt 1.266 + 1.267 + initramfs 1.268 + 1.269 + if [ ! -d $SLITAZ_DIR/repos/wok ]; then 1.270 + hg clone $HG_URL/wok $SLITAZ/repos/wok 1.271 + fi 1.272 + 1.273 + if [ ! -f $INCOMING_REPOSITORY/wok-depends.txt ]; then 1.274 + [ -d $INCOMING_REPOSITORY ] || mkdir -p $INCOMING_REPOSITORY 1.275 + tazwok gen-wok-db --WOK=$SLITAZ_DIR/repos/wok 1.276 + fi 1.277 + 1.278 + for i in $(cat $PROFILE/packages.list); do 1.279 + look_for_dep $i > /tmp/deps 1.280 + if [ "$(cat /tmp/deps)" != "" ]; then 1.281 + cat /tmp/deps | while read d; do 1.282 + if [ ! $(grep "^$d$" $ISODIR/packages-order.txt) ]; then 1.283 + [ -d $MODULES_DIR/$d ] || mkdir -p $MODULES_DIR/$d 1.284 + [ -f $MODULES_DIR/$d/receipt ] && continue 1.285 + echo "$d" >> $ISODIR/packages-order.txt 1.286 + cd $MODULES_DIR/$d 1.287 + mktaz2xz $d $ISODIR/$CDNAME/base 1.288 + cd $PROFILE 1.289 + fi 1.290 + done 1.291 + fi 1.292 + if [ ! $(grep "^$i$" $ISODIR/packages-order.txt) ]; then 1.293 + echo "$i" >> $ISODIR/packages-order.txt 1.294 + [ -d $MODULES_DIR/$i ] || mkdir -p $MODULES_DIR/$i 1.295 + [ -f $MODULES_DIR/$i/receipt ] && continue 1.296 + cd $MODULES_DIR/$i 1.297 + mktaz2xz $i $ISODIR/$CDNAME/base 1.298 + cd $PROFILE 1.299 + fi 1.300 + done 1.301 + 1.302 +} 1.303 + 1.304 +imgcommon () { 1.305 + 1.306 + build_modules 1.307 + 1.308 + if [ "$HG_LIST" != "" ]; then 1.309 + if [ "$COPY_HG" = "yes" ]; then 1.310 + for hg in $HG_LIST; do 1.311 + copy_hg $hg 1.312 + squashfs_hg $hg 1.313 + done 1.314 + fi 1.315 + fi 1.316 + 1.317 + if [ "${HG_LIST}" != "" ]; then 1.318 + for hg in ${HG_LIST}; do 1.319 + if [ -d "${MODULES_DIR}/${hg}" ]; then 1.320 + squashfs_hg $hg 1.321 + fi 1.322 + done 1.323 + fi 1.324 + 1.325 + [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR 1.326 + [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR 1.327 + 1.328 + if [ -d ${HG_DIR}/wok ]; then 1.329 + backup_pkg 1.330 + backup_src 1.331 + fi 1.332 + 1.333 + backup_all 1.334 + 1.335 + info "====> Making bootable image" 1.336 + 1.337 + # Sanity checks 1.338 + if [ ! -d "${ISODIR}" ]; then 1.339 + error "Error: '${ISODIR}' doesn't exist. What did you do?!" 1.340 + exit 1 1.341 + fi 1.342 + 1.343 + if [ ! -f "${SGNFILE}" ]; then 1.344 + error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything" 1.345 + error " Protecting you from yourself and erroring out here..." 1.346 + exit 1 1.347 + fi 1.348 + 1.349 + 1.350 + if [ -e "${IMGNAME}" ]; then 1.351 + if [ "${FORCE}" = "y" ]; then 1.352 + info "Removing existing bootable image..." 1.353 + rm -rf "${IMGNAME}" 1.354 + else 1.355 + error "Error: Image '${IMGNAME}' already exists, aborting." 1.356 + exit 1 1.357 + fi 1.358 + fi 1.359 + 1.360 +} 1.361 + 1.362 +make_iso () { 1.363 + imgcommon 1.364 + 1.365 + info "Creating rootfs.gz" 1.366 + pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz 1.367 + 1.368 + if [ -d $PROFILE/rootcd ]; then 1.369 + cp -af $PROFILE/rootcd/* $ISODIR/ 1.370 + fi 1.371 + 1.372 + info "Copying isolinux files..." 1.373 + if [ -d $INITRAMFS/boot/isolinux ]; then 1.374 + mv -f $INITRAMFS/boot/isolinux $ISODIR/boot 1.375 + fi 1.376 + 1.377 + if [ -d ${PROFILE}/overlay ]; then 1.378 + _overlay 1.379 + fi 1.380 + 1.381 + info "Creating ISO image..." 1.382 + genisoimage -R -l -f -o $IMGNAME -b boot/isolinux/isolinux.bin \ 1.383 + -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \ 1.384 + -uid 0 -gid 0 \ 1.385 + -udf -allow-limited-size -iso-level 3 \ 1.386 + -V "SliTaz" -input-charset utf-8 -boot-info-table $ISODIR 1.387 + if [ -x /usr/bin/isohybrid ]; then 1.388 + info "Creating hybrid ISO..." 1.389 + isohybrid "${IMGNAME}" 1.390 + fi 1.391 + md5sum "$IMGNAME" > $IMGMD5NAME 1.392 + sed -i "s|$PROFILE/||g" $IMGMD5NAME 1.393 +} 1.394 + 1.395 +make_iso