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