tazpanel annotate pkgs.cgi @ rev 288

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