tazpanel annotate pkgs.cgi @ rev 138

pkgs.cgi: add repository support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Sun Apr 17 00:34:06 2011 +0200 (2011-04-17)
parents a613e1727e0c
children ec6dbf6b07e3
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&amp;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