tiny-slitaz annotate helper @ rev 14

step4.php: multiple checkbox support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Feb 15 22:04:29 2016 +0100 (2016-02-15)
parents 70ba6d904230
children 3caae5e3e0f7
rev   line source
pascal@0 1 #!/bin/sh
pascal@0 2 # $0 kernel size [initrd]
pascal@0 3
pascal@1 4 init()
pascal@1 5 {
pascal@2 6 [ "$(ls -t pkgs | sed q)" == "files.list.lzma" ] ||
pascal@2 7 for i in pkgs/*/receipt ; do
pascal@2 8 . $i
pascal@2 9 sed "s/^/$PACKAGE: /" $(dirname $i)/files.list
pascal@2 10 done | lzma e pkgs/files.list.lzma -si
pascal@1 11 }
pascal@1 12
pascal@6 13
pascal@6 14
pascal@6 15
pascal@0 16 list_pkgs()
pascal@0 17 {
pascal@0 18 TMPDIR=$2
pascal@0 19 shift 2
pascal@0 20 cat <<EOT
pascal@6 21 <div class="large">
pascal@0 22 <table>
pascal@6 23 <thead>
pascal@6 24 <tr>
pascal@6 25 <th> </th>
pascal@6 26 <th>Package</th>
pascal@6 27 <th>Version</th>
pascal@6 28 <th>Description</th>
pascal@6 29 <th>Disk</th>
pascal@6 30 <th>Memory</th>
pascal@6 31 <th> </th>
pascal@6 32 </tr>
pascal@6 33 </thead>
pascal@6 34 <tbody>
pascal@0 35 EOT
pascal@6 36 for i in $TMPDIR/pkgs/*/receipt pkgs/*/receipt; do
pascal@0 37 [ -s $i ] || continue
pascal@0 38 case "$i" in
pascal@6 39 pkgs/kernel-*/receipt) continue;;
pascal@6 40 pkgs/module-*/receipt) continue;;
pascal@0 41 esac
pascal@6 42 AUTO_SELECTION=''
pascal@6 43 UNPACKED_SIZE='-'
pascal@6 44 PACKED_SIZE='-'
pascal@6 45 checked=''; hidden_var=''
pascal@0 46 . $i
pascal@0 47 case " $@ " in
pascal@6 48 *\ $PACKAGE\ *) checked='checked="checked"';;
pascal@6 49 *) [ -n "$2" ] && checked="";;
pascal@0 50 esac
pascal@0 51 grep -qs "^$PACKAGE " $TMPDIR/uploadconf &&
pascal@0 52 checked='checked="checked"'
pascal@5 53 case "$AUTO_SELECTION" in
pascal@6 54 never)
pascal@6 55 continue;;
pascal@6 56 always)
pascal@6 57 checked='checked="checked" disabled'
pascal@6 58 hidden_var="<input type=\"hidden\" name=\"selected[]\" value=\"$PACKAGE\" />";;
pascal@5 59 esac
pascal@0 60 cat <<EOT
pascal@6 61 <tr>
pascal@6 62 <td>$hidden_var
pascal@6 63 <input type="checkbox" name="selected[]" value="$PACKAGE" $checked /></td>
pascal@6 64 <td><a href="?dl=$PACKAGE-$VERSION&amp;tmp=$TMPDIR">$PACKAGE</a></td>
pascal@6 65 <td>$VERSION</td>
pascal@6 66 <td>$SHORT_DESC</td>
pascal@6 67 <td>$PACKED_SIZE</td>
pascal@6 68 <td>$UNPACKED_SIZE</td>
pascal@6 69 <td>$(grep -qs ^config_form $i && echo '&raquo;')</td>
pascal@6 70 </tr>
pascal@0 71 EOT
pascal@0 72 done
pascal@0 73 cat <<EOT
pascal@6 74 </tbody>
pascal@0 75 </table>
pascal@6 76 </div>
pascal@0 77 EOT
pascal@0 78 exit
pascal@0 79 }
pascal@0 80
pascal@6 81
pascal@6 82
pascal@6 83
pascal@0 84 list_kernels()
pascal@0 85 {
pascal@0 86 TMPDIR=$2
pascal@0 87 shift 2
pascal@0 88 cat <<EOT
pascal@6 89 <div class="large">
pascal@0 90 <table>
pascal@6 91 <thead>
pascal@6 92 <tr>
pascal@6 93 <th> </th>
pascal@6 94 <th>Kernel</th>
pascal@6 95 <th>Version</th>
pascal@6 96 <th>Description</th>
pascal@6 97 <!-- th>Size</th -->
pascal@6 98 </tr>
pascal@6 99 </thead>
pascal@6 100 <tbody>
pascal@0 101 EOT
pascal@0 102 checked='checked="checked"'
pascal@0 103 for i in $TMPDIR/pkgs/*/receipt pkgs/*/receipt ; do
pascal@0 104 [ -s $i ] || continue
pascal@0 105 case "$i" in
pascal@6 106 pkgs/kernel-*/receipt);;
pascal@6 107 *) continue;;
pascal@0 108 esac
pascal@0 109 UNPACKED_SIZE="-"
pascal@0 110 . $i
pascal@0 111 case " $@ " in
pascal@6 112 *\ $PACKAGE\ *) checked='checked="checked"' ;;
pascal@6 113 *) [ -n "$2" ] && checked="";;
pascal@0 114 esac
pascal@0 115 cat <<EOT
pascal@6 116 <tr>
pascal@6 117 <td><input type="radio" name="kernel" value="$PACKAGE" $checked/></td>
pascal@6 118 <td>${PACKAGE#kernel-}</td>
pascal@6 119 <td>$VERSION</td>
pascal@6 120 <td>$SHORT_DESC</td>
pascal@6 121 <!-- td>$UNPACKED_SIZE</td -->
pascal@6 122 </tr>
pascal@0 123 EOT
pascal@0 124 checked=""
pascal@0 125 done
pascal@0 126 cat <<EOT
pascal@6 127 </tbody>
pascal@0 128 </table>
pascal@6 129 </div>
pascal@0 130 EOT
pascal@0 131 exit
pascal@0 132 }
pascal@0 133
pascal@6 134
pascal@6 135
pascal@6 136
pascal@0 137 list_modules()
pascal@0 138 {
pascal@0 139 TMPDIR=$2
pascal@0 140 shift 2
pascal@0 141 cat <<EOT
pascal@6 142 <input type="hidden" name="selected[]" value="" />
pascal@6 143 <div class="large">
pascal@0 144 <table>
pascal@6 145 <thead>
pascal@6 146 <tr>
pascal@6 147 <th> </th>
pascal@6 148 <th>Module</th>
pascal@6 149 <th>Version</th>
pascal@6 150 <th>Description</th>
pascal@13 151 <th>Disk</th>
pascal@13 152 <th>Memory</th>
pascal@6 153 <th> </th>
pascal@6 154 </tr>
pascal@6 155 </thead>
pascal@6 156 <tbody>
pascal@0 157 EOT
pascal@0 158 for i in $TMPDIR/pkgs/*/receipt pkgs/*/receipt ; do
pascal@0 159 [ -s $i ] || continue
pascal@0 160 case "$i" in
pascal@6 161 pkgs/module-*/receipt);;
pascal@6 162 *) continue;;
pascal@0 163 esac
pascal@6 164 UNPACKED_SIZE='-'
pascal@0 165 . $i
pascal@6 166 checked=''
pascal@0 167 case " $@ " in
pascal@6 168 *\ $PACKAGE\ *) checked='checked="checked"' ;;
pascal@0 169 esac
pascal@0 170 grep -qs "^$PACKAGE " $TMPDIR/uploadconf &&
pascal@0 171 checked='checked="checked"'
pascal@0 172 cat <<EOT
pascal@6 173 <tr>
pascal@6 174 <td><input type="checkbox" name="selected[]" value="$PACKAGE" $checked/></td>
pascal@6 175 <td>${PACKAGE#module-}</td>
pascal@6 176 <td>$VERSION</td>
pascal@6 177 <td>$SHORT_DESC</td>
pascal@13 178 <td>$PACKED_SIZE</td>
pascal@6 179 <td>$UNPACKED_SIZE</td>
pascal@6 180 <td>$(grep -qs ^config_form $i && echo '&raquo;')</td>
pascal@6 181 </tr>
pascal@0 182 EOT
pascal@0 183 done
pascal@0 184 cat <<EOT
pascal@6 185 </tbody>
pascal@0 186 </table>
pascal@6 187 </div>
pascal@0 188 EOT
pascal@0 189 exit
pascal@0 190 }
pascal@0 191
pascal@6 192
pascal@6 193
pascal@6 194
pascal@0 195 get_receipt()
pascal@0 196 {
pascal@0 197 grep -l "PACKAGE=\"$1\"" $2/pkgs/*/receipt pkgs/*/receipt | head -1
pascal@0 198 }
pascal@0 199
pascal@6 200
pascal@6 201
pascal@6 202
pascal@7 203 get_suggested()
pascal@7 204 {
pascal@7 205 local pkg
pascal@7 206 pkg=pkgs/$1/receipt
pascal@7 207 [ -s $pkg ] || pkg=$2/pkgs/$1/receipt
pascal@7 208 [ -s $pkg ] || pkg=$(get_receipt $@)
pascal@7 209 . $pkg
pascal@7 210 echo -n $SUGGESTED
pascal@7 211 }
pascal@7 212
pascal@7 213
pascal@7 214
pascal@7 215
pascal@0 216 get_package()
pascal@0 217 {
pascal@0 218 local pkg
pascal@0 219 pkg=pkgs/$1/receipt
pascal@0 220 [ -s $pkg ] || pkg=$2/pkgs/$1/receipt
pascal@0 221 [ -s $pkg ] || pkg=$(get_receipt $@)
pascal@0 222 . $pkg
pascal@0 223 cd $(dirname $pkg)
pascal@0 224 pkg=$2$PACKAGE-$VERSION.tazpkg
pascal@0 225 find * | cpio -o -H newc > $pkg
pascal@0 226 echo -n $pkg
pascal@0 227 }
pascal@0 228
pascal@6 229
pascal@6 230
pascal@6 231
pascal@0 232 get_note()
pascal@0 233 {
pascal@0 234 pkg=$(get_receipt $1 $2)
pascal@0 235 [ -n "$pkg" ] || exit
pascal@0 236 grep -qs ^config_note $pkg || exit
pascal@0 237 . $pkg
pascal@0 238 config_note
pascal@0 239 }
pascal@0 240
pascal@6 241
pascal@6 242
pascal@6 243
pascal@0 244 get_form()
pascal@0 245 {
pascal@0 246 pkg=$(get_receipt $1 $2)
pascal@0 247 [ -n "$pkg" ] || exit
pascal@0 248 grep -qs ^config_form $pkg || exit
pascal@0 249 . $pkg
pascal@0 250 if [ -s $2/uploadconf ]; then
pascal@0 251 awk "{
pascal@0 252 if (found) {
pascal@0 253 if (/^ /) print;
pascal@0 254 else exit;
pascal@0 255 }
pascal@0 256 if (/^$PACKAGE /) found=1
pascal@0 257 }" < $2/uploadconf | sed -e 's/ //' -e 's/ \([A-Z_0-9]*=\)/export \1/' > $2/vars
pascal@0 258 . $2/vars
pascal@0 259 fi
pascal@0 260 config_form $2/fs
pascal@0 261 exit
pascal@0 262 }
pascal@0 263
pascal@6 264
pascal@6 265
pascal@6 266
pascal@0 267 do_pre_install()
pascal@0 268 {
pascal@0 269 pkg=$(get_receipt $1 $2)
pascal@0 270 [ -n "$pkg" ] || exit
pascal@0 271 CONFIG_FILES=""
pascal@0 272 . $pkg
pascal@0 273 grep -qs ^pre_install $pkg && pre_install $2/fs
pascal@0 274 [ -n "$CONFIG_FILES" ] && for i in $CONFIG_FILES; do echo $i >> $2/config_files; done
pascal@0 275 unlzma -c $(dirname $pkg)/fs.cpio.lzma | ( cd $2 ; cpio -idmu )
pascal@0 276 exit
pascal@0 277 }
pascal@0 278
pascal@6 279
pascal@6 280
pascal@6 281
pascal@0 282 do_post_install()
pascal@0 283 {
pascal@0 284 pkg=$(get_receipt $1 $2)
pascal@0 285 [ -n "$pkg" ] || exit
pascal@0 286 . $pkg
pascal@0 287 echo "$1 $VERSION $(md5sum $(dirname $pkg)/fs.cpio.lzma | awk '{ print $1 }')" >> $2/fs/etc/packages.conf
pascal@0 288 if grep -qs ^post_install $pkg; then
pascal@5 289 [ -s $2/vars ] && . $2/vars
pascal@0 290 echo "=== $pkg: $(date) ===" >> $2/post_install.log 2>&1
pascal@0 291 post_install $2/fs >> $2/post_install.log 2>&1
pascal@14 292 sed -e 's/^export/ /' -e 's/^/ /' -e '/^ suggested=/d' \
pascal@14 293 < $2/vars >> $2/fs/etc/packages.conf
pascal@0 294 fi
pascal@0 295 rm -f $2/vars
pascal@0 296 exit
pascal@0 297 }
pascal@0 298
pascal@6 299
pascal@6 300
pascal@6 301
pascal@0 302 scan_depends()
pascal@0 303 {
pascal@0 304 local pkg
pascal@0 305 for pkg in $@ ; do
pascal@0 306 case " $OUTPUT " in
pascal@0 307 *\ $pkg\ *) continue ;;
pascal@0 308 esac
pascal@0 309 DEPENDS=""
pascal@0 310 . $(get_receipt $pkg $TMPDIR)
pascal@0 311 scan_depends $DEPENDS
pascal@0 312 case " $OUTPUT " in
pascal@0 313 *\ $pkg\ *) continue ;;
pascal@0 314 esac
pascal@0 315 OUTPUT="$OUTPUT $pkg"
pascal@0 316 done
pascal@0 317 }
pascal@0 318
pascal@6 319
pascal@6 320
pascal@6 321
pascal@0 322 get_depends()
pascal@0 323 {
pascal@0 324 TMPDIR=$2
pascal@0 325 shift 2
pascal@0 326 OUTPUT=""
pascal@0 327 scan_depends $@
pascal@0 328 echo -n $OUTPUT
pascal@0 329 exit
pascal@0 330 }
pascal@0 331
pascal@6 332
pascal@6 333
pascal@6 334
pascal@0 335 pkgs_extract()
pascal@0 336 {
pascal@0 337 cd $2
pascal@0 338 mkdir pkgs
pascal@0 339 if cpio -t < $1 | grep -q receipt; then
pascal@0 340 mv $1 pkgs
pascal@0 341 elif tar tf $1 | grep -q tazpkg; then
pascal@0 342 tar xf $1 -C pkgs
pascal@0 343 elif tar tzf $1 | grep -q tazpkg; then
pascal@0 344 tar xzf $1 -C pkgs
pascal@0 345 elif tar tjf $1 | grep -q tazpkg; then
pascal@0 346 tar xjf $1 -C pkgs
pascal@0 347 else
pascal@0 348 rm -rf $1 pkgs
pascal@0 349 exit
pascal@0 350 fi
pascal@0 351 cd pkgs
pascal@0 352 for i in *; do
pascal@0 353 mkdir tmp
pascal@0 354 cd tmp
pascal@0 355 cpio -i < ../$i
pascal@0 356 . ./receipt
pascal@0 357 cd ..
pascal@0 358 mv tmp $PACKAGE-$VERSION
pascal@0 359 done
pascal@0 360 exit
pascal@0 361 }
pascal@0 362
pascal@6 363
pascal@6 364
pascal@6 365
pascal@0 366 lzma_set_size()
pascal@0 367 {
pascal@0 368 n=$(unlzma -c $1 | wc -c)
pascal@0 369 for i in $(seq 1 8); do
pascal@0 370 printf '\\\\x%02X' $(($n & 255))
pascal@0 371 n=$(($n >> 8))
pascal@0 372 done | xargs echo -en | dd of=$1 conv=notrunc bs=1 seek=5 2> /dev/null
pascal@0 373 }
pascal@0 374
pascal@6 375
pascal@6 376
pascal@6 377
pascal@0 378 case "$1" in
pascal@6 379 --list-modules) list_modules $@ ;;
pascal@6 380 --list-kernels) list_kernels $@ ;;
pascal@6 381 --list-pkgs) list_pkgs $@ ;;
pascal@6 382 --get-form) get_form $2 $3 ;;
pascal@6 383 --get-note) get_note $2 $3 ;;
pascal@6 384 --pre-install) do_pre_install $2 $3 ;;
pascal@6 385 --post-install) do_post_install $2 $3 ;;
pascal@6 386 --depends) get_depends $@ ;;
pascal@6 387 --pkgs-extract) pkgs_extract $2 $3 ;;
pascal@6 388 --remove) rm -rf $2; exit ;;
pascal@6 389 --get-pkg) get_package $2 $3 ;;
pascal@7 390 --get-suggested) get_suggested $2 $3 ;;
pascal@6 391 --init) init ;;
pascal@0 392 esac
pascal@0 393
pascal@6 394
pascal@6 395
pascal@6 396
pascal@0 397 if [ "x$1" == "x--mkrootfs" ]; then
pascal@0 398 tmp=$2
pascal@0 399 cd $tmp/fs
pascal@0 400 if [ ! -d boot -a -s ../kernel ]; then # custom kernel
pascal@0 401 mkdir boot
pascal@0 402 cp ../kernel boot/bzImage
pascal@0 403 fi
pascal@0 404 find -user bellard -exec chown root.root {} \;
pascal@5 405 find | grep -v ^./boot | cpio -o -H newc | gzip -9 > ../rootfs.gz
pascal@5 406 which advdef 2> /dev/null && advdef -z4 ../rootfs.gz
pascal@5 407 find .. -exec ls -ld {} \; > /tmp/X
pascal@0 408 fi
pascal@0 409 if [ "x$1" == "x--mkiso" ]; then
pascal@0 410 tmp=$2
pascal@0 411 mkdir -p $tmp/iso/boot/isolinux $tmp/iso/data
pascal@0 412 cat $tmp/fs/boot/System.map | gzip -9 > $tmp/iso/data/sysmap.gz
pascal@0 413 cat $tmp/fs/boot/config | gzip -9 > $tmp/iso/data/linconf.gz
pascal@0 414 cat $tmp/fs/boot/config-busybox | gzip -9 > $tmp/iso/data/bbconf.gz
pascal@5 415 cp $tmp/fs/boot/bundle $tmp/iso/data/bundle.sh
pascal@4 416 cat $tmp/post_install.log | gzip -9 > $tmp/iso/data/log.gz
pascal@0 417 cp $tmp/config_files $tmp/iso/data/files.cnf
pascal@0 418 cp $tmp/fs/etc/packages.conf $tmp/iso/data/packages.cnf
pascal@7 419 [ -s wok/busybox/receipt ] && tar czf $tmp/iso/data/wok.tgz wok/*
pascal@7 420 [ -s www/index.php ] && tar czf $tmp/iso/data/www.tgz www/*
pascal@0 421 cp $tmp/fs/boot/bzImage $tmp/iso/boot/bzImage
pascal@0 422 cp $tmp/rootfs.gz $tmp/iso/boot/rootfs
pascal@0 423 cp /boot/isolinux/isolinux.bin $tmp/iso/boot/isolinux
pascal@0 424 cat > $tmp/iso/boot/isolinux/isolinux.cfg <<EOT
pascal@0 425 label slitaz
pascal@0 426 kernel /boot/bzImage
pascal@0 427 append initrd=/boot/rootfs rw root=/dev/null vga=normal
pascal@0 428 default slitaz
pascal@0 429 implicit 0
pascal@0 430 prompt 1
pascal@0 431 timeout 50
pascal@0 432 EOT
pascal@0 433 genisoimage -o $tmp/slitaz.iso -b boot/isolinux/isolinux.bin \
pascal@0 434 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
pascal@0 435 -V "Tiny SliTaz" -p "www.slitaz.org" -input-charset iso8859-1 \
pascal@0 436 -boot-info-table $tmp/iso > /dev/null 2>&1
pascal@0 437 [ -x /usr/bin/isohybrid ] &&
pascal@0 438 /usr/bin/isohybrid $tmp/slitaz.iso 2> /dev/null
pascal@6 439 [ -x /usr/bin/iso2exe ] &&
pascal@6 440 /usr/bin/iso2exe $tmp/slitaz.iso 2> /dev/null
pascal@0 441 fi
pascal@5 442 if [ "x$1" == "x--mkexe" ]; then
pascal@5 443 tmp=$2
pascal@5 444 cd $tmp
pascal@5 445 cp fs/boot/bzImage slitaz.exe
pascal@7 446 sh fs/boot/bundle slitaz.exe rootfs.gz
pascal@5 447 fi
pascal@0 448 if [ "x$1" == "x--mkimg" ]; then
pascal@0 449 tmp=$2
pascal@0 450 cd $tmp
pascal@5 451 cp fs/boot/bzImage slitaz.img
pascal@7 452 sh fs/boot/bundle slitaz.img rootfs.gz
pascal@12 453 if [ -s fs/boot/ipxe ] && [ -s fs/boot/memtest ] &&
pascal@12 454 [ $(du -c fs/boot/ipxe fs/boot/memtest slitaz.img | \
pascal@12 455 awk 'END { print $1 }') -lt 1440 ]; then
pascal@12 456 sh fs/boot/bundle out " SliTaz boot menu" slitaz.img \
pascal@12 457 "Tiny SliTaz" fs/boot/ipxe "SliTaz web boot" \
pascal@12 458 fs/boot/memtest "Check memory"
pascal@12 459 mv -f out slitaz.img
pascal@12 460 elif [ -s fs/boot/ipxe ] && [ $(du -c fs/boot/ipxe slitaz.img | \
pascal@12 461 awk 'END { print $1 }') -lt 1440 ]; then
pascal@12 462 sh fs/boot/bundle out " SliTaz boot menu" slitaz.img \
pascal@12 463 "Tiny SliTaz" fs/boot/ipxe "SliTaz web boot"
pascal@12 464 mv -f out slitaz.img
pascal@12 465 elif [ -s fs/boot/memtest ] && [ $(du -c fs/boot/memtest slitaz.img | \
pascal@12 466 awk 'END { print $1 }') -lt 1440 ]; then
pascal@12 467 sh fs/boot/bundle out " SliTaz boot menu" slitaz.img \
pascal@12 468 "Tiny SliTaz" fs/boot/memtest "Check memory"
pascal@12 469 mv -f out slitaz.img
pascal@12 470 fi
pascal@11 471 [ $(stat -c %s slitaz.img) -lt 1474560 ] &&
pascal@11 472 dd of=slitaz.img bs=18k seek=80 count=0 2> /dev/null
pascal@0 473 fi
pascal@0 474 if [ "x$1" == "x--mkcfg" ]; then
pascal@0 475 tmp=$2
pascal@0 476 cd $tmp/fs
pascal@0 477 for i in $(sed 's#^/##' < ../config_files); do find $i; done | \
pascal@0 478 sort | uniq | cpio -o -H newc | gzip -9 > ../config_files.cpio.gz
pascal@0 479 fi
pascal@5 480 if [ "x$1" == "x--chkdist" ]; then
pascal@5 481 if [ pkgs/busybox-*/fs.cpio.lzma -nt dist/rootfs.cpio ]; then
pascal@5 482 cat pkgs/busybox-*/fs.cpio.lzma | unlzma | ( cd dist ; cpio -idmu )
pascal@5 483 mv -f dist/fs/* dist/
pascal@5 484 rmdir dist/fs
pascal@5 485 touch dist/*
pascal@5 486 fi
pascal@5 487 fi