tazpanel annotate pkgs.cgi @ rev 46

Add hardware.cgi, tiny fix in pkgs.cgi and add a TODO list
author Christophe Lincoln <pankso@slitaz.org>
date Fri Apr 08 05:59:24 2011 +0200 (2011-04-08)
parents 5b7e9a6565c9
children ed88534077a0
rev   line source
pankso@7 1 #!/bin/sh
pankso@7 2 #
pankso@7 3 # TazPKG CGI interface - Manage packages via the a browse
pankso@7 4 #
pankso@7 5 # This CGI interface intensively use tazpkg to manage package and have
pankso@37 6 # it own code for some tasks. Please KISS it important and keep speed
pankso@7 7 # in mind. Thanks, Pankso.
pankso@7 8 #
pankso@44 9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v3
pankso@7 10 #
pankso@7 11 echo "Content-Type: text/html"
pankso@7 12 echo ""
pankso@7 13
pankso@17 14 . lib/libtazpanel
pankso@17 15 get_config
pankso@7 16
pankso@7 17 # Include gettext helper script.
pankso@7 18 . /usr/bin/gettext.sh
pankso@7 19
pankso@7 20 # Export package name for gettext.
pankso@39 21 TEXTDOMAIN='tazpanel'
pankso@7 22 export TEXTDOMAIN
pankso@7 23
pankso@7 24 # xHTML 5 header
pankso@34 25 TITLE="- Packages"
pankso@41 26 xhtml_header | sed 's/id="content"/id="content-sidebar"/'
pankso@7 27
pankso@7 28 # DEBUG mode
pankso@10 29 if [ $DEBUG == "1" ]; then
pankso@10 30 echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
pankso@10 31 fi
pankso@7 32
pankso@7 33 # We need packages information for list and search
pankso@7 34 parse_packages_desc() {
pankso@45 35 IFS="|"
pankso@45 36 cut -f 1,2,3,5 -d "|" | while read PACKAGE VERSION SHORT_DESC WEB_SITE
pankso@7 37 do
pankso@7 38 echo '<tr>'
pankso@46 39 if [ -d $INSTALLED/${PACKAGE% } ]; then
pankso@46 40 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
pankso@45 41 <a href='$SCRIPT_NAME?info=$PACKAGE'>
pankso@45 42 <img src='$IMAGES/tazpkg-installed.png'/>$PACKAGE</a></td>"
pankso@7 43 else
pankso@46 44 echo -e "<td><input type='checkbox' name='pkg' value='$PACKAGE'>\n
pankso@45 45 <img src='$IMAGES/tazpkg.png'/>$PACKAGE</td>"
pankso@7 46 fi
pankso@45 47 echo "<td>$VERSION</td>"
pankso@45 48 echo "<td class='desc'>$SHORT_DESC</td>"
pankso@45 49 echo "<td><a href='$WEB_SITE'>web</a></td>"
pankso@7 50 echo '</tr>'
pankso@7 51 done
pankso@45 52 unset IFS
pankso@7 53 }
pankso@7 54
pankso@7 55 # Remove status and ESC char from tazpkg commands output
pankso@7 56 filter_tazpkg_msgs() {
pankso@7 57 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
pankso@7 58 }
pankso@7 59
pankso@7 60 # Display a full summary of packages stats
pankso@7 61 packages_summary() {
pankso@37 62 gettext "Last recharge : "
pankso@37 63 stat=`stat -c %y $LOCALSTATE/packages.list | \
pankso@37 64 sed 's/\(:..\):.*/\1/' | awk '{print $1}'`
pankso@37 65 mtime=`find /var/lib/tazpkg/packages.list -mtime +10`
pankso@37 66 echo -n "$stat "
pankso@37 67 if [ "$mtime" ]; then
pankso@37 68 echo "(Older than 10 days)"
pankso@37 69 else
pankso@37 70 echo "(Not older than 10 days)"
pankso@37 71 fi
pankso@8 72 gettext "Installed packages : "
pankso@7 73 ls $INSTALLED | wc -l
pankso@8 74 gettext "Mirrored packages : "
pankso@7 75 cat $LOCALSTATE/packages.list | wc -l
pankso@8 76 gettext "Upgradeable packages : "
pankso@8 77 cat $LOCALSTATE/upgradeable-packages.list | wc -l
pankso@44 78 #gettext "Installed files : "
pankso@44 79 #cat $INSTALLED/*/files.list | wc -l
pankso@8 80 gettext "Blocked packages : "
pankso@8 81 cat $LOCALSTATE/blocked-packages.list | wc -l
pankso@7 82 }
pankso@7 83
pankso@10 84 # Parse mirrors list to be able to have an icon an remove link
pankso@10 85 list_mirrors() {
pankso@10 86 cat $LOCALSTATE/mirrors | while read line
pankso@10 87 do
pankso@10 88 cat << EOT
pankso@10 89 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
pankso@10 90 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
pankso@10 91 EOT
pankso@10 92 done
pankso@10 93 }
pankso@10 94
pankso@7 95 #
pankso@7 96 # xHTML functions
pankso@7 97 #
pankso@7 98
pankso@17 99 # ENTER will search but user may search for a button, so put one.
pankso@9 100 search_form() {
pankso@9 101 cat << EOT
pankso@9 102 <div class="search">
pankso@17 103 <form method="get" action="$SCRIPT_NAME">
pankso@17 104 <p>
pankso@17 105 <input type="text" name="search" size="20">
pankso@17 106 <input type="submit" value="`gettext "Search"`">
pankso@17 107 </p>
pankso@17 108 </form>
pankso@9 109 </div>
pankso@9 110 EOT
pankso@9 111 }
pankso@9 112
pankso@17 113 table_head() {
pankso@7 114 cat << EOT
pankso@7 115 <tr id="thead">
pankso@7 116 <td>`gettext "Name"`</td>
pankso@7 117 <td>`gettext "Version"`</td>
pankso@7 118 <td>`gettext "Description"`</td>
pankso@7 119 <td>`gettext "Web"`</td>
pankso@7 120 </tr>
pankso@7 121 EOT
pankso@7 122 }
pankso@7 123
pankso@41 124 sidebar() {
pankso@7 125 cat << EOT
pankso@41 126 <div id="sidebar">
pankso@41 127 <h4>Categories</h4>
pankso@41 128 <a class="active_base-system" href="$SCRIPT_NAME?cat=base-system">Base-system</a>
pankso@41 129 <a class="active_x-window" href="$SCRIPT_NAME?cat=x-window">X window</a>
pankso@41 130 <a class="active_utilities" href="$SCRIPT_NAME?cat=utilities">Utilities</a>
pankso@41 131 <a class="active_network" href="$SCRIPT_NAME?cat=network">Network</a>
pankso@41 132 <a class="active_games" href="$SCRIPT_NAME?cat=games">Games</a>
pankso@41 133 <a class="active_graphics" href="$SCRIPT_NAME?cat=graphics">Graphics</a>
pankso@41 134 <a class="active_office" href="$SCRIPT_NAME?cat=office">Office</a>
pankso@41 135 <a class="active_multimedia" href="$SCRIPT_NAME?cat=multimedia">Multimedia</a>
pankso@41 136 <a class="active_developement" href="$SCRIPT_NAME?cat=development">Development</a>
pankso@41 137 <a class="active_system-tools" href="$SCRIPT_NAME?cat=system-tools">System tools</a>
pankso@41 138 <a class="active_security" href="$SCRIPT_NAME?cat=security">Security</a>
pankso@41 139 <a class="active_misc" href="$SCRIPT_NAME?cat=misc">Misc</a>
pankso@41 140 <a class="active_meta" href="$SCRIPT_NAME?cat=meta">Meta</a>
pankso@41 141 <a class="active_non-free" href="$SCRIPT_NAME?cat=non-free">Non free</a>
pankso@9 142 </div>
pankso@7 143 EOT
pankso@7 144 }
pankso@7 145
pankso@45 146 #
pankso@45 147 # Commands
pankso@45 148 #
pankso@45 149
pankso@45 150 case "$QUERY_STRING" in
pankso@45 151 list*)
pankso@45 152 #
pankso@45 153 # List installed packages. This is the default because parsing
pankso@45 154 # the full packages.desc can be long and take some resources
pankso@45 155 #
pankso@45 156 cd $INSTALLED
pankso@45 157 search_form
pankso@45 158 sidebar
pankso@45 159 LOADING_MSG="Listing packages..."
pankso@45 160 loading_msg
pankso@45 161 cat << EOT
pankso@45 162 <h2>`gettext "My packages"`</h2>
pankso@45 163 <form method='get' action='$SCRIPT_NAME'>
pankso@45 164 <div id="actions">
pankso@46 165 <div class="float-left">
pankso@46 166 `gettext "Selection:"`
pankso@46 167 <input type="submit" name="do" value="Remove" />
pankso@46 168 </div>
pankso@46 169 <div class="float-right">
pankso@46 170 `gettext "List:"`
pankso@46 171 <input type="submit" name="recharge" value="Recharge" />
pankso@46 172 <input type="submit" name="upgradeable" value="Upgrade" />
pankso@46 173 </div>
pankso@41 174 </div>
pankso@7 175 EOT
pankso@7 176 table_start
pankso@41 177 table_head
pankso@7 178 for pkg in *
pankso@7 179 do
pankso@7 180 . $pkg/receipt
pankso@7 181 echo '<tr>'
pankso@7 182 # Use default tazpkg icon since all packages displayed are
pankso@7 183 # installed
pankso@7 184 echo "<td class='pkg'>
pankso@7 185 <input type='checkbox' name='pkg' value=\"$pkg\" />
pankso@7 186 <a href='$SCRIPT_NAME?info=$pkg'><img
pankso@41 187 src='$IMAGES/tazpkg-installed.png'/>$pkg</a></td>"
pankso@7 188 echo "<td>$VERSION</td>"
pankso@7 189 echo "<td class='desc'>$SHORT_DESC</td>"
pankso@7 190 echo "<td><a href='$WEB_SITE'>web</a></td>"
pankso@7 191 echo '</tr>'
pankso@7 192 done
pankso@7 193 table_end
pankso@7 194 echo '</form>' ;;
pankso@41 195 cat*)
pankso@45 196 #
pankso@41 197 # List all available packages by category on mirror. Listing all
pankso@41 198 # packages is to resource intensive and not usefull.
pankso@45 199 #
pankso@9 200 cd $LOCALSTATE
pankso@41 201 category=${QUERY_STRING#cat=}
pankso@41 202 [ "${QUERY_STRING}" == "cat" ] && category="base-system"
pankso@9 203 search_form
pankso@41 204 sidebar | sed s/"active_${category}"/"active"/
pankso@45 205 LOADING_MSG="Listing packages..."
pankso@45 206 loading_msg
pankso@9 207 cat << EOT
pankso@41 208 <h2>`gettext "Category:"` $category</h2>
pankso@9 209 <form method='get' action='$SCRIPT_NAME'>
pankso@9 210 <div id="actions">
pankso@45 211 <div class="float-left">
pankso@45 212 `gettext "Selection:"`
pankso@45 213 <input type="submit" name="do" value="Install" />
pankso@45 214 <input type="submit" name="do" value="Remove" />
pankso@45 215 </div>
pankso@45 216 <div class="float-right">
pankso@45 217 `gettext "List:"`
pankso@45 218 <input type="submit" name="recharge" value="Recharge" />
pankso@45 219 <input type="submit" name="upgradeable" value="Upgrade" />
pankso@45 220 <a class="button" href='$SCRIPT_NAME?list'>
pankso@45 221 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@45 222 </div>
pankso@9 223 EOT
pankso@9 224 echo '</div>'
pankso@7 225 table_start
pankso@17 226 table_head
pankso@41 227 grep "| $category |" packages.desc | parse_packages_desc
pankso@7 228 table_end
pankso@7 229 echo '</form>' ;;
pankso@7 230 search=*)
pankso@45 231 #
pankso@7 232 # Search for packages
pankso@45 233 #
pankso@7 234 pkg=${QUERY_STRING#*=}
pankso@9 235 cd $LOCALSTATE
pankso@9 236 search_form
pankso@41 237 sidebar
pankso@45 238 LOADING_MSG="Searching packages..."
pankso@45 239 loading_msg
pankso@7 240 cat << EOT
pankso@17 241 <h2>`gettext "Search packages"`</h2>
pankso@7 242 <form method="get" action="$SCRIPT_NAME">
pankso@9 243 <div id="actions">
pankso@45 244 <div class="float-left">
pankso@45 245 `gettext "Selection:"`
pankso@45 246 <input type="submit" name="do" value="Install" />
pankso@45 247 <input type="submit" name="do" value="Remove" />
pankso@45 248 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
pankso@45 249 </div>
pankso@45 250 <div class="float-right">
pankso@45 251 `gettext "List:"`
pankso@45 252 <input type="submit" name="recharge" value="Recharge" />
pankso@45 253 <input type="submit" name="upgradeable" value="Upgrade" />
pankso@45 254 <a class="button" href='$SCRIPT_NAME?list'>
pankso@45 255 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@45 256 </div>
pankso@7 257 EOT
pankso@9 258 echo '</div>'
pankso@7 259 table_start
pankso@17 260 table_head
pankso@7 261 grep $pkg packages.desc | parse_packages_desc
pankso@7 262 table_end
pankso@7 263 echo '</form>' ;;
pankso@41 264 recharge*)
pankso@45 265 #
pankso@7 266 # Let recharge the packages list
pankso@45 267 #
pankso@9 268 search_form
pankso@41 269 sidebar
pankso@45 270 LOADING_MSG="Recharging lists..."
pankso@45 271 loading_msg
pankso@8 272 cat << EOT
pankso@9 273 <h2>`gettext "Recharge"`</h2>
pankso@9 274 <form method='get' action='$SCRIPT_NAME'>
pankso@9 275 <div id="actions">
pankso@41 276 <div class="float-left">
pankso@41 277 <p>
pankso@45 278 `gettext "Recharge checks for new or updated packages"`
pankso@41 279 </p>
pankso@41 280 </div>
pankso@41 281 <div class="float-right">
pankso@41 282 <p>
pankso@45 283 <a class="button" href='$SCRIPT_NAME?upgradeable'>
pankso@45 284 `gettext "Check upgrade"`</a>
pankso@41 285 <a class="button" href='$SCRIPT_NAME?list'>
pankso@41 286 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@41 287 </p>
pankso@41 288 </div>
pankso@41 289 </div>
pankso@22 290 <pre>
pankso@8 291 EOT
pankso@8 292 tazpkg recharge | filter_tazpkg_msgs
pankso@45 293 cat << EOT
pankso@45 294 </pre>
pankso@45 295 <p>
pankso@45 296 `gettext "Packages lists are up-to-date. You should check for upgrade now."`
pankso@45 297 </p>
pankso@45 298 EOT
pankso@45 299 ;;
pankso@41 300 upgradeable*)
pankso@45 301 #
pankso@45 302 # Ugrade packages
pankso@45 303 #
pankso@9 304 cd $LOCALSTATE
pankso@9 305 search_form
pankso@41 306 sidebar
pankso@45 307 LOADING_MSG="Checking for upgrade..."
pankso@45 308 loading_msg
pankso@8 309 cat << EOT
pankso@9 310 <h2>`gettext "Upgradeable packages"`</h2>
pankso@8 311 <form method="get" action="$SCRIPT_NAME">
pankso@9 312 <div id="actions">
pankso@45 313 <div class="float-left">
pankso@45 314 `gettext "Selection:"`
pankso@45 315 <input type="submit" name="do" value="Install" />
pankso@45 316 <input type="submit" name="do" value="Remove" />
pankso@45 317 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
pankso@45 318 </div>
pankso@45 319 <div class="float-right">
pankso@45 320 `gettext "List:"`
pankso@45 321 <input type="submit" name="recharge" value="Recharge" />
pankso@45 322 <a class="button" href='$SCRIPT_NAME?list'>
pankso@45 323 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@45 324 </div>
pankso@8 325 EOT
pankso@9 326 tazpkg upgradeable
pankso@9 327 echo '</div>'
pankso@8 328 table_start
pankso@17 329 table_head
pankso@9 330 for pkg in `cat upgradeable-packages.list`
pankso@8 331 do
pankso@8 332 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
pankso@8 333 done
pankso@8 334 table_end
pankso@8 335 echo '</form>' ;;
pankso@7 336 do=*)
pankso@45 337 #
pankso@7 338 # Do an action on one or some packages
pankso@45 339 #
pankso@7 340 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
pankso@7 341 cmd=`echo ${cmdline} | awk '{print $1}'`
pankso@7 342 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
pankso@41 343 case $cmd in
pankso@41 344 install|Install)
pankso@41 345 cmd=get-install opt=--forced ;;
pankso@41 346 remove|Remove)
pankso@41 347 cmd=remove ;;
pankso@41 348 esac
pankso@9 349 search_form
pankso@41 350 sidebar
pankso@45 351 LOADING_MSG="${cmd}ing packages..."
pankso@45 352 loading_msg
pankso@9 353 cat << EOT
pankso@9 354 <h2>Tazpkg: $cmd</h2>
pankso@9 355 <form method="get" action="$SCRIPT_NAME">
pankso@9 356 <div id="actions">
pankso@41 357 <div class="float-left">
pankso@41 358 <p>
pankso@45 359 `gettext "Performing task on packages"`
pankso@41 360 </p>
pankso@41 361 </div>
pankso@41 362 <div class="float-right">
pankso@41 363 <p>
pankso@41 364 <a class="button" href='$SCRIPT_NAME?list'>
pankso@41 365 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@41 366 </p>
pankso@41 367 </div>
pankso@41 368 </div>
pankso@9 369 EOT
pankso@45 370 echo '<div class="box">'
pankso@10 371 gettext "Executing $cmd for:$pkgs"
pankso@45 372 echo '</div>'
pankso@7 373 for pkg in $pkgs
pankso@7 374 do
pankso@10 375 echo '<pre>'
pankso@45 376 echo 'o' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
pankso@7 377 echo '</pre>'
pankso@7 378 done ;;
pankso@7 379 info=*)
pankso@45 380 #
pankso@45 381 # Packages info
pankso@45 382 #
pankso@7 383 pkg=${QUERY_STRING#*=}
pankso@9 384 search_form
pankso@41 385 sidebar
pankso@7 386 . $INSTALLED/$pkg/receipt
pankso@41 387 files=`cat $INSTALLED/$pkg/files.list | wc -l`
pankso@7 388 cat << EOT
pankso@41 389 <h2>`gettext "Package"` $PACKAGE</h2>
pankso@9 390 <div id="actions">
pankso@41 391 <div class="float-left">
pankso@41 392 <p>
pankso@41 393 <a class="button" href='$SCRIPT_NAME?do=remove&$pkg'>`gettext "Remove"`</a>
pankso@41 394 </p>
pankso@41 395 </div>
pankso@41 396 <div class="float-right">
pankso@41 397 <p>
pankso@41 398 <a class="button" href='$SCRIPT_NAME?list'>
pankso@41 399 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@41 400 </p>
pankso@41 401 </div>
pankso@9 402 </div>
pankso@22 403 <pre>
pankso@7 404 Name : $PACKAGE
pankso@7 405 Version : $VERSION
pankso@7 406 Description : $SHORT_DESC
pankso@41 407 Category : $CATEGORY
pankso@10 408 Maintainer : $MAINTAINER
pankso@8 409 Depends : `for i in $DEPENDS; do echo -n \
pankso@8 410 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
pankso@7 411 Website : <a href="$WEB_SITE">$WEB_SITE</a>
pankso@7 412 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
pankso@7 413 </pre>
pankso@7 414
pankso@41 415 <p>`gettext "Installed files:"` `cat $INSTALLED/$pkg/files.list | wc -l`</p>
pankso@7 416 <pre>
pankso@7 417 `cat $INSTALLED/$pkg/files.list`
pankso@7 418 </pre>
pankso@7 419 EOT
pankso@7 420 ;;
pankso@10 421 config*)
pankso@45 422 #
pankso@10 423 # Tazpkg configuration page
pankso@45 424 #
pankso@10 425 cmd=${QUERY_STRING#*=}
pankso@10 426 case "$cmd" in
pankso@10 427 clean)
pankso@10 428 rm -rf /var/cache/tazpkg/* ;;
pankso@10 429 add-mirror*=http*|add-mirror*=ftp*)
pankso@10 430 # Decode url
pankso@10 431 mirror=`httpd -d ${cmd#*=}`
pankso@10 432 echo "$mirror" >> $LOCALSTATE/mirrors ;;
pankso@10 433 rm-mirror=http://*|rm-mirror=ftp://*)
pankso@10 434 mirror=${QUERY_STRING#*=rm-mirror=}
pankso@10 435 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
pankso@10 436 esac
pankso@10 437 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
pankso@10 438 cache_size=`du -sh /var/cache/tazpkg`
pankso@41 439 sidebar
pankso@10 440 cat << EOT
pankso@10 441 <h2>`gettext "Configuration"`</h2>
pankso@10 442 <div>
pankso@10 443 <p>`gettext "Tazpkg configuration and settings"`</p>
pankso@10 444 </div>
pankso@10 445 <div>
pankso@10 446 <form method="get" action="$SCRIPT_NAME">
pankso@17 447 <p>
pankso@17 448 `gettext "Packages in the cache:"` $cache_files ($cache_size)
pankso@17 449 <input type="hidden" name="config" value="clean" />
pankso@17 450 <input type="submit" value="Clean" />
pankso@17 451 </p>
pankso@10 452 </form>
pankso@10 453 </div>
pankso@17 454
pankso@10 455 <h3>`gettext "Current mirror list"`</h3>
pankso@10 456 <div class="box">
pankso@10 457 <ul>
pankso@10 458 `list_mirrors`
pankso@10 459 </ul>
pankso@10 460 </div>
pankso@10 461 <form method="get" action="$SCRIPT_NAME">
pankso@10 462 <p>
pankso@10 463 <input type="hidden" name="config" value="add-mirror" />
pankso@10 464 <input type="text" name="mirror" size="60">
pankso@10 465 <input type="submit" value="Add mirror" />
pankso@10 466 </p>
pankso@10 467 </form>
pankso@10 468 EOT
pankso@10 469 ;;
pankso@7 470 *)
pankso@14 471 #
pankso@7 472 # Default to summary
pankso@14 473 #
pankso@10 474 search_form
pankso@41 475 sidebar
pankso@7 476 cat << EOT
pankso@9 477 <h2>`gettext "Summary"`</h2>
pankso@9 478 <div id="actions">
pankso@45 479 <a class="button" href='$SCRIPT_NAME?list'>
pankso@45 480 <img src="$IMAGES/tazpkg.png" />`gettext "My packages"`</a>
pankso@45 481 <a class="button" href='$SCRIPT_NAME?recharge'>
pankso@45 482 <img src="$IMAGES/recharge.png" />`gettext "Recharge list"`</a>
pankso@45 483 <a class="button" href='$SCRIPT_NAME?upgradeable'>
pankso@45 484 <img src="$IMAGES/update.png" />`gettext "Check upgrade"`</a>
pankso@45 485 <a class="button" href='$SCRIPT_NAME?config'>
pankso@45 486 <img src="$IMAGES/edit.png" />`gettext "Configuration"`</a>
pankso@9 487 </div>
pankso@41 488 <pre class="pre-main">
pankso@7 489 `packages_summary`
pankso@7 490 </pre>
pankso@41 491
pankso@10 492 <h3>`gettext "Latest log entries"`</h3>
pankso@10 493 <pre>
pankso@45 494 `tail -n 5 /var/log/tazpkg.log | fgrep "-" | \
pankso@10 495 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
pankso@10 496 </pre>
pankso@10 497
pankso@7 498 EOT
pankso@10 499 ;;
pankso@7 500 esac
pankso@7 501
pankso@7 502 # xHTML 5 footer
pankso@33 503 xhtml_footer
pankso@7 504 exit 0