tazpanel view tazpkg.cgi @ rev 8

Implement system upgrade: faster than ever now!!!
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 13:55:29 2011 +0200 (2011-04-02)
parents 4c5ad38717a0
children dfcc3f322885
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/'
25 cat << EOT
26 <form class="search" method="get" action="$SCRIPT_NAME">
27 <p>
28 `gettext "Search":`
29 <input type="text" name="search" size="20">
30 </p>
31 </form>
32 EOT
34 # DEBUG mode
35 [ $DEBUG == "1" ] && echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
37 # We need packages information for list and search
38 parse_packages_desc() {
39 while read line
40 do
41 echo '<tr>'
42 pkg=$(echo $line | cut -d "|" -f 1)
43 vers=$(echo $line | cut -d "|" -f 2)
44 desc=$(echo $line | cut -d "|" -f 3)
45 web=$(echo $line | cut -d "|" -f 5)
46 imgs=styles/$STYLE/images
47 if [ -d installed/$pkg ]; then
48 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
49 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
50 else
51 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
52 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
53 fi
54 echo "<td>$vers</td>"
55 echo "<td class='desc'>$desc</td>"
56 echo "<td><a href='$web'>web</a></td>"
57 echo '</tr>'
58 done
59 }
61 # Remove status and ESC char from tazpkg commands output
62 filter_tazpkg_msgs() {
63 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
64 }
66 # Display a full summary of packages stats
67 packages_summary() {
68 gettext "Installed packages : "
69 ls $INSTALLED | wc -l
70 gettext "Mirrored packages : "
71 cat $LOCALSTATE/packages.list | wc -l
72 gettext "Last recharge : "
73 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
74 gettext "Upgradeable packages : "
75 cat $LOCALSTATE/upgradeable-packages.list | wc -l
76 gettext "Installed files : "
77 cat $INSTALLED/*/files.list | wc -l
78 gettext "Blocked packages : "
79 cat $LOCALSTATE/blocked-packages.list | wc -l
80 }
82 #
83 # xHTML functions
84 #
86 table_start() {
87 cat << EOT
88 <table>
89 <tbody>
90 <tr id="thead">
91 <td>`gettext "Name"`</td>
92 <td>`gettext "Version"`</td>
93 <td>`gettext "Description"`</td>
94 <td>`gettext "Web"`</td>
95 </tr>
96 EOT
97 }
99 table_end () {
100 cat << EOT
101 </tbody>
102 </table>
103 EOT
104 }
107 list_actions() {
108 cat << EOT
109 <p>
110 `gettext "Selection:"`
111 <input type="submit" name="do" value="remove" />
112 `gettext "List:"`
113 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
114 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
115 </p>
116 EOT
117 }
119 list_all_actions() {
120 cat << EOT
121 <p>
122 `gettext "Selection:"`
123 <input type="submit" name="do" value="install" />
124 <input type="submit" name="do" value="remove" />
125 `gettext "List:"`
126 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
127 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
128 </p>
129 EOT
130 }
132 js_checkbox_all() {
133 cat << EOT
135 EOT
136 }
138 #
139 # Commands
140 #
142 case "$QUERY_STRING" in
143 list)
144 # List installed packages. This is the default because parsing
145 # the full packages.desc can be long and take some resources
146 cd /var/lib/tazpkg/installed
147 echo "<form method='get' action='$SCRIPT_NAME'>"
148 list_actions
149 table_start
150 for pkg in *
151 do
152 . $pkg/receipt
153 echo '<tr>'
154 # Use default tazpkg icon since all packages displayed are
155 # installed
156 echo "<td class='pkg'>
157 <input type='checkbox' name='pkg' value=\"$pkg\" />
158 <a href='$SCRIPT_NAME?info=$pkg'><img
159 src='$IMAGES/tazpkg.png'/></a>$pkg</td>"
160 echo "<td>$VERSION</td>"
161 echo "<td class='desc'>$SHORT_DESC</td>"
162 echo "<td><a href='$WEB_SITE'>web</a></td>"
163 echo '</tr>'
164 done
165 table_end
166 list_actions
167 echo '</form>' ;;
168 list-all)
169 # List all available packages on mirror
170 cd /var/lib/tazpkg
171 echo "<form method='get' action='$SCRIPT_NAME'>"
172 list_all_actions
173 table_start
174 cat packages.desc | parse_packages_desc
175 table_end
176 list_all_actions
177 echo '</form>' ;;
178 search=*)
179 # Search for packages
180 pkg=${QUERY_STRING#*=}
181 cd /var/lib/tazpkg
182 cat << EOT
183 <form method="get" action="$SCRIPT_NAME">
184 <p>
185 `gettext "Selection:"`
186 <input type="submit" name="do" value="install" />
187 <input type="submit" name="do" value="remove" />
188 `gettext "List:"`
189 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
190 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
191 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
192 <a href="`cat checkbox.js`">`gettext "Toogle all"`</a>
193 </p>
194 EOT
195 table_start
196 grep $pkg packages.desc | parse_packages_desc
197 table_end
198 echo '</form>' ;;
199 recharge)
200 # Let recharge the packages list
201 cat << EOT
202 <p>
203 `gettext "List:"`
204 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
205 </p>
206 <pre>
207 EOT
208 gettext "Recharging the packages list... please wait"; echo
209 tazpkg recharge | filter_tazpkg_msgs
210 echo '</pre>'
211 echo '<p>'
212 gettext "Packages lists are up-to-date"
213 echo '</p>' ;;
214 upgradeable)
215 cat << EOT
216 <form method="get" action="$SCRIPT_NAME">
217 <p>
218 `gettext "Selection:"`
219 <input type="submit" name="do" value="install" />
220 `gettext "List:"`
221 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
222 `gettext "Upgradeable packages list"`
223 <a href="`cat checkbox.js`">`gettext "Toogle all"`</a>
224 </p>
225 EOT
226 table_start
227 tazpkg upgradeable
228 for pkg in `cat $LOCALSTATE/upgradeable-packages.list`
229 do
230 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
231 done
232 table_end
233 echo '</form>' ;;
234 do=*)
235 # Do an action on one or some packages
236 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
237 cmd=`echo ${cmdline} | awk '{print $1}'`
238 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
239 [ $cmd == install ] && cmd=get-install
240 [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>"
241 for pkg in $pkgs
242 do
243 echo '<p>'
244 gettext "Executing: tazpkg $cmd $pkg"
245 echo '</p><pre>'
246 echo 'y' | tazpkg $cmd $pkg --forced 2>/dev/null | filter_tazpkg_msgs
247 echo '</pre>'
248 done ;;
249 info=*)
250 pkg=${QUERY_STRING#*=}
251 . $INSTALLED/$pkg/receipt
252 cat << EOT
253 <p>
254 `gettext "List:"`
255 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
256 </p>
257 <pre>
258 Name : $PACKAGE
259 Version : $VERSION
260 Description : $SHORT_DESC
261 Depends : `for i in $DEPENDS; do echo -n \
262 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
263 Website : <a href="$WEB_SITE">$WEB_SITE</a>
264 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
265 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
266 </pre>
268 <p>`gettext "Installed files"`</p>
269 <pre>
270 `cat $INSTALLED/$pkg/files.list`
271 </pre>
272 EOT
273 ;;
274 *)
275 # Default to summary
276 cat << EOT
277 `gettext "List:"`
278 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
279 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
280 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgradeable"`</a>
281 <pre>
282 `packages_summary`
283 </pre>
284 EOT
285 echo "" ;;
286 esac
288 # xHTML 5 footer
289 cd $PANEL && cat $FOOTER
291 exit 0