tazpanel annotate tazpkg.cgi @ rev 12

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