tazpanel view pkgs.cgi @ rev 106

network.cgi: Improve wifi settings
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 15 06:37:45 2011 +0200 (2011-04-15)
parents 12dfc9e0bdfe
children b898c9887a62
line source
1 #!/bin/sh
2 #
3 # TazPKG CGI interface - Manage packages via a browser
4 #
5 # This CGI interface intensively uses tazpkg to manage packages and have
6 # its own code for some tasks. Please KISS, it is important and keep speed
7 # in mind. Thanks, Pankso.
8 #
9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v3
10 #
12 . lib/libtazpanel
13 get_config
14 header
16 # Include gettext helper script.
17 . /usr/bin/gettext.sh
19 # Export package name for gettext.
20 TEXTDOMAIN='tazpanel'
21 export TEXTDOMAIN
23 # xHTML 5 header with special side bar fo categories.
24 TITLE="- Packages"
25 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
28 # We need packages information for list and search
29 parse_packages_desc() {
30 IFS="|"
31 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
32 do
33 echo '<tr>'
34 if [ -d $INSTALLED/${PACKAGE% } ]; then
35 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
36 <a href='$SCRIPT_NAME?info=$PACKAGE'>
37 <img src='$IMAGES/tazpkg-installed.png'/>$PACKAGE</a></td>"
38 else
39 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
40 <a href='$SCRIPT_NAME?info=$PACKAGE'>
41 <img src='$IMAGES/tazpkg.png'/>$PACKAGE</a></td>"
42 fi
43 echo "<td>$VERSION</td>"
44 echo "<td class='desc'>$SHORT_DESC</td>"
45 echo "<td><a href='$WEB_SITE'>web</a></td>"
46 echo '</tr>'
47 done
48 unset IFS
49 }
51 # Display a full summary of packages stats
52 packages_summary() {
53 gettext "Last recharge : "
54 stat=`stat -c %y $LOCALSTATE/packages.list | \
55 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
56 mtime=`find /var/lib/tazpkg/packages.list -mtime +10`
57 echo -n "$stat "
58 if [ "$mtime" ]; then
59 echo "(Older than 10 days)"
60 else
61 echo "(Not older than 10 days)"
62 fi
63 gettext "Installed packages : "
64 ls $INSTALLED | wc -l
65 gettext "Mirrored packages : "
66 cat $LOCALSTATE/packages.list | wc -l
67 gettext "Upgradeable packages : "
68 cat $LOCALSTATE/packages.up | wc -l
69 #gettext "Installed files : "
70 #cat $INSTALLED/*/files.list | wc -l
71 gettext "Blocked packages : "
72 cat $LOCALSTATE/blocked-packages.list | wc -l
73 }
75 # Parse mirrors list to be able to have an icon an remove link
76 list_mirrors() {
77 cat $LOCALSTATE/mirrors | while read line
78 do
79 cat << EOT
80 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
81 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
82 EOT
83 done
84 }
86 #
87 # xHTML functions
88 #
90 # ENTER will search but user may search for a button, so put one.
91 search_form() {
92 cat << EOT
93 <div class="search">
94 <form method="get" action="$SCRIPT_NAME">
95 <p>
96 <input type="text" name="search" size="20">
97 <input type="submit" value="`gettext "Search"`">
98 <input class="radius" type="submit" name="files"
99 value="`gettext "files"`">
100 </p>
101 </form>
102 </div>
103 EOT
104 }
106 table_head() {
107 cat << EOT
108 <tr id="thead">
109 <td>`gettext "Name"`</td>
110 <td>`gettext "Version"`</td>
111 <td>`gettext "Description"`</td>
112 <td>`gettext "Web"`</td>
113 </tr>
114 EOT
115 }
117 sidebar() {
118 cat << EOT
119 <div id="sidebar">
120 <h4>Categories</h4>
121 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system">Base-system</a>
122 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window">X window</a>
123 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities">Utilities</a>
124 <a class="active_network" href="$SCRIPT_NAME?cat=network">Network</a>
125 <a class="active_games" href="$SCRIPT_NAME?cat=games">Games</a>
126 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics">Graphics</a>
127 <a class="active_office" href="$SCRIPT_NAME?cat=office">Office</a>
128 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia">Multimedia</a>
129 <a class="active_developement" href="$SCRIPT_NAME?cat=development">Development</a>
130 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools">System tools</a>
131 <a class="active_security" href="$SCRIPT_NAME?cat=security">Security</a>
132 <a class="active_misc" href="$SCRIPT_NAME?cat=misc">Misc</a>
133 <a class="active_meta" href="$SCRIPT_NAME?cat=meta">Meta</a>
134 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free">Non free</a>
135 <a class="active_all" href="$SCRIPT_NAME?cat=all">All</a>
136 </div>
137 EOT
138 }
140 #
141 # Commands
142 #
144 case " $(GET) " in
145 *\ list\ *)
146 #
147 # List installed packages. This is the default because parsing
148 # the full packages.desc can be long and take some resources
149 #
150 cd $INSTALLED
151 search_form
152 sidebar
153 LOADING_MSG="Listing packages..."
154 loading_msg
155 cat << EOT
156 <h2>`gettext "My packages"`</h2>
157 <form method='get' action='$SCRIPT_NAME'>
158 <div id="actions">
159 <div class="float-left">
160 `gettext "Selection:"`
161 <input type="submit" name="do" value="Remove" />
162 </div>
163 <div class="float-right">
164 `gettext "List:"`
165 <input type="submit" name="recharge" value="Recharge" />
166 <input type="submit" name="up" value="Upgrade" />
167 </div>
168 </div>
169 EOT
170 table_start
171 table_head
172 for pkg in *
173 do
174 . $pkg/receipt
175 echo '<tr>'
176 # Use default tazpkg icon since all packages displayed are
177 # installed
178 colorpkg=$pkg
179 grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list &&
180 colorpkg="<span style='color: red;'>$pkg</span>"
181 echo "<td class='pkg'>
182 <input type='checkbox' name='pkg' value=\"$pkg\" />
183 <a href='$SCRIPT_NAME?info=$pkg'><img
184 src='$IMAGES/tazpkg-installed.png'/>$colorpkg</a></td>"
185 echo "<td>$VERSION</td>"
186 echo "<td class='desc'>$SHORT_DESC</td>"
187 echo "<td><a href='$WEB_SITE'>web</a></td>"
188 echo '</tr>'
189 done
190 table_end
191 echo '</form>' ;;
192 *\ cat\ *)
193 #
194 # List all available packages by category on mirror. Listing all
195 # packages is too resource intensive and not useful.
196 #
197 cd $LOCALSTATE
198 category=$(GET cat)
199 [ "$category" == "cat" ] && category="base-system"
200 grep_category=$category
201 [ "$grep_category" == "all" ] && grep_category=".*"
202 search_form
203 sidebar | sed s/"active_${category}"/"active"/
204 LOADING_MSG="Listing packages..."
205 loading_msg
206 cat << EOT
207 <h2>`gettext "Category:"` $category</h2>
208 <form method='get' action='$SCRIPT_NAME'>
209 <div id="actions">
210 <div class="float-left">
211 `gettext "Selection:"`
212 <input type="submit" name="do" value="Install" />
213 <input type="submit" name="do" value="Remove" />
214 </div>
215 <div class="float-right">
216 `gettext "List:"`
217 <input type="submit" name="recharge" value="Recharge" />
218 <input type="submit" name="up" value="Upgrade" />
219 <a class="button" href='$SCRIPT_NAME?list'>
220 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
221 </div>
222 EOT
223 echo '</div>'
224 table_start
225 table_head
226 grep "| $grep_category |" packages.desc | parse_packages_desc
227 table_end
228 echo '</form>' ;;
229 *\ search\ *)
230 #
231 # Search for packages. Here default is to search in packages.desc
232 # and so get result including packages names and descriptions
233 #
234 pkg=$(GET search)
235 cd $LOCALSTATE
236 search_form
237 sidebar
238 LOADING_MSG="Searching packages..."
239 loading_msg
240 cat << EOT
241 <h2>`gettext "Search packages"`</h2>
242 <form method="get" action="$SCRIPT_NAME">
243 <div id="actions">
244 <div class="float-left">
245 `gettext "Selection:"`
246 <input type="submit" name="do" value="Install" />
247 <input type="submit" name="do" value="Remove" />
248 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
249 </div>
250 <div class="float-right">
251 `gettext "List:"`
252 <input type="submit" name="recharge" value="Recharge" />
253 <input type="submit" name="up" value="Upgrade" />
254 <a class="button" href='$SCRIPT_NAME?list'>
255 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
256 </div>
257 EOT
258 echo '</div>'
259 table_start
260 if [ "$(GET files)" ]; then
261 cat <<EOT
262 <tr id="thead">
263 <td>`gettext "Package"`</td>
264 <td>`gettext "File"`</td>
265 </tr>
266 $(unlzma -c files.list.lzma | grep -Ei ": .*$(GET search)" | \
267 while read PACKAGE FILE; do
268 PACKAGE=${PACKAGE%:}
269 image=tazpkg-installed.png
270 [ -d $INSTALLED/$PACKAGE ] || image=tazpkg.png
271 echo "<tr>
272 <td><input type='checkbox' name='pkg' value='$PACKAGE'>
273 <a href='$SCRIPT_NAME?info=$PACKAGE'><img src='$IMAGES/$image' />$PACKAGE</a></td>
274 <td>$FILE</td>
275 </tr>"
276 done)
277 EOT
278 else
279 table_head
280 grep -i $pkg packages.desc | parse_packages_desc
281 fi
282 table_end
283 echo '</form>' ;;
284 *\ recharge\ *)
285 #
286 # Let recharge the packages list
287 #
288 search_form
289 sidebar
290 LOADING_MSG="Recharging lists..."
291 loading_msg
292 cat << EOT
293 <h2>`gettext "Recharge"`</h2>
294 <form method='get' action='$SCRIPT_NAME'>
295 <div id="actions">
296 <div class="float-left">
297 <p>
298 `gettext "Recharge checks for new or updated packages"`
299 </p>
300 </div>
301 <div class="float-right">
302 <p>
303 <a class="button" href='$SCRIPT_NAME?up'>
304 `gettext "Check upgrade"`</a>
305 <a class="button" href='$SCRIPT_NAME?list'>
306 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
307 </p>
308 </div>
309 </div>
310 <pre>
311 EOT
312 gettext "Recharging packages list" | log
313 tazpkg recharge | filter_taztools_msgs
314 cat << EOT
315 </pre>
316 <p>
317 `gettext "Packages lists are up-to-date. You should check for upgrades now."`
318 </p>
319 EOT
320 ;;
321 *\ up\ *)
322 #
323 # Ugrade packages
324 #
325 cd $LOCALSTATE
326 search_form
327 sidebar
328 LOADING_MSG="Checking for upgrades..."
329 loading_msg
330 cat << EOT
331 <h2>`gettext "Up packages"`</h2>
332 <form method="get" action="$SCRIPT_NAME">
333 <div id="actions">
334 <div class="float-left">
335 `gettext "Selection:"`
336 <input type="submit" name="do" value="Install" />
337 <input type="submit" name="do" value="Remove" />
338 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
339 </div>
340 <div class="float-right">
341 `gettext "List:"`
342 <input type="submit" name="recharge" value="Recharge" />
343 <a class="button" href='$SCRIPT_NAME?list'>
344 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
345 </div>
346 </div>
347 EOT
348 tazpkg up --check >/dev/null
349 table_start
350 table_head
351 for pkg in `cat packages.up`
352 do
353 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
354 done
355 table_end
356 echo '</form>' ;;
357 *\ do\ *)
358 #
359 # Do an action on one or some packages
360 #
361 opt=""
362 pkgs=""
363 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
364 cmd=`echo ${cmdline} | awk '{print $1}'`
365 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
366 cmd=`echo $cmd | tr [A-Z] [a-z]`
367 case $cmd in
368 install)
369 cmd=get-install opt=--forced ;;
370 esac
371 search_form
372 sidebar
373 LOADING_MSG="${cmd}ing packages..."
374 loading_msg
375 cat << EOT
376 <h2>Tazpkg: $cmd</h2>
377 <form method="get" action="$SCRIPT_NAME">
378 <div id="actions">
379 <div class="float-left">
380 <p>
381 `gettext "Performing tasks on packages"`
382 </p>
383 </div>
384 <div class="float-right">
385 <p>
386 <a class="button" href='$SCRIPT_NAME?list'>
387 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
388 </p>
389 </div>
390 </div>
391 EOT
392 echo '<div class="box">'
393 gettext "Executing $cmd for:$pkgs"
394 echo '</div>'
395 for pkg in $pkgs
396 do
397 echo '<pre>'
398 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
399 echo '</pre>'
400 done ;;
401 *\ info\ *)
402 #
403 # Packages info
404 #
405 pkg=$(GET info)
406 search_form
407 sidebar
408 if [ -d $INSTALLED/$pkg ]; then
409 . $INSTALLED/$pkg/receipt
410 files=`cat $INSTALLED/$pkg/files.list | wc -l`
411 action=$(gettext "Remove")
412 else
413 cd $LOCALSTATE
414 LOADING_MSG=$(gettext "Getting package info...")
415 loading_msg
416 IFS='|'
417 set -- $(grep "^$pkg |" packages.desc)
418 unset IFS
419 PACKAGE=$1
420 VERSION="$(echo $2)"
421 SHORT_DESC="$(echo $3)"
422 CATEGORY="$(echo $4)"
423 WEB_SITE="$(echo $5)"
424 action=$(gettext "Install")
425 fi
426 cat << EOT
427 <h2>`gettext "Package"` $PACKAGE</h2>
428 <div id="actions">
429 <div class="float-left">
430 <p>
431 <a class="button" href='$SCRIPT_NAME?do=$action&$pkg'>$action</a>
432 EOT
433 if [ -d $INSTALLED/$pkg ]; then
434 if grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list; then
435 block=$(gettext "Unblock")
436 else
437 block=$(gettext "Block")
438 fi
439 cat << EOT
440 <a class="button" href='$SCRIPT_NAME?do=$block&$pkg'>$block</a>
441 <a class="button" href='$SCRIPT_NAME?do=Repack&$pkg'>Repack</a>
442 EOT
443 fi
444 cat << EOT
445 </p>
446 </div>
447 <div class="float-right">
448 <p>
449 <a class="button" href='$SCRIPT_NAME?list'>
450 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
451 </p>
452 </div>
453 </div>
454 <pre>
455 Name : $PACKAGE
456 Version : $VERSION
457 Description : $SHORT_DESC
458 Category : $CATEGORY
459 EOT
460 if [ -d $INSTALLED/$pkg ]; then
461 cat << EOT
462 Maintainer : $MAINTAINER
463 Website : <a href="$WEB_SITE">$WEB_SITE</a>
464 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
465 EOT
466 if [ -n "$DEPENDS" ]; then
467 echo -n "Depends : "
468 for i in $DEPENDS; do
469 echo -n "<a href="$SCRIPT_NAME?info=$i">$i</a> "
470 done
471 echo ""
472 fi
473 if [ -n "$SUGGESTED" ]; then
474 echo -n "Suggested : "
475 for i in $SUGGESTED; do
476 echo -n "<a href="$SCRIPT_NAME?info=$i">$i</a> "
477 done
478 echo ""
479 fi
480 [ -n "$TAGS" ] && echo "Tags : $TAGS"
481 cat << EOT
482 </pre>
484 <p>`gettext "Installed files:"` `cat $INSTALLED/$pkg/files.list | wc -l`</p>
485 <pre>
486 `cat $INSTALLED/$pkg/files.list`
487 </pre>
488 EOT
489 else
490 cat << EOT
491 Website : <a href="$WEB_SITE">$WEB_SITE</a>
492 Sizes : `grep -A 3 ^$pkg$ packages.txt | tail -n 1 | sed 's/ *//'`
493 </pre>
495 <p>`gettext "Installed files:"`</p>
496 <pre>
497 `unlzma -c files.list.lzma | sed "/^$pkg: /!d;s/^$pkg: //"`
498 </pre>
499 EOT
500 fi
501 ;;
502 *\ admin\ * )
503 #
504 # Tazpkg configuration page
505 #
506 cmd=$(GET admin)
507 case "$cmd" in
508 clean)
509 rm -rf /var/cache/tazpkg/* ;;
510 add-mirror)
511 # Decode url
512 mirror=$(GET mirror)
513 case "$mirror" in
514 http://*|ftp://*)
515 echo "$mirror" >> $LOCALSTATE/mirrors ;;
516 esac ;;
517 rm-mirror=http://*|rm-mirror=ftp://*)
518 mirror=${cmd#rm-mirror=}
519 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
520 esac
521 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
522 cache_size=`du -sh /var/cache/tazpkg`
523 sidebar
524 cat << EOT
525 <h2>$(gettext "Administration")</h2>
526 <div>
527 <p>$(gettext "Tazpkg administration and settings")</p>
528 </div>
529 <div id="actions">
530 <a class="button" href='$SCRIPT_NAME?admin=&action=saveconf'>
531 <img src="$IMAGES/tazpkg.png" />`gettext "Save configuration"`</a>
532 <a class="button" href='$SCRIPT_NAME?admin=&action=listconf'>
533 <img src="$IMAGES/edit.png" />`gettext "List configuration files"`</a>
534 <a class="button" href='$SCRIPT_NAME?admin=&action=quickcheck'>
535 <img src="$IMAGES/recharge.png" />`gettext "Quick check"`</a>
536 <a class="button" href='$SCRIPT_NAME?admin=&action=fullcheck'>
537 <img src="$IMAGES/recharge.png" />`gettext "Full check"`</a>
538 </div>
539 EOT
540 case "$(GET action)" in
541 saveconf)
542 LOADING_MSG=$(gettext "Creating the package...")
543 loading_msg
544 echo "<pre>"
545 cd $HOME
546 tazpkg repack-config | filter_taztools_msgs
547 gettext "Path : " && ls $HOME/config-*.tazpkg
548 echo "</pre>" ;;
549 listconf)
550 echo "<h4>`gettext "Configuration files"`</h4>"
551 echo "<ul>"
552 tazpkg list-config | while read file; do
553 [ "${file:0:1}" == "/" ] || continue
554 if [ -e $file ]; then
555 echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
556 else
557 echo "<li>$file</li>"
558 fi
559 done
560 echo "</ul>"
561 echo "</pre>" ;;
562 quickcheck)
563 LOADING_MSG=$(gettext "Checking packages consitency...")
564 loading_msg
565 echo "<pre>"
566 tazpkg check
567 echo "</pre>" ;;
568 fullcheck)
569 LOADING_MSG=$(gettext "Full packages check...")
570 loading_msg
571 echo "<pre>"
572 tazpkg check --full
573 echo "</pre>" ;;
574 esac
575 cat << EOT
576 <h3>$(gettext "Packages cache")</h3>
577 <div>
578 <form method="get" action="$SCRIPT_NAME">
579 <p>
580 `gettext "Packages in the cache:"` $cache_files ($cache_size)
581 <input type="hidden" name="admin" value="clean" />
582 <input type="submit" value="Clean" />
583 </p>
584 </form>
585 </div>
587 <h3>`gettext "Current mirror list"`</h3>
588 <div class="box">
589 <ul>
590 `list_mirrors`
591 </ul>
592 </div>
593 <form method="get" action="$SCRIPT_NAME">
594 <p>
595 <input type="hidden" name="config" value="add-mirror" />
596 <input type="text" name="mirror" size="60">
597 <input type="submit" value="Add mirror" />
598 </p>
599 </form>
600 EOT
601 version=$(cat /etc/slitaz-release)
602 cat << EOT
604 <a name="DVD"></a>
605 <h3>`gettext "SliTaz packages DVD"`</h3>
606 <p>
607 $(gettext "A bootable DVD image of all available packages for \
608 the $version version is generated every day. It also contains a copy of \
609 the website and can be used without an internet connection. This image can be \
610 installed on a DVD or an USB key.")
611 </p>
612 <div id="actions">
613 <form method="post" class="button" action='$SCRIPT_NAME?admin&action=dvdimage#DVD'>
614 <a class="button" href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
615 <img src="$IMAGES/tazpkg.png" />`gettext "Download DVD image"`</a>
616 <a class="button" href='$SCRIPT_NAME?admin&action=dvdusbkey#DVD'>
617 <img src="$IMAGES/tazpkg.png" />`gettext "Install DVD/USB key"`</a>
618 <img src="$IMAGES/tazpkg.png" />`gettext "Install image"`
619 <input type="text" name="dvdimage" value="/root/packages-$version.iso">
620 </form>
621 </div>
622 EOT
623 if [ "$(GET action)" == "dvdimage" ]; then
624 dev=$(POST dvdimage)
625 mkdir -p /mnt/packages 2> /dev/null
626 echo "<pre>"
627 mount -t iso9660 -o loop,ro $dev /mnt/packages &&
628 /mnt/packages/install.sh &&
629 echo "$dev is installed on /mnt/packages"
630 echo "</pre>"
631 fi
632 if [ "$(GET action)" == "dvdusbkey" ]; then
633 mkdir -p /mnt/packages 2> /dev/null
634 for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
635 "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
636 dev=$(blkid | grep "$tag" | cut -d: -f1)
637 [ -n "$dev" ] || continue
638 echo "<pre>"
639 mount -t iso9660 -o ro $dev /mnt/packages &&
640 /mnt/packages/install.sh &&
641 echo "$dev is installed on /mnt/packages"
642 echo "</pre>"
643 break
644 done
645 fi
646 ;;
647 *)
648 #
649 # Default to summary
650 #
651 search_form
652 sidebar
653 PAPY
654 [ -n "$(GET block)" ] && tazpkg block $(GET block)
655 [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock)
656 cat << EOT
657 <h2>`gettext "Summary"`</h2>
658 <div id="actions">
659 <a class="button" href='$SCRIPT_NAME?list'>
660 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
661 <a class="button" href='$SCRIPT_NAME?recharge'>
662 <img src="$IMAGES/recharge.png" />`gettext "Recharge list"`</a>
663 <a class="button" href='$SCRIPT_NAME?up'>
664 <img src="$IMAGES/update.png" />`gettext "Check upgrade"`</a>
665 <a class="button" href='$SCRIPT_NAME?admin'>
666 <img src="$IMAGES/edit.png" />`gettext "Administration"`</a>
667 </div>
668 <pre class="pre-main">
669 `packages_summary`
670 </pre>
672 <h3>`gettext "Latest log entries"`</h3>
673 <pre>
674 `tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
675 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
676 </pre>
677 EOT
678 ;;
679 esac
681 # xHTML 5 footer
682 xhtml_footer
683 exit 0