tazpanel annotate tazpkg.cgi @ rev 17

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