slitaz-pizza annotate web/pkgs.cgi @ rev 29

pkgs.cgi: fix $desv variable conflict
author Christophe Lincoln <pankso@slitaz.org>
date Tue Mar 27 09:14:19 2012 +0200 (2012-03-27)
parents a9e881b64c15
children ce872f64c4a7
rev   line source
pankso@7 1 #!/bin/sh
pankso@7 2 #
paul@9 3 # SliTaz Pizza CGI/web interface - Let's have a pizza :-)
pankso@7 4 # Packages step
pankso@7 5 #
pankso@7 6
pankso@7 7 . lib/libpizza
pankso@7 8
pankso@7 9 id="$(GET id)"
pankso@7 10 flavor="$(GET flavor)"
pankso@7 11 skel="$(GET skel)"
pankso@7 12 desc="$(GET desc)"
pankso@7 13 mail="$(GET mail)"
pankso@7 14 log="$tmpdir/slitaz-$id/distro.log"
pankso@29 15 # Flavor pkgs desc list format: pkgname version " short desc "
pankso@22 16 allpkgs="$SLITAZ/$SLITAZ_VERSION/packages/packages.desc"
pankso@27 17 list="$tmpdir/slitaz-$id/packages.list"
pankso@29 18 pkgsdesc="$tmpdir/slitaz-$id/packages.desc"
pankso@7 19
pankso@7 20 #
pankso@7 21 # Functions
pankso@7 22 #
pankso@7 23
pankso@22 24 # Pizza uses local packages synced with mirror each night.
pankso@7 25 list_pkgs() {
pankso@29 26 [ ! -f "$list" ] && echo "Missing: $pkgsdesc"
pankso@29 27 cat $pkgsdesc | while read PACKAGE VERSION SHORT_DESC
pankso@7 28 do
pankso@22 29 cat << EOT
pankso@22 30
pankso@22 31 <tr>
pankso@22 32 <td><input type="checkbox" name="pkg" value="$PACKAGE" /></td>
pankso@22 33 <td>$PACKAGE</td>
pankso@22 34 <td>$VERSION</td>
pankso@22 35 <td>$SHORT_DESC</td>
pankso@22 36 </tr>
pankso@7 37 EOT
pankso@7 38 done
pankso@7 39 }
pankso@7 40
pankso@7 41 # Gen an empty receipt for new flavor.
pankso@7 42 empty_receipt() {
pankso@7 43 cat > $tmpdir/slitaz-$id/receipt << EOT
pankso@7 44 # SliTaz flavor receipt.
pankso@7 45
pankso@7 46 FLAVOR=""
pankso@7 47 SHORT_DESC=""
pankso@7 48 VERSION="$(date "+%Y%m%d")"
pankso@7 49 MAINTAINER=""
pankso@7 50
pankso@7 51 ID=""
pankso@7 52 SKEL=""
pankso@7 53
pankso@7 54 EOT
pankso@7 55 }
pankso@7 56
pankso@22 57 # Search packages or desc in the local packages.desc
pankso@22 58 # TODO: Html table with selection
pankso@22 59 search_pkgs() {
pankso@22 60 echo '<pre>'
pankso@22 61 for pkg in $search
pankso@22 62 do
pankso@22 63 fgrep $pkg $allpkgs | cut -d "|" -f 1,2,3
pankso@22 64 done
pankso@22 65 echo '</pre>'
pankso@22 66 }
pankso@22 67
pankso@7 68 #
pankso@7 69 # Actions
pankso@7 70 #
pankso@7 71
pankso@29 72 #[ "$DEBUG" ] && echo "<div></div>"
pankso@29 73 DEBUG=0
pankso@29 74 [ "$DEBUG" ] && echo "<div>$flavor - $desc</div>"
pankso@29 75
pankso@7 76 case " $(GET) " in
pankso@22 77 *\ search\ *)
pankso@22 78 search="$(GET search)"
pankso@22 79 notify "Searching for: $search" ;;
pankso@7 80 *\ add\ *)
pankso@22 81 add="$(GET add)"
pankso@22 82 notify "Adding packages: $add"
pankso@7 83 for pkg in $add
pankso@7 84 do
pankso@22 85 # Add pkg only if not yep in Pizza flavor pkgs list
pankso@22 86 if ! grep -Eq "^($pkg|get-$pkg) " $list; then
pankso@22 87 pkginfo=$(grep -E "^($pkg|get-$pkg) " $allpkgs | cut -f 1,2,3 -d "|")
pankso@22 88 name=$(echo $pkginfo | cut -d "|" -f 1)
pankso@22 89 vers=$(echo $pkginfo | cut -d "|" -f 2)
pankso@22 90 desc=$(echo $pkginfo | cut -d "|" -f 3)
pankso@29 91 echo "$name $vers \" $desc \"" >> $pkgsdesc
pankso@27 92 echo "$name" >> $list
pankso@7 93 fi
pankso@7 94 done ;;
pankso@7 95 *\ rm\ *)
pankso@7 96 cmdline=$(echo ${QUERY_STRING#pkg=} | sed s'/&/ /g')
pankso@7 97 cmdline=${cmdline%id=*}
pankso@7 98 pkgs=$(echo $cmdline | sed -e s'/+/ /g' -e s'/pkg=//g' -e s/$cmd//)
pankso@29 99 notify "Removing packages: $pkgs"
pankso@7 100 for pkg in $pkgs
pankso@7 101 do
pankso@29 102 sed -i "/^${pkg} /"d $pkgsdesc
pankso@22 103 sed -i "/^${pkg} /"d $list
pankso@7 104 done ;;
pankso@7 105 *)
pankso@7 106 # No space in flavor name please.
pankso@7 107 flavor=$(echo $flavor | sed s'/ //'g)
pankso@7 108 # Javascript can be disable in browser.
pankso@7 109 [ ! "$flavor" ] && echo "Missing flavor name" && exit 0
pankso@7 110 [ ! "$mail" ] && echo "Missing email address" && exit 0
pankso@7 111 [ ! "$skel" ] && echo "Missing SliTaz skeleton" && exit 0
pankso@7 112 [ ! "$desc" ] && echo "Missing short desciption" && exit 0
pankso@22 113 notify "$(gettext "Creating receipt and packages list")"
pankso@7 114 mkdir -p $tmpdir/slitaz-$id
pankso@27 115 # Use a pkg desc for the web interface and a simple one tazlito.
pankso@29 116 cp -f $hgflavors/$skel/packages.desc $pkgsdesc
pankso@28 117 cp -f $hgflavors/$skel/packages.list $list
pankso@28 118 [ -d "$hgflavors/$skel/rootfs" ] && \
pankso@28 119 cp -a $hgflavors/$skel/rootfs $tmpdir/slitaz-$id
pankso@7 120 empty_receipt
pankso@7 121 sed -i \
pankso@7 122 -e s"/FLAVOR=.*/FLAVOR=\"slitaz-$flavor\"/" \
pankso@7 123 -e s"/MAINTAINER=.*/MAINTAINER=\"$mail\"/" \
pankso@7 124 -e s"/SKEL=.*/SKEL=\"$skel\"/" \
pankso@7 125 -e s"/SHORT_DESC=.*/SHORT_DESC=\"$desc\"/" \
pankso@27 126 -e s"/ID=.*/ID=\"$id\"/" $tmpdir/slitaz-$id/receipt
pankso@27 127 echo "Receipt created : $(date '+%Y-%m-%d %H:%M')" > $log ;;
pankso@7 128 esac
pankso@7 129
pankso@7 130 #
pankso@7 131 # Source the receipt and display page.
pankso@7 132 #
pankso@7 133 . $tmpdir/slitaz-$id/receipt
pankso@7 134
pankso@7 135 nb=$(cat $list | wc -l)
pankso@7 136 cat << EOT
pankso@7 137 <h2>Packages ($nb)</h2>
pankso@7 138
pankso@7 139 <form method="get" action="pkgs.cgi">
pankso@22 140 <div id="packages">
pankso@7 141 <table>
pankso@7 142 <tbody>
pankso@7 143 $(list_pkgs)
pankso@7 144 </tbody>
pankso@7 145 </table>
pankso@22 146 </div>
pankso@7 147 <input type="hidden" name="id" value="$id" />
pankso@22 148 <input type="submit" name="rm" value="$(gettext "Remove package(s)")" />
pankso@7 149 </form>
pankso@7 150
pankso@22 151 <form method="get" action="pkgs.cgi">
pankso@22 152 <div style="float: right;">
pankso@16 153 <input type="text" name="add" style="width: 400px;" />
pankso@7 154 <input type="hidden" name="id" value="$id" />
pankso@22 155 <input type="submit" name="pkgs" value="$(gettext "Add package(s)")" />
pankso@22 156 </div>
pankso@22 157 </form>
pankso@22 158
pankso@22 159 <form method="get" action="pkgs.cgi">
pankso@25 160 <p>
pankso@22 161
pankso@22 162 $(gettext "Here you can add or remove some packages from your flavor. You
pankso@22 163 can also search for packages name and description to find a package name")
pankso@22 164
pankso@22 165 </p>
pankso@22 166 <input type="text" name="search" style="width: 300px;" />
pankso@22 167 <input type="hidden" name="id" value="$id" />
pankso@22 168 <input type="submit" value="$(gettext "Search")" />
pankso@22 169 <div id="pkgs-search">
pankso@22 170 $([ "$search" ] && search_pkgs)
pankso@22 171 </div>
pankso@7 172 </form>
pankso@7 173
pankso@7 174 <pre>
pankso@7 175 Uniq ID : $id
pankso@7 176 Flavor : $FLAVOR
pankso@7 177 Short desc : $SHORT_DESC
pankso@7 178 </pre>
pankso@25 179
pankso@25 180 <div class="next">
pankso@25 181 <form method="get" action="rootfs.cgi">
pankso@25 182 <input type="hidden" name="id" value="$id" />
pankso@25 183 <input type="submit" value="$(gettext "Continue")">
pankso@25 184 </form>
pankso@25 185 </div>
pankso@25 186
pankso@7 187 EOT
pankso@7 188
pankso@7 189 # HTML footer.
pankso@7 190 cat lib/footer.html
pankso@7 191
pankso@7 192 exit 0