tazpanel annotate tazpkg.cgi @ rev 7

Add tazpkg.cgi: Packages manager CGI interface
author Christophe Lincoln <pankso@slitaz.org>
date Sat Apr 02 10:23:38 2011 +0200 (2011-04-02)
parents
children ab6120f11be4
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@7 68 gettext "Installed packages : "
pankso@7 69 ls $INSTALLED | wc -l
pankso@7 70 gettext "Mirrored packages : "
pankso@7 71 cat $LOCALSTATE/packages.list | wc -l
pankso@7 72 gettext "Last recharge : "
pankso@7 73 stat -c %y $LOCALSTATE/packages.list | sed 's/\(:..\):.*/\1/'
pankso@7 74 gettext "Installed files : "
pankso@7 75 cat $INSTALLED/*/files.list | wc -l
pankso@7 76 }
pankso@7 77
pankso@7 78 #
pankso@7 79 # xHTML functions
pankso@7 80 #
pankso@7 81
pankso@7 82 table_start() {
pankso@7 83 cat << EOT
pankso@7 84 <table>
pankso@7 85 <tbody>
pankso@7 86 <tr id="thead">
pankso@7 87 <td>`gettext "Name"`</td>
pankso@7 88 <td>`gettext "Version"`</td>
pankso@7 89 <td>`gettext "Description"`</td>
pankso@7 90 <td>`gettext "Web"`</td>
pankso@7 91 </tr>
pankso@7 92 EOT
pankso@7 93 }
pankso@7 94
pankso@7 95 table_end () {
pankso@7 96 cat << EOT
pankso@7 97 </tbody>
pankso@7 98 </table>
pankso@7 99 EOT
pankso@7 100 }
pankso@7 101
pankso@7 102 list_actions() {
pankso@7 103 cat << EOT
pankso@7 104 <p>
pankso@7 105 `gettext "Selection:"`
pankso@7 106 <input type="submit" name="do" value="remove" />
pankso@7 107 `gettext "List:"`
pankso@7 108 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
pankso@7 109 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
pankso@7 110 </p>
pankso@7 111 EOT
pankso@7 112 }
pankso@7 113
pankso@7 114 list_all_actions() {
pankso@7 115 cat << EOT
pankso@7 116 <p>
pankso@7 117 `gettext "Selection:"`
pankso@7 118 <input type="submit" name="do" value="install" />
pankso@7 119 <input type="submit" name="do" value="remove" />
pankso@7 120 `gettext "List:"`
pankso@7 121 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@7 122 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
pankso@7 123 </p>
pankso@7 124 EOT
pankso@7 125 }
pankso@7 126
pankso@7 127 #
pankso@7 128 # Commands
pankso@7 129 #
pankso@7 130
pankso@7 131 case "$QUERY_STRING" in
pankso@7 132 list)
pankso@7 133 # List installed packages. This is the default because parsing
pankso@7 134 # the full packages.desc can be long and take some resources
pankso@7 135 cd /var/lib/tazpkg/installed
pankso@7 136 echo "<form method='get' action='$SCRIPT_NAME'>"
pankso@7 137 list_actions
pankso@7 138 table_start
pankso@7 139 for pkg in *
pankso@7 140 do
pankso@7 141 . $pkg/receipt
pankso@7 142 echo '<tr>'
pankso@7 143 # Use default tazpkg icon since all packages displayed are
pankso@7 144 # installed
pankso@7 145 echo "<td class='pkg'>
pankso@7 146 <input type='checkbox' name='pkg' value=\"$pkg\" />
pankso@7 147 <a href='$SCRIPT_NAME?info=$pkg'><img
pankso@7 148 src='$IMAGES/tazpkg.png'/></a>$pkg</td>"
pankso@7 149 echo "<td>$VERSION</td>"
pankso@7 150 echo "<td class='desc'>$SHORT_DESC</td>"
pankso@7 151 echo "<td><a href='$WEB_SITE'>web</a></td>"
pankso@7 152 echo '</tr>'
pankso@7 153 done
pankso@7 154 table_end
pankso@7 155 list_actions
pankso@7 156 echo '</form>' ;;
pankso@7 157 list-all)
pankso@7 158 # List all available packages on mirror
pankso@7 159 cd /var/lib/tazpkg
pankso@7 160 echo "<form method='get' action='$SCRIPT_NAME'>"
pankso@7 161 list_all_actions
pankso@7 162 table_start
pankso@7 163 cat packages.desc | parse_packages_desc
pankso@7 164 table_end
pankso@7 165 list_all_actions
pankso@7 166 echo '</form>' ;;
pankso@7 167 search=*)
pankso@7 168 # Search for packages
pankso@7 169 pkg=${QUERY_STRING#*=}
pankso@7 170 cd /var/lib/tazpkg
pankso@7 171 cat << EOT
pankso@7 172 <form method="get" action="$SCRIPT_NAME">
pankso@7 173 <p>
pankso@7 174 `gettext "Selection:"`
pankso@7 175 <input type="submit" name="do" value="install" />
pankso@7 176 <input type="submit" name="do" value="remove" />
pankso@7 177 `gettext "List:"`
pankso@7 178 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@7 179 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> |
pankso@7 180 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
pankso@7 181 </p>
pankso@7 182 EOT
pankso@7 183 table_start
pankso@7 184 grep $pkg packages.desc | parse_packages_desc
pankso@7 185 table_end
pankso@7 186 echo '</form>' ;;
pankso@7 187 recharge)
pankso@7 188 # Let recharge the packages list
pankso@7 189 echo '<p>'
pankso@7 190 gettext "Recharging the packages lists..."
pankso@7 191 echo '</p><pre>'
pankso@7 192 tazpkg recharge | filter_tazpkg_msgs
pankso@7 193 echo '</pre><p>'
pankso@7 194 gettext "Packages lists are up-to-date"
pankso@7 195 echo '</p>' ;;
pankso@7 196 do=*)
pankso@7 197 # Do an action on one or some packages
pankso@7 198 cmdline=`echo ${QUERY_STRING#do=} | sed s'/&/ /g'`
pankso@7 199 cmd=`echo ${cmdline} | awk '{print $1}'`
pankso@7 200 pkgs=`echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//`
pankso@7 201 [ $cmd == install ] && cmd=get-install
pankso@7 202 [ $DEBUG == "1" ] && echo "<p class='debug'>cmd: $cmd</p><p>pkgs: $pkgs </p>"
pankso@7 203 for pkg in $pkgs
pankso@7 204 do
pankso@7 205 echo '<p>'
pankso@7 206 gettext "Executing: tazpkg $cmd $pkg"
pankso@7 207 echo '</p><pre>'
pankso@7 208 echo 'y' | tazpkg $cmd $pkg 2>/dev/null | filter_tazpkg_msgs
pankso@7 209 echo '</pre>'
pankso@7 210 done ;;
pankso@7 211 info=*)
pankso@7 212 pkg=${QUERY_STRING#*=}
pankso@7 213 . $INSTALLED/$pkg/receipt
pankso@7 214 cat << EOT
pankso@7 215 <p>
pankso@7 216 `gettext "List:"`
pankso@7 217 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a>
pankso@7 218 </p>
pankso@7 219 <pre>
pankso@7 220 Name : $PACKAGE
pankso@7 221 Version : $VERSION
pankso@7 222 Description : $SHORT_DESC
pankso@7 223 Depends :
pankso@7 224
pankso@7 225 Website : <a href="$WEB_SITE">$WEB_SITE</a>
pankso@7 226 Sizes : $PACKED_SIZE/$UNPACKED_SIZE
pankso@7 227 Files : `cat $INSTALLED/$pkg/files.list | wc -l`
pankso@7 228 </pre>
pankso@7 229
pankso@7 230 <p>`gettext "Installed files"`</p>
pankso@7 231 <pre>
pankso@7 232 `cat $INSTALLED/$pkg/files.list`
pankso@7 233 </pre>
pankso@7 234 EOT
pankso@7 235 ;;
pankso@7 236 *)
pankso@7 237 # Default to summary
pankso@7 238 cat << EOT
pankso@7 239 `gettext "List:"`
pankso@7 240 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> |
pankso@7 241 <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a>
pankso@7 242 <pre>
pankso@7 243 `packages_summary`
pankso@7 244 </pre>
pankso@7 245 EOT
pankso@7 246 echo "" ;;
pankso@7 247 esac
pankso@7 248
pankso@7 249 # xHTML 5 footer
pankso@7 250 cd $PANEL && cat $FOOTER
pankso@7 251
pankso@7 252 exit 0