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