tazpanel view pkgs.cgi @ rev 23

Rename tazpkg.cgi to pkgs.cgi
author Christophe Lincoln <pankso@slitaz.org>
date Tue Apr 05 01:42:16 2011 +0200 (2011-04-05)
parents tazpkg.cgi@c630f623ac7c
children fa59528e8bdf
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 how 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 v2
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-pkgs'
22 export TEXTDOMAIN
24 # xHTML 5 header
25 cat $HEADER | sed s'/%TITLE%/Tazpkg/'
27 # DEBUG mode
28 if [ $DEBUG == "1" ]; then
29 echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
30 fi
32 # We need packages information for list and search
33 parse_packages_desc() {
34 while read line
35 do
36 echo '<tr>'
37 pkg=$(echo $line | cut -d "|" -f 1)
38 vers=$(echo $line | cut -d "|" -f 2)
39 desc=$(echo $line | cut -d "|" -f 3)
40 web=$(echo $line | cut -d "|" -f 5)
41 if [ -d $INSTALLED/$pkg ]; then
42 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
43 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
44 else
45 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
46 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
47 fi
48 echo "<td>$vers</td>"
49 echo "<td class='desc'>$desc</td>"
50 echo "<td><a href='$web'>web</a></td>"
51 echo '</tr>'
52 done
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 "Installed packages : "
63 ls $INSTALLED | wc -l
64 gettext "Mirrored packages : "
65 cat $LOCALSTATE/packages.list | wc -l
66 gettext "Last recharge : "
67 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
68 gettext "Upgradeable packages : "
69 cat $LOCALSTATE/upgradeable-packages.list | wc -l
70 gettext "Installed files : "
71 cat $INSTALLED/*/files.list | wc -l
72 gettext "Blocked packages : "
73 cat $LOCALSTATE/blocked-packages.list | wc -l
74 }
76 # Parse mirrors list to be able to have an icon an remove link
77 list_mirrors() {
78 cat $LOCALSTATE/mirrors | while read line
79 do
80 cat << EOT
81 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
82 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
83 EOT
84 done
85 }
87 #
88 # xHTML functions
89 #
91 # ENTER will search but user may search for a button, so put one.
92 search_form() {
93 cat << EOT
94 <div class="search">
95 <form method="get" action="$SCRIPT_NAME">
96 <p>
97 <input type="text" name="search" size="20">
98 <input type="submit" value="`gettext "Search"`">
99 </p>
100 </form>
101 </div>
102 EOT
103 }
105 table_head() {
106 cat << EOT
107 <tr id="thead">
108 <td>`gettext "Name"`</td>
109 <td>`gettext "Version"`</td>
110 <td>`gettext "Description"`</td>
111 <td>`gettext "Web"`</td>
112 </tr>
113 EOT
114 }
116 sub_block() {
117 cat << EOT
118 <div id="sub_block">
119 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
120 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
121 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge list"`</a> |
122 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgrade"`</a> |
123 <a href='$SCRIPT_NAME?config'>`gettext "Configuration"`</a>
124 </div>
125 EOT
126 }
128 # For my packages list
129 list_actions() {
130 cat << EOT
131 <p>
132 `gettext "Selection:"`
133 <input type="submit" name="do" value="remove" />
134 </p>
135 EOT
136 }
138 # For list-all
139 list_all_actions() {
140 cat << EOT
141 <p>
142 `gettext "Selection:"`
143 <input type="submit" name="do" value="install" />
144 <input type="submit" name="do" value="remove" />
145 </p>
146 EOT
147 }
149 # For search and upgrade with JS function to toogle all pkgs
150 list_full_actions() {
151 cat << EOT
152 <p>
153 `gettext "Selection:"`
154 <input type="submit" name="do" value="install" />
155 <input type="submit" name="do" value="remove" />
156 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
157 </p>
158 EOT
159 }
161 #
162 # Commands
163 #
165 case "$QUERY_STRING" in
166 list)
167 # List installed packages. This is the default because parsing
168 # the full packages.desc can be long and take some resources
169 cd $INSTALLED
170 search_form
171 sub_block
172 cat << EOT
173 <h2>`gettext "My packages"`</h2>
174 <form method='get' action='$SCRIPT_NAME'>
175 <div id="actions">
176 EOT
177 list_actions
178 echo '</div>'
179 table_start
180 for pkg in *
181 do
182 . $pkg/receipt
183 echo '<tr>'
184 # Use default tazpkg icon since all packages displayed are
185 # installed
186 echo "<td class='pkg'>
187 <input type='checkbox' name='pkg' value=\"$pkg\" />
188 <a href='$SCRIPT_NAME?info=$pkg'><img
189 src='$IMAGES/tazpkg-installed.png'/></a>$pkg</td>"
190 echo "<td>$VERSION</td>"
191 echo "<td class='desc'>$SHORT_DESC</td>"
192 echo "<td><a href='$WEB_SITE'>web</a></td>"
193 echo '</tr>'
194 done
195 table_end
196 list_actions
197 echo '</form>' ;;
198 list-all)
199 # List all available packages on mirror
200 cd $LOCALSTATE
201 search_form
202 sub_block
203 cat << EOT
204 <h2>`gettext "All packages"`</h2>
205 <form method='get' action='$SCRIPT_NAME'>
206 <div id="actions">
207 EOT
208 list_all_actions
209 echo '</div>'
210 table_start
211 table_head
212 cat packages.desc | parse_packages_desc
213 table_end
214 list_all_actions
215 echo '</form>' ;;
216 search=*)
217 # Search for packages
218 pkg=${QUERY_STRING#*=}
219 cd $LOCALSTATE
220 search_form
221 sub_block
222 cat << EOT
223 <h2>`gettext "Search packages"`</h2>
224 <form method="get" action="$SCRIPT_NAME">
225 <div id="actions">
226 EOT
227 list_full_actions
228 echo '</div>'
229 table_start
230 table_head
231 grep $pkg packages.desc | parse_packages_desc
232 table_end
233 echo '</form>' ;;
234 recharge)
235 # Let recharge the packages list
236 search_form
237 sub_block
238 cat << EOT
239 <h2>`gettext "Recharge"`</h2>
240 <form method='get' action='$SCRIPT_NAME'>
241 <div id="actions">
242 <p>
243 `gettext "Recharge will check for new or updated packages...
244 please wait"`
245 </p>
246 </div>
247 <pre>
248 EOT
249 tazpkg recharge | filter_tazpkg_msgs
250 echo '</pre>'
251 echo '<p>'
252 gettext "Packages lists are up-to-date"
253 echo '</p>' ;;
254 upgradeable)
255 cd $LOCALSTATE
256 search_form
257 sub_block
258 cat << EOT
259 <h2>`gettext "Upgradeable packages"`</h2>
260 <form method="get" action="$SCRIPT_NAME">
261 <div id="actions">
262 EOT
263 list_full_actions
264 tazpkg upgradeable
265 echo '</div>'
266 table_start
267 table_head
268 for pkg in `cat upgradeable-packages.list`
269 do
270 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
271 done
272 table_end
273 echo '</form>' ;;
274 do=*)
275 # Do an action on one or some packages
276 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
277 cmd=`echo ${cmdline} | awk '{print $1}'`
278 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
279 [ $cmd == install ] && cmd=get-install opt=--forced
280 search_form
281 sub_block
282 cat << EOT
283 <h2>Tazpkg: $cmd</h2>
284 <form method="get" action="$SCRIPT_NAME">
285 <div id="actions">
286 <p>
287 EOT
288 gettext "Performing task on packages"
289 echo '</p></div>'
290 echo '<pre class="pre_main">'
291 gettext "Executing $cmd for:$pkgs"
292 echo '</pre>'
293 for pkg in $pkgs
294 do
295 echo '<pre>'
296 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
297 echo '</pre>'
298 done ;;
299 info=*)
300 pkg=${QUERY_STRING#*=}
301 search_form
302 sub_block
303 . $INSTALLED/$pkg/receipt
304 cat << EOT
305 <h2>`gettext "Package info"`</h2>
306 <div id="actions">
307 <p>`gettext "Detailled information on:"` $PACKAGE</p>
308 </div>
309 <pre>
310 Name : $PACKAGE
311 Version : $VERSION
312 Description : $SHORT_DESC
313 Maintainer : $MAINTAINER
314 Depends : `for i in $DEPENDS; do echo -n \
315 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
316 Website : <a href="$WEB_SITE">$WEB_SITE</a>
317 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
318 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
319 </pre>
321 <p>`gettext "Installed files"`</p>
322 <pre>
323 `cat $INSTALLED/$pkg/files.list`
324 </pre>
325 EOT
326 ;;
327 config*)
328 # Tazpkg configuration page
329 cmd=${QUERY_STRING#*=}
330 case "$cmd" in
331 clean)
332 rm -rf /var/cache/tazpkg/* ;;
333 add-mirror*=http*|add-mirror*=ftp*)
334 # Decode url
335 mirror=`httpd -d ${cmd#*=}`
336 echo "$mirror" >> $LOCALSTATE/mirrors ;;
337 rm-mirror=http://*|rm-mirror=ftp://*)
338 mirror=${QUERY_STRING#*=rm-mirror=}
339 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
340 esac
341 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
342 cache_size=`du -sh /var/cache/tazpkg`
343 sub_block
344 cat << EOT
345 <h2>`gettext "Configuration"`</h2>
346 <div>
347 <p>`gettext "Tazpkg configuration and settings"`</p>
348 </div>
349 <div>
350 <form method="get" action="$SCRIPT_NAME">
351 <p>
352 `gettext "Packages in the cache:"` $cache_files ($cache_size)
353 <input type="hidden" name="config" value="clean" />
354 <input type="submit" value="Clean" />
355 </p>
356 </form>
357 </div>
359 <h3>`gettext "Current mirror list"`</h3>
360 <div class="box">
361 <ul>
362 `list_mirrors`
363 </ul>
364 </div>
365 <form method="get" action="$SCRIPT_NAME">
366 <p>
367 <input type="hidden" name="config" value="add-mirror" />
368 <input type="text" name="mirror" size="60">
369 <input type="submit" value="Add mirror" />
370 </p>
371 </form>
372 EOT
373 ;;
374 *)
375 #
376 # Default to summary
377 #
378 search_form
379 sub_block
380 cat << EOT
381 <h2>`gettext "Summary"`</h2>
382 <div id="actions">
383 <p>`gettext "Overview of all installed and mirrored packages"`</p>
384 </div>
385 <pre class="pre_main">
386 `packages_summary`
387 </pre>
388 <h3>`gettext "Latest log entries"`</h3>
389 <pre>
390 `tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
391 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
392 </pre>
394 EOT
395 ;;
396 esac
398 # xHTML 5 footer
399 cd $PANEL && xhtml_footer
400 exit 0