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