tazpanel view tazpkg.cgi @ rev 14

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