tazpanel annotate pkgs.cgi @ rev 34

Forgot hg add for doc/ and fix some things
author Christophe Lincoln <pankso@slitaz.org>
date Tue Apr 05 06:18:39 2011 +0200 (2011-04-05)
parents fa59528e8bdf
children 086e699c7666
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@7 6 # it how code for some tasks. Please KISS it important and keep speed
pankso@7 7 # in mind. Thanks, Pankso.
pankso@7 8 #
pankso@7 9 # (C) 2011 SliTaz GNU/Linux - GNU gpl v2
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@22 21 TEXTDOMAIN='tazpanel-pkgs'
pankso@7 22 export TEXTDOMAIN
pankso@7 23
pankso@7 24 # xHTML 5 header
pankso@34 25 TITLE="- Packages"
pankso@33 26 xhtml_header
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@7 35 while read line
pankso@7 36 do
pankso@7 37 echo '<tr>'
pankso@7 38 pkg=$(echo $line | cut -d "|" -f 1)
pankso@7 39 vers=$(echo $line | cut -d "|" -f 2)
pankso@7 40 desc=$(echo $line | cut -d "|" -f 3)
pankso@7 41 web=$(echo $line | cut -d "|" -f 5)
pankso@9 42 if [ -d $INSTALLED/$pkg ]; then
pankso@7 43 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
pankso@7 44 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
pankso@7 45 else
pankso@7 46 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
pankso@7 47 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
pankso@7 48 fi
pankso@7 49 echo "<td>$vers</td>"
pankso@7 50 echo "<td class='desc'>$desc</td>"
pankso@7 51 echo "<td><a href='$web'>web</a></td>"
pankso@7 52 echo '</tr>'
pankso@7 53 done
pankso@7 54 }
pankso@7 55
pankso@7 56 # Remove status and ESC char from tazpkg commands output
pankso@7 57 filter_tazpkg_msgs() {
pankso@7 58 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
pankso@7 59 }
pankso@7 60
pankso@7 61 # Display a full summary of packages stats
pankso@7 62 packages_summary() {
pankso@8 63 gettext "Installed packages : "
pankso@7 64 ls $INSTALLED | wc -l
pankso@8 65 gettext "Mirrored packages : "
pankso@7 66 cat $LOCALSTATE/packages.list | wc -l
pankso@8 67 gettext "Last recharge : "
pankso@7 68 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
pankso@8 69 gettext "Upgradeable packages : "
pankso@8 70 cat $LOCALSTATE/upgradeable-packages.list | wc -l
pankso@8 71 gettext "Installed files : "
pankso@7 72 cat $INSTALLED/*/files.list | wc -l
pankso@8 73 gettext "Blocked packages : "
pankso@8 74 cat $LOCALSTATE/blocked-packages.list | wc -l
pankso@7 75 }
pankso@7 76
pankso@10 77 # Parse mirrors list to be able to have an icon an remove link
pankso@10 78 list_mirrors() {
pankso@10 79 cat $LOCALSTATE/mirrors | while read line
pankso@10 80 do
pankso@10 81 cat << EOT
pankso@10 82 <li><a href="$SCRIPT_NAME?config=rm-mirror=$line"><img
pankso@10 83 src="$IMAGES/clear.png" /></a><a href="$line">$line</a></li>
pankso@10 84 EOT
pankso@10 85 done
pankso@10 86 }
pankso@10 87
pankso@7 88 #
pankso@7 89 # xHTML functions
pankso@7 90 #
pankso@7 91
pankso@17 92 # ENTER will search but user may search for a button, so put one.
pankso@9 93 search_form() {
pankso@9 94 cat << EOT
pankso@9 95 <div class="search">
pankso@17 96 <form method="get" action="$SCRIPT_NAME">
pankso@17 97 <p>
pankso@17 98 <input type="text" name="search" size="20">
pankso@17 99 <input type="submit" value="`gettext "Search"`">
pankso@17 100 </p>
pankso@17 101 </form>
pankso@9 102 </div>
pankso@9 103 EOT
pankso@9 104 }
pankso@9 105
pankso@17 106 table_head() {
pankso@7 107 cat << EOT
pankso@7 108 <tr id="thead">
pankso@7 109 <td>`gettext "Name"`</td>
pankso@7 110 <td>`gettext "Version"`</td>
pankso@7 111 <td>`gettext "Description"`</td>
pankso@7 112 <td>`gettext "Web"`</td>
pankso@7 113 </tr>
pankso@7 114 EOT
pankso@7 115 }
pankso@7 116
pankso@9 117 sub_block() {
pankso@7 118 cat << EOT
pankso@9 119 <div id="sub_block">
pankso@9 120 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@9 121 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
pankso@14 122 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge list"`</a> |
pankso@14 123 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgrade"`</a> |
pankso@10 124 <a href='$SCRIPT_NAME?config'>`gettext "Configuration"`</a>
pankso@9 125 </div>
pankso@7 126 EOT
pankso@7 127 }
pankso@7 128
pankso@9 129 # For my packages list
pankso@9 130 list_actions() {
pankso@7 131 cat << EOT
pankso@9 132 <p>
pankso@9 133 `gettext "Selection:"`
pankso@9 134 <input type="submit" name="do" value="remove" />
pankso@9 135 </p>
pankso@7 136 EOT
pankso@7 137 }
pankso@7 138
pankso@9 139 # For list-all
pankso@9 140 list_all_actions() {
pankso@9 141 cat << EOT
pankso@9 142 <p>
pankso@9 143 `gettext "Selection:"`
pankso@9 144 <input type="submit" name="do" value="install" />
pankso@9 145 <input type="submit" name="do" value="remove" />
pankso@9 146 </p>
pankso@9 147 EOT
pankso@9 148 }
pankso@8 149
pankso@9 150 # For search and upgrade with JS function to toogle all pkgs
pankso@9 151 list_full_actions() {
pankso@9 152 cat << EOT
pankso@9 153 <p>
pankso@9 154 `gettext "Selection:"`
pankso@9 155 <input type="submit" name="do" value="install" />
pankso@9 156 <input type="submit" name="do" value="remove" />
pankso@12 157 <a href="`cat $PANEL/lib/checkbox.js`">`gettext "Toogle all"`</a>
pankso@9 158 </p>
pankso@8 159 EOT
pankso@8 160 }
pankso@8 161
pankso@7 162 #
pankso@7 163 # Commands
pankso@7 164 #
pankso@7 165
pankso@7 166 case "$QUERY_STRING" in
pankso@7 167 list)
pankso@7 168 # List installed packages. This is the default because parsing
pankso@7 169 # the full packages.desc can be long and take some resources
pankso@9 170 cd $INSTALLED
pankso@9 171 search_form
pankso@9 172 sub_block
pankso@9 173 cat << EOT
pankso@9 174 <h2>`gettext "My packages"`</h2>
pankso@9 175 <form method='get' action='$SCRIPT_NAME'>
pankso@9 176 <div id="actions">
pankso@9 177 EOT
pankso@7 178 list_actions
pankso@9 179 echo '</div>'
pankso@7 180 table_start
pankso@7 181 for pkg in *
pankso@7 182 do
pankso@7 183 . $pkg/receipt
pankso@7 184 echo '<tr>'
pankso@7 185 # Use default tazpkg icon since all packages displayed are
pankso@7 186 # installed
pankso@7 187 echo "<td class='pkg'>
pankso@7 188 <input type='checkbox' name='pkg' value=\"$pkg\" />
pankso@7 189 <a href='$SCRIPT_NAME?info=$pkg'><img
pankso@9 190 src='$IMAGES/tazpkg-installed.png'/></a>$pkg</td>"
pankso@7 191 echo "<td>$VERSION</td>"
pankso@7 192 echo "<td class='desc'>$SHORT_DESC</td>"
pankso@7 193 echo "<td><a href='$WEB_SITE'>web</a></td>"
pankso@7 194 echo '</tr>'
pankso@7 195 done
pankso@7 196 table_end
pankso@7 197 list_actions
pankso@7 198 echo '</form>' ;;
pankso@7 199 list-all)
pankso@7 200 # List all available packages on mirror
pankso@9 201 cd $LOCALSTATE
pankso@9 202 search_form
pankso@9 203 sub_block
pankso@9 204 cat << EOT
pankso@9 205 <h2>`gettext "All packages"`</h2>
pankso@9 206 <form method='get' action='$SCRIPT_NAME'>
pankso@9 207 <div id="actions">
pankso@9 208 EOT
pankso@7 209 list_all_actions
pankso@9 210 echo '</div>'
pankso@7 211 table_start
pankso@17 212 table_head
pankso@7 213 cat packages.desc | parse_packages_desc
pankso@7 214 table_end
pankso@7 215 list_all_actions
pankso@7 216 echo '</form>' ;;
pankso@7 217 search=*)
pankso@7 218 # Search for packages
pankso@7 219 pkg=${QUERY_STRING#*=}
pankso@9 220 cd $LOCALSTATE
pankso@9 221 search_form
pankso@9 222 sub_block
pankso@7 223 cat << EOT
pankso@17 224 <h2>`gettext "Search packages"`</h2>
pankso@7 225 <form method="get" action="$SCRIPT_NAME">
pankso@9 226 <div id="actions">
pankso@7 227 EOT
pankso@9 228 list_full_actions
pankso@9 229 echo '</div>'
pankso@7 230 table_start
pankso@17 231 table_head
pankso@7 232 grep $pkg packages.desc | parse_packages_desc
pankso@7 233 table_end
pankso@7 234 echo '</form>' ;;
pankso@7 235 recharge)
pankso@7 236 # Let recharge the packages list
pankso@9 237 search_form
pankso@9 238 sub_block
pankso@8 239 cat << EOT
pankso@9 240 <h2>`gettext "Recharge"`</h2>
pankso@9 241 <form method='get' action='$SCRIPT_NAME'>
pankso@9 242 <div id="actions">
pankso@22 243 <p>
pankso@22 244 `gettext "Recharge will check for new or updated packages...
pankso@22 245 please wait"`
pankso@22 246 </p>
pankso@9 247 </div>
pankso@22 248 <pre>
pankso@8 249 EOT
pankso@8 250 tazpkg recharge | filter_tazpkg_msgs
pankso@8 251 echo '</pre>'
pankso@7 252 echo '<p>'
pankso@7 253 gettext "Packages lists are up-to-date"
pankso@7 254 echo '</p>' ;;
pankso@8 255 upgradeable)
pankso@9 256 cd $LOCALSTATE
pankso@9 257 search_form
pankso@9 258 sub_block
pankso@8 259 cat << EOT
pankso@9 260 <h2>`gettext "Upgradeable packages"`</h2>
pankso@8 261 <form method="get" action="$SCRIPT_NAME">
pankso@9 262 <div id="actions">
pankso@8 263 EOT
pankso@9 264 list_full_actions
pankso@9 265 tazpkg upgradeable
pankso@9 266 echo '</div>'
pankso@8 267 table_start
pankso@17 268 table_head
pankso@9 269 for pkg in `cat upgradeable-packages.list`
pankso@8 270 do
pankso@8 271 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
pankso@8 272 done
pankso@8 273 table_end
pankso@8 274 echo '</form>' ;;
pankso@7 275 do=*)
pankso@7 276 # Do an action on one or some packages
pankso@7 277 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
pankso@7 278 cmd=`echo ${cmdline} | awk '{print $1}'`
pankso@7 279 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
pankso@9 280 [ $cmd == install ] && cmd=get-install opt=--forced
pankso@9 281 search_form
pankso@9 282 sub_block
pankso@9 283 cat << EOT
pankso@9 284 <h2>Tazpkg: $cmd</h2>
pankso@9 285 <form method="get" action="$SCRIPT_NAME">
pankso@9 286 <div id="actions">
pankso@9 287 <p>
pankso@9 288 EOT
pankso@9 289 gettext "Performing task on packages"
pankso@9 290 echo '</p></div>'
pankso@10 291 echo '<pre class="pre_main">'
pankso@10 292 gettext "Executing $cmd for:$pkgs"
pankso@10 293 echo '</pre>'
pankso@7 294 for pkg in $pkgs
pankso@7 295 do
pankso@10 296 echo '<pre>'
pankso@9 297 echo 'y' | tazpkg $cmd $pkg $opt 2>/dev/null | filter_tazpkg_msgs
pankso@7 298 echo '</pre>'
pankso@7 299 done ;;
pankso@7 300 info=*)
pankso@7 301 pkg=${QUERY_STRING#*=}
pankso@9 302 search_form
pankso@9 303 sub_block
pankso@7 304 . $INSTALLED/$pkg/receipt
pankso@7 305 cat << EOT
pankso@10 306 <h2>`gettext "Package info"`</h2>
pankso@9 307 <div id="actions">
pankso@10 308 <p>`gettext "Detailled information on:"` $PACKAGE</p>
pankso@9 309 </div>
pankso@22 310 <pre>
pankso@7 311 Name : $PACKAGE
pankso@7 312 Version : $VERSION
pankso@7 313 Description : $SHORT_DESC
pankso@10 314 Maintainer : $MAINTAINER
pankso@8 315 Depends : `for i in $DEPENDS; do echo -n \
pankso@8 316 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
pankso@7 317 Website : <a href="$WEB_SITE">$WEB_SITE</a>
pankso@7 318 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
pankso@7 319 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
pankso@7 320 </pre>
pankso@7 321
pankso@7 322 <p>`gettext "Installed files"`</p>
pankso@7 323 <pre>
pankso@7 324 `cat $INSTALLED/$pkg/files.list`
pankso@7 325 </pre>
pankso@7 326 EOT
pankso@7 327 ;;
pankso@10 328 config*)
pankso@10 329 # Tazpkg configuration page
pankso@10 330 cmd=${QUERY_STRING#*=}
pankso@10 331 case "$cmd" in
pankso@10 332 clean)
pankso@10 333 rm -rf /var/cache/tazpkg/* ;;
pankso@10 334 add-mirror*=http*|add-mirror*=ftp*)
pankso@10 335 # Decode url
pankso@10 336 mirror=`httpd -d ${cmd#*=}`
pankso@10 337 echo "$mirror" >> $LOCALSTATE/mirrors ;;
pankso@10 338 rm-mirror=http://*|rm-mirror=ftp://*)
pankso@10 339 mirror=${QUERY_STRING#*=rm-mirror=}
pankso@10 340 sed -i -e "s@$mirror@@" -e '/^$/d' $LOCALSTATE/mirrors ;;
pankso@10 341 esac
pankso@10 342 cache_files=`find /var/cache/tazpkg -name *.tazpkg | wc -l`
pankso@10 343 cache_size=`du -sh /var/cache/tazpkg`
pankso@10 344 sub_block
pankso@10 345 cat << EOT
pankso@10 346 <h2>`gettext "Configuration"`</h2>
pankso@10 347 <div>
pankso@10 348 <p>`gettext "Tazpkg configuration and settings"`</p>
pankso@10 349 </div>
pankso@10 350 <div>
pankso@10 351 <form method="get" action="$SCRIPT_NAME">
pankso@17 352 <p>
pankso@17 353 `gettext "Packages in the cache:"` $cache_files ($cache_size)
pankso@17 354 <input type="hidden" name="config" value="clean" />
pankso@17 355 <input type="submit" value="Clean" />
pankso@17 356 </p>
pankso@10 357 </form>
pankso@10 358 </div>
pankso@17 359
pankso@10 360 <h3>`gettext "Current mirror list"`</h3>
pankso@10 361 <div class="box">
pankso@10 362 <ul>
pankso@10 363 `list_mirrors`
pankso@10 364 </ul>
pankso@10 365 </div>
pankso@10 366 <form method="get" action="$SCRIPT_NAME">
pankso@10 367 <p>
pankso@10 368 <input type="hidden" name="config" value="add-mirror" />
pankso@10 369 <input type="text" name="mirror" size="60">
pankso@10 370 <input type="submit" value="Add mirror" />
pankso@10 371 </p>
pankso@10 372 </form>
pankso@10 373 EOT
pankso@10 374 ;;
pankso@7 375 *)
pankso@14 376 #
pankso@7 377 # Default to summary
pankso@14 378 #
pankso@10 379 search_form
pankso@9 380 sub_block
pankso@7 381 cat << EOT
pankso@9 382 <h2>`gettext "Summary"`</h2>
pankso@9 383 <div id="actions">
pankso@9 384 <p>`gettext "Overview of all installed and mirrored packages"`</p>
pankso@9 385 </div>
pankso@10 386 <pre class="pre_main">
pankso@7 387 `packages_summary`
pankso@7 388 </pre>
pankso@10 389 <h3>`gettext "Latest log entries"`</h3>
pankso@10 390 <pre>
pankso@10 391 `tail -n 6 /var/log/tazpkg.log | fgrep "-" | \
pankso@10 392 awk '{print $1, $2, $3, $4, $5, $6, $7}'`
pankso@10 393 </pre>
pankso@10 394
pankso@7 395 EOT
pankso@10 396 ;;
pankso@7 397 esac
pankso@7 398
pankso@7 399 # xHTML 5 footer
pankso@33 400 xhtml_footer
pankso@7 401 exit 0