slitaz-pizza annotate web/pizza.cgi @ rev 14
Add Gravatar support to flavor status page
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Mon Mar 26 13:05:04 2012 +0200 (2012-03-26) |
parents | 717e991b3c18 |
children | 05bb87925527 |
rev | line source |
---|---|
pankso@7 | 1 #!/bin/sh |
pankso@7 | 2 # |
paul@9 | 3 # SliTaz Pizza CGI/web interface - Let's have a pizza :-) |
pankso@7 | 4 # Please KISS, it is important and keep speed in mind. Thanks, Pankso. |
pankso@7 | 5 # |
pankso@7 | 6 |
pankso@7 | 7 # Output a RSS feed of latest build isos. |
pankso@7 | 8 if [ "$QUERY_STRING" == "rss" ]; then |
pankso@7 | 9 . /etc/slitaz/pizza.conf |
pankso@7 | 10 pubdate=$(date "+%a, %d %b %Y %X") |
pankso@7 | 11 cat << EOT |
pankso@7 | 12 Content-Type: text/xml |
pankso@7 | 13 |
pankso@7 | 14 <?xml version="1.0" encoding="utf-8" ?> |
pankso@7 | 15 <rss version="2.0"> |
pankso@7 | 16 <channel> |
pankso@7 | 17 <title>SliTaz Pizza</title> |
pankso@7 | 18 <description>The SliTaz Pizza cooker feed</description> |
pankso@7 | 19 <link>$PIZZA_URL</link> |
pankso@7 | 20 <lastBuildDate>$pubdate GMT</lastBuildDate> |
pankso@7 | 21 <pubDate>$pubdate GMT</pubDate> |
pankso@7 | 22 EOT |
pankso@7 | 23 for rss in $(ls -1t $PIZZA/chroot${SLITAZ}/xml/*.xml | head -n 12) |
pankso@7 | 24 do |
pankso@7 | 25 cat $rss |
pankso@7 | 26 done |
pankso@7 | 27 cat << EOT |
pankso@7 | 28 </channel> |
pankso@7 | 29 </rss> |
pankso@7 | 30 EOT |
pankso@7 | 31 exit 0 |
pankso@7 | 32 fi |
pankso@7 | 33 |
pankso@7 | 34 # Content negotiation for Gettext |
pankso@7 | 35 IFS="," |
pankso@7 | 36 for lang in $HTTP_ACCEPT_LANGUAGE |
pankso@7 | 37 do |
pankso@7 | 38 lang=${lang%;*} lang=${lang# } lang=${lang%-*} |
pankso@7 | 39 [ -d "$lang" ] && break |
pankso@7 | 40 case "$lang" in |
pankso@7 | 41 en) lang="C" ;; |
pankso@7 | 42 fr) lang="fr_FR" ;; |
pankso@7 | 43 esac |
pankso@7 | 44 done |
pankso@7 | 45 unset IFS |
pankso@7 | 46 export LANG=$lang LC_ALL=$lang |
pankso@7 | 47 |
pankso@7 | 48 # Internationalization: $(gettext "") |
pankso@7 | 49 . /usr/bin/gettext.sh |
pankso@7 | 50 TEXTDOMAIN='pizza' |
pankso@7 | 51 export TEXTDOMAIN |
pankso@7 | 52 |
pankso@7 | 53 . lib/libpizza |
pankso@7 | 54 |
pankso@7 | 55 # |
pankso@7 | 56 # Commands |
pankso@7 | 57 # |
pankso@7 | 58 |
pankso@7 | 59 case " $(GET) " in |
pankso@7 | 60 *\ start\ *) |
pankso@7 | 61 # |
pankso@7 | 62 # First step |
pankso@7 | 63 # |
pankso@7 | 64 date=$(date "+%Y%m%d") |
pankso@7 | 65 id=$date-$$ |
pankso@7 | 66 cat << EOT |
pankso@7 | 67 <h2>$(gettext "First step")</h2> |
pankso@7 | 68 <p> |
paul@9 | 69 $(gettext "Choose your distribution name and the one you want to use as |
paul@9 | 70 base. We need your mail to notify you when your SliTaz Flavor is built |
paul@9 | 71 and if anything goes wrong.") |
pankso@7 | 72 </p> |
pankso@7 | 73 <form method="get" action="pkgs.cgi" name="pizza" onsubmit="return checkForm();"> |
pankso@7 | 74 <table> |
pankso@7 | 75 <tbody> |
pankso@7 | 76 <tr> |
pankso@7 | 77 <td>$(gettext "Flavor name")</td> |
pankso@7 | 78 <td><input type="text" name="flavor" size="40" /></td> |
pankso@7 | 79 </tr> |
pankso@7 | 80 <tr> |
pankso@7 | 81 <td>$(gettext "Short description")</td> |
pankso@7 | 82 <td><input type="text" name="desc" size="40" /></td> |
pankso@7 | 83 </tr> |
pankso@7 | 84 <tr> |
pankso@7 | 85 <td>$(gettext "Email")</td> |
pankso@7 | 86 <td><input type="text" name="mail" size="40" /></td> |
pankso@7 | 87 </tr> |
pankso@7 | 88 <tr> |
pankso@7 | 89 <td>$(gettext "Based on")</td> |
pankso@7 | 90 <td> |
pankso@7 | 91 <select name="skel"> |
pankso@7 | 92 <option value="base"> |
pankso@7 | 93 Base - $(gettext "Text mode system")</option> |
pankso@7 | 94 <option value="justx"> |
pankso@7 | 95 Justx - $(gettext "X without GTK or QT")</option> |
pankso@7 | 96 <option value="gtkonly"> |
pankso@7 | 97 Gtkonly - $(gettext "Clean GTK desktop")</option> |
pankso@7 | 98 <option value="core"> |
pankso@7 | 99 Core - $(gettext "Default SliTaz desktop")</option> |
pankso@7 | 100 </select> |
pankso@7 | 101 </td> |
pankso@7 | 102 </tr> |
pankso@7 | 103 </tbody> |
pankso@7 | 104 </table> |
pankso@7 | 105 <pre> |
pankso@7 | 106 Uniq ID : $id |
pankso@7 | 107 </pre> |
pankso@7 | 108 <div class="next"> |
pankso@7 | 109 <input type="hidden" name="id" value="$id" /> |
pankso@7 | 110 <input type="submit" value="$(gettext "Continue")"> |
pankso@7 | 111 </div> |
pankso@7 | 112 </form> |
pankso@7 | 113 EOT |
pankso@7 | 114 ;; |
pankso@7 | 115 *\ gen\ *) |
pankso@7 | 116 # |
pankso@7 | 117 # Generate step |
pankso@7 | 118 # |
pankso@7 | 119 id="$(GET id)" |
pankso@7 | 120 . $tmpdir/slitaz-$id/receipt |
pankso@7 | 121 addfiles=$(find $tmpdir/slitaz-$id/addfiles -type f | wc -l) |
pankso@7 | 122 [ "$addfiles" ] || addfiles=0 |
pankso@7 | 123 packages=$(cat $tmpdir/slitaz-$id/packages.list | wc -l) |
pankso@7 | 124 cat << EOT |
pankso@7 | 125 <h2>$(gettext "Generate")</h2> |
pankso@7 | 126 <p> |
pankso@7 | 127 Last chance to stop process or start over. Next step will pack your |
paul@9 | 128 flavor and add it to the build queue. Here you can also add a note to |
pankso@7 | 129 your receipt flavor, this will be displayed on your flavor ID page |
paul@9 | 130 and can be used to give more info to other users and SliTaz developers. |
pankso@7 | 131 </p> |
pankso@7 | 132 <pre> |
pankso@7 | 133 Uniq ID : $id |
pankso@7 | 134 Flavor : $FLAVOR |
pankso@7 | 135 Short desc : $SHORT_DESC |
pankso@7 | 136 Maintainer : $MAINTAINER |
pankso@7 | 137 Packages : $packages |
pankso@7 | 138 Addfiles : $addfiles |
pankso@7 | 139 </pre> |
pankso@7 | 140 <form method="get" action="./"> |
pankso@7 | 141 <div class="box"> |
pankso@7 | 142 Note: |
pankso@7 | 143 <input type="text" name="note" style="width: 720px;" /> |
pankso@7 | 144 </div> |
pankso@7 | 145 <div class="next"> |
pankso@7 | 146 <input type="submit" name="cancel" value="$(gettext "Cancel")"> |
pankso@7 | 147 <input type="hidden" name="addfiles" value="$addfiles" /> |
pankso@7 | 148 <input type="hidden" name="id" value="$id" /> |
pankso@7 | 149 <input type="submit" name="pack" value="$(gettext "Build flavor")"> |
pankso@7 | 150 </div> |
pankso@7 | 151 </form> |
pankso@7 | 152 EOT |
pankso@7 | 153 ;; |
pankso@7 | 154 *\ cancel\ *) |
pankso@7 | 155 id="$(GET id)" |
pankso@7 | 156 echo "<p>Removing temporary files for: $id</p>" |
pankso@7 | 157 [ -d "$tmpdir/slitaz-$id" ] && rm -rf $tmpdir/slitaz-$id/ |
pankso@7 | 158 cat << EOT |
pankso@7 | 159 <form method="get" action="./"> |
pankso@7 | 160 <input type="submit" name="start" value="$(gettext "Start over")"> |
pankso@7 | 161 </form> |
pankso@7 | 162 EOT |
pankso@7 | 163 ;; |
pankso@7 | 164 *\ pack\ *) |
pankso@7 | 165 # |
pankso@7 | 166 # Pack distro step |
pankso@7 | 167 # |
pankso@7 | 168 id="$(GET id)" |
pankso@7 | 169 receipt="$tmpdir/slitaz-$id/receipt" |
pankso@7 | 170 addfiles="$(GET addfiles)" |
pankso@7 | 171 log="$tmpdir/slitaz-$id/distro.log" |
pankso@7 | 172 note="$(GET note)" |
pankso@7 | 173 inqueue=$(ls $queue | wc -l) |
pankso@7 | 174 . $receipt |
pankso@7 | 175 cat << EOT |
pankso@7 | 176 <h2>$(gettext "Packing:") $FLAVOR</h2> |
pankso@7 | 177 <pre> |
pankso@7 | 178 EOT |
pankso@7 | 179 if ! fgrep ADDFILES $receipt; then |
pankso@7 | 180 echo "ADDFILES=\"$addfiles\"" >> $receipt |
pankso@7 | 181 fi |
pankso@7 | 182 if ! fgrep NOTE $receipt; then |
pankso@7 | 183 echo "NOTE=\"$note\"" >> $receipt |
pankso@7 | 184 fi |
pankso@7 | 185 |
pankso@7 | 186 # The rootcd README |
pankso@7 | 187 echo -n "Creating SliTaz cdrom README..." |
pankso@7 | 188 date=$(date '+%Y-%m-%d %H:%M') |
pankso@7 | 189 mkdir -p $tmpdir/slitaz-$id/rootcd |
pankso@7 | 190 cp $DATA/README.distro $tmpdir/slitaz-$id/rootcd/README |
pankso@7 | 191 sed -i s"/_DATE_/$date/" $tmpdir/slitaz-$id/rootcd/README |
pankso@7 | 192 status |
pankso@7 | 193 |
pankso@7 | 194 echo -n "Creating flavor tarball..." |
pankso@7 | 195 cd $tmpdir && tar cjf $FLAVOR.tar.bz2 slitaz-$id |
pankso@7 | 196 mkdir -p $public/slitaz-$id |
pankso@7 | 197 mv $FLAVOR.tar.bz2 $public/slitaz-$id |
pankso@7 | 198 status |
pankso@7 | 199 |
pankso@7 | 200 # Keep a public receipt copy and move everything from tmp to queue. |
pankso@7 | 201 echo "Flavor packed : $(date '+%Y-%m-%d %H:%M')" | tee -a $log |
pankso@7 | 202 echo -n "Moving $id to Pizza build queue..." |
pankso@7 | 203 mv -f $tmpdir/slitaz-$id/distro.log $public/slitaz-$id |
pankso@7 | 204 cp -f $tmpdir/slitaz-$id/receipt $public/slitaz-$id |
pankso@7 | 205 mv $tmpdir/slitaz-$id $queue |
pankso@7 | 206 status |
pankso@7 | 207 |
pankso@7 | 208 if [ "$inqueue" == "1" ]; then |
pankso@7 | 209 gettext "Your ISO will be built on next Pizza Bot run" |
pankso@7 | 210 else |
paul@9 | 211 eval_gettext "There is \$inqueue flavors in queue" |
pankso@7 | 212 fi |
pankso@7 | 213 echo "" |
pankso@10 | 214 echo "New flavor added to queue: <a href='?id=$id'>$id</a> ($FLAVOR)" | log |
pankso@7 | 215 cat << EOT |
pankso@7 | 216 </pre> |
pankso@7 | 217 <div> |
pankso@7 | 218 <img src="images/archive.png" alt="[ tarball ]" /> |
pankso@7 | 219 $(gettext "Download tarball: ") |
pankso@7 | 220 <a href="public/slitaz-$id/$FLAVOR.tar.bz2">$FLAVOR.tar.bz2</a> |
pankso@7 | 221 - Browse <a href="public/slitaz-$id/">the flavor</a> |
pankso@7 | 222 </div> |
pankso@7 | 223 <div class="next"> |
pankso@7 | 224 <form method="get" action="./"> |
pankso@7 | 225 <input type="hidden" name="id" value="$id" /> |
pankso@7 | 226 <input type="submit" value="$(gettext "Status")"> |
pankso@7 | 227 </form> |
pankso@7 | 228 </div> |
pankso@7 | 229 EOT |
pankso@7 | 230 ;; |
pankso@7 | 231 *\ id\ *) |
pankso@7 | 232 # |
pankso@7 | 233 # ID Status page |
pankso@7 | 234 # |
pankso@7 | 235 id="$(GET id)" |
pankso@7 | 236 [ -f "$queue/slitaz-$id/receipt" ] && . $queue/slitaz-$id/receipt |
pankso@7 | 237 [ -f "public/slitaz-$id/receipt" ] && . public/slitaz-$id/receipt |
pankso@7 | 238 log="$public/slitaz-$id/distro.log" |
pankso@7 | 239 if [ ! -d "public/slitaz-$id" ]; then |
paul@9 | 240 echo "Sorry, can't find flavor ID: $id" |
pankso@7 | 241 cat lib/footer.html && exit 0 |
pankso@7 | 242 fi |
pankso@7 | 243 if [ -f "$public/slitaz-$id/$FLAVOR.iso" ]; then |
pankso@7 | 244 dir="public/slitaz-$id" |
pankso@7 | 245 list="$dir/packages.list" |
pankso@7 | 246 iso="$dir/$FLAVOR.iso" |
pankso@7 | 247 msg="$(gettext "Download ISO:") <a href='$dir/$FLAVOR.iso'>$FLAVOR.iso</a> |
pankso@7 | 248 [ <a href='$dir/$FLAVOR.md5'>md5</a> ]" |
pankso@7 | 249 else |
pankso@7 | 250 list="$queue/slitaz-$id/packages.list" |
pankso@7 | 251 msg="$(gettext "Flavor is building or still in the build queue")" |
pankso@7 | 252 fi |
pankso@7 | 253 pkgslist=$(cat $list | wc -l) |
pankso@7 | 254 pkgsinst=$(cat $installed | wc -l) |
pankso@7 | 255 [ "$pkgsinst" ] || pkgsinst=0 |
pankso@7 | 256 [ "$ISO_SIZE" ] || ISO_SIZE="N/A" |
pankso@7 | 257 [ "$ROOTFS_SIZE" ] || ROOTFS_SIZE="N/A" |
pankso@7 | 258 cat << EOT |
pankso@7 | 259 <h2>$(gettext "Status for:") $FLAVOR</h2> |
pankso@14 | 260 <div> |
pankso@14 | 261 $(get_gravatar $MAINTAINER) $(gettext "Flavor description:") $SHORT_DESC |
pankso@14 | 262 </div> |
pankso@7 | 263 <pre> |
pankso@7 | 264 Uniq ID : $id |
pankso@7 | 265 Flavor : $FLAVOR |
pankso@7 | 266 Packages : $pkgslist in list - $pkgsinst installed |
pankso@7 | 267 Rootfs size : $ROOTFS_SIZE |
pankso@7 | 268 ISO size : $ISO_SIZE |
pankso@7 | 269 </pre> |
pankso@7 | 270 |
pankso@7 | 271 <div> |
pankso@7 | 272 <img src="images/iso.png" alt="[ iso ]" /> $(echo $msg) |
pankso@7 | 273 </div> |
pankso@7 | 274 <div> |
pankso@7 | 275 <img src="images/archive.png" alt="[ tarball ]" /> |
pankso@7 | 276 $(gettext "Download tarball:") |
pankso@7 | 277 <a href="public/slitaz-$id/$FLAVOR.tar.bz2">$FLAVOR.tar.bz2</a> |
pankso@7 | 278 EOT |
pankso@7 | 279 if [ -f "$public/slitaz-$id/$FLAVOR.flavor" ]; then |
pankso@7 | 280 cat << EOT |
pankso@7 | 281 - Flavor file: <a href="public/slitaz-$id/$FLAVOR.flavor">$FLAVOR.flavor</a> |
pankso@7 | 282 EOT |
pankso@7 | 283 fi |
pankso@7 | 284 cat << EOT |
pankso@7 | 285 - Browse <a href="public/slitaz-$id/">the flavor</a> |
pankso@7 | 286 </div> |
pankso@7 | 287 EOT |
pankso@7 | 288 if [ "$NOTE" ]; then |
pankso@7 | 289 echo "<div class="note">$NOTE</div>" |
pankso@7 | 290 fi |
pankso@7 | 291 if [ -f "$log" ]; then |
pankso@7 | 292 echo '<h2>Distro log</h2>' |
pankso@7 | 293 echo '<pre>' |
pankso@7 | 294 fgrep 'Build time' $log |
pankso@7 | 295 cat $log | highlighter log |
pankso@7 | 296 echo '</pre>' |
pankso@7 | 297 fi ;; |
pankso@7 | 298 *\ help\ *) |
pankso@7 | 299 echo "<h2>$(gettext "Help")</h2>" |
pankso@7 | 300 echo "<b>TODO: HTML faq/doc</b>" |
pankso@7 | 301 echo '<pre>' |
pankso@7 | 302 cat /usr/share/doc/pizza/README |
pankso@7 | 303 echo '</pre>' ;; |
pankso@7 | 304 *\ info\ *) |
pankso@7 | 305 # English only :-) |
pankso@7 | 306 if mount | fgrep -q slitaz/public; then |
pankso@7 | 307 mounted="Public is mounted" |
pankso@7 | 308 else |
pankso@7 | 309 mounted="WARRNING: Public is not mounted" |
pankso@7 | 310 fi |
pankso@7 | 311 echo '<h2><img src="images/monitor.png" alt="" />Pizza Info</h2>' |
pankso@7 | 312 echo '<pre>' |
pankso@7 | 313 [ "$mounted" ] && echo "$mounted" |
pankso@7 | 314 echo -n "Public flavors : " && ls -1 public | wc -l |
pankso@7 | 315 echo -n "Public size : " && du -sh public | awk '{print $1}' |
pankso@7 | 316 echo -n "Tmp size : " && du -sh $tmpdir | awk '{print $1}' |
pankso@7 | 317 echo '</pre>' ;; |
pankso@7 | 318 *) |
pankso@7 | 319 # |
pankso@7 | 320 # Main page |
pankso@7 | 321 # |
pankso@7 | 322 inqueue=$(ls $queue | wc -l) |
pankso@7 | 323 builds=$(cat $builds) |
pankso@7 | 324 pubiso=$(ls -1 public | wc -l) |
pankso@7 | 325 [ "$builds" ] || builds=0 |
pankso@7 | 326 cat << EOT |
pankso@7 | 327 <h2>$(gettext "Welcome")</h2> |
pankso@7 | 328 <p> |
paul@9 | 329 SliTaz Pizza lets you create your own SliTaz ISO flavor online. The |
paul@9 | 330 ISO image can be burnt on a cdrom or installed on USB media. |
pankso@7 | 331 Please read the SliTaz Pizza |
pankso@7 | 332 <a href="?help">Help</a> before starting a new flavor. |
pankso@7 | 333 </p> |
pankso@7 | 334 <pre> |
pankso@7 | 335 Flavors: $inqueue in queue - $builds builds - $pubiso public |
pankso@7 | 336 </pre> |
pankso@7 | 337 |
pankso@7 | 338 <div class="start"> |
pankso@7 | 339 <form method="get" action="./"> |
pankso@7 | 340 <input type="hidden" name="start" value="flavor" /> |
pankso@7 | 341 <input type="submit" value="$(gettext "Create a new flavor")"> |
pankso@7 | 342 </form> |
pankso@7 | 343 </div> |
pankso@7 | 344 |
pankso@7 | 345 <h2>Activity</h2> |
pankso@7 | 346 <pre> |
pankso@7 | 347 $(tac $activity | head -n 12 | highlighter activity) |
pankso@7 | 348 </pre> |
pankso@7 | 349 |
pankso@7 | 350 EOT |
pankso@7 | 351 echo "<h2>$(gettext "Latest builds")</h2>" |
pankso@7 | 352 echo '<pre>' |
pankso@7 | 353 for flavor in $(ls -1t public | head -n 12) |
pankso@7 | 354 do |
pankso@7 | 355 if [ -f "public/$flavor/receipt" ]; then |
pankso@7 | 356 . ./public/$flavor/receipt |
pankso@7 | 357 [ -f "public/$flavor/$FLAVOR.iso" ] && \ |
pankso@7 | 358 cat << EOT |
pankso@7 | 359 $VERSION : <a href="public/$flavor/$FLAVOR.iso">$FLAVOR.iso</a> ($ISO_SIZE) |
pankso@7 | 360 EOT |
pankso@7 | 361 fi |
pankso@7 | 362 done |
pankso@7 | 363 echo '</pre>' ;; |
pankso@7 | 364 esac |
pankso@7 | 365 |
pankso@7 | 366 # HTML footer. |
pankso@7 | 367 cat lib/footer.html |
pankso@7 | 368 |
pankso@7 | 369 exit 0 |