slitaz-pizza view pizza-bot @ rev 108

Tiny edits, improve translations...
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri May 02 17:40:45 2014 +0000 (2014-05-02)
parents 54fe9ba8edf0
children 22259a64b86e
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"
25 logfile="/var/log/pizza.log"
27 trap 'rm -f $lockfile ; exit 1' TERM INT EXIT
29 # Help
30 usage() {
31 echo "PizzaBot v$VERSION"
32 echo "Usage: $(basename $0) [lock|unlock]"
33 exit 0
34 }
36 # Get status
37 status(){
38 if [ -f "$lockfile" ]; then
39 ps | grep ^`cat $lockfile` \
40 && echo "Pizza is running." \
41 || echo "Pizza is locked but not running!"
42 else
43 echo "Pizza is not running."
44 fi
45 echo "Flavors in queue: $(ls $queue | wc -l)"
46 }
49 # Logger: Write log
50 _logger() {
51 echo "$(date '+%Y-%m-%d %T') - $@" >> $logfile
52 }
54 # Log activities, we want first letter capitalized.
55 log() {
56 grep ^[A-Z] | \
57 sed s"#^[A-Z]\([^']*\)#$(date '+%Y-%m-%d %H:%M') : \0#" >> $activity
58 }
60 # Clean exit.
61 quit() {
62 rm -f $lockfile
63 exit 0
64 }
66 # Create a XML feed for freshly built flavor.
67 gen_rss() {
68 pubdate=$(date "+%a, %d %b %Y %X")
69 cat > $feeds/slitaz-$ID.xml << EOT
70 <item>
71 <title>$FLAVOR $VERSION</title>
72 <link>${PIZZA_URL}?id=$ID</link>
73 <guid>slitaz-$ID</guid>
74 <pubDate>$pubdate</pubDate>
75 <description>$SHORT_DESC</description>
76 </item>
77 EOT
78 }
80 # Mail body.
81 mail_body() {
82 md5=$(cat $public/slitaz-$ID/$FLAVOR.md5 | awk '{print $1}')
83 cat << EOT
84 From: SliTaz Pizza <pizza@$MAIL_DOMAIN>
85 To: $MAINTAINER
86 Date: $(date '+%a, %d %b %Y %H:%M:%S %z')
87 Subject: Flavor ISO is built
88 Content-Type: text/plain; charset=utf-8
89 Content-Transfer-Encoding: 8bit
91 Hi,
93 Your custom SliTaz GNU/Linux system is ready to download! It will be
94 hosted for as long as we can but with absolutely no warranty in time.
96 Get $FLAVOR ISO and files at: ${PIZZA_URL}?id=$ID
98 ISO size: $ISO_SIZE
99 MD5 sum: $md5
101 If you would like a long time hosting service please get in touch via our
102 professional platform at http://slitaz.pro
104 Visit http://www.slitaz.org for latest news about the project and
105 get community support on SliTaz Forum http://forum.slitaz.org
107 Sent by the SliTaz Pizza Mailer
109 EOT
110 }
112 # Run as daemon by default.
113 case "$1" in
114 help|-h)
115 usage ;;
116 status)
117 status ;;
118 lock)
119 echo $$ > $lockfile ;;
120 unlock)
121 rm -f $lockfile ;;
122 *)
123 [ -f "$lockfile" ] && echo "Pizza is locked" && exit 0
124 #~ trap 'rm -f $command && exit 1' INT TERM
125 echo $$ > $lockfile
126 name=$(ls -rt $queue | head -n 1)
127 log="$public/$name/distro.log"
128 work="$pizza/flavors"
129 [ ! "$name" ] && echo "Empty build queue" && quit
130 . $queue/$name/receipt
132 [ -z "$ID" -o -z "$FLAVOR" ] && echo "$name not valid" && quit
134 [ -d /proc/1 ] || mount -t proc /proc /proc
135 #tazpkg setup-mirror /home/slitaz/packages
136 tazpkg recharge
138 echo "Build started for flavor: <a href='?id=$ID'>$ID</a> ($FLAVOR)" | log
139 echo -e "Build started : $(date '+%Y-%m-%d %H:%M')\n" | tee -a $log
141 rm -rf $work && mkdir -p $work && cd $work
142 mv $queue/$name $FLAVOR
143 chown -R root.root $FLAVOR
144 tazlito pack-flavor $FLAVOR | tee -a $log
145 tazlito get-flavor $FLAVOR | tee -a $log
146 mv $FLAVOR.flavor $public/$name
147 sed -i s"/^ISO_NAME=.*/ISO_NAME=\"$FLAVOR\"/" tazlito.conf
148 yes '' | tazlito gen-distro 2>&1 | tee -a $log
150 # Create an XML feed
151 gen_rss
153 # We want a public packages list md5sum file and move ISO, so users
154 # can download it. Keep original pkgs list and build a complete one.
155 cp -f $FLAVOR/packages.list $public/$name
156 cd $pizza/distro
157 pkgsinst="$public/$name/installed.list"
158 rm -f $pkgsinst && touch $pkgsinst
159 for pkg in $(ls -1 rootfs/var/lib/tazpkg/installed)
160 do
161 . rootfs/var/lib/tazpkg/installed/$pkg/receipt
162 echo "$PACKAGE | $VERSION | $SHORT_DESC" >> $pkgsinst
163 done
164 echo "ISO_SIZE=\"$(du -sh $FLAVOR.iso | awk '{print $1}')\"" >> \
165 $public/$name/receipt
166 echo "ROOTFS_SIZE=\"$(du -sh rootfs | awk '{print $1}')\"" >> \
167 $public/$name/receipt
168 md5sum $FLAVOR.iso > $public/$name/$FLAVOR.md5
169 mv $FLAVOR.iso $public/$name
170 chown -R www.www $public/$name
172 # Send mail if enabled.
173 if [ "$MAIL_FROM" ]; then
174 . $public/$name/receipt
175 echo "Sending mail to: $MAINTAINER"
176 mail_body | /usr/bin/sendmail -f $MAIL_FROM $MAINTAINER
177 fi
179 # Notify Admin if enabled.
180 if [ "$MAIL_ADMIN" ]; then
181 echo "Sending mail to: $MAIL_ADMIN"
182 echo -e "From: SliTaz Pizza<noreply@slitaz.org>\nSubject: New build on Pizza\nNew flavor built on Pizza: ${PIZZA_URL}?id=$ID " \
183 | /usr/bin/sendmail -f $MAIL_FROM $MAIL_ADMIN
184 fi
186 # Count builds
187 count=$(cat $builds)
188 count=$(($count + 1))
189 echo "$count" > $builds
190 rm -f $lockfile ;;
191 esac
192 exit 0