wok-6.x view mirror-tools/stuff/usr/bin/mkpkgiso @ rev 2673

mirror-tools/mkpkgiso: add mount-packages
author Pascal Bellard <pascal.bellard@slitaz.org>
date Tue Apr 21 11:08:45 2009 +0200 (2009-04-21)
parents 2951f526648e
children 326f001ee85c
line source
1 #!/bin/sh
2 # mkpkgiso, build packages ISO image.
3 # (C) 2007-TODAY SliTaz - GNU General Public License v3.
4 #
5 # Authors : Eric Joseph-Alexandre <erjo@slitaz.org>
6 # Pascal Bellard <pascal.bellard@slitaz.org>
8 VERSION=0.4
10 ROOT=/home/slitaz/iso
11 TEMP_DIR=${ROOT}/_iso.$$
12 PKG_VER=$1
13 shift
14 OPTIONS=$@
15 PKG_DIR=$TEMP_DIR/packages/$PKG_VER
16 REPOS=/var/www/slitaz/mirror/packages/$PKG_VER
17 ISO_DIR=/var/www/slitaz/mirror/iso/$PKG_VER
18 LOG=$PWD/$(basename $0).log
20 #
21 VOLUME_ID="packages-${PKG_VER}"
22 PUBLISHER="SliTaz http://www.slitaz.org/"
23 IMAGE="packages-${PKG_VER}.iso"
24 OUTPUT="$ROOT/$IMAGE"
26 # Check command line option.
27 if [ -z $PKG_VER ]; then
28 echo "Usage: $(basename $0) <Version> [--boot|--webboot][--filter]"
29 exit 1
30 fi
32 # Check if we provide a valide version
33 if [ ! -d $REPOS ]; then
34 echo "Boooh! $PKG_VER is not a valid version."
35 exit 1
36 fi
38 # Status function.
39 status()
40 {
41 local CHECK=$?
42 echo -en "\\033[70G[ "
43 if [ $CHECK = 0 ]; then
44 echo -en "\\033[1;33mOK"
45 else
46 echo -en "\\033[1;31mFailed"
47 fi
48 echo -e "\\033[0;39m ]"
49 }
51 # Create temp directory
52 mkdir -p $TEMP_DIR/packages/$PKG_VER
54 # Prepare evrything for ISO
56 echo ""
57 echo "Building ISO for packages $PKG_VER"
58 echo "==============================================================================="
59 echo -n "Creating working dir $(basename $TEMP_DIR)"
60 status
61 echo -n "Creating symlink"
62 status
64 # Link every packages to temp dir
65 cd $PKG_DIR
66 for i in $REPOS/*
67 do
68 ln -s $i >> $LOG 2>&1
69 done
71 echo -n "Creating install script"
72 # Create install script as suggested by Pascal.
73 cat >$TEMP_DIR/install.sh<<EOF
74 #!/bin/sh
75 #
77 DIR=\$(cd \$(dirname \$0); pwd)
79 echo "Install packages..."
80 [ -d /var/cache/tazpkg ] || mkdir -p /var/cache/tazpkg
81 ls -d \$DIR/packages/* > /var/lib/tazpkg/mirror
82 ln -fs \$DIR/packages/*/*.tazpkg /var/cache/tazpkg/
83 ln -fs \$DIR/packages/*/packages.* /var/lib/tazpkg
84 EOF
85 [ -e files.list.lzma ] && cat >>$TEMP_DIR/install.sh<<EOF
86 ln -fs \$DIR/packages/*/files.list.lzma /var/lib/tazpkg
87 EOF
89 status
90 chmod 755 $TEMP_DIR/install.sh
92 case " $OPTIONS " in
93 *\ --filter\ *)
94 SIZE=0
95 for i in *.tazpkg; do
96 while read f; do
97 case "$i" in
98 $f*) continue 2;;
99 esac
100 done < packages.list
101 echo -n "Filter out $i ($(du -hs $(readlink $i) | awk '{ print $1 }'))..."
102 SIZE=$(( $SIZE + $(stat -c %s $(readlink $i)) ))
103 rm $i
104 status
105 done
106 UNIT=" bytes"
107 if [ $SIZE -gt 10240 ]; then
108 SIZE=$(( $SIZE / 1024 ))
109 UNIT="K"
110 fi
111 if [ $SIZE -gt 10240 ]; then
112 SIZE=$(( $SIZE / 1024 ))
113 UNIT="M"
114 fi
115 echo "$SIZE$UNIT removed.";;
116 esac
118 # Copy hg subtree
119 get_from_hg()
120 {
121 [ /slitaz/home/slitaz/hg/$1 ] || return
122 echo -n "Adding $2"
123 /usr/sbin/chroot /slitaz hg --repository /home/slitaz/hg/$1 pull >/dev/null
124 /usr/sbin/chroot /slitaz hg --repository /home/slitaz/hg/$1 update >/dev/null
125 mkdir $TEMP_DIR/$1
126 cp -a /slitaz/home/slitaz/hg/$1/* $TEMP_DIR/$1
127 status
128 echo "$(du -hs $TEMP_DIR/$1 | awk '{ print $1 }') used by $2."
129 }
131 for i in $OPTIONS ; do
132 case "$i" in
133 --wok)
134 get_from_hg wok "wok (cooking)";;
135 --wok-stable)
136 get_from_hg wok-stable "wok (stable)";;
137 --website)
138 if get_from_hg website "web site"; then
139 cat >>$TEMP_DIR/install.sh<<EOF
140 echo "Install http://127.0.0.1/website ..."
141 [ -d /var/www ] || mkdir -p /var/www
142 ln -s \$DIR/website /var/www
143 tazpkg list | grep -q ^lighttpd || yes y | tazpkg get-install lighttpd
144 EOF
145 fi;;
146 esac
147 done
149 # Extract boot package function
150 extract_boot()
151 {
152 f=$(ls $REPOS/$1-[0-9]*.tazpkg 2> /dev/null)
153 [ -f "$f" ] || return 1
154 [ -d $TEMP_DIR/boot ] || mkdir $TEMP_DIR/boot
155 ( cd $TEMP_DIR/boot ; cpio -i fs.cpio.gz < $f 2> /dev/null )
156 ( cd $TEMP_DIR/boot ; zcat fs.cpio.gz | cpio -id 2> /dev/null )
157 mv $TEMP_DIR/boot/fs/boot/* $TEMP_DIR/boot
158 rm -rf $TEMP_DIR/boot/fs.cpio.gz $TEMP_DIR/boot/fs
159 return 0
160 }
162 # Gen boot part
163 BOOT_OPT=""
164 iso=$ISO_DIR/slitaz-$PKG_VER.iso
165 case " $OPTIONS " in
166 *\ --boot\ *)
167 echo -n "Creating boot tree"
168 isoinfo -R -l -i $iso | awk '/^Directory/ { path=$4 } /^-/ { print path$12 }' | while read file; do
169 [ "$(basename $file)" == ".." ] && continue
170 [ "$file" = "/boot/isolinux/boot.cat" ] && continue
171 [ -d "$(dirname $TEMP_DIR/$file)" ] ||
172 mkdir -p "$(dirname $TEMP_DIR/$file)"
173 isoinfo -R -x "$file" -i $iso > "$TEMP_DIR/$file"
174 done
175 status
176 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
177 -no-emul-boot -boot-load-size 4 -boot-info-table"
178 ;;
179 *\ --webboot\ *)
180 if extract_boot gpxe; then
181 echo -n "Creating web boot tree"
182 mkdir $TEMP_DIR/boot/isolinux/
183 isoinfo -x "/BOOT/ISOLINUX/ISOLINUX.BIN;1" -i $iso > \
184 $TEMP_DIR/boot/isolinux/isolinux.bin
185 mv $TEMP_DIR/boot/gpxe $TEMP_DIR/boot/isolinux
186 cat > $TEMP_DIR/boot/isolinux/isolinux.cfg <<EOT
187 default gpxe
188 append http://mirror.slitaz.org/pxe/pxelinux.0
189 EOT
190 status
191 BOOT_OPT="-b boot/isolinux/isolinux.bin -c boot/isolinux/boot.cat \
192 -no-emul-boot -boot-load-size 4 -boot-info-table"
193 fi
194 ;;
195 esac
197 if [ -n "$BOOT_OPT" ]; then
198 sed -i 's/vga=/mount-packages vga=/' $TEMP_DIR/boot/isolinux/*.cfg
199 echo "$(du -hs $TEMP_DIR/boot | awk '{ print $1 }') used by boot."
200 fi
202 # Gen ISO
203 echo -n "Generating iso image"
204 /usr/bin/genisoimage -R -J -f -V $VOLUME_ID \
205 -P "$PUBLISHER" -md5-list $REPOS/packages.md5 \
206 -quiet -o $OUTPUT $BOOT_OPT $TEMP_DIR
207 status
209 echo "$(du -hs $OUTPUT | awk '{ print $1 }') used by iso image."
211 cd ${ROOT}
212 echo -n "Create hybrid DVD/CDROM"
213 [ -x /usr/bin/isohybrid ] && /usr/bin/isohybrid $IMAGE 2> /dev/null
214 status
216 echo -n "Calculate md5sum"
217 /usr/bin/md5sum $IMAGE > $(basename $IMAGE .iso).md5
218 status
220 echo -n "Moving file to mirror"
221 mv $IMAGE $ISO_DIR
222 mv $(basename $IMAGE .iso).md5 $ISO_DIR
223 status
226 # Cleaning temp files
227 rm -rf $TEMP_DIR