tazpanel view pkgs.cgi @ rev 300

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