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&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 '»')</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 |