tazpkg diff pkgs.cgi @ rev 627
Add tazpanel files
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jun 29 20:18:19 2013 +0200 (2013-06-29) |
parents | |
children | 3a1edf27791c |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/pkgs.cgi Sat Jun 29 20:18:19 2013 +0200 1.3 @@ -0,0 +1,996 @@ 1.4 +#!/bin/sh 1.5 +# 1.6 +# TazPKG CGI interface - Manage packages via a browser 1.7 +# 1.8 +# This CGI interface extensively uses tazpkg to manage packages and have 1.9 +# its own code for some tasks. Please KISS, it is important and keep speed 1.10 +# in mind. Thanks, Pankso. 1.11 +# 1.12 +# (C) 2011 SliTaz GNU/Linux - BSD License 1.13 +# 1.14 + 1.15 +. lib/libtazpanel 1.16 +get_config 1.17 +header 1.18 + 1.19 +# xHTML 5 header with special side bar for categories. 1.20 +TITLE=$(gettext 'TazPanel - Packages') 1.21 +xhtml_header | sed 's/id="content"/id="content-sidebar"/' 1.22 + 1.23 +pkg_info_link() 1.24 +{ 1.25 + echo "$SCRIPT_NAME?info=$1" | sed 's/+/%2B/g' 1.26 +} 1.27 + 1.28 +i18n_desc() { 1.29 + # Display localized short description 1.30 + if [ -e "$LOCALSTATE/packages-desc.$LANG" ]; then 1.31 + LOCDESC=$(grep -e "^$pkg " $LOCALSTATE/packages-desc.$LANG | cut -d' ' -f2) 1.32 + [ "x$LOCDESC" != "x" ] && SHORT_DESC="$LOCDESC" 1.33 + fi 1.34 +} 1.35 + 1.36 +# We need packages information for list and search 1.37 +parse_packages_desc() { 1.38 + IFS="|" 1.39 + cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE 1.40 + do 1.41 + image=tazpkg-installed.png 1.42 + [ -d $INSTALLED/${PACKAGE% } ] || image=tazpkg.png 1.43 + i18n_desc 1.44 + cat << EOT 1.45 +<tr> 1.46 +<td><input type="checkbox" name="pkg" value="$PACKAGE"> 1.47 + <a href="$(pkg_info_link $PACKAGE)"><img 1.48 + src="$IMAGES/$image"/>$PACKAGE</a></td> 1.49 +<td>$VERSION</td> 1.50 +<td class="desc">$SHORT_DESC</td> 1.51 +<td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td> 1.52 +</tr> 1.53 +EOT 1.54 + done 1.55 + unset IFS 1.56 +} 1.57 + 1.58 +# Display a full summary of packages stats 1.59 +packages_summary() { 1.60 + cat << EOT 1.61 +<table class="zebra outbox"> 1.62 +<tbody> 1.63 +<tr><td>$(gettext 'Last recharge:')</td> 1.64 +EOT 1.65 + stat=$(stat -c %y $LOCALSTATE/packages.list | \ 1.66 + sed 's/\(:..\):.*/\1/' | awk '{print $1}') 1.67 + mtime=$(find $LOCALSTATE/packages.list -mtime +10) 1.68 + echo -n "<td>$stat " 1.69 + if [ "$mtime" ]; then 1.70 + gettext '(Older than 10 days)'; echo 1.71 + else 1.72 + gettext '(Not older than 10 days)'; echo 1.73 + fi 1.74 + cat << EOT 1.75 +</td></tr> 1.76 +<tr><td>$(gettext 'Installed packages:')</td> 1.77 + <td>$(ls $INSTALLED | wc -l)</td></tr> 1.78 +<tr><td>$(gettext 'Mirrored packages:')</td> 1.79 + <td>$(cat $LOCALSTATE/packages.list | wc -l)</td></tr> 1.80 +<tr><td>$(gettext 'Upgradeable packages:')</td> 1.81 + <td>$(cat $LOCALSTATE/packages.up | wc -l)</td></tr> 1.82 +<tr><td>$(gettext 'Installed files:')</td> 1.83 + <td>$(cat $INSTALLED/*/files.list | wc -l)</td></tr> 1.84 +<tr><td>$(gettext 'Blocked packages:')</td> 1.85 + <td>$(cat $LOCALSTATE/blocked-packages.list | wc -l)</td></tr> 1.86 +</tbody> 1.87 +</table> 1.88 +EOT 1.89 +} 1.90 + 1.91 +# Parse mirrors list to be able to have an icon and remove link 1.92 +list_mirrors() { 1.93 + while read line 1.94 + do 1.95 + cat << EOT 1.96 +<li> 1.97 + <a href="$SCRIPT_NAME?admin=rm-mirror=$line&file=$(httpd -e $1)"> 1.98 + <img src="$IMAGES/clear.png" title="$(gettext 'Delete')" /> 1.99 + </a> 1.100 + <a href="$SCRIPT_NAME?admin=select-mirror&mirror=$line"> 1.101 + <img src="$IMAGES/start.png" title="$(gettext 'Use as default')" /> 1.102 + </a> 1.103 + <a href="$line">$line</a> 1.104 +</li> 1.105 +EOT 1.106 + done < $1 1.107 +} 1.108 + 1.109 +# Parse repositories list to be able to have an icon and remove link 1.110 +list_repos() { 1.111 + ls $LOCALSTATE/undigest 2> /dev/null | while read repo ; do 1.112 + cat <<EOT 1.113 + <li><a href="$SCRIPT_NAME?admin=rm-repo=$repo"> 1.114 + <img src="$IMAGES/clear.png">$repo</a></li> 1.115 +EOT 1.116 + done 1.117 +} 1.118 + 1.119 +# 1.120 +# xHTML functions 1.121 +# 1.122 + 1.123 +# ENTER will search but user may search for a button, so put one. 1.124 +search_form() { 1.125 + [ -n "$repo" ] || repo="$(GET repo)" 1.126 + [ -n "$repo" ] || repo=Any 1.127 + cat << EOT 1.128 +<div class="search"> 1.129 + <form method="get" action="$SCRIPT_NAME"> 1.130 + <p> 1.131 + <input type="text" name="search" size="20"> 1.132 + <input type="submit" value="$(gettext 'Search')"> 1.133 + <input class="radius" type="submit" name="files" 1.134 + value="$(gettext 'Files')"> 1.135 + <input type="hidden" name="repo" value="$repo" /> 1.136 + </p> 1.137 + </form> 1.138 +</div> 1.139 +EOT 1.140 +} 1.141 + 1.142 +table_head() { 1.143 + cat << EOT 1.144 + <thead> 1.145 + <tr> 1.146 + <td>$(gettext 'Name')</td> 1.147 + <td>$(gettext 'Version')</td> 1.148 + <td>$(gettext 'Description')</td> 1.149 + <td>$(gettext 'Web')</td> 1.150 + </tr> 1.151 + </thead> 1.152 +EOT 1.153 +} 1.154 + 1.155 +sidebar() { 1.156 + [ -n "$repo" ] || repo=Public 1.157 + cat << EOT 1.158 +<div id="sidebar"> 1.159 + <h4>$(gettext 'Categories')</h4> 1.160 + <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system&repo=$repo">$(gettext 'Base-system')</a> 1.161 + <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window&repo=$repo">$(gettext 'X window')</a> 1.162 + <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities&repo=$repo">$(gettext 'Utilities')</a> 1.163 + <a class="active_network" href="$SCRIPT_NAME?cat=network&repo=$repo">$(gettext 'Network')</a> 1.164 + <a class="active_games" href="$SCRIPT_NAME?cat=games&repo=$repo">$(gettext 'Games')</a> 1.165 + <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics&repo=$repo">$(gettext 'Graphics')</a> 1.166 + <a class="active_office" href="$SCRIPT_NAME?cat=office&repo=$repo">$(gettext 'Office')</a> 1.167 + <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia&repo=$repo">$(gettext 'Multimedia')</a> 1.168 + <a class="active_development" href="$SCRIPT_NAME?cat=development&repo=$repo">$(gettext 'Development')</a> 1.169 + <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools&repo=$repo">$(gettext 'System tools')</a> 1.170 + <a class="active_security" href="$SCRIPT_NAME?cat=security&repo=$repo">$(gettext 'Security')</a> 1.171 + <a class="active_misc" href="$SCRIPT_NAME?cat=misc&repo=$repo">$(gettext 'Misc')</a> 1.172 + <a class="active_meta" href="$SCRIPT_NAME?cat=meta&repo=$repo">$(gettext 'Meta')</a> 1.173 + <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free&repo=$repo">$(gettext 'Non free')</a> 1.174 + <a class="active_all" href="$SCRIPT_NAME?cat=all&repo=$repo">$(gettext 'All')</a> 1.175 +EOT 1.176 + 1.177 + if [ -d $LOCALSTATE/undigest ]; then 1.178 + [ -n "$category" ] || category="base-system" 1.179 + cat << EOT 1.180 + <h4>$(gettext 'Repositories')</h4> 1.181 + <a class="repo_Public" href="$SCRIPT_NAME?repo=Public&cat=$category">$(gettext 'Public')</a> 1.182 +EOT 1.183 + for i in $(ls $LOCALSTATE/undigest); do 1.184 + cat << EOT 1.185 + <a class="repo_$i" href="$SCRIPT_NAME?repo=$i&cat=$category">$i</a> 1.186 +EOT 1.187 + done 1.188 + cat << EOT 1.189 + <a class="repo_Any" href="$SCRIPT_NAME?repo=Any&cat=$category">$(gettext 'Any')</a> 1.190 +EOT 1.191 + fi 1.192 + echo "</div>" 1.193 +} 1.194 + 1.195 +repo_list() { 1.196 + if [ -n "$(ls $LOCALSTATE/undigest/ 2> /dev/null)" ]; then 1.197 + case "$repo" in 1.198 + Public) ;; 1.199 + ""|Any) for i in $LOCALSTATE/undigest/* ; do 1.200 + [ -d "$i" ] && echo "$i$1" 1.201 + done ;; 1.202 + *) echo "$LOCALSTATE/undigest/$repo$1" 1.203 + return ;; 1.204 + esac 1.205 + fi 1.206 + echo "$LOCALSTATE$1" 1.207 +} 1.208 + 1.209 +repo_name() { 1.210 + case "$1" in 1.211 + $LOCALSTATE) echo "Public" ;; 1.212 + $LOCALSTATE/undigest/*) echo ${1#$LOCALSTATE/undigest/} ;; 1.213 + esac 1.214 +} 1.215 + 1.216 +# 1.217 +# Commands 1.218 +# 1.219 + 1.220 +case " $(GET) " in 1.221 + *\ list\ *) 1.222 + # 1.223 + # List installed packages. This is the default because parsing 1.224 + # the full packages.desc can be long and take up some resources 1.225 + # 1.226 + cd $INSTALLED 1.227 + search_form 1.228 + sidebar 1.229 + LOADING_MSG="$(gettext 'Listing packages...')" 1.230 + loading_msg 1.231 + cat << EOT 1.232 +<h2>$(gettext 'My packages')</h2> 1.233 +<form method='get' action='$SCRIPT_NAME'> 1.234 + <input type="hidden" name="do" value="Remove" /> 1.235 +<div id="actions"> 1.236 + <div class="float-left"> 1.237 + $(gettext 'Selection:') 1.238 + <input type="submit" value="$(gettext 'Remove')" /> 1.239 + </div> 1.240 + <div class="float-right"> 1.241 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.242 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.243 + <a class="button" href='$SCRIPT_NAME?up'> 1.244 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.245 + </div> 1.246 +</div> 1.247 +EOT 1.248 + cat << EOT 1.249 +<table class="zebra outbox"> 1.250 +$(table_head) 1.251 +<tbody> 1.252 +EOT 1.253 + for pkg in * 1.254 + do 1.255 + . $pkg/receipt 1.256 + echo '<tr>' 1.257 + # Use default tazpkg icon since all packages displayed are 1.258 + # installed 1.259 + colorpkg=$pkg 1.260 + grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list && 1.261 + colorpkg="<span style='color: red;'>$pkg</span>" 1.262 + i18n_desc 1.263 + cat << EOT 1.264 +<td class="pkg"> 1.265 + <input type="checkbox" name="pkg" value="$pkg" /> 1.266 + <a href="$(pkg_info_link $pkg)"><img 1.267 + src="$IMAGES/tazpkg-installed.png"/>$colorpkg</a></td> 1.268 +<td>$VERSION</td> 1.269 +<td class="desc">$SHORT_DESC</td> 1.270 +<td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td> 1.271 +</tr> 1.272 +EOT 1.273 + done 1.274 + cat << EOT 1.275 +</tbody> 1.276 +</table> 1.277 +</form> 1.278 +EOT 1.279 + ;; 1.280 + 1.281 + *\ linkable\ *) 1.282 + # 1.283 + # List linkable packages. 1.284 + # 1.285 + cd $INSTALLED 1.286 + search_form 1.287 + sidebar 1.288 + LOADING_MSG=$(gettext 'Listing linkable packages...') 1.289 + loading_msg 1.290 + cat << EOT 1.291 +<h2>$(gettext 'Linkable packages')</h2> 1.292 + 1.293 +<form method='get' action='$SCRIPT_NAME'> 1.294 + <input type="hidden" name="do" value="Link" /> 1.295 +<div id="actions"> 1.296 + <div class="float-left"> 1.297 + $(gettext 'Selection:') 1.298 + <input type="submit" value="$(gettext 'Link')" /> 1.299 + </div> 1.300 + <div class="float-right"> 1.301 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.302 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.303 + <a class="button" href="$SCRIPT_NAME?up"> 1.304 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.305 + </div> 1.306 +</div> 1.307 +EOT 1.308 + cat << EOT 1.309 +<table class="zebra outbox"> 1.310 +$(table_head) 1.311 +<tbody> 1.312 +EOT 1.313 + target=$(readlink $LOCALSTATE/fslink) 1.314 + for pkg in $(ls $target/$INSTALLED) 1.315 + do 1.316 + [ -s $pkg/receipt ] && continue 1.317 + . $target/$INSTALLED/$pkg/receipt 1.318 + i18n_desc 1.319 + cat << EOT 1.320 +<tr> 1.321 + <td class="pkg"> 1.322 + <input type="checkbox" name="pkg" value="$pkg" /> 1.323 + <a href="$(pkg_info_link $pkg)"><img 1.324 + src="$IMAGES/tazpkg.png"/>$pkg</a> 1.325 + </td> 1.326 + <td>$VERSION</td> 1.327 + <td class="desc">$SHORT_DESC</td> 1.328 + <td><a href="$WEB_SITE"><img src="$IMAGES/browser.png"/></a></td> 1.329 +</tr> 1.330 +EOT 1.331 + done 1.332 + cat << EOT 1.333 +</tbody> 1.334 +</table> 1.335 +</form> 1.336 +EOT 1.337 + ;; 1.338 + 1.339 + 1.340 + *\ cat\ *) 1.341 + # 1.342 + # List all available packages by category on mirror. Listing all 1.343 + # packages is too resource intensive and not useful. 1.344 + # 1.345 + cd $LOCALSTATE 1.346 + repo=$(GET repo) 1.347 + category=$(GET cat) 1.348 + [ "$category" == "cat" ] && category="base-system" 1.349 + grep_category=$category 1.350 + [ "$grep_category" == "all" ] && grep_category=".*" 1.351 + search_form 1.352 + sidebar | sed "s/active_$category/active/;s/repo_$repo/active/" 1.353 + LOADING_MSG="$(gettext 'Listing packages...')" 1.354 + loading_msg 1.355 + cat << EOT 1.356 +<h2>$(eval_gettext 'Category: $category')</h2> 1.357 + 1.358 +<form method='get' action='$SCRIPT_NAME'> 1.359 +<div id="actions"> 1.360 +<div class="float-left"> 1.361 + $(gettext 'Selection:') 1.362 + <input type="submit" name="do" value="Install" /> 1.363 + <input type="submit" name="do" value="Remove" /> 1.364 + <input type="hidden" name="repo" value="$repo" /> 1.365 +</div> 1.366 +<div class="float-right"> 1.367 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.368 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.369 + <a class="button" href="$SCRIPT_NAME?up"> 1.370 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.371 + <a class="button" href='$SCRIPT_NAME?list'> 1.372 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.373 +</div> 1.374 +</div> 1.375 +EOT 1.376 + for i in $(repo_list ""); do 1.377 + if [ "$repo" != "Public" ]; then 1.378 + Repo_Name="$(repo_name $i)" 1.379 + cat << EOT 1.380 +<h3>$(eval_gettext "Repository: \$Repo_Name")</h3> 1.381 +EOT 1.382 + fi 1.383 + cat << EOT 1.384 +<table class="zebra outbox"> 1.385 +$(table_head) 1.386 +<tbody> 1.387 +EOT 1.388 + grep "| $grep_category |" $i/packages.desc | \ 1.389 + parse_packages_desc 1.390 + cat << EOT 1.391 +</tbody> 1.392 +</table> 1.393 +EOT 1.394 + done 1.395 + echo '</form>' ;; 1.396 + 1.397 + 1.398 + *\ search\ *) 1.399 + # 1.400 + # Search for packages. Here default is to search in packages.desc 1.401 + # and so get result including packages names and descriptions 1.402 + # 1.403 + pkg=$(GET search) 1.404 + repo=$(GET repo) 1.405 + cd $LOCALSTATE 1.406 + search_form 1.407 + sidebar | sed "s/repo_$repo/active/" 1.408 + LOADING_MSG="$(gettext 'Searching packages...')" 1.409 + loading_msg 1.410 + cat << EOT 1.411 +<h2>$(gettext 'Search packages')</h2> 1.412 +<form method="get" action="$SCRIPT_NAME"> 1.413 +<div id="actions"> 1.414 +<div class="float-left"> 1.415 + $(gettext 'Selection:') 1.416 + <input type="submit" name="do" value="Install" /> 1.417 + <input type="submit" name="do" value="Remove" /> 1.418 + <a href="`cat $PANEL/lib/checkbox.js`">$(gettext 'Toogle all')</a> 1.419 +</div> 1.420 +<div class="float-right"> 1.421 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.422 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.423 + <a class="button" href="$SCRIPT_NAME?up"> 1.424 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.425 + <a class="button" href='$SCRIPT_NAME?list'> 1.426 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.427 +</div> 1.428 +</div> 1.429 + <input type="hidden" name="repo" value="$repo" /> 1.430 + 1.431 + <table class="zebra outbox"> 1.432 +EOT 1.433 + if [ "$(GET files)" ]; then 1.434 + cat <<EOT 1.435 + <thead> 1.436 + <tr> 1.437 + <td>$(gettext 'Package')</td> 1.438 + <td>$(gettext 'File')</td> 1.439 + </tr> 1.440 + <thead> 1.441 + <tbody> 1.442 +EOT 1.443 + unlzma -c $(repo_list /files.list.lzma) \ 1.444 + | grep -Ei ": .*$(GET search)" | \ 1.445 + while read PACKAGE FILE; do 1.446 + PACKAGE=${PACKAGE%:} 1.447 + image=tazpkg-installed.png 1.448 + [ -d $INSTALLED/$PACKAGE ] || image=tazpkg.png 1.449 + cat << EOT 1.450 +<tr> 1.451 + <td><input type="checkbox" name="pkg" value="$PACKAGE"> 1.452 + <a href="$(pkg_info_link $PACKAGE)"><img src="$IMAGES/$image" />$PACKAGE</a></td> 1.453 + <td>$FILE</td> 1.454 +</tr> 1.455 +EOT 1.456 + done 1.457 + else 1.458 + cat << EOT 1.459 +$(table_head) 1.460 + <tbody> 1.461 +EOT 1.462 + grep -ih $pkg $(repo_list /packages.desc) | \ 1.463 + parse_packages_desc 1.464 + fi 1.465 + cat << EOT 1.466 + </tbody> 1.467 + </table> 1.468 +</form> 1.469 +EOT 1.470 + ;; 1.471 + 1.472 + 1.473 + *\ recharge\ *) 1.474 + # 1.475 + # Lets recharge the packages list 1.476 + # 1.477 + search_form 1.478 + sidebar 1.479 + LOADING_MSG="$(gettext 'Recharging lists...')" 1.480 + loading_msg 1.481 + cat << EOT 1.482 +<h2>$(gettext 'Recharge')</h2> 1.483 + 1.484 +<form method='get' action='$SCRIPT_NAME'> 1.485 +<div id="actions"> 1.486 + <div class="float-left"> 1.487 + <p>$(gettext 'Recharge checks for new or updated packages')</p> 1.488 + </div> 1.489 + <div class="float-right"> 1.490 + <a class="button" href='$SCRIPT_NAME?up'> 1.491 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.492 + <a class="button" href='$SCRIPT_NAME?list'> 1.493 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.494 + </div> 1.495 +</div> 1.496 +<div class="wrapper"> 1.497 +<pre> 1.498 +EOT 1.499 + echo $(gettext 'Recharging packages list') | log 1.500 + tazpkg recharge | filter_taztools_msgs 1.501 + cat << EOT 1.502 +</pre> 1.503 +</div> 1.504 +<p>$(gettext "Packages lists are up-to-date. You should check for upgrades \ 1.505 +now.")</p> 1.506 +EOT 1.507 + ;; 1.508 + 1.509 + 1.510 + *\ up\ *) 1.511 + # 1.512 + # Upgrade packages 1.513 + # 1.514 + cd $LOCALSTATE 1.515 + search_form 1.516 + sidebar 1.517 + LOADING_MSG="$(gettext 'Checking for upgrades...')" 1.518 + loading_msg 1.519 + cat << EOT 1.520 +<h2>$(gettext 'Up packages')</h2> 1.521 + 1.522 +<form method="get" action="$SCRIPT_NAME"> 1.523 +<div id="actions"> 1.524 + <div class="float-left"> 1.525 + $(gettext 'Selection:') 1.526 + <input type="submit" name="do" value="Install" /> 1.527 + <input type="submit" name="do" value="Remove" /> 1.528 + <a href="$(cat $PANEL/lib/checkbox.js)">$(gettext 'Toogle all')</a> 1.529 + </div> 1.530 + <div class="float-right"> 1.531 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.532 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.533 + <a class="button" href="$SCRIPT_NAME?list"> 1.534 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.535 + </div> 1.536 +</div> 1.537 +EOT 1.538 + tazpkg up --check >/dev/null 1.539 + cat << EOT 1.540 +<table class="zebra outbox"> 1.541 +$(table_head) 1.542 +<tbody> 1.543 +EOT 1.544 + for pkg in `cat packages.up` 1.545 + do 1.546 + grep -hs "^$pkg |" $LOCALSTATE/packages.desc \ 1.547 + $LOCALSTATE/undigest/*/packages.desc | \ 1.548 + parse_packages_desc 1.549 + done 1.550 + cat << EOT 1.551 +</tbody> 1.552 +</table> 1.553 +</form> 1.554 +EOT 1.555 + ;; 1.556 + 1.557 + 1.558 + *\ do\ *) 1.559 + # 1.560 + # Do an action on one or some packages 1.561 + # 1.562 + opt="" 1.563 + pkgs="" 1.564 + cmdline=$(echo ${QUERY_STRING#do=} | sed s'/&/ /g') 1.565 + cmd=$(echo ${cmdline} | awk '{print $1}') 1.566 + cmdline=${cmdline#*repo=* } 1.567 + pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//) 1.568 + pkgs="$(httpd -d "$pkgs")" 1.569 + cmd=$(echo $cmd | tr [:upper:] [:lower:]) 1.570 + case $cmd in 1.571 + install) 1.572 + cmd=get-install opt=--forced 1.573 + LOADING_MSG="get-installing packages..." 1.574 + ;; 1.575 + link) 1.576 + opt=$(readlink $LOCALSTATE/fslink) 1.577 + LOADING_MSG="linking packages..." 1.578 + ;; 1.579 + esac 1.580 + search_form 1.581 + sidebar 1.582 + loading_msg 1.583 + cat << EOT 1.584 +<h2>Tazpkg: $cmd</h2> 1.585 + 1.586 +<form method="get" action="$SCRIPT_NAME"> 1.587 +<div id="actions"> 1.588 + <div class="float-left"> 1.589 + <p>$(gettext 'Performing tasks on packages')</p> 1.590 + </div> 1.591 + <div class="float-right"> 1.592 + <p> 1.593 + <a class="button" href="$SCRIPT_NAME?list"> 1.594 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.595 + </p> 1.596 + </div> 1.597 +</div> 1.598 +<div class="box"> 1.599 +$(eval_gettext 'Executing $cmd for: $pkgs') 1.600 +</div> 1.601 +EOT 1.602 + for pkg in $pkgs 1.603 + do 1.604 + echo '<pre>' 1.605 + echo $(gettext 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs 1.606 + echo '</pre>' 1.607 + done ;; 1.608 + 1.609 + 1.610 + *\ info\ *) 1.611 + # 1.612 + # Packages info 1.613 + # 1.614 + pkg=$(GET info) 1.615 + search_form 1.616 + sidebar 1.617 + if [ -d $INSTALLED/$pkg ]; then 1.618 + . $INSTALLED/$pkg/receipt 1.619 + files=`cat $INSTALLED/$pkg/files.list | wc -l` 1.620 + action="Remove" 1.621 + action_i18n=$(gettext 'Remove') 1.622 + else 1.623 + cd $LOCALSTATE 1.624 + LOADING_MSG=$(gettext 'Getting package info...') 1.625 + loading_msg 1.626 + IFS='|' 1.627 + set -- $(grep -hs "^$pkg |" packages.desc \ 1.628 + undigest/*/packages.desc) 1.629 + unset IFS 1.630 + PACKAGE=$1 1.631 + VERSION="$(echo $2)" 1.632 + SHORT_DESC="$(echo $3)" 1.633 + CATEGORY="$(echo $4)" 1.634 + WEB_SITE="$(echo $5)" 1.635 + action="Install" 1.636 + action_i18n=$(gettext 'Install') 1.637 + temp="$(echo $pkg | sed 's/get-//g')" 1.638 + fi 1.639 + cat << EOT 1.640 +<h2>$(eval_gettext 'Package $PACKAGE')</h2> 1.641 + 1.642 +<div id="actions"> 1.643 + <div class="float-left"> 1.644 + <p> 1.645 +EOT 1.646 + if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then 1.647 + temp="$(echo $pkg | sed 's/get-//g')" 1.648 + echo "<a class='button' href='$SCRIPT_NAME?do=Install&$temp'>$(gettext 'Install (Non Free)')</a>" 1.649 + else 1.650 + echo "<a class='button' href='$SCRIPT_NAME?do=$action&$pkg'>$action_i18n</a>" 1.651 + fi 1.652 + 1.653 + if [ -d $INSTALLED/$pkg ]; then 1.654 + if grep -qs "^$pkg$" $LOCALSTATE/blocked-packages.list; then 1.655 + cat << EOT 1.656 + <a class="button" href="$SCRIPT_NAME?do=Unblock&$pkg">$(gettext 'Unblock')</a> 1.657 +EOT 1.658 + else 1.659 + cat << EOT 1.660 + <a class="button" href='$SCRIPT_NAME?do=Block&$pkg'>$(gettext 'Block')</a> 1.661 +EOT 1.662 + fi 1.663 + cat << EOT 1.664 + <a class="button" href='$SCRIPT_NAME?do=Repack&$pkg'>$(gettext 'Repack')</a> 1.665 +EOT 1.666 + fi 1.667 + i18n_desc 1.668 + cat << EOT 1.669 + </p> 1.670 + </div> 1.671 + <div class="float-right"> 1.672 + <p> 1.673 + <a class="button" href='$SCRIPT_NAME?list'> 1.674 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.675 + </p> 1.676 + </div> 1.677 +</div> 1.678 +<table class="zebra outbox"> 1.679 +<tbody> 1.680 + <tr><td>$(gettext 'Name:')</td><td>$PACKAGE</td></tr> 1.681 + <tr><td>$(gettext 'Version:')</td><td>$VERSION</td></tr> 1.682 + <tr><td>$(gettext 'Description:')</td><td>$SHORT_DESC</td></tr> 1.683 + <tr><td>$(gettext 'Category:')</td><td>$CATEGORY</td></tr> 1.684 +EOT 1.685 + if [ -d $INSTALLED/$pkg ]; then 1.686 + cat << EOT 1.687 + <tr><td>$(gettext 'Maintainer:')</td><td>$MAINTAINER</td></tr> 1.688 + <tr><td>$(gettext 'Website:')</td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr> 1.689 + <tr><td>$(gettext 'Sizes:')</td><td>$PACKED_SIZE/$UNPACKED_SIZE</td></tr> 1.690 +EOT 1.691 + if [ -n "$DEPENDS" ]; then 1.692 + echo "<tr><td>$(gettext 'Depends:')</td><td>" 1.693 + for i in $DEPENDS; do 1.694 + echo -n "<a href="$(pkg_info_link $i)">$i</a> " 1.695 + done 1.696 + echo "</td></tr>" 1.697 + fi 1.698 + if [ -n "$SUGGESTED" ]; then 1.699 + echo "<tr><td>$(gettext 'Suggested:')</td><td>" 1.700 + for i in $SUGGESTED; do 1.701 + echo -n "<a href="$(pkg_info_link $i)">$i</a> " 1.702 + done 1.703 + echo "</td></tr>" 1.704 + fi 1.705 + [ -n "$TAGS" ] && echo "<tr><td>$(gettext 'Tags:')</td><td>$TAGS</td></tr>" 1.706 + I_FILES=$(cat $INSTALLED/$pkg/files.list | wc -l) 1.707 + cat << EOT 1.708 +</tbody> 1.709 +</table> 1.710 + 1.711 +<p>$(eval_gettext 'Installed files: $I_FILES')</p> 1.712 + 1.713 +<pre>$(cat $INSTALLED/$pkg/files.list)</pre> 1.714 +EOT 1.715 + else 1.716 + cat << EOT 1.717 +<tr><td>$(gettext 'Website:')</td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr> 1.718 +<tr><td>$(gettext 'Sizes:')</td><td>$(grep -hsA 3 ^$pkg$ packages.txt undigest/*/packages.txt | \ 1.719 + tail -n 1 | sed 's/ *//')</td></tr> 1.720 +</table> 1.721 + 1.722 +<p>$(gettext 'Installed files:')</p> 1.723 + 1.724 +<pre> 1.725 +`unlzma -c files.list.lzma undigest/*/files.list.lzma 2> /dev/null | \ 1.726 + sed "/^$pkg: /!d;s/^$pkg: //"` 1.727 +</pre> 1.728 +EOT 1.729 + fi 1.730 + ;; 1.731 + 1.732 + 1.733 + *\ admin\ * ) 1.734 + # 1.735 + # Tazpkg configuration page 1.736 + # 1.737 + cmd=$(GET admin) 1.738 + case "$cmd" in 1.739 + clean) 1.740 + rm -rf /var/cache/tazpkg/* ;; 1.741 + add-mirror) 1.742 + # Decode url 1.743 + mirror=$(GET mirror) 1.744 + case "$mirror" in 1.745 + http://*|ftp://*) 1.746 + echo "$mirror" >> $(GET file) ;; 1.747 + esac ;; 1.748 + rm-mirror=http://*|rm-mirror=ftp://*) 1.749 + mirror=${cmd#rm-mirror=} 1.750 + sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;; 1.751 + select-mirror*) 1.752 + release=`cat /etc/slitaz-release` 1.753 + mirror="$(GET mirror)packages/$release/" 1.754 + tazpkg setup-mirror $mirror | log 1.755 + ;; 1.756 + add-repo) 1.757 + # Decode url 1.758 + mirror=$(GET mirror) 1.759 + repository=$LOCALSTATE/undigest/$(GET repository) 1.760 + case "$mirror" in 1.761 + http://*|ftp://*) 1.762 + mkdir -p $repository 1.763 + echo "$mirror" > $repository/mirror 1.764 + echo "$mirror" > $repository/mirrors ;; 1.765 + esac ;; 1.766 + rm-repo=*) 1.767 + repository=${cmd#rm-repo=} 1.768 + rm -rf $LOCALSTATE/undigest/$repository ;; 1.769 + esac 1.770 + [ "$cmd" == "$(gettext 'Set link')" ] && 1.771 + [ -d "$(GET link)/$INSTALLED" ] && 1.772 + ln -fs $(GET link) $LOCALSTATE/fslink 1.773 + [ "$cmd" == "$(gettext 'Remove link')" ] && 1.774 + rm -f $LOCALSTATE/fslink 1.775 + cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l` 1.776 + cache_size=`du -sh /var/cache/tazpkg` 1.777 + sidebar 1.778 + cat << EOT 1.779 +<h2>$(gettext 'Administration')</h2> 1.780 +<div> 1.781 + <p>$(gettext 'Tazpkg administration and settings')</p> 1.782 +</div> 1.783 +<div id="actions"> 1.784 + <a class="button" href='$SCRIPT_NAME?admin=&action=saveconf'> 1.785 + <img src="$IMAGES/tazpkg.png" />$(gettext 'Save configuration')</a> 1.786 + <a class="button" href='$SCRIPT_NAME?admin=&action=listconf'> 1.787 + <img src="$IMAGES/edit.png" />$(gettext 'List configuration files')</a> 1.788 + <a class="button" href='$SCRIPT_NAME?admin=&action=quickcheck'> 1.789 + <img src="$IMAGES/recharge.png" />$(gettext 'Quick check')</a> 1.790 + <a class="button" href='$SCRIPT_NAME?admin=&action=fullcheck'> 1.791 + <img src="$IMAGES/recharge.png" />$(gettext 'Full check')</a> 1.792 +</div> 1.793 +EOT 1.794 + case "$(GET action)" in 1.795 + saveconf) 1.796 + LOADING_MSG=$(gettext 'Creating the package...') 1.797 + loading_msg 1.798 + echo "<pre>" 1.799 + cd $HOME 1.800 + tazpkg repack-config | filter_taztools_msgs 1.801 + echo -n "$(gettext 'Path:') " && ls $HOME/config-*.tazpkg 1.802 + echo "</pre>" ;; 1.803 + listconf) 1.804 + echo "<h4>$(gettext 'Configuration files')</h4>" 1.805 + echo "<ul>" 1.806 + tazpkg list-config | while read file; do 1.807 + [ "${file:0:1}" == "/" ] || continue 1.808 + if [ -e $file ]; then 1.809 + echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>" 1.810 + else 1.811 + echo "<li>$file</li>" 1.812 + fi 1.813 + done 1.814 + echo "</ul>" 1.815 + echo "</pre>" ;; 1.816 + quickcheck) 1.817 + LOADING_MSG=$(gettext 'Checking packages consistency...') 1.818 + loading_msg 1.819 + echo "<pre>" 1.820 + tazpkg check 1.821 + echo "</pre>" ;; 1.822 + fullcheck) 1.823 + LOADING_MSG=$(gettext 'Full packages check...') 1.824 + loading_msg 1.825 + echo "<pre>" 1.826 + tazpkg check --full 1.827 + echo "</pre>" ;; 1.828 + esac 1.829 + cat << EOT 1.830 +<h3>$(gettext 'Packages cache')</h3> 1.831 + 1.832 +<div> 1.833 + <form method="get" action="$SCRIPT_NAME"> 1.834 + <p> 1.835 + $(eval_gettext 'Packages in the cache: $cache_files ($cache_size)') 1.836 + <input type="hidden" name="admin" value="clean" /> 1.837 + <input type="submit" value="Clean" /> 1.838 + </p> 1.839 + </form> 1.840 +</div> 1.841 + 1.842 +<h3>$(gettext 'Default mirror')</h3> 1.843 + 1.844 +<pre>$(cat /var/lib/tazpkg/mirror)</pre> 1.845 + 1.846 +<h3>$(gettext 'Current mirror list')</h3> 1.847 +EOT 1.848 + for i in $LOCALSTATE/mirrors $LOCALSTATE/undigest/*/mirrors; do 1.849 + [ -s $i ] || continue 1.850 + echo '<div class="box">' 1.851 + if [ $i != $LOCALSTATE/mirrors ]; then 1.852 + Repo_Name="$(repo_name $(dirname $i))" 1.853 + echo "<h4>$(eval_gettext 'Repository: $Repo_Name')</h4>" 1.854 + fi 1.855 + echo "<ul>" 1.856 + list_mirrors $i 1.857 + echo "</ul>" 1.858 + cat << EOT 1.859 +</div> 1.860 +<form method="get" action="$SCRIPT_NAME"> 1.861 + <p> 1.862 + <input type="hidden" name="admin" value="add-mirror" /> 1.863 + <input type="hidden" name="file" value="$i" /> 1.864 + <input type="text" name="mirror" size="60"> 1.865 + <input type="submit" value="Add mirror" /> 1.866 + </p> 1.867 +</form> 1.868 +EOT 1.869 + done 1.870 + echo "<h3>$(gettext 'Private repositories')</h3>" 1.871 + [ -n "$(ls $LOCALSTATE/undigest 2> /dev/null)" ] && cat << EOT 1.872 +<div class="box"> 1.873 + <ul> 1.874 + $(list_repos) 1.875 + </ul> 1.876 +</div> 1.877 +EOT 1.878 + cat << EOT 1.879 +<form method="get" action="$SCRIPT_NAME"> 1.880 + <p> 1.881 + <input type="hidden" name="admin" value="add-repo" /> 1.882 + $(gettext 'Name') <input type="text" name="repository" size="10"> 1.883 + $(gettext 'mirror') 1.884 + <input type="text" name="mirror" value="http://" size="50"> 1.885 + <input type="submit" value="Add repository" /> 1.886 + </p> 1.887 +</form> 1.888 + 1.889 +<h3>$(gettext 'Link to another SliTaz installation')</h3> 1.890 + 1.891 +<p>$(gettext "This link points to the root of another SliTaz installation. \ 1.892 +You will be able to install packages using soft links to it.")</p> 1.893 + 1.894 +<form method="get" action="$SCRIPT_NAME"> 1.895 +<p> 1.896 + <input type="hidden" name="admin" value="add-link" /> 1.897 + <input type="text" name="link" 1.898 + value="$(readlink $LOCALSTATE/fslink 2> /dev/null)" size="50"> 1.899 + <input type="submit" name="admin" value="$(gettext 'Set link')" /> 1.900 + <input type="submit" name="admin" value="$(gettext 'Remove link')" /> 1.901 +</p> 1.902 +</form> 1.903 +EOT 1.904 + version=$(cat /etc/slitaz-release) 1.905 + cat << EOT 1.906 + 1.907 +<h3 id="dvd">$(gettext 'SliTaz packages DVD')</h3> 1.908 + 1.909 +<p>$(eval_gettext "A bootable DVD image of all available packages for the \ 1.910 +\$version version is generated every day. It also contains a copy of the \ 1.911 +website and can be used without an internet connection. This image can be \ 1.912 +installed on a DVD or an USB key.")</p> 1.913 + 1.914 +<div> 1.915 + <form method="post" action='$SCRIPT_NAME?admin&action=dvdimage#dvd'> 1.916 + <p> 1.917 + <a class="button" 1.918 + href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'> 1.919 + <img src="$IMAGES/tazpkg.png" />$(gettext 'Download DVD image')</a> 1.920 + <a class="button" href='$SCRIPT_NAME?admin&action=dvdusbkey#dvd'> 1.921 + <img src="$IMAGES/tazpkg.png" />$(gettext 'Install from DVD/USB key')</a> 1.922 + </p> 1.923 + <div class="box"> 1.924 + $(gettext 'Install from ISO image:') 1.925 + <input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso"> 1.926 + </div> 1.927 + </form> 1.928 +</div> 1.929 +EOT 1.930 + if [ "$(GET action)" == "dvdimage" ]; then 1.931 + dev=$(POST dvdimage) 1.932 + mkdir -p /mnt/packages 2> /dev/null 1.933 + echo "<pre>" 1.934 + mount -t iso9660 -o loop,ro $dev /mnt/packages && 1.935 + /mnt/packages/install.sh && 1.936 + echo "$dev is installed on /mnt/packages" 1.937 + echo "</pre>" 1.938 + fi 1.939 + if [ "$(GET action)" == "dvdusbkey" ]; then 1.940 + mkdir -p /mnt/packages 2> /dev/null 1.941 + for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \ 1.942 + "LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do 1.943 + dev=$(blkid | grep "$tag" | cut -d: -f1) 1.944 + [ -n "$dev" ] || continue 1.945 + echo "<pre>" 1.946 + mount -t iso9660 -o ro $dev /mnt/packages && 1.947 + /mnt/packages/install.sh && 1.948 + echo "$dev is installed on /mnt/packages" 1.949 + echo "</pre>" 1.950 + break 1.951 + done 1.952 + fi 1.953 + ;; 1.954 + *) 1.955 + # 1.956 + # Default to summary 1.957 + # 1.958 + search_form 1.959 + sidebar 1.960 + [ -n "$(GET block)" ] && tazpkg block $(GET block) 1.961 + [ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock) 1.962 + cat << EOT 1.963 +<h2>$(gettext 'Summary')</h2> 1.964 + 1.965 +<div id="actions"> 1.966 + <a class="button" href="$SCRIPT_NAME?list"> 1.967 + <img src="$IMAGES/tazpkg.png" />$(gettext 'My packages')</a> 1.968 +EOT 1.969 + fslink=$(readlink $LOCALSTATE/fslink) 1.970 + [ -n "$fslink" -a -d "$fslink/$INSTALLED" ] && 1.971 + cat << EOT 1.972 + <a class="button" href="$SCRIPT_NAME?linkable"> 1.973 + <img src="$IMAGES/tazpkg.png" />$(gettext 'Linkable packages')</a> 1.974 +EOT 1.975 + cat << EOT 1.976 + <a class="button" href="$SCRIPT_NAME?recharge"> 1.977 + <img src="$IMAGES/recharge.png" />$(gettext 'Recharge list')</a> 1.978 + <a class="button" href="$SCRIPT_NAME?up"> 1.979 + <img src="$IMAGES/update.png" />$(gettext 'Check upgrades')</a> 1.980 + <a class="button" href="$SCRIPT_NAME?admin"> 1.981 + <img src="$IMAGES/edit.png" />$(gettext 'Administration')</a> 1.982 +</div> 1.983 + 1.984 +$(packages_summary) 1.985 + 1.986 + 1.987 +<h3>$(gettext 'Latest log entries')</h3> 1.988 + 1.989 +<pre> 1.990 +`tail -n 5 /var/log/tazpkg.log | fgrep "-" | \ 1.991 + awk '{print $1, $2, $3, $4, $5, $6, $7}'` 1.992 +</pre> 1.993 +EOT 1.994 + ;; 1.995 +esac 1.996 + 1.997 +# xHTML 5 footer 1.998 +xhtml_footer 1.999 +exit 0