slitaz-pizza rev 2

Add pizza cmdline utility
author Christophe Lincoln <pankso@slitaz.org>
date Sat Mar 24 22:54:44 2012 +0100 (2012-03-24)
parents 154e0522d7aa
children 2eef72f5b3fb
files pizza
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/pizza	Sat Mar 24 22:54:44 2012 +0100
     1.3 @@ -0,0 +1,210 @@
     1.4 +#!/bin/sh
     1.5 +#
     1.6 +# SliTaz Pizza host cmdline utility - Create environment, chroot, clean
     1.7 +# Backup and purge should be done via cron jobs.
     1.8 +#
     1.9 +
    1.10 +[ -f "/etc/slitaz/pizza.conf" ] && . /etc/slitaz/pizza.conf
    1.11 +[ -f "pizza.conf" ] && . ./pizza.conf
    1.12 +
    1.13 +# Pizza DB files.
    1.14 +chroot="$PIZZA/chroot"
    1.15 +pkgs="${chroot}$SLITAZ/packages"
    1.16 +cache="${chroot}$SLITAZ/cache"
    1.17 +queue="${chroot}$SLITAZ/queue"
    1.18 +tmp="${chroot}$SLITAZ/tmp"
    1.19 +feeds="${chroot}$SLITAZ/xml"
    1.20 +activity="$cache/activity"
    1.21 +builds="$cache/builds"
    1.22 +public="$VHOST/public"
    1.23 +bindpub="${chroot}$SLITAZ/public"
    1.24 +
    1.25 +#
    1.26 +# Functions
    1.27 +#
    1.28 +
    1.29 +usage() {
    1.30 +	cat << EOT
    1.31 +
    1.32 +$(echo -e "\033[1mUsage:\033[0m") pizza [command]
    1.33 +
    1.34 +$(echo -e "\033[1mCommands:\033[0m")
    1.35 +  usage        Display this short usage.
    1.36 +  setup        Setup Pizza build environment.
    1.37 +  up-files     Update chroot and web files from datadir.
    1.38 +  exec         Execute a command in chroot.
    1.39 +  chroot       Chroot in Pizza environment.
    1.40 +  start        Start Pizza bot and mount packages.
    1.41 +  stop         Stop Pizza and unmount packages.
    1.42 +  get-lists    Get latest skel packages list from Hg.
    1.43 +  sync-pkgs    Sync packages from SliTaz mirror.
    1.44 +  purge        Purge Pizza tmp directory.
    1.45 +  clean        Complet chroot clean-up.
    1.46 +
    1.47 +EOT
    1.48 +}
    1.49 +
    1.50 +# Status function.
    1.51 +status() {
    1.52 +	if [ $? = 0 ]; then
    1.53 +		echo " OK"
    1.54 +	else
    1.55 +		echo " Failed"
    1.56 +	fi
    1.57 +}
    1.58 +
    1.59 +# Get latest skel packages list
    1.60 +get_pkgs_lists() {
    1.61 +	cd $cache
    1.62 +	for skel in base justx gtkonly core
    1.63 +	do
    1.64 +		echo -n "Getting $skel packages list... "
    1.65 +		wget -O packages.$skel \
    1.66 +			$HG/raw-file/tip/$skel/packages.list 2>/dev/null
    1.67 +		echo "Done"
    1.68 +	done
    1.69 +}
    1.70 +
    1.71 +# The Bot is chrooted and can't access main pizza.conf
    1.72 +bot_config()
    1.73 +{
    1.74 +	config=$chroot/etc/slitaz/pizza-bot.conf
    1.75 +	echo '# Pizza Bot configuration.' > $config
    1.76 +	grep ^PIZZA_URL /etc/slitaz/pizza.conf >> $config
    1.77 +	grep ^MAIL_DOMAIN /etc/slitaz/pizza.conf >> $config
    1.78 +	grep ^MAIL_SERVER /etc/slitaz/pizza.conf >> $config
    1.79 +}
    1.80 +
    1.81 +#
    1.82 +# Commands
    1.83 +#
    1.84 +
    1.85 +case "$1" in
    1.86 +	setup)
    1.87 +		# Setup build host.
    1.88 +		crontabs="$chroot/var/spool/cron/crontabs"
    1.89 +		if [ -d "$chroot/proc" ]; then
    1.90 +			echo "Chroot already exist: $chroot" && exit 0
    1.91 +		fi
    1.92 +		echo ""
    1.93 +		echo "Setting up Pizza environment..."
    1.94 +		mkdir -p $crontabs $cache $pkgs $tmp $queue $bindpub $feeds
    1.95 +		touch $activity $builds
    1.96 +		chmod 0777 $tmp $queue $cache
    1.97 +		chmod 0666 $activity
    1.98 +		for pkg in slitaz-base-files busybox tazlito tazpkg postfix
    1.99 +		do
   1.100 +			echo "Installing package: $pkg"
   1.101 +			tazpkg -gi $pkg --root=$chroot >/dev/null
   1.102 +		done
   1.103 +		
   1.104 +		# Files
   1.105 +		echo -n "Creating needed files..."
   1.106 +		cp -f /etc/resolv.conf $chroot/etc
   1.107 +		mkdir -p $chroot/etc/init.d
   1.108 +		bot_config
   1.109 +		# No more needed when slitaz-base-files have rc.functions
   1.110 +		cp -f /etc/init.d/rc.functions $chroot/etc/init.d
   1.111 +		echo '# Check pizza queue each 5 min' > $crontabs/root
   1.112 +		echo '*/20  * * * * /usr/bin/pizza-bot' >> $crontabs/root
   1.113 +		status
   1.114 +		
   1.115 +		# We want Tazlito to build ISO's in /home/slitaz
   1.116 +		echo -n "Updating Tazlito default configuration..."
   1.117 +		sed -i s'/^WORK_DIR=.*/WORK_DIR="\/home\/slitaz"/' \
   1.118 +			$chroot/etc/tazlito/tazlito.conf
   1.119 +		status
   1.120 +		
   1.121 +		echo -n "Installing Pizza Bot..." 
   1.122 +		cp -a $DATA/pizza-bot $chroot/usr/bin
   1.123 +		status
   1.124 +		cd $cache && get_pkgs_lists
   1.125 +		
   1.126 +		# Web interface and public dir
   1.127 +		echo -n "Installing the web interface..."
   1.128 +		mkdir -p $public && chmod 0777 $public
   1.129 +		cp -a $DATA/web/* $VHOST
   1.130 +		status
   1.131 +		echo "Pizza chroot : $chroot"
   1.132 +		echo "Vhost path   : $VHOST"
   1.133 +		echo ""
   1.134 +		echo "To start Pizza Bot: $(basename $0) start"
   1.135 +		echo "" ;;
   1.136 +	up-files)
   1.137 +		# Update files in chroot when pizza is update on host.
   1.138 +		echo -n "Updating chroot and virtual host..."
   1.139 +		cp -a $DATA/web/* $VHOST
   1.140 +		cp -a $DATA/pizza-bot $chroot/usr/bin 
   1.141 +		bot_config
   1.142 +		status ;;
   1.143 +	exec)
   1.144 +		# Execute a command in chroot.
   1.145 +		[ "$2" ] || exit 0
   1.146 +		chroot $chroot $2 ;;
   1.147 +	chroot)
   1.148 +		# Chroot in Pizza environment.
   1.149 +		echo -e "\nChrooting to: $chroot\n"
   1.150 +		chroot $chroot /bin/sh --login
   1.151 +		echo -e "\nExiting Pizza chroot...\n" ;;
   1.152 +	start)
   1.153 +		# Mount and start Pizza
   1.154 +		if ! mount | fgrep -q "pizza/chroot"; then
   1.155 +			gettext -e "Mounting packages and public...\n"
   1.156 +			mount -o bind $SLITAZ/$SLITAZ_VERSION/packages $pkgs
   1.157 +			mount -o bind $public $bindpub
   1.158 +		fi
   1.159 +		chroot $chroot /etc/init.d/crond start 
   1.160 +		[ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix start ;;
   1.161 +	stop)
   1.162 +		# unmount and stop Pizza
   1.163 +		if mount | fgrep -q "pizza/chroot"; then
   1.164 +			gettext -e "Unmounting packages and public...\n"
   1.165 +			umount $pkgs
   1.166 +			umount $bindpub
   1.167 +		fi 
   1.168 +		chroot $chroot /etc/init.d/crond stop 
   1.169 +		[ "$MAIL_DOMAIN" ] && chroot $chroot /etc/init.d/postfix stop ;;
   1.170 +	get-lists)
   1.171 +		get_pkgs_lists ;;
   1.172 +	sync-pkgs)
   1.173 +		echo "Syncing all $SLITAZ_VERSION packages..."
   1.174 +		rsync -azH --delete rsync://mirror.slitaz.org/slitaz-$SLITAZ_VERSION/ 
   1.175 +			$SLITAZ/$SLITAZ_VERSION/packages/ ;;
   1.176 +	backup)
   1.177 +		echo "Creating Pizza backup..."
   1.178 +		bak="pizza-$(date "+%Y%m%d")"
   1.179 +		dir="$PIZZA/backups/$bak"
   1.180 +		mkdir -p $dir && cd $PIZZA/backups
   1.181 +		cp -a $cache $dir
   1.182 +		cp -a $chroot/home/slitaz/xml $dir
   1.183 +		for flavor in $(ls $public)
   1.184 +		do
   1.185 +			if [ -f "$public/$flavor/receipt" ]; then
   1.186 +				mkdir -p $dir/public/$flavor
   1.187 +				. $public/$flavor/receipt
   1.188 +				cp -f $public/$flavor/$FLAVOR.flavor \
   1.189 +					$dir/public/$flavor 2>/dev/null
   1.190 +			fi
   1.191 +		done
   1.192 +		tar cf $bak.tar $bak && rm -rf $bak
   1.193 +		lzma e $bak.tar $bak.tar.lzma 
   1.194 +		du -sh $bak.tar.lzma ;;
   1.195 +	purge)
   1.196 +		# Remove tmp file older than 24 hours and ISO older than 15 days.
   1.197 +		# TODO: Improve and use configs from pizza.conf
   1.198 +		echo "Purging tmp files..."
   1.199 +		find $tmp -mtime +1 | xargs rm -f
   1.200 +		echo "Purging ISO's..."
   1.201 +		find $public -mtime +15 | xargs rm -f ;;
   1.202 +	clean)
   1.203 +		# Clean all chroot.
   1.204 +		echo -e "\nCleaning: $chroot"
   1.205 +		cd $chroot || exit 1
   1.206 +		for i in *
   1.207 +		do
   1.208 +			[ "$i" == "home" ] || rm -rf $i
   1.209 +		done && echo "" ;;
   1.210 +	*)
   1.211 +		usage ;;
   1.212 +esac
   1.213 +exit 0