tazpanel view pkgs.cgi @ rev 128

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