tazpkg view tazpanel/pkgs.cgi @ rev 717

pkgs.cgi: fix i18n_desc, show package description in info (use tazpkg); tazpkg: recognize interactive mode.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Dec 17 01:59:31 2014 +0200 (2014-12-17)
parents 5cfba8b15016
children 9081585e7446
line source
1 #!/bin/sh
2 #
3 # TazPkg CGI interface - Manage packages via a browser
4 #
5 # This CGI interface extensively 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-2014 SliTaz GNU/Linux - BSD License
10 #
12 . /lib/libtaz.sh
13 . lib/libtazpanel
14 get_config
15 header
18 # xHTML 5 header with special side bar for categories.
19 TITLE=$(TEXTDOMAIN='tazpkg'; _ 'TazPanel - Packages')
20 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
22 export TEXTDOMAIN='tazpkg'
23 PKGS_DB="$LOCALSTATE"
25 pkg_info_link()
26 {
27 echo "$SCRIPT_NAME?info=$1" | sed 's/+/%2B/g'
28 }
31 i18n_desc() {
32 # Display localized short description
33 for L in $LANG ${LANG%%_*}; do
34 if [ -e "$PKGS_DB/packages-desc.$L" ]; then
35 LOCDESC=$(awk -F$'\t' -vp=$pkg '{if ($1 == p) print $2}' $PKGS_DB/packages-desc.$L)
36 if [ -n "$LOCDESC" ]; then
37 SHORT_DESC="$LOCDESC"
38 break
39 fi
40 fi
41 done
42 }
45 # We need packages information for list and search
47 parse_packages_desc() {
48 IFS="|"
49 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
50 do
51 image=tazpkg-installed.png
52 [ -d $INSTALLED/${PACKAGE% } ] || image=tazpkg.png
53 i18n_desc
54 cat << EOT
55 <tr>
56 <td><input type="checkbox" name="pkg" value="$PACKAGE">
57 <a href="$(pkg_info_link $PACKAGE)"><img
58 src="$IMAGES/$image"/>$PACKAGE</a></td>
59 <td>$VERSION</td>
60 <td class="desc">$SHORT_DESC</td>
61 <td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td>
62 </tr>
63 EOT
64 done
65 unset IFS
66 }
69 # Display a full summary of packages stats
71 packages_summary() {
72 cat << EOT
73 <table class="zebra outbox">
74 <tbody>
75 <tr><td>$(_ 'Last recharge:')</td>
76 EOT
77 stat=$(stat -c %y $PKGS_DB/packages.list | \
78 sed 's/\(:..\):.*/\1/' | awk '{print $1}')
79 mtime=$(find $PKGS_DB/packages.list -mtime +10)
80 echo -n "<td>$stat "
81 if [ "$mtime" ]; then
82 _ '(Older than 10 days)'
83 else
84 _ '(Not older than 10 days)'
85 fi
86 cat << EOT
87 </td></tr>
88 <tr><td>$(_ 'Installed packages:')</td>
89 <td>$(ls $INSTALLED | wc -l)</td></tr>
90 <tr><td>$(_ 'Mirrored packages:')</td>
91 <td>$(cat $PKGS_DB/packages.list | wc -l)</td></tr>
92 <tr><td>$(_ 'Upgradeable packages:')</td>
93 <td>$(cat $PKGS_DB/packages.up | wc -l)</td></tr>
94 <tr><td>$(_ 'Installed files:')</td>
95 <td>$(cat $INSTALLED/*/files.list | wc -l)</td></tr>
96 <tr><td>$(_ 'Blocked packages:')</td>
97 <td>$(cat $PKGS_DB/blocked-packages.list | wc -l)</td></tr>
98 </tbody>
99 </table>
100 EOT
101 }
104 # Parse mirrors list to be able to have an icon and remove link
106 list_mirrors() {
107 while read line
108 do
109 cat << EOT
110 <li>
111 <a href="$SCRIPT_NAME?admin=rm-mirror=$line&amp;file=$(httpd -e $1)">
112 <img src="$IMAGES/clear.png" title="$(_ 'Delete')" />
113 </a>
114 <a href="$SCRIPT_NAME?admin=select-mirror&amp;mirror=$line">
115 <img src="$IMAGES/start.png" title="$(_ 'Use as default')" />
116 </a>
117 <a href="$line">$line</a>
118 </li>
119 EOT
120 done < $1
121 }
124 # Parse repositories list to be able to have an icon and remove link
126 list_repos() {
127 ls $PKGS_DB/undigest 2> /dev/null | while read repo ; do
128 cat <<EOT
129 <li><a href="$SCRIPT_NAME?admin=rm-repo=$repo">
130 <img src="$IMAGES/clear.png">$repo</a></li>
131 EOT
132 done
133 }
137 #
138 # xHTML functions
139 #
142 # ENTER will search but user may search for a button, so put one.
144 search_form() {
145 [ -n "$repo" ] || repo="$(GET repo)"
146 [ -n "$repo" ] || repo=Any
147 cat << EOT
148 <div class="search">
149 <form method="get" action="$SCRIPT_NAME">
150 <p>
151 <input type="text" name="search" size="20">
152 <input type="submit" value="$(gettext 'Search')">
153 <input class="radius" type="submit" name="files"
154 value="$(_n 'Files')">
155 <input type="hidden" name="repo" value="$repo" />
156 </p>
157 </form>
158 </div>
159 EOT
160 }
163 table_head() {
164 cat << EOT
165 <thead>
166 <tr>
167 <td>$(_ 'Name')</td>
168 <td>$(_ 'Version')</td>
169 <td>$(_ 'Description')</td>
170 <td>$(_ 'Web')</td>
171 </tr>
172 </thead>
173 EOT
174 }
177 sidebar() {
178 [ -n "$repo" ] || repo=Public
179 cat << EOT
180 <div id="sidebar">
181 <h4>$(_ 'Categories')</h4>
182 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system&repo=$repo" >$(_ 'base-system')</a>
183 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window&repo=$repo" >$(_ 'x-window')</a>
184 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities&repo=$repo" >$(_ 'utilities')</a>
185 <a class="active_network" href="$SCRIPT_NAME?cat=network&repo=$repo" >$(_ 'network')</a>
186 <a class="active_games" href="$SCRIPT_NAME?cat=games&repo=$repo" >$(_ 'games')</a>
187 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics&repo=$repo" >$(_ 'graphics')</a>
188 <a class="active_office" href="$SCRIPT_NAME?cat=office&repo=$repo" >$(_ 'office')</a>
189 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia&repo=$repo" >$(_ 'multimedia')</a>
190 <a class="active_development" href="$SCRIPT_NAME?cat=development&repo=$repo" >$(_ 'development')</a>
191 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools&repo=$repo">$(_ 'system-tools')</a>
192 <a class="active_security" href="$SCRIPT_NAME?cat=security&repo=$repo" >$(_ 'security')</a>
193 <a class="active_misc" href="$SCRIPT_NAME?cat=misc&repo=$repo" >$(_ 'misc')</a>
194 <a class="active_meta" href="$SCRIPT_NAME?cat=meta&repo=$repo" >$(_ 'meta')</a>
195 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free&repo=$repo" >$(_ 'non-free')</a>
196 <a class="active_all" href="$SCRIPT_NAME?cat=all&repo=$repo" >$(_ 'all')</a>
197 <a class="active_extra" href="$SCRIPT_NAME?cat=extra&repo=$repo" >$(_ 'extra')</a>
198 EOT
200 if [ -d $PKGS_DB/undigest ]; then
201 [ -n "$category" ] || category="base-system"
202 cat << EOT
203 <h4>$(_ 'Repositories')</h4>
204 <a class="repo_Public" href="$SCRIPT_NAME?repo=Public&cat=$category">$(_ 'Public')</a>
205 EOT
207 for i in $(ls $PKGS_DB/undigest); do
208 cat << EOT
209 <a class="repo_$i" href="$SCRIPT_NAME?repo=$i&cat=$category">$i</a>
210 EOT
211 done
213 cat << EOT
214 <a class="repo_Any" href="$SCRIPT_NAME?repo=Any&cat=$category">$(_ 'Any')</a>
215 EOT
216 fi
217 echo "</div>"
218 }
221 repo_list() {
222 if [ -n "$(ls $PKGS_DB/undigest/ 2> /dev/null)" ]; then
223 case "$repo" in
224 Public)
225 ;;
226 ""|Any)
227 for i in $PKGS_DB/undigest/* ; do
228 [ -d "$i" ] && echo "$i$1"
229 done ;;
230 *)
231 echo "$PKGS_DB/undigest/$repo$1"
232 return ;;
233 esac
234 fi
235 echo "$PKGS_DB$1"
236 }
239 repo_name() {
240 case "$1" in
241 $PKGS_DB)
242 echo "Public" ;;
243 $PKGS_DB/undigest/*)
244 echo ${1#$PKGS_DB/undigest/} ;;
245 esac
246 }
250 #
251 # Commands
252 #
255 case " $(GET) " in
256 *\ list\ *)
257 #
258 # List installed packages. This is the default because parsing
259 # the full packages.desc can be long and take up some resources
260 #
261 cd $INSTALLED
262 search_form
263 sidebar
264 LOADING_MSG="$(_ 'Listing packages...')"
265 loading_msg
266 cat << EOT
267 <h2>$(_ 'My packages')</h2>
268 <form method='get' action='$SCRIPT_NAME'>
269 <input type="hidden" name="do" value="Remove" />
270 <div id="actions">
271 <div class="float-left">
272 $(_ 'Selection:')
273 <input type="submit" value="$(_ 'Remove')" />
274 </div>
275 <div class="float-right">
276 <a class="button" href="$SCRIPT_NAME?recharge">
277 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
278 <a class="button" href='$SCRIPT_NAME?up'>
279 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
280 </div>
281 </div>
282 EOT
283 cat << EOT
284 <table class="zebra outbox">
285 $(table_head)
286 <tbody>
287 EOT
288 for pkg in *; do
289 . $pkg/receipt
290 echo '<tr>'
291 # Use default tazpkg icon since all packages displayed are
292 # installed
293 colorpkg=$pkg
294 grep -qs "^$pkg$" $PKGS_DB/blocked-packages.list &&
295 colorpkg="<span style='color: red;'>$pkg</span>"
296 i18n_desc
297 cat << EOT
298 <td class="pkg">
299 <input type="checkbox" name="pkg" value="$pkg" />
300 <a href="$(pkg_info_link $pkg)"><img
301 src="$IMAGES/tazpkg-installed.png"/>$colorpkg</a></td>
302 <td>$VERSION</td>
303 <td class="desc">$SHORT_DESC</td>
304 <td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td>
305 </tr>
306 EOT
307 done
308 cat << EOT
309 </tbody>
310 </table>
311 </form>
312 EOT
313 ;;
316 *\ linkable\ *)
317 #
318 # List linkable packages.
319 #
320 cd $INSTALLED
321 search_form
322 sidebar
323 LOADING_MSG=$(_ 'Listing linkable packages...')
324 loading_msg
325 cat << EOT
326 <h2>$(_ 'Linkable packages')</h2>
328 <form method='get' action='$SCRIPT_NAME'>
329 <input type="hidden" name="do" value="Link" />
330 <div id="actions">
331 <div class="float-left">
332 $(_ 'Selection:')
333 <input type="submit" value="$(_ 'Link')" />
334 </div>
335 <div class="float-right">
336 <a class="button" href="$SCRIPT_NAME?recharge">
337 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
338 <a class="button" href="$SCRIPT_NAME?up">
339 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
340 </div>
341 </div>
342 EOT
343 cat << EOT
344 <table class="zebra outbox">
345 $(table_head)
346 <tbody>
347 EOT
348 target=$(readlink $PKGS_DB/fslink)
349 for pkg in $(ls $target/$INSTALLED); do
350 [ -s $pkg/receipt ] && continue
351 . $target/$INSTALLED/$pkg/receipt
352 i18n_desc
353 cat << EOT
354 <tr>
355 <td class="pkg">
356 <input type="checkbox" name="pkg" value="$pkg" />
357 <a href="$(pkg_info_link $pkg)"><img
358 src="$IMAGES/tazpkg.png"/>$pkg</a>
359 </td>
360 <td>$VERSION</td>
361 <td class="desc">$SHORT_DESC</td>
362 <td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td>
363 </tr>
364 EOT
365 done
366 cat << EOT
367 </tbody>
368 </table>
369 </form>
370 EOT
371 ;;
374 *\ cat\ *)
375 #
376 # List all available packages by category on mirror. Listing all
377 # packages is too resource intensive and not useful.
378 #
379 cd $PKGS_DB
380 repo=$(GET repo)
381 category=$(GET cat)
382 [ "$category" == "cat" ] && category="base-system"
383 grep_category=$category
384 [ "$grep_category" == "all" ] && grep_category=".*"
385 search_form
386 sidebar | sed "s/active_$category/active/;s/repo_$repo/active/"
387 LOADING_MSG="$(_ 'Listing packages...')"
388 loading_msg
389 cat << EOT
390 <h2>$(_ 'Category: %s' $category)</h2>
392 <form method='get' action='$SCRIPT_NAME'>
393 <div id="actions">
394 <div class="float-left">
395 $(_ 'Selection:')
396 <input type="submit" name="do" value="Install" />
397 <input type="submit" name="do" value="Remove" />
398 <input type="hidden" name="repo" value="$repo" />
399 </div>
400 <div class="float-right">
401 <a class="button" href="$SCRIPT_NAME?recharge">
402 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
403 <a class="button" href="$SCRIPT_NAME?up">
404 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
405 <a class="button" href='$SCRIPT_NAME?list'>
406 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
407 </div>
408 </div>
409 EOT
410 for i in $(repo_list ""); do
411 if [ "$repo" != "Public" ]; then
412 Repo_Name="$(repo_name $i)"
413 cat << EOT
414 <h3>$(_ 'Repository: %s' $Repo_Name)</h3>
415 EOT
416 fi
417 cat << EOT
418 <table class="zebra outbox">
419 $(table_head)
420 <tbody>
421 EOT
422 if [ "$category" == "extra" ]; then
423 sed 's,.*,&|--|--|--|http://mirror.slitaz.org/packages/get/&,' $i/extra.list
424 else
425 grep "| $grep_category |" $i/packages.desc
426 fi | parse_packages_desc
427 cat << EOT
428 </tbody>
429 </table>
430 EOT
431 done
432 echo '</form>' ;;
435 *\ search\ *)
436 #
437 # Search for packages. Here default is to search in packages.desc
438 # and so get result including packages names and descriptions
439 #
440 pkg=$(GET search)
441 repo=$(GET repo)
442 cd $PKGS_DB
443 search_form
444 sidebar | sed "s/repo_$repo/active/"
445 LOADING_MSG="$(_ 'Searching packages...')"
446 loading_msg
447 cat << EOT
448 <h2>$(_ 'Search packages')</h2>
449 <form method="get" action="$SCRIPT_NAME">
450 <div id="actions">
451 <div class="float-left">
452 $(_ 'Selection:')
453 <input type="submit" name="do" value="Install" />
454 <input type="submit" name="do" value="Remove" />
455 <a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a>
456 </div>
457 <div class="float-right">
458 <a class="button" href="$SCRIPT_NAME?recharge">
459 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
460 <a class="button" href="$SCRIPT_NAME?up">
461 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
462 <a class="button" href='$SCRIPT_NAME?list'>
463 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
464 </div>
465 </div>
466 <input type="hidden" name="repo" value="$repo" />
468 <table class="zebra outbox">
469 EOT
470 if [ "$(GET files)" ]; then
471 cat <<EOT
472 <thead>
473 <tr>
474 <td>$(_ 'Package')</td>
475 <td>$(_ 'File')</td>
476 </tr>
477 <thead>
478 <tbody>
479 EOT
480 unlzma -c $(repo_list /files.list.lzma) \
481 | grep -Ei ": .*$(GET search)" | \
482 while read PACKAGE FILE; do
483 PACKAGE=${PACKAGE%:}
484 image=tazpkg-installed.png
485 [ -d $INSTALLED/$PACKAGE ] || image=tazpkg.png
486 cat << EOT
487 <tr>
488 <td><input type="checkbox" name="pkg" value="$PACKAGE">
489 <a href="$(pkg_info_link $PACKAGE)"><img src="$IMAGES/$image" />$PACKAGE</a></td>
490 <td>$FILE</td>
491 </tr>
492 EOT
493 done
494 else
495 cat << EOT
496 $(table_head)
497 <tbody>
498 EOT
499 grep -ih $pkg $(repo_list /packages.desc) | \
500 parse_packages_desc
501 fi
502 cat << EOT
503 </tbody>
504 </table>
505 </form>
506 EOT
507 ;;
510 *\ recharge\ *)
511 #
512 # Lets recharge the packages list
513 #
514 search_form
515 sidebar
516 LOADING_MSG="$(_ 'Recharging lists...')"
517 loading_msg
518 cat << EOT
519 <h2>$(_ 'Recharge')</h2>
521 <form method='get' action='$SCRIPT_NAME'>
522 <div id="actions">
523 <div class="float-left">
524 <p>$(_ 'Recharge checks for new or updated packages')</p>
525 </div>
526 <div class="float-right">
527 <a class="button" href='$SCRIPT_NAME?up'>
528 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
529 <a class="button" href='$SCRIPT_NAME?list'>
530 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
531 </div>
532 </div>
533 <div class="wrapper">
534 <pre>
535 EOT
536 echo $(_ 'Recharging packages list') | log
537 tazpkg recharge | filter_taztools_msgs
538 cat << EOT
539 </pre>
540 </div>
541 <p>$(_ 'Packages lists are up-to-date. You should check for upgrades now.')</p>
542 EOT
543 ;;
546 *\ up\ *)
547 #
548 # Upgrade packages
549 #
550 cd $PKGS_DB
551 search_form
552 sidebar
553 LOADING_MSG="$(_ 'Checking for upgrades...')"
554 loading_msg
555 cat << EOT
556 <h2>$(_ 'Up packages')</h2>
558 <form method="get" action="$SCRIPT_NAME">
559 <div id="actions">
560 <div class="float-left">
561 $(_ 'Selection:')
562 <input type="submit" name="do" value="Install" />
563 <input type="submit" name="do" value="Remove" />
564 <a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a>
565 </div>
566 <div class="float-right">
567 <a class="button" href="$SCRIPT_NAME?recharge">
568 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
569 <a class="button" href="$SCRIPT_NAME?list">
570 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
571 </div>
572 </div>
573 EOT
574 tazpkg up --check >/dev/null
575 cat << EOT
576 <table class="zebra outbox">
577 $(table_head)
578 <tbody>
579 EOT
580 for pkg in `cat packages.up`
581 do
582 grep -hs "^$pkg |" $PKGS_DB/packages.desc \
583 $PKGS_DB/undigest/*/packages.desc | \
584 parse_packages_desc
585 done
586 cat << EOT
587 </tbody>
588 </table>
589 </form>
590 EOT
591 ;;
594 *\ do\ *)
595 #
596 # Do an action on one or some packages
597 #
598 opt=""
599 pkgs=""
600 cmdline=$(echo ${QUERY_STRING#do=} | sed s'/&/ /g')
601 cmd=$(echo ${cmdline} | awk '{print $1}')
602 cmdline=${cmdline#*repo=* }
603 pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//)
604 pkgs="$(httpd -d "$pkgs")"
605 cmd=$(echo $cmd | tr [:upper:] [:lower:])
606 case $cmd in
607 install)
608 cmd=get-install opt=--forced
609 LOADING_MSG="get-installing packages..."
610 ;;
611 link)
612 opt=$(readlink $PKGS_DB/fslink)
613 LOADING_MSG="linking packages..."
614 ;;
615 esac
616 search_form
617 sidebar
618 loading_msg
619 cat << EOT
620 <h2>TazPkg: $cmd</h2>
622 <form method="get" action="$SCRIPT_NAME">
623 <div id="actions">
624 <div class="float-left">
625 <p>$(_ 'Performing tasks on packages')</p>
626 </div>
627 <div class="float-right">
628 <p>
629 <a class="button" href="$SCRIPT_NAME?list">
630 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
631 </p>
632 </div>
633 </div>
634 <div class="box">
635 $(_ 'Executing %s for: %s' $cmd $pkgs)
636 </div>
637 EOT
638 for pkg in $pkgs; do
639 echo '<pre>'
640 echo $(_n 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
641 echo '</pre>'
642 done ;;
645 *\ info\ *)
646 #
647 # Packages info
648 #
649 pkg=$(GET info)
650 search_form
651 sidebar
652 if [ -d $INSTALLED/$pkg ]; then
653 . $INSTALLED/$pkg/receipt
654 files=$(cat $INSTALLED/$pkg/files.list | wc -l)
655 action="Remove"
656 action_i18n=$(_ 'Remove')
657 else
658 cd $PKGS_DB
659 LOADING_MSG=$(_ 'Getting package info...')
660 loading_msg
661 IFS='|'
662 set -- $(grep -hs "^$pkg |" packages.desc undigest/*/packages.desc)
663 unset IFS
664 PACKAGE=$1
665 VERSION="$(echo $2)"
666 SHORT_DESC="$(echo $3)"
667 CATEGORY="$(echo $4)"
668 WEB_SITE="$(echo $5)"
669 action="Install"
670 action_i18n=$(_ 'Install')
671 temp="$(echo $pkg | sed 's/get-//g')"
672 fi
673 cat << EOT
674 <h2>$(_ 'Package %s' $PACKAGE)</h2>
676 <div id="actions">
677 <div class="float-left">
678 <p>
679 EOT
680 if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then
681 temp="$(echo $pkg | sed 's/get-//g')"
682 echo "<a class='button' href='$SCRIPT_NAME?do=Install&$temp'>$(_ 'Install (Non Free)')</a>"
683 else
684 echo "<a class='button' href='$SCRIPT_NAME?do=$action&$pkg'>$action_i18n</a>"
685 fi
687 if [ -d $INSTALLED/$pkg ]; then
688 if grep -qs "^$pkg$" $PKGS_DB/blocked-packages.list; then
689 cat << EOT
690 <a class="button" href="$SCRIPT_NAME?do=Unblock&$pkg">$(_ 'Unblock')</a>
691 EOT
692 else
693 cat << EOT
694 <a class="button" href='$SCRIPT_NAME?do=Block&$pkg'>$(_ 'Block')</a>
695 EOT
696 fi
697 cat << EOT
698 <a class="button" href='$SCRIPT_NAME?do=Repack&$pkg'>$(_ 'Repack')</a>
699 EOT
700 fi
701 i18n_desc
702 cat << EOT
703 </p>
704 </div>
705 <div class="float-right">
706 <p>
707 <a class="button" href='$SCRIPT_NAME?list'>
708 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
709 </p>
710 </div>
711 </div>
712 <table class="zebra outbox">
713 <tbody>
714 <tr><td><b>$(_ 'Name')</b></td><td>$PACKAGE</td></tr>
715 <tr><td><b>$(_ 'Version')</b></td><td>$VERSION</td></tr>
716 <tr><td><b>$(_ 'Description')</b></td><td>$SHORT_DESC</td></tr>
717 <tr><td><b>$(_ 'Category')</b></td><td>$CATEGORY</td></tr>
718 EOT
719 if [ -d $INSTALLED/$pkg ]; then
720 cat << EOT
721 <tr><td><b>$(_ 'Maintainer')</b></td><td>$MAINTAINER</td></tr>
722 <tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr>
723 <tr><td><b>$(_ 'Sizes')</b></td><td>$PACKED_SIZE/$UNPACKED_SIZE</td></tr>
724 EOT
725 if [ -n "$DEPENDS" ]; then
726 echo "<tr><td><b>$(_ 'Depends')</b></td><td>"
727 for i in $DEPENDS; do
728 echo -n "<a href="$(pkg_info_link $i)">$i</a> "
729 done
730 echo "</td></tr>"
731 fi
732 if [ -n "$SUGGESTED" ]; then
733 echo "<tr><td><b>$(_ 'Suggested')</b></td><td>"
734 for i in $SUGGESTED; do
735 echo -n "<a href="$(pkg_info_link $i)">$i</a> "
736 done
737 echo "</td></tr>"
738 fi
739 [ -n "$TAGS" ] && echo "<tr><td><b>$(_ 'Tags')</b></td><td>$TAGS</td></tr>"
740 I_FILES=$(cat $INSTALLED/$pkg/files.list | wc -l)
741 cat << EOT
742 </tbody>
743 </table>
744 EOT
745 DESC="$(tazpkg desc $pkg)"
746 [ -n "$DESC" ] && echo "<pre>$DESC</pre>"
748 cat << EOT
749 <p>$(_ 'Installed files: %s' $I_FILES)</p>
751 <pre>$(sort $INSTALLED/$pkg/files.list)</pre>
752 EOT
753 else
754 cat << EOT
755 <tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr>
756 <tr><td><b>$(_ 'Sizes')</b></td><td>$(grep -hsA 3 ^$pkg$ packages.txt undigest/*/packages.txt | \
757 tail -n 1 | sed 's/ *//')</td></tr>
758 </table>
760 <p>$(_ 'Installed files:')</p>
762 <pre>
763 $(lzcat files.list.lzma undigest/*/files.list.lzma 2> /dev/null | \
764 sed "/^$pkg: /!d;s/^$pkg: //" | sort)
765 </pre>
766 EOT
767 fi
768 ;;
771 *\ admin\ * )
772 #
773 # TazPkg configuration page
774 #
775 cmd=$(GET admin)
776 case "$cmd" in
777 clean)
778 rm -rf /var/cache/tazpkg/* ;;
779 add-mirror)
780 # Decode url
781 mirror=$(GET mirror)
782 case "$mirror" in
783 http://*|ftp://*)
784 echo "$mirror" >> $(GET file) ;;
785 esac ;;
786 rm-mirror=http://*|rm-mirror=ftp://*)
787 mirror=${cmd#rm-mirror=}
788 sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;;
789 select-mirror*)
790 release=$(cat /etc/slitaz-release)
791 mirror="$(GET mirror)packages/$release/"
792 tazpkg setup-mirror $mirror | log
793 ;;
794 add-repo)
795 # Decode url
796 mirror=$(GET mirror)
797 repository=$PKGS_DB/undigest/$(GET repository)
798 case "$mirror" in
799 http://*|ftp://*)
800 mkdir -p $repository
801 echo "$mirror" > $repository/mirror
802 echo "$mirror" > $repository/mirrors ;;
803 esac ;;
804 rm-repo=*)
805 repository=${cmd#rm-repo=}
806 rm -rf $PKGS_DB/undigest/$repository ;;
807 esac
808 [ "$cmd" == "$(_n 'Set link')" ] &&
809 [ -d "$(GET link)/$INSTALLED" ] &&
810 ln -fs $(GET link) $PKGS_DB/fslink
811 [ "$cmd" == "$(_n 'Remove link')" ] &&
812 rm -f $PKGS_DB/fslink
813 cache_files=$(find /var/cache/tazpkg -name *.tazpkg | wc -l)
814 cache_size=$(du -sh /var/cache/tazpkg | cut -f1 | sed 's|\.0||')
815 sidebar
816 cat << EOT
817 <h2>$(_ 'Administration')</h2>
818 <div>
819 <p>$(_ 'TazPkg administration and settings')</p>
820 </div>
821 <div id="actions">
822 <a class="button" href='$SCRIPT_NAME?admin=&action=saveconf'>
823 <img src="$IMAGES/tazpkg.png" />$(_ 'Save configuration')</a>
824 <a class="button" href='$SCRIPT_NAME?admin=&action=listconf'>
825 <img src="$IMAGES/edit.png" />$(_ 'List configuration files')</a>
826 <a class="button" href='$SCRIPT_NAME?admin=&action=quickcheck'>
827 <img src="$IMAGES/recharge.png" />$(_ 'Quick check')</a>
828 <a class="button" href='$SCRIPT_NAME?admin=&action=fullcheck'>
829 <img src="$IMAGES/recharge.png" />$(_ 'Full check')</a>
830 </div>
831 EOT
832 case "$(GET action)" in
833 saveconf)
834 LOADING_MSG=$(_ 'Creating the package...')
835 loading_msg
836 echo "<pre>"
837 cd $HOME
838 tazpkg repack-config | filter_taztools_msgs
839 echo -n "$(_ 'Path:') "; ls $HOME/config-*.tazpkg
840 echo "</pre>" ;;
841 listconf)
842 echo "<h4>$(_ 'Configuration files')</h4>"
843 echo "<ul>"
844 tazpkg list-config | while read file; do
845 [ "${file:0:1}" == "/" ] || continue
846 if [ -e $file ]; then
847 echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
848 else
849 echo "<li>$file</li>"
850 fi
851 done
852 echo "</ul>"
853 echo "</pre>" ;;
854 quickcheck)
855 LOADING_MSG=$(_ 'Checking packages consistency...')
856 loading_msg
857 echo "<pre>"
858 tazpkg check
859 echo "</pre>" ;;
860 fullcheck)
861 LOADING_MSG=$(_ 'Full packages check...')
862 loading_msg
863 echo "<pre>"
864 tazpkg check --full
865 echo "</pre>" ;;
866 esac
867 cat << EOT
868 <h3>$(_ 'Packages cache')</h3>
870 <div>
871 <form method="get" action="$SCRIPT_NAME">
872 <p>
873 $(_ 'Packages in the cache: %s (%s)' $cache_files $cache_size)
874 <input type="hidden" name="admin" value="clean" />
875 <input type="submit" value="Clean" />
876 </p>
877 </form>
878 </div>
880 <h3>$(_ 'Default mirror')</h3>
882 <pre>$(cat /var/lib/tazpkg/mirror)</pre>
884 <h3>$(_ 'Current mirror list')</h3>
885 EOT
886 for i in $PKGS_DB/mirrors $PKGS_DB/undigest/*/mirrors; do
887 [ -s $i ] || continue
888 echo '<div class="box">'
889 if [ $i != $PKGS_DB/mirrors ]; then
890 Repo_Name="$(repo_name $(dirname $i))"
891 echo "<h4>$(_ 'Repository: %s' $Repo_Name)</h4>"
892 fi
893 echo "<ul>"
894 list_mirrors $i
895 echo "</ul>"
896 cat << EOT
897 </div>
898 <form method="get" action="$SCRIPT_NAME">
899 <p>
900 <input type="hidden" name="admin" value="add-mirror" />
901 <input type="hidden" name="file" value="$i" />
902 <input type="text" name="mirror" size="60">
903 <input type="submit" value="Add mirror" />
904 </p>
905 </form>
906 EOT
907 done
908 echo "<h3>$(_ 'Private repositories')</h3>"
909 [ -n "$(ls $PKGS_DB/undigest 2> /dev/null)" ] && cat << EOT
910 <div class="box">
911 <ul>
912 $(list_repos)
913 </ul>
914 </div>
915 EOT
916 cat << EOT
917 <form method="get" action="$SCRIPT_NAME">
918 <p>
919 <input type="hidden" name="admin" value="add-repo" />
920 $(_ 'Name') <input type="text" name="repository" size="10">
921 $(_ 'mirror')
922 <input type="text" name="mirror" value="http://" size="50">
923 <input type="submit" value="Add repository" />
924 </p>
925 </form>
927 <h3>$(_ 'Link to another SliTaz installation')</h3>
929 <p>$(_ "This link points to the root of another SliTaz installation. \
930 You will be able to install packages using soft links to it.")</p>
932 <form method="get" action="$SCRIPT_NAME">
933 <p>
934 <input type="hidden" name="admin" value="add-link" />
935 <input type="text" name="link"
936 value="$(readlink $PKGS_DB/fslink 2> /dev/null)" size="50">
937 <input type="submit" name="admin" value="$(_ 'Set link')" />
938 <input type="submit" name="admin" value="$(_ 'Remove link')" />
939 </p>
940 </form>
941 EOT
942 version=$(cat /etc/slitaz-release)
943 cat << EOT
945 <h3 id="dvd">$(_ 'SliTaz packages DVD')</h3>
947 <p>$(_ "A bootable DVD image of all available packages for the %s version is \
948 generated every day. It also contains a copy of the website and can be used \
949 without an internet connection. This image can be installed on a DVD or a USB \
950 key." $version)</p>
952 <div>
953 <form method="post" action='$SCRIPT_NAME?admin&action=dvdimage#dvd'>
954 <p>
955 <a class="button"
956 href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
957 <img src="$IMAGES/tazpkg.png" />$(_ 'Download DVD image')</a>
958 <a class="button" href='$SCRIPT_NAME?admin&action=dvdusbkey#dvd'>
959 <img src="$IMAGES/tazpkg.png" />$(_ 'Install from DVD/USB key')</a>
960 </p>
961 <div class="box">
962 $(_ 'Install from ISO image:')
963 <input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso">
964 </div>
965 </form>
966 </div>
967 EOT
968 if [ "$(GET action)" == "dvdimage" ]; then
969 dev=$(POST dvdimage)
970 mkdir -p /mnt/packages 2> /dev/null
971 echo "<pre>"
972 mount -t iso9660 -o loop,ro $dev /mnt/packages &&
973 /mnt/packages/install.sh &&
974 _ '%s is installed on /mnt/packages' $dev
975 echo "</pre>"
976 fi
977 if [ "$(GET action)" == "dvdusbkey" ]; then
978 mkdir -p /mnt/packages 2> /dev/null
979 for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
980 "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
981 dev=$(blkid | grep "$tag" | cut -d: -f1)
982 [ -n "$dev" ] || continue
983 echo "<pre>"
984 mount -t iso9660 -o ro $dev /mnt/packages &&
985 /mnt/packages/install.sh &&
986 _ '%s is installed on /mnt/packages' $dev
987 echo "</pre>"
988 break
989 done
990 fi
991 ;;
992 *)
993 #
994 # Default to summary
995 #
996 search_form
997 sidebar
998 [ -n "$(GET block)" ] && tazpkg block $(GET block)
999 [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock)
1000 cat << EOT
1001 <h2>$(_ 'Summary')</h2>
1003 <div id="actions">
1004 <a class="button" href="$SCRIPT_NAME?list">
1005 <img src="$IMAGES/tazpkg.png" />$(_ 'My packages')</a>
1006 EOT
1007 fslink=$(readlink $PKGS_DB/fslink)
1008 [ -n "$fslink" -a -d "$fslink/$INSTALLED" ] &&
1009 cat << EOT
1010 <a class="button" href="$SCRIPT_NAME?linkable">
1011 <img src="$IMAGES/tazpkg.png" />$(_ 'Linkable packages')</a>
1012 EOT
1013 cat << EOT
1014 <a class="button" href="$SCRIPT_NAME?recharge">
1015 <img src="$IMAGES/recharge.png" />$(_ 'Recharge list')</a>
1016 <a class="button" href="$SCRIPT_NAME?up">
1017 <img src="$IMAGES/update.png" />$(_ 'Check upgrades')</a>
1018 <a class="button" href="$SCRIPT_NAME?admin">
1019 <img src="$IMAGES/edit.png" />$(_ 'Administration')</a>
1020 </div>
1022 $(packages_summary)
1025 <h3>$(_ 'Latest log entries')</h3>
1027 <pre>
1028 $(tail -n 5 /var/log/slitaz/tazpkg.log | fgrep "-" | \
1029 awk '{print $1, $2, $3, $4, $5, $6, $7}')
1030 </pre>
1031 EOT
1032 ;;
1033 esac
1035 # xHTML 5 footer
1036 export TEXTDOMAIN='tazpkg'
1037 xhtml_footer
1038 exit 0