tiny-slitaz annotate helper @ rev 26

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