tazpanel view tazpkg.cgi @ rev 17

More in README and Makefile
author Christophe Lincoln <pankso@slitaz.org>
date Mon Apr 04 04:26:20 2011 +0200 (2011-04-04)
parents 2ea20065417a
children c630f623ac7c
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='tazpkg-cgi'
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>`gettext "Recharge lists will check for new or updated packages"`</p>
243 </div>
244 <pre class="pre_main">
245 EOT
246 gettext "Recharging the packages list... please wait"; echo
247 tazpkg recharge | filter_tazpkg_msgs
248 echo '</pre>'
249 echo '<p>'
250 gettext "Packages lists are up-to-date"
251 echo '</p>' ;;
252 upgradeable)
253 cd $LOCALSTATE
254 search_form
255 sub_block
256 cat << EOT
257 <h2>`gettext "Upgradeable packages"`</h2>
258 <form method="get" action="$SCRIPT_NAME">
259 <div id="actions">
260 EOT
261 list_full_actions
262 tazpkg upgradeable
263 echo '</div>'
264 table_start
265 table_head
266 for pkg in `cat upgradeable-packages.list`
267 do
268 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
269 done
270 table_end
271 echo '</form>' ;;
272 do=*)
273 # Do an action on one or some packages
274 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
275 cmd=`echo ${cmdline} | awk '{print $1}'`
276 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
277 [ $cmd == install ] && cmd=get-install opt=--forced
278 search_form
279 sub_block
280 cat << EOT
281 <h2>Tazpkg: $cmd</h2>
282 <form method="get" action="$SCRIPT_NAME">
283 <div id="actions">
284 <p>
285 EOT
286 gettext "Performing task on packages"
287 echo '</p></div>'
288 echo '<pre class="pre_main">'
289 gettext "Executing $cmd for:$pkgs"
290 echo '</pre>'
291 for pkg in $pkgs
292 do
293 echo '<pre>'
294 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
295 echo '</pre>'
296 done ;;
297 info=*)
298 pkg=${QUERY_STRING#*=}
299 search_form
300 sub_block
301 . $INSTALLED/$pkg/receipt
302 cat << EOT
303 <h2>`gettext "Package info"`</h2>
304 <div id="actions">
305 <p>`gettext "Detailled information on:"` $PACKAGE</p>
306 </div>
307 <pre class="pre_main">
308 Name : $PACKAGE
309 Version : $VERSION
310 Description : $SHORT_DESC
311 Maintainer : $MAINTAINER
312 Depends : `for i in $DEPENDS; do echo -n \
313 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
314 Website : <a href="$WEB_SITE">$WEB_SITE</a>
315 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
316 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
317 </pre>
319 <p>`gettext "Installed files"`</p>
320 <pre>
321 `cat $INSTALLED/$pkg/files.list`
322 </pre>
323 EOT
324 ;;
325 config*)
326 # Tazpkg configuration page
327 cmd=${QUERY_STRING#*=}
328 case "$cmd" in
329 clean)
330 rm -rf /var/cache/tazpkg/* ;;
331 add-mirror*=http*|add-mirror*=ftp*)
332 # Decode url
333 mirror=`httpd -d ${cmd#*=}`
334 echo "$mirror" >> $LOCALSTATE/mirrors ;;
335 rm-mirror=http://*|rm-mirror=ftp://*)
336 mirror=${QUERY_STRING#*=rm-mirror=}
337 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
338 esac
339 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
340 cache_size=`du -sh /var/cache/tazpkg`
341 sub_block
342 cat << EOT
343 <h2>`gettext "Configuration"`</h2>
344 <div>
345 <p>`gettext "Tazpkg configuration and settings"`</p>
346 </div>
347 <div>
348 <form method="get" action="$SCRIPT_NAME">
349 <p>
350 `gettext "Packages in the cache:"` $cache_files ($cache_size)
351 <input type="hidden" name="config" value="clean" />
352 <input type="submit" value="Clean" />
353 </p>
354 </form>
355 </div>
357 <h3>`gettext "Current mirror list"`</h3>
358 <div class="box">
359 <ul>
360 `list_mirrors`
361 </ul>
362 </div>
363 <form method="get" action="$SCRIPT_NAME">
364 <p>
365 <input type="hidden" name="config" value="add-mirror" />
366 <input type="text" name="mirror" size="60">
367 <input type="submit" value="Add mirror" />
368 </p>
369 </form>
370 EOT
371 ;;
372 *)
373 #
374 # Default to summary
375 #
376 search_form
377 sub_block
378 cat << EOT
379 <h2>`gettext "Summary"`</h2>
380 <div id="actions">
381 <p>`gettext "Overview of all installed and mirrored packages"`</p>
382 </div>
383 <pre class="pre_main">
384 `packages_summary`
385 </pre>
386 <h3>`gettext "Latest log entries"`</h3>
387 <pre>
388 `tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
389 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
390 </pre>
392 EOT
393 ;;
394 esac
396 # xHTML 5 footer
397 cd $PANEL && xhtml_footer
398 exit 0