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 |