tazpkg view pkgs.cgi @ rev 633

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