tazpanel view pkgs.cgi @ rev 47

Move old upgreadeable command to 'up' and small edit
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 08 20:17:30 2011 +0200 (2011-04-08)
parents 56d55a9dcc9c
children cf15cb2ff715
line source
1 #!/bin/sh
2 #
3 # TazPKG CGI interface - Manage packages via the a browse
4 #
5 # This CGI interface intensively use tazpkg to manage package and have
6 # it own code for some tasks. Please KISS it important and keep speed
7 # in mind. Thanks, Pankso.
8 #
9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v3
10 #
11 echo "Content-Type: text/html"
12 echo ""
14 . lib/libtazpanel
15 get_config
17 # Include gettext helper script.
18 . /usr/bin/gettext.sh
20 # Export package name for gettext.
21 TEXTDOMAIN='tazpanel'
22 export TEXTDOMAIN
24 # xHTML 5 header
25 TITLE="- Packages"
26 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
28 # DEBUG mode
29 if [ $DEBUG == "1" ]; then
30 echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
31 fi
33 # We need packages information for list and search
34 parse_packages_desc() {
35 IFS="|"
36 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
37 do
38 echo '<tr>'
39 if [ -d $INSTALLED/${PACKAGE% } ]; then
40 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
41 <a href='$SCRIPT_NAME?info=$PACKAGE'>
42 <img src='$IMAGES/tazpkg-installed.png'/>$PACKAGE</a></td>"
43 else
44 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
45 <img src='$IMAGES/tazpkg.png'/>$PACKAGE</td>"
46 fi
47 echo "<td>$VERSION</td>"
48 echo "<td class='desc'>$SHORT_DESC</td>"
49 echo "<td><a href='$WEB_SITE'>web</a></td>"
50 echo '</tr>'
51 done
52 unset IFS
53 }
55 # Remove status and ESC char from tazpkg commands output
56 filter_tazpkg_msgs() {
57 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
58 }
60 # Display a full summary of packages stats
61 packages_summary() {
62 gettext "Last recharge : "
63 stat=`stat -c %y $LOCALSTATE/packages.list | \
64 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
65 mtime=`find /var/lib/tazpkg/packages.list -mtime +10`
66 echo -n "$stat "
67 if [ "$mtime" ]; then
68 echo "(Older than 10 days)"
69 else
70 echo "(Not older than 10 days)"
71 fi
72 gettext "Installed packages : "
73 ls $INSTALLED | wc -l
74 gettext "Mirrored packages : "
75 cat $LOCALSTATE/packages.list | wc -l
76 gettext "up packages : "
77 cat $LOCALSTATE/packages.up | wc -l
78 #gettext "Installed files : "
79 #cat $INSTALLED/*/files.list | wc -l
80 gettext "Blocked packages : "
81 cat $LOCALSTATE/blocked-packages.list | wc -l
82 }
84 # Parse mirrors list to be able to have an icon an remove link
85 list_mirrors() {
86 cat $LOCALSTATE/mirrors | while read line
87 do
88 cat << EOT
89 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
90 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
91 EOT
92 done
93 }
95 #
96 # xHTML functions
97 #
99 # ENTER will search but user may search for a button, so put one.
100 search_form() {
101 cat << EOT
102 <div class="search">
103 <form method="get" action="$SCRIPT_NAME">
104 <p>
105 <input type="text" name="search" size="20">
106 <input type="submit" value="`gettext "Search"`">
107 </p>
108 </form>
109 </div>
110 EOT
111 }
113 table_head() {
114 cat << EOT
115 <tr id="thead">
116 <td>`gettext "Name"`</td>
117 <td>`gettext "Version"`</td>
118 <td>`gettext "Description"`</td>
119 <td>`gettext "Web"`</td>
120 </tr>
121 EOT
122 }
124 sidebar() {
125 cat << EOT
126 <div id="sidebar">
127 <h4>Categories</h4>
128 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system">Base-system</a>
129 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window">X window</a>
130 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities">Utilities</a>
131 <a class="active_network" href="$SCRIPT_NAME?cat=network">Network</a>
132 <a class="active_games" href="$SCRIPT_NAME?cat=games">Games</a>
133 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics">Graphics</a>
134 <a class="active_office" href="$SCRIPT_NAME?cat=office">Office</a>
135 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia">Multimedia</a>
136 <a class="active_developement" href="$SCRIPT_NAME?cat=development">Development</a>
137 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools">System tools</a>
138 <a class="active_security" href="$SCRIPT_NAME?cat=security">Security</a>
139 <a class="active_misc" href="$SCRIPT_NAME?cat=misc">Misc</a>
140 <a class="active_meta" href="$SCRIPT_NAME?cat=meta">Meta</a>
141 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free">Non free</a>
142 </div>
143 EOT
144 }
146 #
147 # Commands
148 #
150 case "$QUERY_STRING" in
151 list*)
152 #
153 # List installed packages. This is the default because parsing
154 # the full packages.desc can be long and take some resources
155 #
156 cd $INSTALLED
157 search_form
158 sidebar
159 LOADING_MSG="Listing packages..."
160 loading_msg
161 cat << EOT
162 <h2>`gettext "My packages"`</h2>
163 <form method='get' action='$SCRIPT_NAME'>
164 <div id="actions">
165 <div class="float-left">
166 `gettext "Selection:"`
167 <input type="submit" name="do" value="Remove" />
168 </div>
169 <div class="float-right">
170 `gettext "List:"`
171 <input type="submit" name="recharge" value="Recharge" />
172 <input type="submit" name="up" value="Upgrade" />
173 </div>
174 </div>
175 EOT
176 table_start
177 table_head
178 for pkg in *
179 do
180 . $pkg/receipt
181 echo '<tr>'
182 # Use default tazpkg icon since all packages displayed are
183 # installed
184 echo "<td class='pkg'>
185 <input type='checkbox' name='pkg' value=\"$pkg\" />
186 <a href='$SCRIPT_NAME?info=$pkg'><img
187 src='$IMAGES/tazpkg-installed.png'/>$pkg</a></td>"
188 echo "<td>$VERSION</td>"
189 echo "<td class='desc'>$SHORT_DESC</td>"
190 echo "<td><a href='$WEB_SITE'>web</a></td>"
191 echo '</tr>'
192 done
193 table_end
194 echo '</form>' ;;
195 cat*)
196 #
197 # List all available packages by category on mirror. Listing all
198 # packages is to resource intensive and not usefull.
199 #
200 cd $LOCALSTATE
201 category=${QUERY_STRING#cat=}
202 [ "${QUERY_STRING}" == "cat" ] && category="base-system"
203 search_form
204 sidebar | sed s/"active_${category}"/"active"/
205 LOADING_MSG="Listing packages..."
206 loading_msg
207 cat << EOT
208 <h2>`gettext "Category:"` $category</h2>
209 <form method='get' action='$SCRIPT_NAME'>
210 <div id="actions">
211 <div class="float-left">
212 `gettext "Selection:"`
213 <input type="submit" name="do" value="Install" />
214 <input type="submit" name="do" value="Remove" />
215 </div>
216 <div class="float-right">
217 `gettext "List:"`
218 <input type="submit" name="recharge" value="Recharge" />
219 <input type="submit" name="up" value="Upgrade" />
220 <a class="button" href='$SCRIPT_NAME?list'>
221 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
222 </div>
223 EOT
224 echo '</div>'
225 table_start
226 table_head
227 grep "| $category |" packages.desc | parse_packages_desc
228 table_end
229 echo '</form>' ;;
230 search=*)
231 #
232 # Search for packages
233 #
234 pkg=${QUERY_STRING#*=}
235 cd $LOCALSTATE
236 search_form
237 sidebar
238 LOADING_MSG="Searching packages..."
239 loading_msg
240 cat << EOT
241 <h2>`gettext "Search packages"`</h2>
242 <form method="get" action="$SCRIPT_NAME">
243 <div id="actions">
244 <div class="float-left">
245 `gettext "Selection:"`
246 <input type="submit" name="do" value="Install" />
247 <input type="submit" name="do" value="Remove" />
248 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
249 </div>
250 <div class="float-right">
251 `gettext "List:"`
252 <input type="submit" name="recharge" value="Recharge" />
253 <input type="submit" name="up" value="Upgrade" />
254 <a class="button" href='$SCRIPT_NAME?list'>
255 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
256 </div>
257 EOT
258 echo '</div>'
259 table_start
260 table_head
261 grep $pkg packages.desc | parse_packages_desc
262 table_end
263 echo '</form>' ;;
264 recharge*)
265 #
266 # Let recharge the packages list
267 #
268 search_form
269 sidebar
270 LOADING_MSG="Recharging lists..."
271 loading_msg
272 cat << EOT
273 <h2>`gettext "Recharge"`</h2>
274 <form method='get' action='$SCRIPT_NAME'>
275 <div id="actions">
276 <div class="float-left">
277 <p>
278 `gettext "Recharge checks for new or updated packages"`
279 </p>
280 </div>
281 <div class="float-right">
282 <p>
283 <a class="button" href='$SCRIPT_NAME?up'>
284 `gettext "Check upgrade"`</a>
285 <a class="button" href='$SCRIPT_NAME?list'>
286 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
287 </p>
288 </div>
289 </div>
290 <pre>
291 EOT
292 tazpkg recharge | filter_tazpkg_msgs
293 cat << EOT
294 </pre>
295 <p>
296 `gettext "Packages lists are up-to-date. You should check for upgrade now."`
297 </p>
298 EOT
299 ;;
300 up*)
301 #
302 # Ugrade packages
303 #
304 cd $LOCALSTATE
305 search_form
306 sidebar
307 LOADING_MSG="Checking for upgrade..."
308 loading_msg
309 cat << EOT
310 <h2>`gettext "up packages"`</h2>
311 <form method="get" action="$SCRIPT_NAME">
312 <div id="actions">
313 <div class="float-left">
314 `gettext "Selection:"`
315 <input type="submit" name="do" value="Install" />
316 <input type="submit" name="do" value="Remove" />
317 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
318 </div>
319 <div class="float-right">
320 `gettext "List:"`
321 <input type="submit" name="recharge" value="Recharge" />
322 <a class="button" href='$SCRIPT_NAME?list'>
323 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
324 </div>
325 </div>
326 EOT
327 tazpkg up --check >/dev/null
328 table_start
329 table_head
330 for pkg in `cat packages.up`
331 do
332 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
333 done
334 table_end
335 echo '</form>' ;;
336 do=*)
337 #
338 # Do an action on one or some packages
339 #
340 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
341 cmd=`echo ${cmdline} | awk '{print $1}'`
342 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
343 case $cmd in
344 install|Install)
345 cmd=get-install opt=--forced ;;
346 remove|Remove)
347 cmd=remove ;;
348 esac
349 search_form
350 sidebar
351 LOADING_MSG="${cmd}ing packages..."
352 loading_msg
353 cat << EOT
354 <h2>Tazpkg: $cmd</h2>
355 <form method="get" action="$SCRIPT_NAME">
356 <div id="actions">
357 <div class="float-left">
358 <p>
359 `gettext "Performing task on packages"`
360 </p>
361 </div>
362 <div class="float-right">
363 <p>
364 <a class="button" href='$SCRIPT_NAME?list'>
365 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
366 </p>
367 </div>
368 </div>
369 EOT
370 echo '<div class="box">'
371 gettext "Executing $cmd for:$pkgs"
372 echo '</div>'
373 for pkg in $pkgs
374 do
375 echo '<pre>'
376 echo 'o' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
377 echo '</pre>'
378 done ;;
379 info=*)
380 #
381 # Packages info
382 #
383 pkg=${QUERY_STRING#*=}
384 search_form
385 sidebar
386 . $INSTALLED/$pkg/receipt
387 files=`cat $INSTALLED/$pkg/files.list | wc -l`
388 cat << EOT
389 <h2>`gettext "Package"` $PACKAGE</h2>
390 <div id="actions">
391 <div class="float-left">
392 <p>
393 <a class="button" href='$SCRIPT_NAME?do=remove&$pkg'>`gettext "Remove"`</a>
394 </p>
395 </div>
396 <div class="float-right">
397 <p>
398 <a class="button" href='$SCRIPT_NAME?list'>
399 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
400 </p>
401 </div>
402 </div>
403 <pre>
404 Name : $PACKAGE
405 Version : $VERSION
406 Description : $SHORT_DESC
407 Category : $CATEGORY
408 Maintainer : $MAINTAINER
409 Depends : `for i in $DEPENDS; do echo -n \
410 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
411 Website : <a href="$WEB_SITE">$WEB_SITE</a>
412 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
413 </pre>
415 <p>`gettext "Installed files:"` `cat $INSTALLED/$pkg/files.list | wc -l`</p>
416 <pre>
417 `cat $INSTALLED/$pkg/files.list`
418 </pre>
419 EOT
420 ;;
421 config*)
422 #
423 # Tazpkg configuration page
424 #
425 cmd=${QUERY_STRING#*=}
426 case "$cmd" in
427 clean)
428 rm -rf /var/cache/tazpkg/* ;;
429 add-mirror*=http*|add-mirror*=ftp*)
430 # Decode url
431 mirror=`httpd -d ${cmd#*=}`
432 echo "$mirror" >> $LOCALSTATE/mirrors ;;
433 rm-mirror=http://*|rm-mirror=ftp://*)
434 mirror=${QUERY_STRING#*=rm-mirror=}
435 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
436 esac
437 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
438 cache_size=`du -sh /var/cache/tazpkg`
439 sidebar
440 cat << EOT
441 <h2>`gettext "Configuration"`</h2>
442 <div>
443 <p>`gettext "Tazpkg configuration and settings"`</p>
444 </div>
445 <div>
446 <form method="get" action="$SCRIPT_NAME">
447 <p>
448 `gettext "Packages in the cache:"` $cache_files ($cache_size)
449 <input type="hidden" name="config" value="clean" />
450 <input type="submit" value="Clean" />
451 </p>
452 </form>
453 </div>
455 <h3>`gettext "Current mirror list"`</h3>
456 <div class="box">
457 <ul>
458 `list_mirrors`
459 </ul>
460 </div>
461 <form method="get" action="$SCRIPT_NAME">
462 <p>
463 <input type="hidden" name="config" value="add-mirror" />
464 <input type="text" name="mirror" size="60">
465 <input type="submit" value="Add mirror" />
466 </p>
467 </form>
468 EOT
469 ;;
470 *)
471 #
472 # Default to summary
473 #
474 search_form
475 sidebar
476 cat << EOT
477 <h2>`gettext "Summary"`</h2>
478 <div id="actions">
479 <a class="button" href='$SCRIPT_NAME?list'>
480 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
481 <a class="button" href='$SCRIPT_NAME?recharge'>
482 <img src="$IMAGES/recharge.png" />`gettext "Recharge list"`</a>
483 <a class="button" href='$SCRIPT_NAME?up'>
484 <img src="$IMAGES/update.png" />`gettext "Check upgrade"`</a>
485 <a class="button" href='$SCRIPT_NAME?config'>
486 <img src="$IMAGES/edit.png" />`gettext "Configuration"`</a>
487 </div>
488 <pre class="pre-main">
489 `packages_summary`
490 </pre>
492 <h3>`gettext "Latest log entries"`</h3>
493 <pre>
494 `tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
495 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
496 </pre>
498 EOT
499 ;;
500 esac
502 # xHTML 5 footer
503 xhtml_footer
504 exit 0