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

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