tazpkg view pkgs.cgi @ rev 707

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