slitaz-pizza rev 3

Add pizza-bot (The tool used in the chroot to cook flavors in queue)
author Christophe Lincoln <pankso@slitaz.org>
date Sat Mar 24 22:56:00 2012 +0100 (2012-03-24)
parents b47a664d4089
children 97d07d13d0a3
files pizza-bot
line diff
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/pizza-bot	Sat Mar 24 22:56:00 2012 +0100
     1.3 @@ -0,0 +1,146 @@
     1.4 +#!/bin/sh
     1.5 +#
     1.6 +# SliTaz Pizza chroot cmdline utility. This tool is designed to be run 
     1.7 +# by cron and automaticaly build flavors in the queue. We build one ISO
     1.8 +# at once so we dont use too much resources.
     1.9 +#
    1.10 +# Copyright (C) 2012 SliTaz GNU/Linux - GNU gpl v2
    1.11 +# Authors : Christophe Lincoln <pankso@slitaz.org>
    1.12 +#
    1.13 +
    1.14 +. /etc/slitaz/pizza-bot.conf
    1.15 +
    1.16 +# Pizza DB files.
    1.17 +pizza="/home/slitaz"
    1.18 +cache="$pizza/cache"
    1.19 +queue="$pizza/queue"
    1.20 +activity="$cache/activity"
    1.21 +public="$pizza/public"
    1.22 +builds="$cache/builds"
    1.23 +lockfile="/var/lock/pizza.lock"
    1.24 +feeds="$pizza/xml"
    1.25 +
    1.26 +# Log activities, we want first letter capitalized.
    1.27 +log() {
    1.28 +	grep ^[A-Z] | \
    1.29 +		sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity
    1.30 +}
    1.31 +
    1.32 +# Clean exit.
    1.33 +quit() {
    1.34 +	rm -f $lockfile
    1.35 +	exit 0
    1.36 +}
    1.37 +
    1.38 +# Create a XML feed for freshly builded flavor.
    1.39 +gen_rss() {
    1.40 +	pubdate=$(date "+%a, %d %b %Y %X")
    1.41 +	cat > $feeds/slitaz-$ID.xml << EOT
    1.42 +	<item>
    1.43 +		<title>$FLAVOR $VERSION</title>
    1.44 +		<link>${PIZZA_URL}?id=$ID</link>
    1.45 +		<guid>slitaz-$ID</guid>
    1.46 +		<pubDate>$pubdate</pubDate>
    1.47 +		<description>$SHORT_DESC</description>
    1.48 +	</item>
    1.49 +EOT
    1.50 +}
    1.51 +
    1.52 +# Mail body.
    1.53 +mail_body() {
    1.54 +	md5=$(cat $public/slitaz-$ID/$FLAVOR.md5 | awk '{print $1}')
    1.55 +	cat << EOT
    1.56 +From: SliTaz Pizza <pizza@$MAIL_DOMAIN>
    1.57 +To: $MAINTAINER
    1.58 +Date: $(date '+%a, %d %b %Y %H:%M:%S %z')
    1.59 +Subject: Flavor ISO is built
    1.60 +Content-Type: text/plain; charset=utf-8
    1.61 +Content-Transfer-Encoding: 8bit
    1.62 +
    1.63 +Hi,
    1.64 +
    1.65 +Your custom SliTaz GNU/Linux system is ready to download! It will be
    1.66 +hosted a as long as we can but with absolutely no warranty in time.
    1.67 +
    1.68 +Get $FLAVOR ISO and files at: ${PIZZA_URL}?id=slitaz-$ID
    1.69 +
    1.70 +ISO size: $ISO_SIZE
    1.71 +MD5 sum: $md5
    1.72 +
    1.73 +If you wish a long time service hosting please get in touch via our 
    1.74 +professional platform at http://slitaz.pro
    1.75 +
    1.76 +Visit http://www.slitaz.org for latest news about the project and
    1.77 +get community support on SliTaz Forum http://forum.slitaz.org
    1.78 +
    1.79 +Sended by the SliTaz Pizza Mailer
    1.80 +
    1.81 +EOT
    1.82 +}
    1.83 +
    1.84 +# Run as daemon by default.
    1.85 +case "$1" in
    1.86 +	usage)
    1.87 +		echo "Usage: $(basename $0) [lock|unlock]" ;;
    1.88 +	lock)
    1.89 +		echo $$ > $lockfile ;;
    1.90 +	unlock)
    1.91 +		rm -f $lockfile ;;
    1.92 +	*)
    1.93 +		[ -f "$lockfile" ] && echo "Pizza is locked" && exit 0
    1.94 +		trap 'rm -f $command && exit 1' INT TERM
    1.95 +		echo $$ > $lockfile
    1.96 +		name=$(ls -rt $queue | head -n 1)
    1.97 +		log="$public/$name/distro.log"
    1.98 +		work="$pizza/flavors"
    1.99 +		[ ! "$name" ] && echo "Empty build queue" && quit
   1.100 +		. $queue/$name/receipt
   1.101 +		
   1.102 +		echo "Build started for flavor: <a href='?id=$ID'>$ID</a>" | log
   1.103 +		echo -e "Build started   : $(date '+%Y-%m-%d %H:%M')\n" | tee -a $log
   1.104 +		
   1.105 +		rm -rf $work && mkdir -p $work && cd $work
   1.106 +		mv $queue/$name $FLAVOR
   1.107 +		chown -R root.root $FLAVOR
   1.108 +		tazlito pack-flavor $FLAVOR | tee -a $log
   1.109 +		tazlito get-flavor $FLAVOR | tee -a $log
   1.110 +		mv $FLAVOR.flavor $public/$name
   1.111 +		sed -i s"/^ISO_NAME=.*/ISO_NAME=\"$FLAVOR\"/" tazlito.conf
   1.112 +		yes '' | tazlito gen-distro 2>&1 | tee -a $log
   1.113 +		
   1.114 +		# Create an XML feed
   1.115 +		gen_rss
   1.116 +		
   1.117 +		# We want a public packages list md5sum file and move ISO so users
   1.118 +		# can download it. Keep original pkgs list and build a complet one.
   1.119 +		cp -f $FLAVOR/packages.list $public/$name
   1.120 +		cd $pizza/distro
   1.121 +		pkgsinst="$public/$name/installed.list"
   1.122 +		rm -f $pkgsinst && touch $pkgsinst
   1.123 +		for pkg in $(ls -1 rootfs/var/lib/tazpkg/installed)
   1.124 +		do
   1.125 +			. rootfs/var/lib/tazpkg/installed/$pkg/receipt
   1.126 +			echo "$PACKAGE | $VERSION | $SHORT_DESC" >> $pkgsinst
   1.127 +		done
   1.128 +		echo "ISO_SIZE=\"$(du -sh $FLAVOR.iso | awk '{print $1}')\"" >> \
   1.129 +			$public/$name/receipt
   1.130 +		echo "ROOTFS_SIZE=\"$(du -sh rootfs | awk '{print $1}')\"" >> \
   1.131 +			$public/$name/receipt
   1.132 +		md5sum $FLAVOR.iso > $public/$name/$FLAVOR.md5
   1.133 +		mv $FLAVOR.iso $public/$name
   1.134 +		chown -R www.www $public/$name
   1.135 +		
   1.136 +		# Send mail if enabled.
   1.137 +		if [ "$MAIL_DOMAIN" ]; then
   1.138 +			. $public/$name/receipt
   1.139 +			echo "Sending mail to: $MAINTAINER"
   1.140 +			mail_body | /usr/sbin/sendmail $MAINTAINER
   1.141 +		fi
   1.142 +		
   1.143 +		# Count builds
   1.144 +		count=$(cat $builds)
   1.145 +		count=$(($count + 1))
   1.146 +		echo "$count" > $builds
   1.147 +		rm -f $lockfile ;;
   1.148 +esac
   1.149 +exit 0