tazpanel view pkgs.cgi @ rev 129

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