slitaz-pizza annotate web/pizza.cgi @ rev 9

Edit pizza
author Paul Issott <paul@slitaz.org>
date Sun Mar 25 00:44:53 2012 +0000 (2012-03-25)
parents 8b324cb2c5e2
children 717e991b3c18
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@7 214 echo "New flavor added to queue: <a href='?id=$id'>$id</a>" | 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@7 260 <p>
pankso@7 261 $(gettext "Flavor description:") $SHORT_DESC
pankso@7 262 </p>
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