wok-next rev 3670
mirror-tools/mkpkgiso: add --auto-install and --loram-detect
author | Pascal Bellard <pascal.bellard@slitaz.org> |
---|---|
date | Sat Jul 11 01:02:28 2009 +0200 (2009-07-11) |
parents | 7a46cf13f72a |
children | 9bba2e65be4d |
files | mirror-tools/stuff/usr/bin/mkpkgiso |
line diff
1.1 --- a/mirror-tools/stuff/usr/bin/mkpkgiso Fri Jul 10 22:26:19 2009 +0200 1.2 +++ b/mirror-tools/stuff/usr/bin/mkpkgiso Sat Jul 11 01:02:28 2009 +0200 1.3 @@ -5,15 +5,17 @@ 1.4 # Authors : Eric Joseph-Alexandre <erjo@slitaz.org> 1.5 # Pascal Bellard <pascal.bellard@slitaz.org> 1.6 1.7 -VERSION=0.4 1.8 +VERSION=0.5 1.9 1.10 ROOT=/home/slitaz/iso 1.11 TEMP_DIR=${ROOT}/_iso.$$ 1.12 +SORT_FILE=${ROOT}/_sort.$$ 1.13 PKG_VER=$1 1.14 shift 1.15 OPTIONS=$@ 1.16 PKG_DIR=$TEMP_DIR/packages/$PKG_VER 1.17 REPOS=/var/www/slitaz/mirror/packages/$PKG_VER 1.18 +PXE_DIR=/var/www/slitaz/mirror/pxe 1.19 ISO_DIR=/var/www/slitaz/mirror/iso/$PKG_VER 1.20 LOG=$PWD/$(basename $0).log 1.21 1.22 @@ -25,7 +27,11 @@ 1.23 1.24 # Check command line option. 1.25 if [ -z $PKG_VER ]; then 1.26 - echo "Usage: $(basename $0) <Version> [--boot|--webboot][--filter]" 1.27 + cat <<EOT 1.28 +Usage: $(basename $0) <Version> 1.29 + [--boot [--auto-install] [--loram-detect]]|--webboot] [--filter] 1.30 + [--wok] [--wok-stable] [--website][--dry-run] 1.31 +EOT 1.32 exit 1 1.33 fi 1.34 1.35 @@ -74,19 +80,63 @@ 1.36 #!/bin/sh 1.37 # 1.38 1.39 -DIR=\$(cd \$(dirname \$0); pwd) 1.40 +DIR=\$(cd \$(busybox dirname \$0); pwd) 1.41 + 1.42 +# Handle --auto-install case 1.43 +if [ "\$DIR" == "/etc/init.d" ]; then 1.44 + DIR=/mnt 1.45 + 1.46 + # Handle loram on hybrid hard disk / usb key case 1.47 + if [ ! -d /usr/bin ]; then 1.48 + if [ -d /.usr.rw ]; then 1.49 + echo -n "Mounting /usr read-write... " 1.50 + usr=.usr.ro 1.51 + else 1.52 + echo -n "Mounting /usr read-only... " 1.53 + usr=usr 1.54 + fi 1.55 + FS=\$DIR/usr.cromfs 1.56 + if [ -f \$FS ]; then 1.57 + /bin/cromfs-driver \$FS /\$usr -o ro,dev,suid,allow_other 1.58 + elif [ -f \$DIR/usr.sqfs ]; then 1.59 + FS=\$DIR/usr.sqfs 1.60 + mount -o loop,ro -t squashfs \$FS /\$usr 1.61 + elif [ -L /\$usr ]; then 1.62 + FS=\$DIR/usr 1.63 + fi 1.64 + status 1.65 + if [ -d /.usr.rw ]; then 1.66 + if [ -x /bin/funionfs ]; then 1.67 + /bin/funionfs -o dirs=/.usr.ro=RO:/.usr.rw -o allow_other -o suid,dev NONE /usr 1.68 + else 1.69 + /bin/mount -t aufs -o br:/.usr.rw:/.usr.ro none /usr 1.70 + fi 1.71 + fi 1.72 + fi 1.73 +fi 1.74 1.75 echo "Install packages..." 1.76 [ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg 1.77 ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror 1.78 ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/ 1.79 ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg 1.80 +echo "=> all $PKG_VER package are available for tazpkg/tazpkgbox" 1.81 EOF 1.82 [ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF 1.83 ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg 1.84 EOF 1.85 1.86 status 1.87 +cat > $SORT_FILE <<EOT 1.88 +install.sh 8 1.89 +README 8 1.90 +index.html 8 1.91 +md5sum 8 1.92 +style.css 8 1.93 +images/header.png 8 1.94 +EOT 1.95 +( cd $TEMP_DIR ; ls packages/*/packages* packages/*/files.list.lzma ) | \ 1.96 + awk '{ printf "%s 4\n",$0 }' >> $SORT_FILE 1.97 chmod 755 $TEMP_DIR/install.sh 1.98 1.99 case " $OPTIONS " in 1.100 @@ -131,16 +181,31 @@ 1.101 for i in $OPTIONS ; do 1.102 case "$i" in 1.103 --wok) 1.104 - get_from_hg wok "wok (cooking)";; 1.105 + cat >>$TEMP_DIR/install.sh<<EOF 1.106 +echo "=> Wok (cooking) is in \$DIR/wok" 1.107 +EOF 1.108 + if get_from_hg wok "wok (cooking)"; then 1.109 + ( cd $TEMP_DIR ; find wok -not -type d ) | \ 1.110 + awk '{ printf "%s 2\n",$0 }' >> $SORT_FILE 1.111 + fi;; 1.112 --wok-stable) 1.113 - get_from_hg wok-stable "wok (stable)";; 1.114 + cat >>$TEMP_DIR/install.sh<<EOF 1.115 +echo "=> Wok (stable) is in \$DIR/wok" 1.116 +EOF 1.117 + if get_from_hg wok-stable "wok (stable)"; then 1.118 + mv $TEMP_DIR/wok-stable $TEMP_DIR/wok 1.119 + ( cd $TEMP_DIR ; find wok -not -type d ) | \ 1.120 + awk '{ printf "%s 2\n",$0 }' >> $SORT_FILE 1.121 + fi;; 1.122 --website) 1.123 if get_from_hg website "web site"; then 1.124 + ( cd $TEMP_DIR ; find website -not -type d ) | \ 1.125 + awk '{ printf "%s 5\n",$0 }' >> $SORT_FILE 1.126 cat >>$TEMP_DIR/install.sh<<EOF 1.127 -echo "Install http://127.0.0.1/website ..." 1.128 [ -d /var/www ] || mkdir -p /var/www 1.129 ln -s \$DIR/website /var/www 1.130 -tazpkg list | grep -q ^lighttpd || yes y | tazpkg get-install lighttpd 1.131 +tazpkg list | grep -q ^lighttpd || yes y | tazpkg get-install lighttpd > /dev/null 2>&1 1.132 +echo "=> slitaz web site installed in http://localhost/website" 1.133 EOF 1.134 fi;; 1.135 esac 1.136 @@ -162,6 +227,7 @@ 1.137 # Gen boot part 1.138 BOOT_OPT="" 1.139 iso=$ISO_DIR/slitaz-$PKG_VER.iso 1.140 +isoloram=$ISO_DIR/flavors/slitaz-loram-cdrom-sqfs.iso 1.141 case " $OPTIONS " in 1.142 *\ --boot\ *) 1.143 echo -n "Creating boot tree" 1.144 @@ -174,7 +240,34 @@ 1.145 done 1.146 status 1.147 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ 1.148 --no-emul-boot -boot-load-size 4 -boot-info-table" 1.149 +-no-emul-boot -boot-load-size 4 -boot-info-table -sort $SORT_FILE" 1.150 + case " $OPTIONS " in 1.151 + *\ --auto-install\ *) 1.152 + echo -n "Enable auto install" 1.153 + cat >>$TEMP_DIR/install.sh<<EOF 1.154 +echo "mount -o ro -t iso9660 LABEL=packages-$PKG_VER /mnt" >> /etc/init.d/local.sh 1.155 +EOF 1.156 + sed -i "s/rw root/rw config=LABEL=packages-$PKG_VER,install.sh root/" \ 1.157 + $TEMP_DIR/boot/isolinux/*.cfg 1.158 + status 1.159 + ;; 1.160 + esac 1.161 + [ -f $PXE_DIR/ifmem.c32 -a -f $isoloram ] && case " $OPTIONS " in 1.162 + *\ --loram-detect\ *) 1.163 + echo -n "Enable loram autodetection" 1.164 + cp $PXE_DIR/ifmem.c32 "$TEMP_DIR/boot/isolinux" 1.165 + isoinfo -R -x "/usr.sqfs" -i $isoloram > "$TEMP_DIR/usr.sqfs" 1.166 + echo 'usr.sqfs 8' >> $SORT_FILE 1.167 + isoinfo -R -x "/boot/rootfs.gz" -i $isoloram > \ 1.168 + "$TEMP_DIR/boot/loram.gz" 1.169 + sed -i -e 's|kernel /boot/bzImage|kernel /boot/isolinux/ifmem.c32\n\tappend 160768 core loram\n|' \ 1.170 + -e 's|\(.*/\)rootfs\(.gz .*\)$|label core\n\tkernel /boot/bzImage\n\1rootfs\2\n\nlabel loram\n\tkernel /boot/bzImage\n\1loram\2|' \ 1.171 + $TEMP_DIR/boot/isolinux/*.cfg 1.172 + status 1.173 + ;; 1.174 + esac 1.175 + ( cd $TEMP_DIR ; find boot -not -type d ) | \ 1.176 + awk '{ printf "%s 9\n",$0 }' >> $SORT_FILE 1.177 ;; 1.178 *\ --webboot\ *) 1.179 if extract_boot gpxe; then 1.180 @@ -183,22 +276,30 @@ 1.181 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \ 1.182 $TEMP_DIR/boot/isolinux/isolinux.bin 1.183 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux 1.184 + ( cd $TEMP_DIR ; find boot -not -type d ) | \ 1.185 + awk '{ printf "%s 9\n",$0 }' >> $SORT_FILE 1.186 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT 1.187 default gpxe 1.188 append http://mirror.slitaz.org/pxe/pxelinux.0 1.189 EOT 1.190 status 1.191 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \ 1.192 --no-emul-boot -boot-load-size 4 -boot-info-table" 1.193 +-no-emul-boot -boot-load-size 4 -boot-info-table -sort $SORT_FILE" 1.194 fi 1.195 ;; 1.196 esac 1.197 1.198 if [ -n "$BOOT_OPT" ]; then 1.199 - sed -i 's/vga=/mount-packages vga=/' $TEMP_DIR/boot/isolinux/*.cfg 1.200 - echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot." 1.201 + echo "$(du -chs $TEMP_DIR/boot $TEMP_DIR/usr.sqfs 2> /dev/null | \ 1.202 + tail -1 | awk '{ print $1 }') used by boot." 1.203 fi 1.204 1.205 +case " $OPTIONS " in 1.206 +*\ --dry-run\ *) 1.207 + echo "Please check and remove $TEMP_DIR and $SORT_FILE" 1.208 + exit 1.209 + ;; 1.210 +esac 1.211 # Gen ISO 1.212 echo -n "Generating iso image" 1.213 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \ 1.214 @@ -222,7 +323,6 @@ 1.215 mv $(basename $IMAGE .iso).md5 $ISO_DIR 1.216 status 1.217 1.218 +# Cleaning temp files 1.219 +rm -rf $TEMP_DIR $SORT_FILE 1.220 1.221 -# Cleaning temp files 1.222 -rm -rf $TEMP_DIR 1.223 -