tazpanel annotate tazpkg.cgi @ rev 8

Implement system upgrade: faster than ever now!!!
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 13:55:29 2011 +0200 (2011-04-02)
parents 4c5ad38717a0
children dfcc3f322885
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 cat << EOT
pankso@7 26 <form class="search" method="get" action="$SCRIPT_NAME">
pankso@7 27 <p>
pankso@7 28 `gettext "Search":`
pankso@7 29 <input type="text" name="search" size="20">
pankso@7 30 </p>
pankso@7 31 </form>
pankso@7 32 EOT
pankso@7 33
pankso@7 34 # DEBUG mode
pankso@7 35 [ $DEBUG == "1" ] && echo "<p class='debug'>$REQUEST_METHOD ${QUERY_STRING}</p>"
pankso@7 36
pankso@7 37 # We need packages information for list and search
pankso@7 38 parse_packages_desc() {
pankso@7 39 while read line
pankso@7 40 do
pankso@7 41 echo '<tr>'
pankso@7 42 pkg=$(echo $line | cut -d "|" -f 1)
pankso@7 43 vers=$(echo $line | cut -d "|" -f 2)
pankso@7 44 desc=$(echo $line | cut -d "|" -f 3)
pankso@7 45 web=$(echo $line | cut -d "|" -f 5)
pankso@7 46 imgs=styles/$STYLE/images
pankso@7 47 if [ -d installed/$pkg ]; then
pankso@7 48 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
pankso@7 49 <img src='$IMAGES/tazpkg-installed.png'/>$pkg</td>"
pankso@7 50 else
pankso@7 51 echo -e "<td><input type='checkbox' name='pkg' value=\"$pkg\">\n
pankso@7 52 <img src='$IMAGES/tazpkg.png'/>$pkg</td>"
pankso@7 53 fi
pankso@7 54 echo "<td>$vers</td>"
pankso@7 55 echo "<td class='desc'>$desc</td>"
pankso@7 56 echo "<td><a href='$web'>web</a></td>"
pankso@7 57 echo '</tr>'
pankso@7 58 done
pankso@7 59 }
pankso@7 60
pankso@7 61 # Remove status and ESC char from tazpkg commands output
pankso@7 62 filter_tazpkg_msgs() {
pankso@7 63 grep ^[a-zA-Z0-9] | sed s'/\.*\]//'
pankso@7 64 }
pankso@7 65
pankso@7 66 # Display a full summary of packages stats
pankso@7 67 packages_summary() {
pankso@8 68 gettext "Installed packages : "
pankso@7 69 ls $INSTALLED | wc -l
pankso@8 70 gettext "Mirrored packages : "
pankso@7 71 cat $LOCALSTATE/packages.list | wc -l
pankso@8 72 gettext "Last recharge : "
pankso@7 73 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
pankso@8 74 gettext "Upgradeable packages : "
pankso@8 75 cat $LOCALSTATE/upgradeable-packages.list | wc -l
pankso@8 76 gettext "Installed files : "
pankso@7 77 cat $INSTALLED/*/files.list | wc -l
pankso@8 78 gettext "Blocked packages : "
pankso@8 79 cat $LOCALSTATE/blocked-packages.list | wc -l
pankso@7 80 }
pankso@7 81
pankso@7 82 #
pankso@7 83 # xHTML functions
pankso@7 84 #
pankso@7 85
pankso@7 86 table_start() {
pankso@7 87 cat << EOT
pankso@7 88 <table>
pankso@7 89 <tbody>
pankso@7 90 <tr id="thead">
pankso@7 91 <td>`gettext "Name"`</td>
pankso@7 92 <td>`gettext "Version"`</td>
pankso@7 93 <td>`gettext "Description"`</td>
pankso@7 94 <td>`gettext "Web"`</td>
pankso@7 95 </tr>
pankso@7 96 EOT
pankso@7 97 }
pankso@7 98
pankso@7 99 table_end () {
pankso@7 100 cat << EOT
pankso@7 101 </tbody>
pankso@7 102 </table>
pankso@7 103 EOT
pankso@7 104 }
pankso@7 105
pankso@8 106
pankso@7 107 list_actions() {
pankso@7 108 cat << EOT
pankso@7 109 <p>
pankso@7 110 `gettext "Selection:"`
pankso@7 111 <input type="submit" name="do" value="remove" />
pankso@7 112 `gettext "List:"`
pankso@7 113 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
pankso@7 114 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
pankso@7 115 </p>
pankso@7 116 EOT
pankso@7 117 }
pankso@7 118
pankso@7 119 list_all_actions() {
pankso@7 120 cat << EOT
pankso@7 121 <p>
pankso@7 122 `gettext "Selection:"`
pankso@7 123 <input type="submit" name="do" value="install" />
pankso@7 124 <input type="submit" name="do" value="remove" />
pankso@7 125 `gettext "List:"`
pankso@7 126 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@8 127 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
pankso@7 128 </p>
pankso@7 129 EOT
pankso@7 130 }
pankso@7 131
pankso@8 132 js_checkbox_all() {
pankso@8 133 cat << EOT
pankso@8 134
pankso@8 135 EOT
pankso@8 136 }
pankso@8 137
pankso@7 138 #
pankso@7 139 # Commands
pankso@7 140 #
pankso@7 141
pankso@7 142 case "$QUERY_STRING" in
pankso@7 143 list)
pankso@7 144 # List installed packages. This is the default because parsing
pankso@7 145 # the full packages.desc can be long and take some resources
pankso@7 146 cd /var/lib/tazpkg/installed
pankso@7 147 echo "<form method='get' action='$SCRIPT_NAME'>"
pankso@7 148 list_actions
pankso@7 149 table_start
pankso@7 150 for pkg in *
pankso@7 151 do
pankso@7 152 . $pkg/receipt
pankso@7 153 echo '<tr>'
pankso@7 154 # Use default tazpkg icon since all packages displayed are
pankso@7 155 # installed
pankso@7 156 echo "<td class='pkg'>
pankso@7 157 <input type='checkbox' name='pkg' value=\"$pkg\" />
pankso@7 158 <a href='$SCRIPT_NAME?info=$pkg'><img
pankso@7 159 src='$IMAGES/tazpkg.png'/></a>$pkg</td>"
pankso@7 160 echo "<td>$VERSION</td>"
pankso@7 161 echo "<td class='desc'>$SHORT_DESC</td>"
pankso@7 162 echo "<td><a href='$WEB_SITE'>web</a></td>"
pankso@7 163 echo '</tr>'
pankso@7 164 done
pankso@7 165 table_end
pankso@7 166 list_actions
pankso@7 167 echo '</form>' ;;
pankso@7 168 list-all)
pankso@7 169 # List all available packages on mirror
pankso@7 170 cd /var/lib/tazpkg
pankso@7 171 echo "<form method='get' action='$SCRIPT_NAME'>"
pankso@7 172 list_all_actions
pankso@7 173 table_start
pankso@7 174 cat packages.desc | parse_packages_desc
pankso@7 175 table_end
pankso@7 176 list_all_actions
pankso@7 177 echo '</form>' ;;
pankso@7 178 search=*)
pankso@7 179 # Search for packages
pankso@7 180 pkg=${QUERY_STRING#*=}
pankso@7 181 cd /var/lib/tazpkg
pankso@7 182 cat << EOT
pankso@7 183 <form method="get" action="$SCRIPT_NAME">
pankso@7 184 <p>
pankso@7 185 `gettext "Selection:"`
pankso@7 186 <input type="submit" name="do" value="install" />
pankso@7 187 <input type="submit" name="do" value="remove" />
pankso@7 188 `gettext "List:"`
pankso@7 189 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@7 190 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
pankso@8 191 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
pankso@8 192 <a href="`cat checkbox.js`">`gettext "Toogle all"`</a>
pankso@7 193 </p>
pankso@7 194 EOT
pankso@7 195 table_start
pankso@7 196 grep $pkg packages.desc | parse_packages_desc
pankso@7 197 table_end
pankso@7 198 echo '</form>' ;;
pankso@7 199 recharge)
pankso@7 200 # Let recharge the packages list
pankso@8 201 cat << EOT
pankso@8 202 <p>
pankso@8 203 `gettext "List:"`
pankso@8 204 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
pankso@8 205 </p>
pankso@8 206 <pre>
pankso@8 207 EOT
pankso@8 208 gettext "Recharging the packages list... please wait"; echo
pankso@8 209 tazpkg recharge | filter_tazpkg_msgs
pankso@8 210 echo '</pre>'
pankso@7 211 echo '<p>'
pankso@7 212 gettext "Packages lists are up-to-date"
pankso@7 213 echo '</p>' ;;
pankso@8 214 upgradeable)
pankso@8 215 cat << EOT
pankso@8 216 <form method="get" action="$SCRIPT_NAME">
pankso@8 217 <p>
pankso@8 218 `gettext "Selection:"`
pankso@8 219 <input type="submit" name="do" value="install" />
pankso@8 220 `gettext "List:"`
pankso@8 221 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@8 222 `gettext "Upgradeable packages list"`
pankso@8 223 <a href="`cat checkbox.js`">`gettext "Toogle all"`</a>
pankso@8 224 </p>
pankso@8 225 EOT
pankso@8 226 table_start
pankso@8 227 tazpkg upgradeable
pankso@8 228 for pkg in `cat $LOCALSTATE/upgradeable-packages.list`
pankso@8 229 do
pankso@8 230 grep "^$pkg |" $LOCALSTATE/packages.desc | parse_packages_desc
pankso@8 231 done
pankso@8 232 table_end
pankso@8 233 echo '</form>' ;;
pankso@7 234 do=*)
pankso@7 235 # Do an action on one or some packages
pankso@7 236 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
pankso@7 237 cmd=`echo ${cmdline} | awk '{print $1}'`
pankso@7 238 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
pankso@7 239 [ $cmd == install ] && cmd=get-install
pankso@7 240 [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>"
pankso@7 241 for pkg in $pkgs
pankso@7 242 do
pankso@7 243 echo '<p>'
pankso@7 244 gettext "Executing: tazpkg $cmd $pkg"
pankso@7 245 echo '</p><pre>'
pankso@8 246 echo 'y' | tazpkg $cmd $pkg --forced 2>/dev/null | filter_tazpkg_msgs
pankso@7 247 echo '</pre>'
pankso@7 248 done ;;
pankso@7 249 info=*)
pankso@7 250 pkg=${QUERY_STRING#*=}
pankso@7 251 . $INSTALLED/$pkg/receipt
pankso@7 252 cat << EOT
pankso@7 253 <p>
pankso@7 254 `gettext "List:"`
pankso@7 255 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
pankso@7 256 </p>
pankso@7 257 <pre>
pankso@7 258 Name : $PACKAGE
pankso@7 259 Version : $VERSION
pankso@7 260 Description : $SHORT_DESC
pankso@8 261 Depends : `for i in $DEPENDS; do echo -n \
pankso@8 262 "<a href="$SCRIPT_NAME?info=$i">$i</a> "; done`
pankso@7 263 Website : <a href="$WEB_SITE">$WEB_SITE</a>
pankso@7 264 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
pankso@7 265 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
pankso@7 266 </pre>
pankso@7 267
pankso@7 268 <p>`gettext "Installed files"`</p>
pankso@7 269 <pre>
pankso@7 270 `cat $INSTALLED/$pkg/files.list`
pankso@7 271 </pre>
pankso@7 272 EOT
pankso@7 273 ;;
pankso@7 274 *)
pankso@7 275 # Default to summary
pankso@7 276 cat << EOT
pankso@7 277 `gettext "List:"`
pankso@7 278 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@8 279 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> |
pankso@8 280 <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgradeable"`</a>
pankso@7 281 <pre>
pankso@7 282 `packages_summary`
pankso@7 283 </pre>
pankso@7 284 EOT
pankso@7 285 echo "" ;;
pankso@7 286 esac
pankso@7 287
pankso@7 288 # xHTML 5 footer
pankso@7 289 cd $PANEL && cat $FOOTER
pankso@7 290
pankso@7 291 exit 0