slitaz-pizza view pizza-bot @ rev 99

pizza-bot: tiny edits
author Paul Issott <paul@slitaz.org>
date Sat May 11 08:02:32 2013 +0100 (2013-05-11)
parents b143175d2095
children 54fe9ba8edf0
line source
1 #!/bin/sh
2 #
3 # SliTaz Pizza chroot cmdline utility. This tool is designed to be run
4 # by cron and automatically build flavors in the queue. We build one ISO
5 # at a time so we don't use too many resources.
6 #
7 # Copyright (C) 2012 SliTaz GNU/Linux - GNU gpl v2
8 # Authors : Christophe Lincoln <pankso@slitaz.org>
9 # Eric Joseph-Alexandre <erjo@slitaz.org>
10 #
12 VERSION=1.0
14 . /etc/slitaz/pizza-bot.conf
16 # Pizza DB files.
17 pizza="/home/slitaz"
18 cache="$pizza/cache"
19 queue="$pizza/queue"
20 activity="$cache/activity"
21 public="$pizza/public"
22 builds="$cache/builds"
23 lockfile="/var/lock/pizza.lock"
24 feeds="$pizza/xml"
26 trap 'rm -f $lockfile ; exit 1' TERM INT
28 # Help
29 usage() {
30 echo "PizzaBot v$VERSION"
31 echo "Usage: $(basename $0) [lock|unlock]"
32 exit 0
33 }
35 # Get status
36 status(){
37 if [ -f "$lockfile" ]; then
38 ps | grep ^`cat $lockfile` \
39 && echo "Pizza is running." \
40 || echo "Pizza is locked but not running!"
41 else
42 echo "Pizza is not running."
43 fi
44 echo "Flavors in queue: $(ls $queue | wc -l)"
45 }
48 # Logger: Write log
49 _logger() {
50 printf "%s pizza-bot: %s\n" `date '+%D %H'` $@
51 }
53 # Log activities, we want first letter capitalized.
54 log() {
55 grep ^[A-Z] | \
56 sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity
57 }
59 # Clean exit.
60 quit() {
61 rm -f $lockfile
62 exit 0
63 }
65 # Create a XML feed for freshly built flavor.
66 gen_rss() {
67 pubdate=$(date "+%a, %d %b %Y %X")
68 cat > $feeds/slitaz-$ID.xml << EOT
69 <item>
70 <title>$FLAVOR $VERSION</title>
71 <link>${PIZZA_URL}?id=$ID</link>
72 <guid>slitaz-$ID</guid>
73 <pubDate>$pubdate</pubDate>
74 <description>$SHORT_DESC</description>
75 </item>
76 EOT
77 }
79 # Mail body.
80 mail_body() {
81 md5=$(cat $public/slitaz-$ID/$FLAVOR.md5 | awk '{print $1}')
82 cat << EOT
83 From: SliTaz Pizza <pizza@$MAIL_DOMAIN>
84 To: $MAINTAINER
85 Date: $(date '+%a, %d %b %Y %H:%M:%S %z')
86 Subject: Flavor ISO is built
87 Content-Type: text/plain; charset=utf-8
88 Content-Transfer-Encoding: 8bit
90 Hi,
92 Your custom SliTaz GNU/Linux system is ready to download! It will be
93 hosted for as long as we can but with absolutely no warranty in time.
95 Get $FLAVOR ISO and files at: ${PIZZA_URL}?id=$ID
97 ISO size: $ISO_SIZE
98 MD5 sum: $md5
100 If you would like a long time hosting service please get in touch via our
101 professional platform at http://slitaz.pro
103 Visit http://www.slitaz.org for latest news about the project and
104 get community support on SliTaz Forum http://forum.slitaz.org
106 Sent by the SliTaz Pizza Mailer
108 EOT
109 }
111 # Run as daemon by default.
112 case "$1" in
113 help|-h)
114 usage ;;
115 status)
116 status ;;
117 lock)
118 echo $$ > $lockfile ;;
119 unlock)
120 rm -f $lockfile ;;
121 *)
122 [ -f "$lockfile" ] && echo "Pizza is locked" && exit 0
123 #~ trap 'rm -f $command && exit 1' INT TERM
124 echo $$ > $lockfile
125 name=$(ls -rt $queue | head -n 1)
126 log="$public/$name/distro.log"
127 work="$pizza/flavors"
128 [ ! "$name" ] && echo "Empty build queue" && quit
129 . $queue/$name/receipt
131 [ -z "$ID" -o -z "$FLAVOR" ] && echo "$name not valid" && quit
133 [ -d /proc/1 ] || mount -t proc /proc /proc
134 #tazpkg setup-mirror /home/slitaz/packages
135 tazpkg recharge
137 echo "Build started for flavor: <a href='?id=$ID'>$ID</a> ($FLAVOR)" | log
138 echo -e "Build started : $(date '+%Y-%m-%d %H:%M')\n" | tee -a $log
140 rm -rf $work && mkdir -p $work && cd $work
141 mv $queue/$name $FLAVOR
142 chown -R root.root $FLAVOR
143 tazlito pack-flavor $FLAVOR | tee -a $log
144 tazlito get-flavor $FLAVOR | tee -a $log
145 mv $FLAVOR.flavor $public/$name
146 sed -i s"/^ISO_NAME=.*/ISO_NAME=\"$FLAVOR\"/" tazlito.conf
147 yes '' | tazlito gen-distro 2>&1 | tee -a $log
149 # Create an XML feed
150 gen_rss
152 # We want a public packages list md5sum file and move ISO so users
153 # can download it. Keep original pkgs list and build a complete one.
154 cp -f $FLAVOR/packages.list $public/$name
155 cd $pizza/distro
156 pkgsinst="$public/$name/installed.list"
157 rm -f $pkgsinst && touch $pkgsinst
158 for pkg in $(ls -1 rootfs/var/lib/tazpkg/installed)
159 do
160 . rootfs/var/lib/tazpkg/installed/$pkg/receipt
161 echo "$PACKAGE | $VERSION | $SHORT_DESC" >> $pkgsinst
162 done
163 echo "ISO_SIZE=\"$(du -sh $FLAVOR.iso | awk '{print $1}')\"" >> \
164 $public/$name/receipt
165 echo "ROOTFS_SIZE=\"$(du -sh rootfs | awk '{print $1}')\"" >> \
166 $public/$name/receipt
167 md5sum $FLAVOR.iso > $public/$name/$FLAVOR.md5
168 mv $FLAVOR.iso $public/$name
169 chown -R www.www $public/$name
171 # Send mail if enabled.
172 if [ "$MAIL_FROM" ]; then
173 . $public/$name/receipt
174 echo "Sending mail to: $MAINTAINER"
175 mail_body | /usr/bin/sendmail -f $MAIL_FROM $MAINTAINER
176 fi
178 # Notify Admin if enabled.
179 if [ "$MAIL_ADMIN" ]; then
180 echo "Sending mail to: $MAIL_ADMIN"
181 echo -e "From: SliTaz Pizza<noreply@slitaz.org>\nSubject: New build on Pizza\nNew flavor built on Pizza: ${PIZZA_URL}?id=$ID " \
182 | /usr/bin/sendmail -f $MAIL_FROM $MAIL_ADMIN
183 fi
185 # Count builds
186 count=$(cat $builds)
187 count=$(($count + 1))
188 echo "$count" > $builds
189 rm -f $lockfile ;;
190 esac
191 exit 0