rev |
line source |
pascal@627
|
1 #!/bin/sh
|
pascal@627
|
2 #
|
al@633
|
3 # TazPkg CGI interface - Manage packages via a browser
|
pascal@627
|
4 #
|
pascal@627
|
5 # This CGI interface extensively uses tazpkg to manage packages and have
|
pascal@627
|
6 # its own code for some tasks. Please KISS, it is important and keep speed
|
pascal@627
|
7 # in mind. Thanks, Pankso.
|
pascal@627
|
8 #
|
al@707
|
9 # (C) 2011-2014 SliTaz GNU/Linux - BSD License
|
pascal@627
|
10 #
|
pascal@627
|
11
|
al@707
|
12 . /lib/libtaz.sh
|
pascal@627
|
13 . lib/libtazpanel
|
al@725
|
14
|
al@725
|
15 . /etc/slitaz/slitaz.conf
|
al@725
|
16 . /etc/slitaz/tazpkg.conf
|
al@725
|
17
|
pascal@627
|
18 get_config
|
pascal@627
|
19 header
|
pascal@627
|
20
|
al@707
|
21
|
pascal@627
|
22 # xHTML 5 header with special side bar for categories.
|
al@707
|
23 TITLE=$(TEXTDOMAIN='tazpkg'; _ 'TazPanel - Packages')
|
pascal@627
|
24 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
|
pascal@627
|
25
|
al@633
|
26 export TEXTDOMAIN='tazpkg'
|
al@707
|
27
|
pascal@627
|
28 pkg_info_link()
|
pascal@627
|
29 {
|
al@718
|
30 echo "<a class=\"$2\" href=\"?info=${1//+/%2B}\">$1</a>" | sed 's| class=""||'
|
pascal@627
|
31 }
|
pascal@627
|
32
|
al@707
|
33
|
al@718
|
34 # Display localized short description
|
al@718
|
35
|
pascal@627
|
36 i18n_desc() {
|
al@717
|
37 for L in $LANG ${LANG%%_*}; do
|
al@717
|
38 if [ -e "$PKGS_DB/packages-desc.$L" ]; then
|
al@718
|
39 LOCDESC=$(awk -F$'\t' -vp=$1 '{if ($1 == p) print $2}' $PKGS_DB/packages-desc.$L)
|
al@717
|
40 if [ -n "$LOCDESC" ]; then
|
al@717
|
41 SHORT_DESC="$LOCDESC"
|
al@717
|
42 break
|
al@717
|
43 fi
|
al@717
|
44 fi
|
al@717
|
45 done
|
pascal@627
|
46 }
|
pascal@627
|
47
|
al@707
|
48
|
pascal@627
|
49 # We need packages information for list and search
|
al@707
|
50
|
pascal@627
|
51 parse_packages_desc() {
|
pascal@627
|
52 IFS="|"
|
pascal@627
|
53 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
|
pascal@627
|
54 do
|
al@718
|
55 class=pkg; [ -d $INSTALLED/${PACKAGE% } ] && class=pkgi
|
al@718
|
56 i18n_desc $PACKAGE
|
pascal@627
|
57 cat << EOT
|
pascal@627
|
58 <tr>
|
al@719
|
59 <td><input type="checkbox" name="pkg" value="$PACKAGE">$(pkg_info_link $PACKAGE $class)</td>
|
pascal@627
|
60 <td>$VERSION</td>
|
al@719
|
61 <td>$SHORT_DESC</td>
|
al@718
|
62 <td><a class="w" href="$WEB_SITE"></a></td>
|
al@718
|
63 </tr>
|
al@718
|
64 EOT
|
al@718
|
65 done
|
al@718
|
66 unset IFS
|
al@718
|
67 }
|
al@718
|
68
|
al@718
|
69
|
al@718
|
70 parse_packages_info() {
|
al@718
|
71 IFS=$'\t'
|
al@718
|
72 while read PACKAGE VERSION CATEGORY SHORT_DESC WEB_SITE TAGS SIZES DEPENDS; do
|
al@725
|
73 class=pkg; grep -q "^$PACKAGE$'\t'" $PKGS_DB/installed.info && class=pkgi
|
al@718
|
74 i18n_desc $PACKAGE
|
al@718
|
75 cat << EOT
|
al@718
|
76 <tr>
|
al@719
|
77 <td><input type="checkbox" name="pkg" value="$PACKAGE">$(pkg_info_link $PACKAGE $class)</td>
|
al@718
|
78 <td>$VERSION</td>
|
al@719
|
79 <td>$SHORT_DESC</td>
|
al@718
|
80 <td><a class="w" href="$WEB_SITE"></a></td>
|
pascal@627
|
81 </tr>
|
pascal@627
|
82 EOT
|
pascal@627
|
83 done
|
pascal@627
|
84 unset IFS
|
pascal@627
|
85 }
|
pascal@627
|
86
|
al@707
|
87
|
pascal@627
|
88 # Display a full summary of packages stats
|
al@707
|
89
|
pascal@627
|
90 packages_summary() {
|
pascal@627
|
91 cat << EOT
|
pascal@627
|
92 <table class="zebra outbox">
|
pascal@627
|
93 <tbody>
|
al@724
|
94 <tr><td>$(_ 'Last recharge:')</td><td>
|
pascal@627
|
95 EOT
|
al@724
|
96 ls -l $PKGS_DB/packages.list | awk '{print $6, $7, $8}'
|
al@724
|
97 if [ -n "$(find $PKGS_DB/packages.list -mtime +10)" ]; then
|
al@707
|
98 _ '(Older than 10 days)'
|
pascal@627
|
99 else
|
al@707
|
100 _ '(Not older than 10 days)'
|
pascal@627
|
101 fi
|
pascal@627
|
102 cat << EOT
|
pascal@627
|
103 </td></tr>
|
al@707
|
104 <tr><td>$(_ 'Installed packages:')</td>
|
al@724
|
105 <td>$(cat $PKGS_DB/installed.info | wc -l)</td></tr>
|
al@707
|
106 <tr><td>$(_ 'Mirrored packages:')</td>
|
al@700
|
107 <td>$(cat $PKGS_DB/packages.list | wc -l)</td></tr>
|
al@707
|
108 <tr><td>$(_ 'Upgradeable packages:')</td>
|
al@700
|
109 <td>$(cat $PKGS_DB/packages.up | wc -l)</td></tr>
|
al@707
|
110 <tr><td>$(_ 'Installed files:')</td>
|
pascal@627
|
111 <td>$(cat $INSTALLED/*/files.list | wc -l)</td></tr>
|
al@707
|
112 <tr><td>$(_ 'Blocked packages:')</td>
|
al@700
|
113 <td>$(cat $PKGS_DB/blocked-packages.list | wc -l)</td></tr>
|
pascal@627
|
114 </tbody>
|
pascal@627
|
115 </table>
|
pascal@627
|
116 EOT
|
pascal@627
|
117 }
|
pascal@627
|
118
|
al@707
|
119
|
pascal@627
|
120 # Parse mirrors list to be able to have an icon and remove link
|
al@707
|
121
|
pascal@627
|
122 list_mirrors() {
|
pascal@627
|
123 while read line
|
pascal@627
|
124 do
|
pascal@627
|
125 cat << EOT
|
pascal@627
|
126 <li>
|
pascal@627
|
127 <a href="$SCRIPT_NAME?admin=rm-mirror=$line&file=$(httpd -e $1)">
|
al@707
|
128 <img src="$IMAGES/clear.png" title="$(_ 'Delete')" />
|
pascal@627
|
129 </a>
|
pascal@627
|
130 <a href="$SCRIPT_NAME?admin=select-mirror&mirror=$line">
|
al@707
|
131 <img src="$IMAGES/start.png" title="$(_ 'Use as default')" />
|
pascal@627
|
132 </a>
|
pascal@627
|
133 <a href="$line">$line</a>
|
pascal@627
|
134 </li>
|
pascal@627
|
135 EOT
|
pascal@627
|
136 done < $1
|
pascal@627
|
137 }
|
pascal@627
|
138
|
al@707
|
139
|
pascal@627
|
140 # Parse repositories list to be able to have an icon and remove link
|
al@707
|
141
|
pascal@627
|
142 list_repos() {
|
al@700
|
143 ls $PKGS_DB/undigest 2> /dev/null | while read repo ; do
|
pascal@627
|
144 cat <<EOT
|
pascal@627
|
145 <li><a href="$SCRIPT_NAME?admin=rm-repo=$repo">
|
al@707
|
146 <img src="$IMAGES/clear.png">$repo</a></li>
|
pascal@627
|
147 EOT
|
pascal@627
|
148 done
|
pascal@627
|
149 }
|
pascal@627
|
150
|
al@707
|
151
|
al@724
|
152 # Show button
|
al@724
|
153 show_button() {
|
al@724
|
154 case $1 in
|
al@724
|
155 recharge) img='recharge'; label="$(_ 'Recharge list')" ;;
|
al@724
|
156 up) img='update'; label="$(_ 'Check upgrades')" ;;
|
al@724
|
157 list) img='tazpkg'; label="$(_ 'My packages')" ;;
|
al@724
|
158 linkable) img='tazpkg'; label="$(_ 'Linkable packages')" ;;
|
al@724
|
159 admin) img='edit'; label="$(_ 'Administration')" ;;
|
al@724
|
160 *Block*) img=''; label="$(_ 'Block')" ;;
|
al@724
|
161 *Unblock*) img=''; label="$(_ 'Unblock')" ;;
|
al@724
|
162 *Repack*) img=''; label="$(_ 'Repack')" ;;
|
al@724
|
163 *saveconf*) img='tazpkg'; label="$(_ 'Save configuration')" ;;
|
al@724
|
164 *listconf*) img='edit'; label="$(_ 'List configuration files')" ;;
|
al@724
|
165 *quickcheck*) img='recharge'; label="$(_ 'Quick check')" ;;
|
al@724
|
166 *fullcheck*) img='recharge'; label="$(_ 'Full check')" ;;
|
al@724
|
167 esac
|
al@724
|
168 echo -n "<a class=\"button\" href=\"?$1\">"
|
al@724
|
169 [ -n "$img" ] && echo -n "<img src=\"$IMAGES/$img.png\" />"
|
al@724
|
170 echo "$label</a>"
|
al@724
|
171 }
|
al@724
|
172
|
al@724
|
173
|
al@707
|
174
|
pascal@627
|
175 #
|
pascal@627
|
176 # xHTML functions
|
pascal@627
|
177 #
|
pascal@627
|
178
|
al@707
|
179
|
pascal@627
|
180 # ENTER will search but user may search for a button, so put one.
|
al@707
|
181
|
pascal@627
|
182 search_form() {
|
al@725
|
183 [ -z "$repo" ] && repo="$(GET repo)"
|
al@725
|
184 [ -z "$repo" ] && repo="Any"
|
pascal@627
|
185 cat << EOT
|
pascal@627
|
186 <div class="search">
|
pascal@627
|
187 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
188 <p>
|
pascal@627
|
189 <input type="text" name="search" size="20">
|
pascal@627
|
190 <input type="submit" value="$(gettext 'Search')">
|
pascal@627
|
191 <input class="radius" type="submit" name="files"
|
al@707
|
192 value="$(_n 'Files')">
|
pascal@627
|
193 <input type="hidden" name="repo" value="$repo" />
|
pascal@627
|
194 </p>
|
pascal@627
|
195 </form>
|
pascal@627
|
196 </div>
|
pascal@627
|
197 EOT
|
pascal@627
|
198 }
|
pascal@627
|
199
|
al@707
|
200
|
pascal@627
|
201 table_head() {
|
pascal@627
|
202 cat << EOT
|
pascal@627
|
203 <thead>
|
pascal@627
|
204 <tr>
|
al@707
|
205 <td>$(_ 'Name')</td>
|
al@707
|
206 <td>$(_ 'Version')</td>
|
al@707
|
207 <td>$(_ 'Description')</td>
|
al@707
|
208 <td>$(_ 'Web')</td>
|
pascal@627
|
209 </tr>
|
pascal@627
|
210 </thead>
|
pascal@627
|
211 EOT
|
pascal@627
|
212 }
|
pascal@627
|
213
|
al@707
|
214
|
pascal@627
|
215 sidebar() {
|
pascal@627
|
216 [ -n "$repo" ] || repo=Public
|
pascal@627
|
217 cat << EOT
|
pascal@627
|
218 <div id="sidebar">
|
al@707
|
219 <h4>$(_ 'Categories')</h4>
|
al@707
|
220 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system&repo=$repo" >$(_ 'base-system')</a>
|
al@707
|
221 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window&repo=$repo" >$(_ 'x-window')</a>
|
al@707
|
222 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities&repo=$repo" >$(_ 'utilities')</a>
|
al@707
|
223 <a class="active_network" href="$SCRIPT_NAME?cat=network&repo=$repo" >$(_ 'network')</a>
|
al@707
|
224 <a class="active_games" href="$SCRIPT_NAME?cat=games&repo=$repo" >$(_ 'games')</a>
|
al@707
|
225 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics&repo=$repo" >$(_ 'graphics')</a>
|
al@707
|
226 <a class="active_office" href="$SCRIPT_NAME?cat=office&repo=$repo" >$(_ 'office')</a>
|
al@707
|
227 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia&repo=$repo" >$(_ 'multimedia')</a>
|
al@707
|
228 <a class="active_development" href="$SCRIPT_NAME?cat=development&repo=$repo" >$(_ 'development')</a>
|
al@707
|
229 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools&repo=$repo">$(_ 'system-tools')</a>
|
al@707
|
230 <a class="active_security" href="$SCRIPT_NAME?cat=security&repo=$repo" >$(_ 'security')</a>
|
al@707
|
231 <a class="active_misc" href="$SCRIPT_NAME?cat=misc&repo=$repo" >$(_ 'misc')</a>
|
al@707
|
232 <a class="active_meta" href="$SCRIPT_NAME?cat=meta&repo=$repo" >$(_ 'meta')</a>
|
al@707
|
233 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free&repo=$repo" >$(_ 'non-free')</a>
|
al@707
|
234 <a class="active_all" href="$SCRIPT_NAME?cat=all&repo=$repo" >$(_ 'all')</a>
|
al@707
|
235 <a class="active_extra" href="$SCRIPT_NAME?cat=extra&repo=$repo" >$(_ 'extra')</a>
|
pascal@627
|
236 EOT
|
pascal@627
|
237
|
al@700
|
238 if [ -d $PKGS_DB/undigest ]; then
|
pascal@627
|
239 [ -n "$category" ] || category="base-system"
|
pascal@627
|
240 cat << EOT
|
al@707
|
241 <h4>$(_ 'Repositories')</h4>
|
al@707
|
242 <a class="repo_Public" href="$SCRIPT_NAME?repo=Public&cat=$category">$(_ 'Public')</a>
|
pascal@627
|
243 EOT
|
al@707
|
244
|
al@700
|
245 for i in $(ls $PKGS_DB/undigest); do
|
pascal@627
|
246 cat << EOT
|
pascal@627
|
247 <a class="repo_$i" href="$SCRIPT_NAME?repo=$i&cat=$category">$i</a>
|
pascal@627
|
248 EOT
|
pascal@627
|
249 done
|
al@707
|
250
|
pascal@627
|
251 cat << EOT
|
al@707
|
252 <a class="repo_Any" href="$SCRIPT_NAME?repo=Any&cat=$category">$(_ 'Any')</a>
|
pascal@627
|
253 EOT
|
pascal@627
|
254 fi
|
pascal@627
|
255 echo "</div>"
|
pascal@627
|
256 }
|
pascal@627
|
257
|
al@707
|
258
|
pascal@627
|
259 repo_list() {
|
al@700
|
260 if [ -n "$(ls $PKGS_DB/undigest/ 2> /dev/null)" ]; then
|
pascal@627
|
261 case "$repo" in
|
al@707
|
262 Public)
|
al@707
|
263 ;;
|
al@707
|
264 ""|Any)
|
al@707
|
265 for i in $PKGS_DB/undigest/* ; do
|
al@707
|
266 [ -d "$i" ] && echo "$i$1"
|
al@707
|
267 done ;;
|
al@707
|
268 *)
|
al@707
|
269 echo "$PKGS_DB/undigest/$repo$1"
|
al@707
|
270 return ;;
|
pascal@627
|
271 esac
|
pascal@627
|
272 fi
|
al@700
|
273 echo "$PKGS_DB$1"
|
pascal@627
|
274 }
|
pascal@627
|
275
|
al@707
|
276
|
pascal@627
|
277 repo_name() {
|
pascal@627
|
278 case "$1" in
|
al@707
|
279 $PKGS_DB)
|
al@707
|
280 echo "Public" ;;
|
al@707
|
281 $PKGS_DB/undigest/*)
|
al@707
|
282 echo ${1#$PKGS_DB/undigest/} ;;
|
pascal@627
|
283 esac
|
pascal@627
|
284 }
|
pascal@627
|
285
|
al@722
|
286 make_mixed_list() {
|
al@722
|
287 for L in $LANG ${LANG%%_*}; do
|
al@722
|
288 if [ -e "$PKGS_DB/packages-desc.$L" ]; then
|
al@722
|
289 sed '/^#/d' $PKGS_DB/packages-desc.$L
|
al@722
|
290 break
|
al@722
|
291 fi
|
al@722
|
292 done
|
al@722
|
293
|
al@722
|
294 [ -e "$i/blocked-packages.list" ] && cat $i/blocked-packages.list
|
al@722
|
295
|
al@722
|
296 sed 's|.*|&\ti|' $i/installed.info
|
al@722
|
297
|
al@722
|
298 cat $i/packages.info
|
al@722
|
299 }
|
al@722
|
300
|
al@707
|
301
|
al@707
|
302
|
pascal@627
|
303 #
|
pascal@627
|
304 # Commands
|
pascal@627
|
305 #
|
pascal@627
|
306
|
al@707
|
307
|
pascal@627
|
308 case " $(GET) " in
|
pascal@627
|
309 *\ list\ *)
|
pascal@627
|
310 #
|
pascal@627
|
311 # List installed packages. This is the default because parsing
|
pascal@627
|
312 # the full packages.desc can be long and take up some resources
|
pascal@627
|
313 #
|
pascal@627
|
314 cd $INSTALLED
|
pascal@627
|
315 search_form
|
pascal@627
|
316 sidebar
|
al@707
|
317 LOADING_MSG="$(_ 'Listing packages...')"
|
pascal@627
|
318 loading_msg
|
pascal@627
|
319 cat << EOT
|
al@707
|
320 <h2>$(_ 'My packages')</h2>
|
pascal@627
|
321 <form method='get' action='$SCRIPT_NAME'>
|
pascal@627
|
322 <input type="hidden" name="do" value="Remove" />
|
pascal@627
|
323 <div id="actions">
|
pascal@627
|
324 <div class="float-left">
|
al@707
|
325 $(_ 'Selection:')
|
al@707
|
326 <input type="submit" value="$(_ 'Remove')" />
|
pascal@627
|
327 </div>
|
pascal@627
|
328 <div class="float-right">
|
al@724
|
329 $(show_button recharge)
|
al@724
|
330 $(show_button up)
|
pascal@627
|
331 </div>
|
pascal@627
|
332 </div>
|
al@718
|
333
|
al@719
|
334 <table class="zebra outbox pkglist">
|
pascal@627
|
335 $(table_head)
|
pascal@627
|
336 <tbody>
|
pascal@627
|
337 EOT
|
al@707
|
338 for pkg in *; do
|
pascal@627
|
339 . $pkg/receipt
|
pascal@627
|
340 echo '<tr>'
|
pascal@627
|
341 # Use default tazpkg icon since all packages displayed are
|
pascal@627
|
342 # installed
|
al@718
|
343 blocked=
|
al@718
|
344 grep -qs "^$pkg$" $PKGS_DB/blocked-packages.list && blocked="b"
|
al@718
|
345 i18n_desc $pkg
|
pascal@627
|
346 cat << EOT
|
al@719
|
347 <td><input type="checkbox" name="pkg" value="$pkg" />$(pkg_info_link $pkg pkgi$blocked)</td>
|
pascal@627
|
348 <td>$VERSION</td>
|
al@719
|
349 <td>$SHORT_DESC</td>
|
al@718
|
350 <td><a class="w" href="$WEB_SITE"></a></td>
|
pascal@627
|
351 </tr>
|
pascal@627
|
352 EOT
|
pascal@627
|
353 done
|
pascal@627
|
354 cat << EOT
|
pascal@627
|
355 </tbody>
|
pascal@627
|
356 </table>
|
pascal@627
|
357 </form>
|
pascal@627
|
358 EOT
|
pascal@627
|
359 ;;
|
pascal@627
|
360
|
al@707
|
361
|
pascal@627
|
362 *\ linkable\ *)
|
pascal@627
|
363 #
|
pascal@627
|
364 # List linkable packages.
|
pascal@627
|
365 #
|
pascal@627
|
366 cd $INSTALLED
|
pascal@627
|
367 search_form
|
pascal@627
|
368 sidebar
|
al@707
|
369 LOADING_MSG=$(_ 'Listing linkable packages...')
|
pascal@627
|
370 loading_msg
|
pascal@627
|
371 cat << EOT
|
al@707
|
372 <h2>$(_ 'Linkable packages')</h2>
|
pascal@627
|
373
|
pascal@627
|
374 <form method='get' action='$SCRIPT_NAME'>
|
pascal@627
|
375 <input type="hidden" name="do" value="Link" />
|
pascal@627
|
376 <div id="actions">
|
pascal@627
|
377 <div class="float-left">
|
al@707
|
378 $(_ 'Selection:')
|
al@707
|
379 <input type="submit" value="$(_ 'Link')" />
|
pascal@627
|
380 </div>
|
pascal@627
|
381 <div class="float-right">
|
al@724
|
382 $(show_button recharge)
|
al@724
|
383 $(show_button up)
|
pascal@627
|
384 </div>
|
pascal@627
|
385 </div>
|
pascal@627
|
386 EOT
|
pascal@627
|
387 cat << EOT
|
al@719
|
388 <table class="zebra outbox pkglist">
|
pascal@627
|
389 $(table_head)
|
pascal@627
|
390 <tbody>
|
pascal@627
|
391 EOT
|
al@700
|
392 target=$(readlink $PKGS_DB/fslink)
|
al@707
|
393 for pkg in $(ls $target/$INSTALLED); do
|
pascal@627
|
394 [ -s $pkg/receipt ] && continue
|
pascal@627
|
395 . $target/$INSTALLED/$pkg/receipt
|
al@718
|
396 i18n_desc $pkg
|
pascal@627
|
397 cat << EOT
|
pascal@627
|
398 <tr>
|
al@719
|
399 <td><input type="checkbox" name="pkg" value="$pkg" />$(pkg_info_link $pkg pkg)</td>
|
pascal@627
|
400 <td>$VERSION</td>
|
al@719
|
401 <td>$SHORT_DESC</td>
|
al@718
|
402 <td><a class="w" href="$WEB_SITE"></a></td>
|
pascal@627
|
403 </tr>
|
pascal@627
|
404 EOT
|
pascal@627
|
405 done
|
pascal@627
|
406 cat << EOT
|
pascal@627
|
407 </tbody>
|
pascal@627
|
408 </table>
|
pascal@627
|
409 </form>
|
pascal@627
|
410 EOT
|
pascal@627
|
411 ;;
|
pascal@627
|
412
|
pascal@627
|
413
|
pascal@627
|
414 *\ cat\ *)
|
pascal@627
|
415 #
|
pascal@627
|
416 # List all available packages by category on mirror. Listing all
|
pascal@627
|
417 # packages is too resource intensive and not useful.
|
pascal@627
|
418 #
|
al@720
|
419 cd $PKGS_DB
|
pascal@627
|
420 repo=$(GET repo)
|
pascal@627
|
421 category=$(GET cat)
|
al@725
|
422 [ -z "$category" ] && category="base-system"
|
pascal@627
|
423 search_form
|
pascal@627
|
424 sidebar | sed "s/active_$category/active/;s/repo_$repo/active/"
|
al@707
|
425 LOADING_MSG="$(_ 'Listing packages...')"
|
pascal@627
|
426 loading_msg
|
pascal@627
|
427 cat << EOT
|
al@707
|
428 <h2>$(_ 'Category: %s' $category)</h2>
|
pascal@627
|
429
|
pascal@627
|
430 <form method='get' action='$SCRIPT_NAME'>
|
pascal@627
|
431 <div id="actions">
|
pascal@627
|
432 <div class="float-left">
|
al@707
|
433 $(_ 'Selection:')
|
pascal@627
|
434 <input type="submit" name="do" value="Install" />
|
pascal@627
|
435 <input type="submit" name="do" value="Remove" />
|
pascal@627
|
436 <input type="hidden" name="repo" value="$repo" />
|
pascal@627
|
437 </div>
|
pascal@627
|
438 <div class="float-right">
|
al@724
|
439 $(show_button recharge)
|
al@724
|
440 $(show_button up)
|
al@724
|
441 $(show_button list)
|
pascal@627
|
442 </div>
|
pascal@627
|
443 </div>
|
pascal@627
|
444 EOT
|
pascal@627
|
445 for i in $(repo_list ""); do
|
pascal@627
|
446 if [ "$repo" != "Public" ]; then
|
pascal@627
|
447 Repo_Name="$(repo_name $i)"
|
pascal@627
|
448 cat << EOT
|
al@707
|
449 <h3>$(_ 'Repository: %s' $Repo_Name)</h3>
|
pascal@627
|
450 EOT
|
pascal@627
|
451 fi
|
al@719
|
452 echo '<table class="zebra outbox pkglist">'
|
al@718
|
453 table_head
|
al@718
|
454 echo '<tbody>'
|
al@718
|
455
|
al@718
|
456 case $category in
|
al@718
|
457 extra)
|
al@723
|
458 NA="$(_n 'n/a')"
|
al@723
|
459 for pkg in $(cat $i/extra.list); do
|
al@723
|
460 PKG="$(grep ^$pkg$'\t' $i/installed.info)"
|
al@723
|
461 if [ -n "$PKG" ]; then
|
al@723
|
462 echo "$PKG"
|
al@723
|
463 else
|
al@723
|
464 echo "$pkg $NA - $NA http://mirror.slitaz.org/packages/get/$pkg - - -"
|
al@723
|
465 fi
|
al@723
|
466 done | parse_packages_info
|
al@718
|
467 ;;
|
al@718
|
468 *)
|
al@722
|
469 make_mixed_list | sort -t$'\t' -k1,1 | awk -F$'\t' -vc="$category" '
|
al@720
|
470 {
|
al@721
|
471 if (PKG && PKG != $1) {
|
al@721
|
472 if (CAT) {
|
al@721
|
473 if (DSCL) DSC = DSCL
|
al@721
|
474 printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"><a class=\"pkg%s%s\" href=\"?info=%s\">%s</a></td><td>%s</td><td>%s</td><td><a href=\"%s\"></a></td></tr>\n", PKG, INS, BLK, gensub(/\+/, "%2B", "g", PKG), PKG, VER, DSC, WEB
|
al@720
|
475 }
|
al@721
|
476 VER = DSC = WEB = DSCL = INS = BLK = CAT = ""
|
al@720
|
477 }
|
al@720
|
478
|
al@720
|
479 PKG = $1
|
al@721
|
480 if (NF == 1) { BLK = "b"; next }
|
al@721
|
481 if (NF == 2) { DSCL = $2; next }
|
al@725
|
482 if (c == "all" || $3 == c) {
|
al@721
|
483 CAT = c
|
al@721
|
484 if ($9 == "i") { PKG = $1; VER = $2; DSC = $4; WEB = $5; INS = "i"; next}
|
al@721
|
485 if (! INS) { PKG = $1; VER = $2; DSC = $4; WEB = $5 }
|
al@720
|
486 }
|
al@720
|
487 }'
|
al@718
|
488 ;;
|
al@718
|
489 esac
|
pascal@627
|
490 cat << EOT
|
pascal@627
|
491 </tbody>
|
pascal@627
|
492 </table>
|
pascal@627
|
493 EOT
|
pascal@627
|
494 done
|
pascal@627
|
495 echo '</form>' ;;
|
pascal@627
|
496
|
pascal@627
|
497
|
pascal@627
|
498 *\ search\ *)
|
pascal@627
|
499 #
|
pascal@627
|
500 # Search for packages. Here default is to search in packages.desc
|
pascal@627
|
501 # and so get result including packages names and descriptions
|
pascal@627
|
502 #
|
al@725
|
503 pkg=$(GET search); [ -z "$pkg" ] && xhtml_footer && exit
|
pascal@627
|
504 repo=$(GET repo)
|
al@718
|
505 cd $PKGS_DB
|
pascal@627
|
506 search_form
|
pascal@627
|
507 sidebar | sed "s/repo_$repo/active/"
|
al@707
|
508 LOADING_MSG="$(_ 'Searching packages...')"
|
pascal@627
|
509 loading_msg
|
pascal@627
|
510 cat << EOT
|
al@707
|
511 <h2>$(_ 'Search packages')</h2>
|
pascal@627
|
512 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
513 <div id="actions">
|
pascal@627
|
514 <div class="float-left">
|
al@707
|
515 $(_ 'Selection:')
|
pascal@627
|
516 <input type="submit" name="do" value="Install" />
|
pascal@627
|
517 <input type="submit" name="do" value="Remove" />
|
al@707
|
518 <a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a>
|
pascal@627
|
519 </div>
|
pascal@627
|
520 <div class="float-right">
|
al@724
|
521 $(show_button recharge)
|
al@724
|
522 $(show_button up)
|
al@724
|
523 $(show_button list)
|
pascal@627
|
524 </div>
|
pascal@627
|
525 </div>
|
pascal@627
|
526 <input type="hidden" name="repo" value="$repo" />
|
pascal@627
|
527 EOT
|
al@725
|
528 if [ -n "$(GET files)" ]; then
|
pascal@627
|
529 cat <<EOT
|
al@723
|
530 <table class="zebra outbox filelist">
|
pascal@627
|
531 <thead>
|
pascal@627
|
532 <tr>
|
al@707
|
533 <td>$(_ 'Package')</td>
|
al@707
|
534 <td>$(_ 'File')</td>
|
pascal@627
|
535 </tr>
|
pascal@627
|
536 <thead>
|
pascal@627
|
537 <tbody>
|
pascal@627
|
538 EOT
|
al@718
|
539 lzcat $(repo_list /files.list.lzma) | grep -Ei ": .*$(GET search)" | \
|
al@718
|
540 while read PACKAGE FILE; do
|
al@718
|
541 PACKAGE=${PACKAGE%:}
|
al@718
|
542 class=pkg; [ -d $INSTALLED/$PACKAGE ] && class=pkgi
|
al@718
|
543 cat << EOT
|
pascal@627
|
544 <tr>
|
al@719
|
545 <td><input type="checkbox" name="pkg" value="$PACKAGE">$(pkg_info_link $PACKAGE $class)</td>
|
al@723
|
546 <td>$(echo "$FILE" | sed "s|$pkg|<span class=\"diff-add\">$pkg</span>|g")</td>
|
pascal@627
|
547 </tr>
|
pascal@627
|
548 EOT
|
al@718
|
549 done
|
pascal@627
|
550 else
|
al@723
|
551 echo ' <table class="zebra outbox pkglist">'
|
al@718
|
552 table_head
|
al@718
|
553 echo " <tbody>"
|
al@718
|
554 awk -F$'\t' 'BEGIN{IGNORECASE = 1}
|
al@718
|
555 $1 $4 ~ /'$pkg'/{print $0}' $(repo_list /packages.info) | parse_packages_info
|
pascal@627
|
556 fi
|
pascal@627
|
557 cat << EOT
|
pascal@627
|
558 </tbody>
|
pascal@627
|
559 </table>
|
pascal@627
|
560 </form>
|
pascal@627
|
561 EOT
|
pascal@627
|
562 ;;
|
pascal@627
|
563
|
pascal@627
|
564
|
pascal@627
|
565 *\ recharge\ *)
|
pascal@627
|
566 #
|
pascal@627
|
567 # Lets recharge the packages list
|
pascal@627
|
568 #
|
pascal@627
|
569 search_form
|
pascal@627
|
570 sidebar
|
al@707
|
571 LOADING_MSG="$(_ 'Recharging lists...')"
|
pascal@627
|
572 loading_msg
|
pascal@627
|
573 cat << EOT
|
al@707
|
574 <h2>$(_ 'Recharge')</h2>
|
pascal@627
|
575
|
pascal@627
|
576 <form method='get' action='$SCRIPT_NAME'>
|
pascal@627
|
577 <div id="actions">
|
pascal@627
|
578 <div class="float-left">
|
al@707
|
579 <p>$(_ 'Recharge checks for new or updated packages')</p>
|
pascal@627
|
580 </div>
|
pascal@627
|
581 <div class="float-right">
|
al@724
|
582 $(show_button up)
|
al@724
|
583 $(show_button list)
|
pascal@627
|
584 </div>
|
pascal@627
|
585 </div>
|
pascal@627
|
586 <div class="wrapper">
|
pascal@627
|
587 <pre>
|
pascal@627
|
588 EOT
|
al@707
|
589 echo $(_ 'Recharging packages list') | log
|
pascal@627
|
590 tazpkg recharge | filter_taztools_msgs
|
pascal@627
|
591 cat << EOT
|
pascal@627
|
592 </pre>
|
pascal@627
|
593 </div>
|
al@707
|
594 <p>$(_ 'Packages lists are up-to-date. You should check for upgrades now.')</p>
|
pascal@627
|
595 EOT
|
pascal@627
|
596 ;;
|
pascal@627
|
597
|
pascal@627
|
598
|
pascal@627
|
599 *\ up\ *)
|
pascal@627
|
600 #
|
pascal@627
|
601 # Upgrade packages
|
pascal@627
|
602 #
|
al@700
|
603 cd $PKGS_DB
|
pascal@627
|
604 search_form
|
pascal@627
|
605 sidebar
|
al@707
|
606 LOADING_MSG="$(_ 'Checking for upgrades...')"
|
pascal@627
|
607 loading_msg
|
pascal@627
|
608 cat << EOT
|
al@707
|
609 <h2>$(_ 'Up packages')</h2>
|
pascal@627
|
610
|
pascal@627
|
611 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
612 <div id="actions">
|
pascal@627
|
613 <div class="float-left">
|
al@707
|
614 $(_ 'Selection:')
|
pascal@627
|
615 <input type="submit" name="do" value="Install" />
|
pascal@627
|
616 <input type="submit" name="do" value="Remove" />
|
al@707
|
617 <a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a>
|
pascal@627
|
618 </div>
|
pascal@627
|
619 <div class="float-right">
|
al@724
|
620 $(show_button recharge)
|
al@724
|
621 $(show_button list)
|
pascal@627
|
622 </div>
|
pascal@627
|
623 </div>
|
pascal@627
|
624 EOT
|
pascal@627
|
625 tazpkg up --check >/dev/null
|
pascal@627
|
626 cat << EOT
|
pascal@627
|
627 <table class="zebra outbox">
|
pascal@627
|
628 $(table_head)
|
pascal@627
|
629 <tbody>
|
pascal@627
|
630 EOT
|
al@719
|
631 for pkg in $(cat packages.up); do
|
al@719
|
632 grep -hs "^$pkg |" $PKGS_DB/packages.desc $PKGS_DB/undigest/*/packages.desc | \
|
pascal@627
|
633 parse_packages_desc
|
pascal@627
|
634 done
|
pascal@627
|
635 cat << EOT
|
pascal@627
|
636 </tbody>
|
pascal@627
|
637 </table>
|
pascal@627
|
638 </form>
|
pascal@627
|
639 EOT
|
pascal@627
|
640 ;;
|
pascal@627
|
641
|
pascal@627
|
642
|
pascal@627
|
643 *\ do\ *)
|
pascal@627
|
644 #
|
pascal@627
|
645 # Do an action on one or some packages
|
pascal@627
|
646 #
|
pascal@627
|
647 opt=""
|
pascal@627
|
648 pkgs=""
|
pascal@627
|
649 cmdline=$(echo ${QUERY_STRING#do=} | sed s'/&/ /g')
|
pascal@627
|
650 cmd=$(echo ${cmdline} | awk '{print $1}')
|
pascal@627
|
651 cmdline=${cmdline#*repo=* }
|
pascal@627
|
652 pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//)
|
pascal@627
|
653 pkgs="$(httpd -d "$pkgs")"
|
pascal@627
|
654 cmd=$(echo $cmd | tr [:upper:] [:lower:])
|
pascal@627
|
655 case $cmd in
|
pascal@627
|
656 install)
|
pascal@627
|
657 cmd=get-install opt=--forced
|
pascal@627
|
658 LOADING_MSG="get-installing packages..."
|
pascal@627
|
659 ;;
|
pascal@627
|
660 link)
|
al@700
|
661 opt=$(readlink $PKGS_DB/fslink)
|
pascal@627
|
662 LOADING_MSG="linking packages..."
|
pascal@627
|
663 ;;
|
pascal@627
|
664 esac
|
pascal@627
|
665 search_form
|
pascal@627
|
666 sidebar
|
pascal@627
|
667 loading_msg
|
pascal@627
|
668 cat << EOT
|
al@633
|
669 <h2>TazPkg: $cmd</h2>
|
pascal@627
|
670
|
pascal@627
|
671 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
672 <div id="actions">
|
pascal@627
|
673 <div class="float-left">
|
al@707
|
674 <p>$(_ 'Performing tasks on packages')</p>
|
pascal@627
|
675 </div>
|
pascal@627
|
676 <div class="float-right">
|
al@724
|
677 $(show_button list)
|
pascal@627
|
678 </div>
|
pascal@627
|
679 </div>
|
pascal@627
|
680 <div class="box">
|
al@707
|
681 $(_ 'Executing %s for: %s' $cmd $pkgs)
|
pascal@627
|
682 </div>
|
pascal@627
|
683 EOT
|
al@707
|
684 for pkg in $pkgs; do
|
pascal@627
|
685 echo '<pre>'
|
al@707
|
686 echo $(_n 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
|
pascal@627
|
687 echo '</pre>'
|
pascal@627
|
688 done ;;
|
pascal@627
|
689
|
pascal@627
|
690
|
pascal@627
|
691 *\ info\ *)
|
pascal@627
|
692 #
|
pascal@627
|
693 # Packages info
|
pascal@627
|
694 #
|
pascal@627
|
695 pkg=$(GET info)
|
pascal@627
|
696 search_form
|
pascal@627
|
697 sidebar
|
pascal@627
|
698 if [ -d $INSTALLED/$pkg ]; then
|
pascal@627
|
699 . $INSTALLED/$pkg/receipt
|
al@718
|
700 files=$(wc -l < $INSTALLED/$pkg/files.list)
|
pascal@627
|
701 action="Remove"
|
al@707
|
702 action_i18n=$(_ 'Remove')
|
pascal@627
|
703 else
|
al@718
|
704 cd $PKGS_DB
|
al@707
|
705 LOADING_MSG=$(_ 'Getting package info...')
|
pascal@627
|
706 loading_msg
|
pascal@627
|
707 IFS='|'
|
al@707
|
708 set -- $(grep -hs "^$pkg |" packages.desc undigest/*/packages.desc)
|
pascal@627
|
709 unset IFS
|
pascal@627
|
710 PACKAGE=$1
|
pascal@627
|
711 VERSION="$(echo $2)"
|
pascal@627
|
712 SHORT_DESC="$(echo $3)"
|
pascal@627
|
713 CATEGORY="$(echo $4)"
|
pascal@627
|
714 WEB_SITE="$(echo $5)"
|
pascal@627
|
715 action="Install"
|
al@707
|
716 action_i18n=$(_ 'Install')
|
al@718
|
717 temp="${pkg#get-}"
|
pascal@627
|
718 fi
|
pascal@627
|
719 cat << EOT
|
al@707
|
720 <h2>$(_ 'Package %s' $PACKAGE)</h2>
|
pascal@627
|
721
|
pascal@627
|
722 <div id="actions">
|
pascal@627
|
723 <div class="float-left">
|
pascal@627
|
724 <p>
|
pascal@627
|
725 EOT
|
pascal@627
|
726 if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then
|
pascal@627
|
727 temp="$(echo $pkg | sed 's/get-//g')"
|
al@707
|
728 echo "<a class='button' href='$SCRIPT_NAME?do=Install&$temp'>$(_ 'Install (Non Free)')</a>"
|
pascal@627
|
729 else
|
pascal@627
|
730 echo "<a class='button' href='$SCRIPT_NAME?do=$action&$pkg'>$action_i18n</a>"
|
pascal@627
|
731 fi
|
pascal@627
|
732
|
pascal@627
|
733 if [ -d $INSTALLED/$pkg ]; then
|
al@700
|
734 if grep -qs "^$pkg$" $PKGS_DB/blocked-packages.list; then
|
al@724
|
735 show_button "do=Unblock&$pkg"
|
pascal@627
|
736 else
|
al@724
|
737 show_button "do=Block&$pkg"
|
pascal@627
|
738 fi
|
al@724
|
739 show_button "do=Repack&$pkg"
|
pascal@627
|
740 fi
|
al@718
|
741 i18n_desc $pkg
|
pascal@627
|
742 cat << EOT
|
pascal@627
|
743 </p>
|
pascal@627
|
744 </div>
|
pascal@627
|
745 <div class="float-right">
|
al@724
|
746 $(show_button list)
|
pascal@627
|
747 </div>
|
pascal@627
|
748 </div>
|
pascal@627
|
749 <table class="zebra outbox">
|
pascal@627
|
750 <tbody>
|
al@707
|
751 <tr><td><b>$(_ 'Name')</b></td><td>$PACKAGE</td></tr>
|
al@707
|
752 <tr><td><b>$(_ 'Version')</b></td><td>$VERSION</td></tr>
|
al@707
|
753 <tr><td><b>$(_ 'Description')</b></td><td>$SHORT_DESC</td></tr>
|
al@707
|
754 <tr><td><b>$(_ 'Category')</b></td><td>$CATEGORY</td></tr>
|
pascal@627
|
755 EOT
|
pascal@627
|
756 if [ -d $INSTALLED/$pkg ]; then
|
pascal@627
|
757 cat << EOT
|
al@707
|
758 <tr><td><b>$(_ 'Maintainer')</b></td><td>$MAINTAINER</td></tr>
|
al@707
|
759 <tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr>
|
al@707
|
760 <tr><td><b>$(_ 'Sizes')</b></td><td>$PACKED_SIZE/$UNPACKED_SIZE</td></tr>
|
pascal@627
|
761 EOT
|
pascal@627
|
762 if [ -n "$DEPENDS" ]; then
|
al@707
|
763 echo "<tr><td><b>$(_ 'Depends')</b></td><td>"
|
pascal@627
|
764 for i in $DEPENDS; do
|
al@718
|
765 pkg_info_link $i
|
pascal@627
|
766 done
|
pascal@627
|
767 echo "</td></tr>"
|
pascal@627
|
768 fi
|
pascal@627
|
769 if [ -n "$SUGGESTED" ]; then
|
al@707
|
770 echo "<tr><td><b>$(_ 'Suggested')</b></td><td>"
|
pascal@627
|
771 for i in $SUGGESTED; do
|
al@718
|
772 pkg_info_link $i
|
pascal@627
|
773 done
|
pascal@627
|
774 echo "</td></tr>"
|
pascal@627
|
775 fi
|
al@707
|
776 [ -n "$TAGS" ] && echo "<tr><td><b>$(_ 'Tags')</b></td><td>$TAGS</td></tr>"
|
pascal@627
|
777 I_FILES=$(cat $INSTALLED/$pkg/files.list | wc -l)
|
pascal@627
|
778 cat << EOT
|
pascal@627
|
779 </tbody>
|
pascal@627
|
780 </table>
|
al@717
|
781 EOT
|
al@717
|
782 DESC="$(tazpkg desc $pkg)"
|
al@717
|
783 [ -n "$DESC" ] && echo "<pre>$DESC</pre>"
|
pascal@627
|
784
|
al@717
|
785 cat << EOT
|
al@707
|
786 <p>$(_ 'Installed files: %s' $I_FILES)</p>
|
pascal@627
|
787
|
al@717
|
788 <pre>$(sort $INSTALLED/$pkg/files.list)</pre>
|
pascal@627
|
789 EOT
|
pascal@627
|
790 else
|
pascal@627
|
791 cat << EOT
|
al@707
|
792 <tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr>
|
al@707
|
793 <tr><td><b>$(_ 'Sizes')</b></td><td>$(grep -hsA 3 ^$pkg$ packages.txt undigest/*/packages.txt | \
|
pascal@627
|
794 tail -n 1 | sed 's/ *//')</td></tr>
|
pascal@627
|
795 </table>
|
pascal@627
|
796
|
al@707
|
797 <p>$(_ 'Installed files:')</p>
|
pascal@627
|
798
|
pascal@627
|
799 <pre>
|
al@717
|
800 $(lzcat files.list.lzma undigest/*/files.list.lzma 2> /dev/null | \
|
al@717
|
801 sed "/^$pkg: /!d;s/^$pkg: //" | sort)
|
pascal@627
|
802 </pre>
|
pascal@627
|
803 EOT
|
pascal@627
|
804 fi
|
pascal@627
|
805 ;;
|
pascal@627
|
806
|
pascal@627
|
807
|
pascal@627
|
808 *\ admin\ * )
|
pascal@627
|
809 #
|
al@633
|
810 # TazPkg configuration page
|
pascal@627
|
811 #
|
pascal@627
|
812 cmd=$(GET admin)
|
pascal@627
|
813 case "$cmd" in
|
pascal@627
|
814 clean)
|
al@725
|
815 rm -rf $CACHE_DIR/* ;;
|
pascal@627
|
816 add-mirror)
|
pascal@627
|
817 # Decode url
|
pascal@627
|
818 mirror=$(GET mirror)
|
pascal@627
|
819 case "$mirror" in
|
pascal@627
|
820 http://*|ftp://*)
|
pascal@627
|
821 echo "$mirror" >> $(GET file) ;;
|
pascal@627
|
822 esac ;;
|
pascal@627
|
823 rm-mirror=http://*|rm-mirror=ftp://*)
|
pascal@627
|
824 mirror=${cmd#rm-mirror=}
|
pascal@627
|
825 sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;;
|
pascal@627
|
826 select-mirror*)
|
al@707
|
827 release=$(cat /etc/slitaz-release)
|
pascal@627
|
828 mirror="$(GET mirror)packages/$release/"
|
pascal@627
|
829 tazpkg setup-mirror $mirror | log
|
pascal@627
|
830 ;;
|
pascal@627
|
831 add-repo)
|
pascal@627
|
832 # Decode url
|
pascal@627
|
833 mirror=$(GET mirror)
|
al@700
|
834 repository=$PKGS_DB/undigest/$(GET repository)
|
pascal@627
|
835 case "$mirror" in
|
pascal@627
|
836 http://*|ftp://*)
|
pascal@627
|
837 mkdir -p $repository
|
pascal@627
|
838 echo "$mirror" > $repository/mirror
|
pascal@627
|
839 echo "$mirror" > $repository/mirrors ;;
|
pascal@627
|
840 esac ;;
|
pascal@627
|
841 rm-repo=*)
|
pascal@627
|
842 repository=${cmd#rm-repo=}
|
al@700
|
843 rm -rf $PKGS_DB/undigest/$repository ;;
|
pascal@627
|
844 esac
|
al@707
|
845 [ "$cmd" == "$(_n 'Set link')" ] &&
|
al@724
|
846 [ -d "$(GET link)/$INSTALLED" ] && ln -fs $(GET link) $PKGS_DB/fslink
|
al@724
|
847 [ "$cmd" == "$(_n 'Remove link')" ] && rm -f $PKGS_DB/fslink
|
al@725
|
848 cache_files=$(find $CACHE_DIR -name *.tazpkg | wc -l)
|
al@725
|
849 cache_size=$(du -sh $CACHE_DIR | cut -f1 | sed 's|\.0||')
|
pascal@627
|
850 sidebar
|
pascal@627
|
851 cat << EOT
|
al@707
|
852 <h2>$(_ 'Administration')</h2>
|
pascal@627
|
853 <div>
|
al@707
|
854 <p>$(_ 'TazPkg administration and settings')</p>
|
pascal@627
|
855 </div>
|
pascal@627
|
856 <div id="actions">
|
al@724
|
857 $(show_button 'admin=&action=saveconf')
|
al@724
|
858 $(show_button 'admin=&action=listconf')
|
al@724
|
859 $(show_button 'admin=&action=quickcheck')
|
al@724
|
860 $(show_button 'admin=&action=fullcheck')
|
pascal@627
|
861 </div>
|
pascal@627
|
862 EOT
|
pascal@627
|
863 case "$(GET action)" in
|
pascal@627
|
864 saveconf)
|
al@707
|
865 LOADING_MSG=$(_ 'Creating the package...')
|
pascal@627
|
866 loading_msg
|
pascal@627
|
867 echo "<pre>"
|
pascal@627
|
868 cd $HOME
|
pascal@627
|
869 tazpkg repack-config | filter_taztools_msgs
|
al@707
|
870 echo -n "$(_ 'Path:') "; ls $HOME/config-*.tazpkg
|
pascal@627
|
871 echo "</pre>" ;;
|
pascal@627
|
872 listconf)
|
al@707
|
873 echo "<h4>$(_ 'Configuration files')</h4>"
|
pascal@627
|
874 echo "<ul>"
|
pascal@627
|
875 tazpkg list-config | while read file; do
|
pascal@627
|
876 if [ -e $file ]; then
|
pascal@627
|
877 echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
|
pascal@627
|
878 else
|
pascal@627
|
879 echo "<li>$file</li>"
|
pascal@627
|
880 fi
|
pascal@627
|
881 done
|
pascal@627
|
882 echo "</ul>"
|
al@724
|
883 ;;
|
pascal@627
|
884 quickcheck)
|
al@707
|
885 LOADING_MSG=$(_ 'Checking packages consistency...')
|
pascal@627
|
886 loading_msg
|
pascal@627
|
887 echo "<pre>"
|
pascal@627
|
888 tazpkg check
|
pascal@627
|
889 echo "</pre>" ;;
|
pascal@627
|
890 fullcheck)
|
al@707
|
891 LOADING_MSG=$(_ 'Full packages check...')
|
pascal@627
|
892 loading_msg
|
pascal@627
|
893 echo "<pre>"
|
pascal@627
|
894 tazpkg check --full
|
pascal@627
|
895 echo "</pre>" ;;
|
pascal@627
|
896 esac
|
pascal@627
|
897 cat << EOT
|
al@707
|
898 <h3>$(_ 'Packages cache')</h3>
|
pascal@627
|
899
|
pascal@627
|
900 <div>
|
pascal@627
|
901 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
902 <p>
|
al@707
|
903 $(_ 'Packages in the cache: %s (%s)' $cache_files $cache_size)
|
pascal@627
|
904 <input type="hidden" name="admin" value="clean" />
|
pascal@627
|
905 <input type="submit" value="Clean" />
|
pascal@627
|
906 </p>
|
pascal@627
|
907 </form>
|
pascal@627
|
908 </div>
|
pascal@627
|
909
|
al@707
|
910 <h3>$(_ 'Default mirror')</h3>
|
pascal@627
|
911
|
al@725
|
912 <pre>$(cat $PKGS_DB/mirror)</pre>
|
pascal@627
|
913
|
al@707
|
914 <h3>$(_ 'Current mirror list')</h3>
|
pascal@627
|
915 EOT
|
al@700
|
916 for i in $PKGS_DB/mirrors $PKGS_DB/undigest/*/mirrors; do
|
pascal@627
|
917 [ -s $i ] || continue
|
pascal@627
|
918 echo '<div class="box">'
|
al@700
|
919 if [ $i != $PKGS_DB/mirrors ]; then
|
pascal@627
|
920 Repo_Name="$(repo_name $(dirname $i))"
|
al@707
|
921 echo "<h4>$(_ 'Repository: %s' $Repo_Name)</h4>"
|
pascal@627
|
922 fi
|
pascal@627
|
923 echo "<ul>"
|
pascal@627
|
924 list_mirrors $i
|
pascal@627
|
925 echo "</ul>"
|
pascal@627
|
926 cat << EOT
|
pascal@627
|
927 </div>
|
pascal@627
|
928 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
929 <p>
|
pascal@627
|
930 <input type="hidden" name="admin" value="add-mirror" />
|
pascal@627
|
931 <input type="hidden" name="file" value="$i" />
|
pascal@627
|
932 <input type="text" name="mirror" size="60">
|
pascal@627
|
933 <input type="submit" value="Add mirror" />
|
pascal@627
|
934 </p>
|
pascal@627
|
935 </form>
|
pascal@627
|
936 EOT
|
pascal@627
|
937 done
|
al@707
|
938 echo "<h3>$(_ 'Private repositories')</h3>"
|
al@700
|
939 [ -n "$(ls $PKGS_DB/undigest 2> /dev/null)" ] && cat << EOT
|
pascal@627
|
940 <div class="box">
|
pascal@627
|
941 <ul>
|
pascal@627
|
942 $(list_repos)
|
pascal@627
|
943 </ul>
|
pascal@627
|
944 </div>
|
pascal@627
|
945 EOT
|
pascal@627
|
946 cat << EOT
|
pascal@627
|
947 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
948 <p>
|
pascal@627
|
949 <input type="hidden" name="admin" value="add-repo" />
|
al@707
|
950 $(_ 'Name') <input type="text" name="repository" size="10">
|
al@707
|
951 $(_ 'mirror')
|
pascal@627
|
952 <input type="text" name="mirror" value="http://" size="50">
|
pascal@627
|
953 <input type="submit" value="Add repository" />
|
pascal@627
|
954 </p>
|
pascal@627
|
955 </form>
|
pascal@627
|
956
|
al@707
|
957 <h3>$(_ 'Link to another SliTaz installation')</h3>
|
pascal@627
|
958
|
al@707
|
959 <p>$(_ "This link points to the root of another SliTaz installation. \
|
pascal@627
|
960 You will be able to install packages using soft links to it.")</p>
|
pascal@627
|
961
|
pascal@627
|
962 <form method="get" action="$SCRIPT_NAME">
|
pascal@627
|
963 <p>
|
pascal@627
|
964 <input type="hidden" name="admin" value="add-link" />
|
pascal@627
|
965 <input type="text" name="link"
|
al@700
|
966 value="$(readlink $PKGS_DB/fslink 2> /dev/null)" size="50">
|
al@707
|
967 <input type="submit" name="admin" value="$(_ 'Set link')" />
|
al@707
|
968 <input type="submit" name="admin" value="$(_ 'Remove link')" />
|
pascal@627
|
969 </p>
|
pascal@627
|
970 </form>
|
pascal@627
|
971 EOT
|
pascal@627
|
972 version=$(cat /etc/slitaz-release)
|
pascal@627
|
973 cat << EOT
|
pascal@627
|
974
|
al@707
|
975 <h3 id="dvd">$(_ 'SliTaz packages DVD')</h3>
|
pascal@627
|
976
|
al@707
|
977 <p>$(_ "A bootable DVD image of all available packages for the %s version is \
|
al@707
|
978 generated every day. It also contains a copy of the website and can be used \
|
al@707
|
979 without an internet connection. This image can be installed on a DVD or a USB \
|
al@707
|
980 key." $version)</p>
|
pascal@627
|
981
|
pascal@627
|
982 <div>
|
pascal@627
|
983 <form method="post" action='$SCRIPT_NAME?admin&action=dvdimage#dvd'>
|
pascal@627
|
984 <p>
|
pascal@627
|
985 <a class="button"
|
pascal@627
|
986 href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
|
al@707
|
987 <img src="$IMAGES/tazpkg.png" />$(_ 'Download DVD image')</a>
|
pascal@627
|
988 <a class="button" href='$SCRIPT_NAME?admin&action=dvdusbkey#dvd'>
|
al@707
|
989 <img src="$IMAGES/tazpkg.png" />$(_ 'Install from DVD/USB key')</a>
|
pascal@627
|
990 </p>
|
pascal@627
|
991 <div class="box">
|
al@707
|
992 $(_ 'Install from ISO image:')
|
pascal@627
|
993 <input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso">
|
pascal@627
|
994 </div>
|
pascal@627
|
995 </form>
|
pascal@627
|
996 </div>
|
pascal@627
|
997 EOT
|
pascal@627
|
998 if [ "$(GET action)" == "dvdimage" ]; then
|
pascal@627
|
999 dev=$(POST dvdimage)
|
pascal@627
|
1000 mkdir -p /mnt/packages 2> /dev/null
|
pascal@627
|
1001 echo "<pre>"
|
pascal@627
|
1002 mount -t iso9660 -o loop,ro $dev /mnt/packages &&
|
pascal@627
|
1003 /mnt/packages/install.sh &&
|
al@707
|
1004 _ '%s is installed on /mnt/packages' $dev
|
pascal@627
|
1005 echo "</pre>"
|
pascal@627
|
1006 fi
|
pascal@627
|
1007 if [ "$(GET action)" == "dvdusbkey" ]; then
|
pascal@627
|
1008 mkdir -p /mnt/packages 2> /dev/null
|
pascal@627
|
1009 for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
|
pascal@627
|
1010 "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
|
pascal@627
|
1011 dev=$(blkid | grep "$tag" | cut -d: -f1)
|
pascal@627
|
1012 [ -n "$dev" ] || continue
|
pascal@627
|
1013 echo "<pre>"
|
pascal@627
|
1014 mount -t iso9660 -o ro $dev /mnt/packages &&
|
pascal@627
|
1015 /mnt/packages/install.sh &&
|
al@707
|
1016 _ '%s is installed on /mnt/packages' $dev
|
pascal@627
|
1017 echo "</pre>"
|
pascal@627
|
1018 break
|
pascal@627
|
1019 done
|
pascal@627
|
1020 fi
|
pascal@627
|
1021 ;;
|
pascal@627
|
1022 *)
|
pascal@627
|
1023 #
|
pascal@627
|
1024 # Default to summary
|
pascal@627
|
1025 #
|
pascal@627
|
1026 search_form
|
pascal@627
|
1027 sidebar
|
pascal@627
|
1028 [ -n "$(GET block)" ] && tazpkg block $(GET block)
|
pascal@627
|
1029 [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock)
|
pascal@627
|
1030 cat << EOT
|
al@707
|
1031 <h2>$(_ 'Summary')</h2>
|
pascal@627
|
1032
|
pascal@627
|
1033 <div id="actions">
|
al@724
|
1034 $(show_button list)
|
pascal@627
|
1035 EOT
|
al@700
|
1036 fslink=$(readlink $PKGS_DB/fslink)
|
al@724
|
1037 [ -n "$fslink" -a -d "$fslink/$INSTALLED" ] && show_button linkable
|
al@724
|
1038 show_button recharge
|
al@724
|
1039 show_button up
|
al@724
|
1040 show_button admin
|
pascal@627
|
1041 cat << EOT
|
pascal@627
|
1042 </div>
|
pascal@627
|
1043
|
pascal@627
|
1044 $(packages_summary)
|
pascal@627
|
1045
|
pascal@627
|
1046
|
al@707
|
1047 <h3>$(_ 'Latest log entries')</h3>
|
pascal@627
|
1048
|
pascal@627
|
1049 <pre>
|
al@725
|
1050 $(tail -n 5 $LOG | fgrep "-" | awk '{print $1, $2, $3, $4, $5, $6, $7}')
|
pascal@627
|
1051 </pre>
|
pascal@627
|
1052 EOT
|
pascal@627
|
1053 ;;
|
pascal@627
|
1054 esac
|
pascal@627
|
1055
|
pascal@627
|
1056 # xHTML 5 footer
|
al@633
|
1057 export TEXTDOMAIN='tazpkg'
|
pascal@627
|
1058 xhtml_footer
|
pascal@627
|
1059 exit 0
|