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