rev |
line source |
pankso@7
|
1 #!/bin/sh
|
pankso@7
|
2 #
|
paul@52
|
3 # TazPKG CGI interface - Manage packages via a browser
|
pankso@7
|
4 #
|
paul@52
|
5 # This CGI interface intensively uses tazpkg to manage packages and have
|
paul@52
|
6 # its own code for some tasks. Please KISS, it is important and keep speed
|
pankso@7
|
7 # in mind. Thanks, Pankso.
|
pankso@7
|
8 #
|
pankso@112
|
9 # (C) 2011 SliTaz GNU/Linux - BSD License
|
pankso@7
|
10 #
|
pascal@79
|
11
|
pankso@17
|
12 . lib/libtazpanel
|
pankso@17
|
13 get_config
|
pascal@81
|
14 header
|
pankso@7
|
15
|
pankso@49
|
16 # xHTML 5 header with special side bar fo categories.
|
pankso@34
|
17 TITLE="- Packages"
|
pankso@41
|
18 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
|
pankso@67
|
19
|
pankso@7
|
20
|
pankso@7
|
21 # We need packages information for list and search
|
pankso@7
|
22 parse_packages_desc() {
|
pankso@45
|
23 IFS="|"
|
pankso@45
|
24 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
|
pankso@7
|
25 do
|
pankso@7
|
26 echo '<tr>'
|
pankso@46
|
27 if [ -d $INSTALLED/${PACKAGE% } ]; then
|
pankso@46
|
28 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
|
pankso@45
|
29 <a href='$SCRIPT_NAME?info=$PACKAGE'>
|
pankso@45
|
30 <img src='$IMAGES/tazpkg-installed.png'/>$PACKAGE</a></td>"
|
pankso@7
|
31 else
|
pankso@46
|
32 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
|
pascal@62
|
33 <a href='$SCRIPT_NAME?info=$PACKAGE'>
|
pascal@62
|
34 <img src='$IMAGES/tazpkg.png'/>$PACKAGE</a></td>"
|
pankso@7
|
35 fi
|
pankso@45
|
36 echo "<td>$VERSION</td>"
|
pankso@45
|
37 echo "<td class='desc'>$SHORT_DESC</td>"
|
pascal@122
|
38 echo "<td><a href='$WEB_SITE'><img src='$IMAGES/browser.png'/></a></td>"
|
pankso@7
|
39 echo '</tr>'
|
pankso@7
|
40 done
|
pankso@45
|
41 unset IFS
|
pankso@7
|
42 }
|
pankso@7
|
43
|
pankso@7
|
44 # Display a full summary of packages stats
|
pankso@7
|
45 packages_summary() {
|
pankso@37
|
46 gettext "Last recharge : "
|
pankso@37
|
47 stat=`stat -c %y $LOCALSTATE/packages.list | \
|
pankso@37
|
48 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
|
pascal@138
|
49 mtime=`find $LOCALSTATE/packages.list -mtime +10`
|
pankso@37
|
50 echo -n "$stat "
|
pankso@37
|
51 if [ "$mtime" ]; then
|
pankso@37
|
52 echo "(Older than 10 days)"
|
pankso@37
|
53 else
|
pankso@37
|
54 echo "(Not older than 10 days)"
|
pankso@37
|
55 fi
|
pankso@8
|
56 gettext "Installed packages : "
|
pankso@7
|
57 ls $INSTALLED | wc -l
|
pankso@8
|
58 gettext "Mirrored packages : "
|
pankso@7
|
59 cat $LOCALSTATE/packages.list | wc -l
|
pankso@49
|
60 gettext "Upgradeable packages : "
|
pankso@47
|
61 cat $LOCALSTATE/packages.up | wc -l
|
pankso@44
|
62 #gettext "Installed files : "
|
pankso@44
|
63 #cat $INSTALLED/*/files.list | wc -l
|
pankso@8
|
64 gettext "Blocked packages : "
|
pankso@8
|
65 cat $LOCALSTATE/blocked-packages.list | wc -l
|
pankso@7
|
66 }
|
pankso@7
|
67
|
paul@127
|
68 # Parse mirrors list to be able to have an icon and remove link
|
pankso@10
|
69 list_mirrors() {
|
pascal@138
|
70 while read line
|
pankso@10
|
71 do
|
pankso@10
|
72 cat << EOT
|
pascal@138
|
73 <li><a href="$SCRIPT_NAME?admin=rm-mirror=$line&file=$(httpd -e $1)"><img
|
pankso@10
|
74 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
|
pankso@10
|
75 EOT
|
pascal@138
|
76 done < $1
|
pascal@138
|
77 }
|
pascal@138
|
78
|
pascal@138
|
79 # Parse repositories list to be able to have an icon and remove link
|
pascal@138
|
80 list_repos() {
|
pascal@138
|
81 ls $LOCALSTATE/undigest 2> /dev/null | while read repo ; do
|
pascal@138
|
82 cat <<EOT
|
pascal@138
|
83 <li><a href="$SCRIPT_NAME?admin=rm-repo=$repo">
|
pascal@138
|
84 <img src="$IMAGES/clear.png">$repo</a></li>
|
pascal@138
|
85 EOT
|
pankso@10
|
86 done
|
pankso@10
|
87 }
|
pankso@10
|
88
|
pankso@7
|
89 #
|
pankso@7
|
90 # xHTML functions
|
pankso@7
|
91 #
|
pankso@7
|
92
|
pankso@17
|
93 # ENTER will search but user may search for a button, so put one.
|
pankso@9
|
94 search_form() {
|
pascal@129
|
95 [ -n "$repo" ] || repo="$(GET repo)"
|
pascal@129
|
96 [ -n "$repo" ] || repo=Any
|
pankso@9
|
97 cat << EOT
|
pankso@9
|
98 <div class="search">
|
pankso@17
|
99 <form method="get" action="$SCRIPT_NAME">
|
pankso@17
|
100 <p>
|
pankso@17
|
101 <input type="text" name="search" size="20">
|
pankso@17
|
102 <input type="submit" value="`gettext "Search"`">
|
pankso@80
|
103 <input class="radius" type="submit" name="files"
|
paul@127
|
104 value="`gettext "Files"`">
|
pascal@129
|
105 <input type="hidden" name="repo" value="$repo" />
|
pankso@17
|
106 </p>
|
pankso@17
|
107 </form>
|
pankso@9
|
108 </div>
|
pankso@9
|
109 EOT
|
pankso@9
|
110 }
|
pankso@9
|
111
|
pankso@17
|
112 table_head() {
|
pankso@7
|
113 cat << EOT
|
pankso@7
|
114 <tr id="thead">
|
pankso@7
|
115 <td>`gettext "Name"`</td>
|
pankso@7
|
116 <td>`gettext "Version"`</td>
|
pankso@7
|
117 <td>`gettext "Description"`</td>
|
pankso@7
|
118 <td>`gettext "Web"`</td>
|
pankso@7
|
119 </tr>
|
pankso@7
|
120 EOT
|
pankso@7
|
121 }
|
pankso@7
|
122
|
pankso@41
|
123 sidebar() {
|
pascal@129
|
124 [ -n "$repo" ] || repo=Public
|
pankso@7
|
125 cat << EOT
|
pankso@41
|
126 <div id="sidebar">
|
pankso@41
|
127 <h4>Categories</h4>
|
pascal@126
|
128 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system&repo=$repo">Base-system</a>
|
pascal@126
|
129 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window&repo=$repo">X window</a>
|
pascal@126
|
130 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities&repo=$repo">Utilities</a>
|
pascal@126
|
131 <a class="active_network" href="$SCRIPT_NAME?cat=network&repo=$repo">Network</a>
|
pascal@126
|
132 <a class="active_games" href="$SCRIPT_NAME?cat=games&repo=$repo">Games</a>
|
pascal@126
|
133 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics&repo=$repo">Graphics</a>
|
pascal@126
|
134 <a class="active_office" href="$SCRIPT_NAME?cat=office&repo=$repo">Office</a>
|
pascal@126
|
135 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia&repo=$repo">Multimedia</a>
|
pascal@126
|
136 <a class="active_development" href="$SCRIPT_NAME?cat=development&repo=$repo">Development</a>
|
pascal@126
|
137 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools&repo=$repo">System tools</a>
|
pascal@126
|
138 <a class="active_security" href="$SCRIPT_NAME?cat=security&repo=$repo">Security</a>
|
pascal@126
|
139 <a class="active_misc" href="$SCRIPT_NAME?cat=misc&repo=$repo">Misc</a>
|
pascal@126
|
140 <a class="active_meta" href="$SCRIPT_NAME?cat=meta&repo=$repo">Meta</a>
|
pascal@126
|
141 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free&repo=$repo">Non free</a>
|
pascal@126
|
142 <a class="active_all" href="$SCRIPT_NAME?cat=all&repo=$repo">All</a>
|
pankso@7
|
143 EOT
|
pascal@126
|
144
|
pascal@126
|
145 if [ -d $LOCALSTATE/undigest ]; then
|
pascal@126
|
146 [ -n "$category" ] || category="base-system"
|
pascal@126
|
147 cat << EOT
|
pascal@126
|
148 <p></p>
|
pascal@126
|
149 <h4>Repositories</h4>
|
pascal@129
|
150 <a class="repo_Public" href="$SCRIPT_NAME?repo=Public&cat=$category">Public</a>
|
pascal@126
|
151 EOT
|
pascal@126
|
152 for i in $(ls $LOCALSTATE/undigest); do
|
pascal@126
|
153 cat << EOT
|
pascal@126
|
154 <a class="repo_$i" href="$SCRIPT_NAME?repo=$i&cat=$category">$i</a>
|
pascal@126
|
155 EOT
|
pascal@126
|
156 done
|
pascal@126
|
157 cat << EOT
|
pascal@129
|
158 <a class="repo_Any" href="$SCRIPT_NAME?repo=Any&cat=$category">Any</a>
|
pascal@126
|
159 EOT
|
pascal@126
|
160 fi
|
pascal@126
|
161 echo "</div>"
|
pascal@126
|
162 }
|
pascal@126
|
163
|
pascal@126
|
164 repo_list() {
|
pascal@126
|
165 if [ -n "$(ls $LOCALSTATE/undigest/ 2> /dev/null)" ]; then
|
pascal@126
|
166 case "$repo" in
|
pascal@129
|
167 Public) ;;
|
pascal@129
|
168 ""|Any) for i in $LOCALSTATE/undigest/* ; do
|
pascal@129
|
169 [ -d "$i" ] && echo "$i$1"
|
pascal@126
|
170 done ;;
|
pascal@129
|
171 *) echo "$LOCALSTATE/undigest/$repo$1"
|
pascal@126
|
172 return ;;
|
pascal@126
|
173 esac
|
pascal@126
|
174 fi
|
pascal@129
|
175 echo "$LOCALSTATE$1"
|
pankso@7
|
176 }
|
pankso@7
|
177
|
pankso@45
|
178 #
|
pankso@45
|
179 # Commands
|
pankso@45
|
180 #
|
pankso@45
|
181
|
pascal@81
|
182 case " $(GET) " in
|
pascal@81
|
183 *\ list\ *)
|
pankso@45
|
184 #
|
pankso@45
|
185 # List installed packages. This is the default because parsing
|
paul@127
|
186 # the full packages.desc can be long and take up some resources
|
pankso@45
|
187 #
|
pankso@45
|
188 cd $INSTALLED
|
pankso@45
|
189 search_form
|
pankso@45
|
190 sidebar
|
pankso@45
|
191 LOADING_MSG="Listing packages..."
|
pankso@45
|
192 loading_msg
|
pankso@45
|
193 cat << EOT
|
pankso@45
|
194 <h2>`gettext "My packages"`</h2>
|
pankso@45
|
195 <form method='get' action='$SCRIPT_NAME'>
|
pankso@45
|
196 <div id="actions">
|
pankso@46
|
197 <div class="float-left">
|
pankso@46
|
198 `gettext "Selection:"`
|
pankso@46
|
199 <input type="submit" name="do" value="Remove" />
|
pankso@46
|
200 </div>
|
pankso@46
|
201 <div class="float-right">
|
pankso@46
|
202 `gettext "List:"`
|
pankso@46
|
203 <input type="submit" name="recharge" value="Recharge" />
|
pankso@47
|
204 <input type="submit" name="up" value="Upgrade" />
|
pankso@46
|
205 </div>
|
pankso@41
|
206 </div>
|
pankso@7
|
207 EOT
|
pankso@7
|
208 table_start
|
pankso@41
|
209 table_head
|
pankso@7
|
210 for pkg in *
|
pankso@7
|
211 do
|
pankso@7
|
212 . $pkg/receipt
|
pankso@7
|
213 echo '<tr>'
|
pankso@7
|
214 # Use default tazpkg icon since all packages displayed are
|
pankso@7
|
215 # installed
|
pascal@92
|
216 colorpkg=$pkg
|
pascal@92
|
217 grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list &&
|
pascal@92
|
218 colorpkg="<span style='color: red;'>$pkg</span>"
|
pankso@7
|
219 echo "<td class='pkg'>
|
pankso@7
|
220 <input type='checkbox' name='pkg' value=\"$pkg\" />
|
pankso@7
|
221 <a href='$SCRIPT_NAME?info=$pkg'><img
|
pascal@92
|
222 src='$IMAGES/tazpkg-installed.png'/>$colorpkg</a></td>"
|
pankso@7
|
223 echo "<td>$VERSION</td>"
|
pankso@7
|
224 echo "<td class='desc'>$SHORT_DESC</td>"
|
pascal@122
|
225 echo "<td><a href='$WEB_SITE'><img src='$IMAGES/browser.png'/></a></td>"
|
pankso@7
|
226 echo '</tr>'
|
pankso@7
|
227 done
|
pankso@7
|
228 table_end
|
pankso@7
|
229 echo '</form>' ;;
|
pascal@81
|
230 *\ cat\ *)
|
pankso@45
|
231 #
|
pankso@41
|
232 # List all available packages by category on mirror. Listing all
|
paul@52
|
233 # packages is too resource intensive and not useful.
|
pankso@45
|
234 #
|
pankso@9
|
235 cd $LOCALSTATE
|
pascal@126
|
236 repo=$(GET repo)
|
pascal@81
|
237 category=$(GET cat)
|
pascal@81
|
238 [ "$category" == "cat" ] && category="base-system"
|
pascal@93
|
239 grep_category=$category
|
pascal@93
|
240 [ "$grep_category" == "all" ] && grep_category=".*"
|
pankso@9
|
241 search_form
|
pascal@126
|
242 sidebar | sed "s/active_$category/active/;s/repo_$repo/active/"
|
pankso@45
|
243 LOADING_MSG="Listing packages..."
|
pankso@45
|
244 loading_msg
|
pankso@9
|
245 cat << EOT
|
pankso@41
|
246 <h2>`gettext "Category:"` $category</h2>
|
pankso@9
|
247 <form method='get' action='$SCRIPT_NAME'>
|
pankso@9
|
248 <div id="actions">
|
pankso@45
|
249 <div class="float-left">
|
pankso@45
|
250 `gettext "Selection:"`
|
pankso@45
|
251 <input type="submit" name="do" value="Install" />
|
pankso@45
|
252 <input type="submit" name="do" value="Remove" />
|
pascal@126
|
253 <input type="hidden" name="repo" value="$repo" />
|
pankso@45
|
254 </div>
|
pankso@45
|
255 <div class="float-right">
|
pankso@45
|
256 `gettext "List:"`
|
pankso@45
|
257 <input type="submit" name="recharge" value="Recharge" />
|
pankso@47
|
258 <input type="submit" name="up" value="Upgrade" />
|
pankso@45
|
259 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@45
|
260 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@45
|
261 </div>
|
pascal@126
|
262 </div>
|
pankso@9
|
263 EOT
|
pascal@129
|
264 for i in $(repo_list ""); do
|
pascal@129
|
265 [ "$repo" != "Public" ] &&
|
pascal@129
|
266 echo "<h3>Repository: $i</h3>"
|
pascal@126
|
267 table_start
|
pascal@126
|
268 table_head
|
pascal@129
|
269 grep "| $grep_category |" $i/packages.desc | \
|
pascal@129
|
270 parse_packages_desc
|
pascal@126
|
271 table_end
|
pascal@126
|
272 done
|
pankso@7
|
273 echo '</form>' ;;
|
pascal@81
|
274 *\ search\ *)
|
pankso@45
|
275 #
|
pankso@63
|
276 # Search for packages. Here default is to search in packages.desc
|
pankso@63
|
277 # and so get result including packages names and descriptions
|
pankso@45
|
278 #
|
pascal@81
|
279 pkg=$(GET search)
|
pascal@129
|
280 repo=$(GET repo)
|
pankso@9
|
281 cd $LOCALSTATE
|
pankso@9
|
282 search_form
|
pascal@129
|
283 sidebar | sed "s/repo_$repo/active/"
|
pankso@45
|
284 LOADING_MSG="Searching packages..."
|
pankso@45
|
285 loading_msg
|
pankso@7
|
286 cat << EOT
|
pankso@17
|
287 <h2>`gettext "Search packages"`</h2>
|
pankso@7
|
288 <form method="get" action="$SCRIPT_NAME">
|
pankso@9
|
289 <div id="actions">
|
pankso@45
|
290 <div class="float-left">
|
pankso@45
|
291 `gettext "Selection:"`
|
pankso@45
|
292 <input type="submit" name="do" value="Install" />
|
pankso@45
|
293 <input type="submit" name="do" value="Remove" />
|
pankso@45
|
294 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
|
pankso@45
|
295 </div>
|
pankso@45
|
296 <div class="float-right">
|
pankso@45
|
297 `gettext "List:"`
|
pankso@45
|
298 <input type="submit" name="recharge" value="Recharge" />
|
pankso@47
|
299 <input type="submit" name="up" value="Upgrade" />
|
pankso@45
|
300 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@45
|
301 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@45
|
302 </div>
|
pascal@126
|
303 </div>
|
pascal@129
|
304 <input type="hidden" name="repo" value="$repo" />
|
pankso@7
|
305 EOT
|
pankso@7
|
306 table_start
|
pascal@79
|
307 if [ "$(GET files)" ]; then
|
pascal@79
|
308 cat <<EOT
|
pascal@79
|
309 <tr id="thead">
|
pascal@79
|
310 <td>`gettext "Package"`</td>
|
pascal@79
|
311 <td>`gettext "File"`</td>
|
pascal@79
|
312 </tr>
|
pascal@129
|
313 $(unlzma -c $(repo_list /files.list.lzma) \
|
pascal@129
|
314 | grep -Ei ": .*$(GET search)" | \
|
pascal@84
|
315 while read PACKAGE FILE; do
|
pascal@84
|
316 PACKAGE=${PACKAGE%:}
|
pascal@84
|
317 image=tazpkg-installed.png
|
pascal@84
|
318 [ -d $INSTALLED/$PACKAGE ] || image=tazpkg.png
|
pascal@84
|
319 echo "<tr>
|
pascal@85
|
320 <td><input type='checkbox' name='pkg' value='$PACKAGE'>
|
pascal@85
|
321 <a href='$SCRIPT_NAME?info=$PACKAGE'><img src='$IMAGES/$image' />$PACKAGE</a></td>
|
pascal@84
|
322 <td>$FILE</td>
|
pascal@84
|
323 </tr>"
|
pascal@84
|
324 done)
|
pascal@79
|
325 EOT
|
pascal@79
|
326 else
|
pascal@79
|
327 table_head
|
pascal@129
|
328 grep -ih $pkg $(repo_list /packages.desc) | \
|
pascal@126
|
329 parse_packages_desc
|
pascal@79
|
330 fi
|
pankso@7
|
331 table_end
|
pankso@7
|
332 echo '</form>' ;;
|
pascal@81
|
333 *\ recharge\ *)
|
pankso@45
|
334 #
|
paul@127
|
335 # Lets recharge the packages list
|
pankso@45
|
336 #
|
pankso@9
|
337 search_form
|
pankso@41
|
338 sidebar
|
pankso@45
|
339 LOADING_MSG="Recharging lists..."
|
pankso@45
|
340 loading_msg
|
pankso@8
|
341 cat << EOT
|
pankso@9
|
342 <h2>`gettext "Recharge"`</h2>
|
pankso@9
|
343 <form method='get' action='$SCRIPT_NAME'>
|
pankso@9
|
344 <div id="actions">
|
pankso@41
|
345 <div class="float-left">
|
pankso@41
|
346 <p>
|
pankso@45
|
347 `gettext "Recharge checks for new or updated packages"`
|
pankso@41
|
348 </p>
|
pankso@41
|
349 </div>
|
pankso@41
|
350 <div class="float-right">
|
pankso@41
|
351 <p>
|
pankso@47
|
352 <a class="button" href='$SCRIPT_NAME?up'>
|
paul@127
|
353 <img src="$IMAGES/update.png" />`gettext "Check upgrades"`</a>
|
pankso@41
|
354 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@41
|
355 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@41
|
356 </p>
|
pankso@41
|
357 </div>
|
pankso@41
|
358 </div>
|
pankso@22
|
359 <pre>
|
pankso@8
|
360 EOT
|
pankso@94
|
361 gettext "Recharging packages list" | log
|
pascal@99
|
362 tazpkg recharge | filter_taztools_msgs
|
pankso@45
|
363 cat << EOT
|
pankso@45
|
364 </pre>
|
pankso@45
|
365 <p>
|
paul@52
|
366 `gettext "Packages lists are up-to-date. You should check for upgrades now."`
|
pankso@45
|
367 </p>
|
pankso@45
|
368 EOT
|
pankso@45
|
369 ;;
|
pascal@81
|
370 *\ up\ *)
|
pankso@45
|
371 #
|
paul@127
|
372 # Upgrade packages
|
pankso@45
|
373 #
|
pankso@9
|
374 cd $LOCALSTATE
|
pankso@9
|
375 search_form
|
pankso@41
|
376 sidebar
|
paul@52
|
377 LOADING_MSG="Checking for upgrades..."
|
pankso@45
|
378 loading_msg
|
pankso@8
|
379 cat << EOT
|
paul@52
|
380 <h2>`gettext "Up packages"`</h2>
|
pankso@8
|
381 <form method="get" action="$SCRIPT_NAME">
|
pankso@9
|
382 <div id="actions">
|
pankso@47
|
383 <div class="float-left">
|
pankso@47
|
384 `gettext "Selection:"`
|
pankso@47
|
385 <input type="submit" name="do" value="Install" />
|
pankso@47
|
386 <input type="submit" name="do" value="Remove" />
|
pankso@47
|
387 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
|
pankso@47
|
388 </div>
|
pankso@47
|
389 <div class="float-right">
|
pankso@47
|
390 `gettext "List:"`
|
pankso@47
|
391 <input type="submit" name="recharge" value="Recharge" />
|
pankso@47
|
392 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@47
|
393 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@47
|
394 </div>
|
pankso@45
|
395 </div>
|
pankso@8
|
396 EOT
|
pankso@47
|
397 tazpkg up --check >/dev/null
|
pankso@8
|
398 table_start
|
pankso@17
|
399 table_head
|
pankso@47
|
400 for pkg in `cat packages.up`
|
pankso@8
|
401 do
|
pascal@126
|
402 grep -s "^$pkg |" $LOCALSTATE/packages.desc \
|
pascal@126
|
403 $LOCALSTATE/undisgest/*/packages.desc | \
|
pascal@126
|
404 parse_packages_desc
|
pankso@8
|
405 done
|
pankso@8
|
406 table_end
|
pankso@8
|
407 echo '</form>' ;;
|
pascal@81
|
408 *\ do\ *)
|
pankso@45
|
409 #
|
pankso@7
|
410 # Do an action on one or some packages
|
pankso@45
|
411 #
|
pascal@92
|
412 opt=""
|
pascal@81
|
413 pkgs=""
|
pankso@87
|
414 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
|
pankso@87
|
415 cmd=`echo ${cmdline} | awk '{print $1}'`
|
pankso@87
|
416 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
|
pascal@92
|
417 cmd=`echo $cmd | tr [A-Z] [a-z]`
|
pankso@87
|
418 case $cmd in
|
pascal@92
|
419 install)
|
pankso@41
|
420 cmd=get-install opt=--forced ;;
|
pankso@41
|
421 esac
|
pankso@9
|
422 search_form
|
pankso@41
|
423 sidebar
|
pankso@45
|
424 LOADING_MSG="${cmd}ing packages..."
|
pankso@45
|
425 loading_msg
|
pankso@9
|
426 cat << EOT
|
pankso@9
|
427 <h2>Tazpkg: $cmd</h2>
|
pankso@9
|
428 <form method="get" action="$SCRIPT_NAME">
|
pankso@9
|
429 <div id="actions">
|
pankso@41
|
430 <div class="float-left">
|
pankso@41
|
431 <p>
|
paul@52
|
432 `gettext "Performing tasks on packages"`
|
pankso@41
|
433 </p>
|
pankso@41
|
434 </div>
|
pankso@41
|
435 <div class="float-right">
|
pankso@41
|
436 <p>
|
pankso@41
|
437 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@41
|
438 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@41
|
439 </p>
|
pankso@41
|
440 </div>
|
pankso@41
|
441 </div>
|
pankso@9
|
442 EOT
|
pankso@45
|
443 echo '<div class="box">'
|
pankso@10
|
444 gettext "Executing $cmd for:$pkgs"
|
pankso@45
|
445 echo '</div>'
|
pankso@7
|
446 for pkg in $pkgs
|
pankso@7
|
447 do
|
pankso@10
|
448 echo '<pre>'
|
pascal@99
|
449 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
|
pankso@7
|
450 echo '</pre>'
|
pankso@7
|
451 done ;;
|
pascal@81
|
452 *\ info\ *)
|
pankso@45
|
453 #
|
pankso@45
|
454 # Packages info
|
pankso@45
|
455 #
|
pascal@81
|
456 pkg=$(GET info)
|
pankso@9
|
457 search_form
|
pankso@41
|
458 sidebar
|
pascal@62
|
459 if [ -d $INSTALLED/$pkg ]; then
|
pascal@62
|
460 . $INSTALLED/$pkg/receipt
|
pascal@62
|
461 files=`cat $INSTALLED/$pkg/files.list | wc -l`
|
pankso@64
|
462 action=$(gettext "Remove")
|
pascal@62
|
463 else
|
pascal@62
|
464 cd $LOCALSTATE
|
pankso@64
|
465 LOADING_MSG=$(gettext "Getting package info...")
|
pankso@64
|
466 loading_msg
|
pascal@62
|
467 IFS='|'
|
pascal@129
|
468 set -- $(grep -hs "^$pkg |" packages.desc \
|
pascal@126
|
469 undigest/*/packages.desc)
|
pascal@62
|
470 unset IFS
|
pascal@62
|
471 PACKAGE=$1
|
pascal@62
|
472 VERSION="$(echo $2)"
|
pascal@62
|
473 SHORT_DESC="$(echo $3)"
|
pascal@62
|
474 CATEGORY="$(echo $4)"
|
pascal@62
|
475 WEB_SITE="$(echo $5)"
|
pankso@64
|
476 action=$(gettext "Install")
|
pascal@62
|
477 fi
|
pankso@7
|
478 cat << EOT
|
pankso@41
|
479 <h2>`gettext "Package"` $PACKAGE</h2>
|
pankso@9
|
480 <div id="actions">
|
pankso@41
|
481 <div class="float-left">
|
pankso@41
|
482 <p>
|
pankso@64
|
483 <a class="button" href='$SCRIPT_NAME?do=$action&$pkg'>$action</a>
|
pascal@92
|
484 EOT
|
pascal@92
|
485 if [ -d $INSTALLED/$pkg ]; then
|
pascal@92
|
486 if grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list; then
|
pascal@92
|
487 block=$(gettext "Unblock")
|
pascal@92
|
488 else
|
pascal@92
|
489 block=$(gettext "Block")
|
pascal@92
|
490 fi
|
pascal@92
|
491 cat << EOT
|
pascal@92
|
492 <a class="button" href='$SCRIPT_NAME?do=$block&$pkg'>$block</a>
|
pascal@92
|
493 <a class="button" href='$SCRIPT_NAME?do=Repack&$pkg'>Repack</a>
|
pascal@92
|
494 EOT
|
pascal@92
|
495 fi
|
pascal@92
|
496 cat << EOT
|
pankso@41
|
497 </p>
|
pankso@41
|
498 </div>
|
pankso@41
|
499 <div class="float-right">
|
pankso@41
|
500 <p>
|
pankso@41
|
501 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@41
|
502 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@41
|
503 </p>
|
pankso@41
|
504 </div>
|
pankso@9
|
505 </div>
|
pankso@22
|
506 <pre>
|
pankso@7
|
507 Name : $PACKAGE
|
pankso@7
|
508 Version : $VERSION
|
pankso@7
|
509 Description : $SHORT_DESC
|
pankso@41
|
510 Category : $CATEGORY
|
pascal@62
|
511 EOT
|
pascal@62
|
512 if [ -d $INSTALLED/$pkg ]; then
|
pascal@62
|
513 cat << EOT
|
pankso@10
|
514 Maintainer : $MAINTAINER
|
pankso@7
|
515 Website : <a href="$WEB_SITE">$WEB_SITE</a>
|
pankso@7
|
516 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
|
pascal@92
|
517 EOT
|
pascal@92
|
518 if [ -n "$DEPENDS" ]; then
|
pascal@92
|
519 echo -n "Depends : "
|
pascal@92
|
520 for i in $DEPENDS; do
|
pascal@92
|
521 echo -n "<a href="$SCRIPT_NAME?info=$i">$i</a> "
|
pascal@92
|
522 done
|
pascal@92
|
523 echo ""
|
pascal@92
|
524 fi
|
pascal@92
|
525 if [ -n "$SUGGESTED" ]; then
|
pascal@92
|
526 echo -n "Suggested : "
|
pascal@92
|
527 for i in $SUGGESTED; do
|
pascal@92
|
528 echo -n "<a href="$SCRIPT_NAME?info=$i">$i</a> "
|
pascal@92
|
529 done
|
pascal@92
|
530 echo ""
|
pascal@92
|
531 fi
|
pascal@92
|
532 [ -n "$TAGS" ] && echo "Tags : $TAGS"
|
pascal@92
|
533 cat << EOT
|
pankso@7
|
534 </pre>
|
pankso@7
|
535
|
pankso@41
|
536 <p>`gettext "Installed files:"` `cat $INSTALLED/$pkg/files.list | wc -l`</p>
|
pankso@7
|
537 <pre>
|
pankso@7
|
538 `cat $INSTALLED/$pkg/files.list`
|
pankso@7
|
539 </pre>
|
pankso@7
|
540 EOT
|
pascal@62
|
541 else
|
pascal@62
|
542 cat << EOT
|
pascal@62
|
543 Website : <a href="$WEB_SITE">$WEB_SITE</a>
|
pascal@129
|
544 Sizes : `grep -hsA 3 ^$pkg$ packages.txt undigest/*/packages.txt | \
|
pascal@126
|
545 tail -n 1 | sed 's/ *//'`
|
pascal@62
|
546 </pre>
|
pascal@62
|
547
|
pascal@62
|
548 <p>`gettext "Installed files:"`</p>
|
pascal@62
|
549 <pre>
|
pascal@126
|
550 `unlzma -c files.list.lzma undigest/*/files.list.lzma 2> /dev/null | \
|
pascal@126
|
551 sed "/^$pkg: /!d;s/^$pkg: //"`
|
pascal@62
|
552 </pre>
|
pascal@62
|
553 EOT
|
pascal@62
|
554 fi
|
pankso@7
|
555 ;;
|
pankso@95
|
556 *\ admin\ * )
|
pankso@45
|
557 #
|
pankso@10
|
558 # Tazpkg configuration page
|
pankso@45
|
559 #
|
pankso@95
|
560 cmd=$(GET admin)
|
pankso@10
|
561 case "$cmd" in
|
pankso@10
|
562 clean)
|
pankso@10
|
563 rm -rf /var/cache/tazpkg/* ;;
|
pascal@81
|
564 add-mirror)
|
pankso@10
|
565 # Decode url
|
pascal@81
|
566 mirror=$(GET mirror)
|
pascal@81
|
567 case "$mirror" in
|
pascal@81
|
568 http://*|ftp://*)
|
pascal@138
|
569 echo "$mirror" >> $(GET file) ;;
|
pascal@81
|
570 esac ;;
|
pankso@10
|
571 rm-mirror=http://*|rm-mirror=ftp://*)
|
pascal@81
|
572 mirror=${cmd#rm-mirror=}
|
pascal@138
|
573 sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;;
|
pascal@138
|
574 add-repo)
|
pascal@138
|
575 # Decode url
|
pascal@138
|
576 mirror=$(GET mirror)
|
pascal@138
|
577 repository=$LOCALSTATE/undigest/$(GET repository)
|
pascal@138
|
578 case "$mirror" in
|
pascal@138
|
579 http://*|ftp://*)
|
pascal@138
|
580 mkdir -p $repository
|
pascal@138
|
581 echo "$mirror" > $repository/mirror
|
pascal@138
|
582 echo "$mirror" > $repository/mirrors ;;
|
pascal@138
|
583 esac ;;
|
pascal@138
|
584 rm-repo=*)
|
pascal@138
|
585 repository=${cmd#rm-repo=}
|
pascal@138
|
586 rm -rf $LOCALSTATE/undigest/$repository ;;
|
pankso@10
|
587 esac
|
pankso@10
|
588 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
|
pankso@10
|
589 cache_size=`du -sh /var/cache/tazpkg`
|
pankso@41
|
590 sidebar
|
pankso@10
|
591 cat << EOT
|
pankso@95
|
592 <h2>$(gettext "Administration")</h2>
|
pankso@10
|
593 <div>
|
pankso@95
|
594 <p>$(gettext "Tazpkg administration and settings")</p>
|
pankso@10
|
595 </div>
|
pankso@95
|
596 <div id="actions">
|
pankso@95
|
597 <a class="button" href='$SCRIPT_NAME?admin=&action=saveconf'>
|
pankso@95
|
598 <img src="$IMAGES/tazpkg.png" />`gettext "Save configuration"`</a>
|
pankso@95
|
599 <a class="button" href='$SCRIPT_NAME?admin=&action=listconf'>
|
pankso@95
|
600 <img src="$IMAGES/edit.png" />`gettext "List configuration files"`</a>
|
pankso@95
|
601 <a class="button" href='$SCRIPT_NAME?admin=&action=quickcheck'>
|
pankso@95
|
602 <img src="$IMAGES/recharge.png" />`gettext "Quick check"`</a>
|
pankso@95
|
603 <a class="button" href='$SCRIPT_NAME?admin=&action=fullcheck'>
|
pankso@95
|
604 <img src="$IMAGES/recharge.png" />`gettext "Full check"`</a>
|
pankso@95
|
605 </div>
|
pankso@95
|
606 EOT
|
pankso@95
|
607 case "$(GET action)" in
|
pankso@95
|
608 saveconf)
|
pankso@95
|
609 LOADING_MSG=$(gettext "Creating the package...")
|
pankso@95
|
610 loading_msg
|
pankso@95
|
611 echo "<pre>"
|
pankso@95
|
612 cd $HOME
|
pascal@99
|
613 tazpkg repack-config | filter_taztools_msgs
|
pankso@95
|
614 gettext "Path : " && ls $HOME/config-*.tazpkg
|
pankso@95
|
615 echo "</pre>" ;;
|
pankso@95
|
616 listconf)
|
pankso@95
|
617 echo "<h4>`gettext "Configuration files"`</h4>"
|
pankso@95
|
618 echo "<ul>"
|
pascal@102
|
619 tazpkg list-config | while read file; do
|
pascal@102
|
620 [ "${file:0:1}" == "/" ] || continue
|
pascal@102
|
621 if [ -e $file ]; then
|
pascal@102
|
622 echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
|
pascal@102
|
623 else
|
pascal@102
|
624 echo "<li>$file</li>"
|
pascal@102
|
625 fi
|
pascal@102
|
626 done
|
pankso@95
|
627 echo "</ul>"
|
pankso@95
|
628 echo "</pre>" ;;
|
pankso@95
|
629 quickcheck)
|
paul@127
|
630 LOADING_MSG=$(gettext "Checking packages consistency...")
|
pankso@95
|
631 loading_msg
|
pankso@95
|
632 echo "<pre>"
|
pankso@95
|
633 tazpkg check
|
pankso@95
|
634 echo "</pre>" ;;
|
pankso@95
|
635 fullcheck)
|
pankso@95
|
636 LOADING_MSG=$(gettext "Full packages check...")
|
pankso@95
|
637 loading_msg
|
pankso@95
|
638 echo "<pre>"
|
pankso@95
|
639 tazpkg check --full
|
pankso@95
|
640 echo "</pre>" ;;
|
pankso@95
|
641 esac
|
pankso@95
|
642 cat << EOT
|
pankso@95
|
643 <h3>$(gettext "Packages cache")</h3>
|
pankso@10
|
644 <div>
|
pankso@10
|
645 <form method="get" action="$SCRIPT_NAME">
|
pankso@17
|
646 <p>
|
pankso@17
|
647 `gettext "Packages in the cache:"` $cache_files ($cache_size)
|
pankso@98
|
648 <input type="hidden" name="admin" value="clean" />
|
pankso@17
|
649 <input type="submit" value="Clean" />
|
pankso@17
|
650 </p>
|
pankso@10
|
651 </form>
|
pankso@10
|
652 </div>
|
pankso@17
|
653
|
pankso@10
|
654 <h3>`gettext "Current mirror list"`</h3>
|
pascal@138
|
655 EOT
|
pascal@138
|
656 for i in $LOCALSTATE/mirrors $LOCALSTATE/undigest/*/mirrors; do
|
pascal@138
|
657 echo '<div class="box">'
|
pascal@138
|
658 [ -s $i ] || continue
|
pascal@138
|
659 [ $i != $LOCALSTATE/mirrors ] &&
|
pascal@138
|
660 echo "<h4>Repository: $(dirname $i)</h4>"
|
pascal@138
|
661 echo "<ul>"
|
pascal@138
|
662 list_mirrors $i
|
pascal@138
|
663 echo "</ul>"
|
pascal@138
|
664 cat << EOT
|
pascal@138
|
665 </div>
|
pascal@138
|
666 <form method="get" action="$SCRIPT_NAME">
|
pascal@138
|
667 <p>
|
pascal@138
|
668 <input type="hidden" name="admin" value="add-mirror" />
|
pascal@138
|
669 <input type="hidden" name="file" value="$i" />
|
pascal@138
|
670 <input type="text" name="mirror" size="60">
|
pascal@138
|
671 <input type="submit" value="Add mirror" />
|
pascal@138
|
672 </p>
|
pascal@138
|
673 </form>
|
pascal@138
|
674 EOT
|
pascal@138
|
675 done
|
pascal@138
|
676 cat << EOT
|
pascal@138
|
677 <h3>`gettext "Private repositories"`</h3>
|
pankso@10
|
678 <div class="box">
|
pankso@10
|
679 <ul>
|
pascal@138
|
680 $(list_repos)
|
pankso@10
|
681 </ul>
|
pankso@10
|
682 </div>
|
pankso@10
|
683 <form method="get" action="$SCRIPT_NAME">
|
pankso@10
|
684 <p>
|
pascal@138
|
685 <input type="hidden" name="admin" value="add-repo" />
|
pascal@138
|
686 Name <input type="text" name="repository" size="10">
|
pascal@138
|
687 mirror
|
pascal@138
|
688 <input type="text" name="mirror" value="http://" size="50">
|
pascal@138
|
689 <input type="submit" value="Add repository" />
|
pankso@10
|
690 </p>
|
pankso@10
|
691 </form>
|
pankso@10
|
692 EOT
|
pascal@101
|
693 version=$(cat /etc/slitaz-release)
|
pascal@101
|
694 cat << EOT
|
pascal@101
|
695
|
pankso@111
|
696 <a name="dvd"></a>
|
pascal@101
|
697 <h3>`gettext "SliTaz packages DVD"`</h3>
|
pascal@101
|
698 <p>
|
pascal@101
|
699 $(gettext "A bootable DVD image of all available packages for \
|
pascal@101
|
700 the $version version is generated every day. It also contains a copy of \
|
pascal@101
|
701 the website and can be used without an internet connection. This image can be \
|
pascal@101
|
702 installed on a DVD or an USB key.")
|
pascal@101
|
703 </p>
|
pankso@111
|
704 <div>
|
pankso@111
|
705 <form method="post" action='$SCRIPT_NAME?admin&action=dvdimage#dvd'>
|
pankso@111
|
706 <p>
|
pankso@111
|
707 <a class="button"
|
pankso@111
|
708 href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
|
pankso@111
|
709 <img src="$IMAGES/tazpkg.png" />$(gettext "Download DVD image")</a>
|
pankso@111
|
710 <a class="button" href='$SCRIPT_NAME?admin&action=dvdusbkey#dvd'>
|
pascal@123
|
711 <img src="$IMAGES/tazpkg.png" />$(gettext "Install from DVD/USB key")</a>
|
pankso@111
|
712 </p>
|
pankso@111
|
713 <div class="box">
|
pascal@123
|
714 $(gettext "Install from ISO image: ")
|
pankso@111
|
715 <input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso">
|
pankso@111
|
716 </div>
|
pascal@101
|
717 </form>
|
pascal@101
|
718 </div>
|
pascal@101
|
719 EOT
|
pascal@101
|
720 if [ "$(GET action)" == "dvdimage" ]; then
|
pascal@101
|
721 dev=$(POST dvdimage)
|
pascal@101
|
722 mkdir -p /mnt/packages 2> /dev/null
|
pascal@101
|
723 echo "<pre>"
|
pascal@101
|
724 mount -t iso9660 -o loop,ro $dev /mnt/packages &&
|
pascal@101
|
725 /mnt/packages/install.sh &&
|
pascal@101
|
726 echo "$dev is installed on /mnt/packages"
|
pascal@101
|
727 echo "</pre>"
|
pascal@101
|
728 fi
|
pascal@101
|
729 if [ "$(GET action)" == "dvdusbkey" ]; then
|
pascal@101
|
730 mkdir -p /mnt/packages 2> /dev/null
|
pascal@101
|
731 for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
|
pascal@101
|
732 "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
|
pascal@101
|
733 dev=$(blkid | grep "$tag" | cut -d: -f1)
|
pascal@101
|
734 [ -n "$dev" ] || continue
|
pascal@101
|
735 echo "<pre>"
|
pascal@101
|
736 mount -t iso9660 -o ro $dev /mnt/packages &&
|
pascal@101
|
737 /mnt/packages/install.sh &&
|
pascal@101
|
738 echo "$dev is installed on /mnt/packages"
|
pascal@101
|
739 echo "</pre>"
|
pascal@101
|
740 break
|
pascal@101
|
741 done
|
pascal@101
|
742 fi
|
pankso@10
|
743 ;;
|
pankso@7
|
744 *)
|
pankso@14
|
745 #
|
pankso@7
|
746 # Default to summary
|
pankso@14
|
747 #
|
pankso@10
|
748 search_form
|
pankso@41
|
749 sidebar
|
pascal@92
|
750 [ -n "$(GET block)" ] && tazpkg block $(GET block)
|
pascal@92
|
751 [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock)
|
pankso@7
|
752 cat << EOT
|
pankso@9
|
753 <h2>`gettext "Summary"`</h2>
|
pankso@9
|
754 <div id="actions">
|
pankso@45
|
755 <a class="button" href='$SCRIPT_NAME?list'>
|
pankso@45
|
756 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
|
pankso@45
|
757 <a class="button" href='$SCRIPT_NAME?recharge'>
|
pankso@45
|
758 <img src="$IMAGES/recharge.png" />`gettext "Recharge list"`</a>
|
pankso@47
|
759 <a class="button" href='$SCRIPT_NAME?up'>
|
paul@127
|
760 <img src="$IMAGES/update.png" />`gettext "Check upgrades"`</a>
|
pankso@95
|
761 <a class="button" href='$SCRIPT_NAME?admin'>
|
pankso@95
|
762 <img src="$IMAGES/edit.png" />`gettext "Administration"`</a>
|
pankso@9
|
763 </div>
|
pankso@41
|
764 <pre class="pre-main">
|
pankso@7
|
765 `packages_summary`
|
pankso@7
|
766 </pre>
|
pankso@41
|
767
|
pankso@10
|
768 <h3>`gettext "Latest log entries"`</h3>
|
pankso@10
|
769 <pre>
|
pankso@45
|
770 `tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
|
pankso@10
|
771 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
|
pankso@10
|
772 </pre>
|
pankso@7
|
773 EOT
|
pankso@10
|
774 ;;
|
pankso@7
|
775 esac
|
pankso@7
|
776
|
pankso@7
|
777 # xHTML 5 footer
|
pankso@33
|
778 xhtml_footer
|
pankso@7
|
779 exit 0
|