tiny-slitaz annotate helper @ rev 5

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