slitaz-modular view mkiso.sh @ rev 177

mkiso.sh: more filenames support
author Pascal Bellard <pascal.bellard@slitaz.org>
date Wed Mar 30 09:46:37 2016 +0200 (2016-03-30)
parents 06775c59c666
children
line source
1 #!/bin/bash
3 . /etc/slitaz/slitaz.conf
4 . /etc/slitaz/cook.conf
6 QUIET="y"
7 FORCE="y"
8 PUBLISHER="SliTaz"
9 APPLICATION="SliTaz"
10 CREATE_DEFAULT="n"
11 BASEDIR="$(pwd)"
12 PROFILE="$BASEDIR/$1"
13 export LABEL="slitaz_$1_$(date +%F)"
14 VOLUME_ID="$LABEL"
15 ver=""
16 CDNAME="slitaz"
17 RMSTUFF=n
18 MVSTUFF=n
19 UNGZIP=n
20 EXT="xz"
21 COMPRESSION="xz -Xbcj x86"
22 MKOPTION="-b 256k"
23 BASE_MODULES=""
24 MODULES=""
25 UNION_MODULES=""
26 WORKING="$PROFILE/working"
27 INITRAMFS="$WORKING/initramfs"
28 UNION="$WORKING/union"
29 LOG="$WORKING/log"
30 ISODIR="$WORKING/iso"
31 IMGNAME="$PROFILE/$CDNAME-$1-$(date +%F).iso"
32 IMGMD5NAME="$IMGNAME.md5"
33 LASTBR="$INITRAMFS"
34 SGNFILE="$ISODIR/$CDNAME/livecd.sgn"
35 MODULES_DIR="$WORKING/modules"
36 HG_DIR="$WORKING/hg"
37 HG_URL="http://hg.slitaz.org"
38 HG_PATH="repos"
39 DONT_UPDATE_MIRROR="no"
40 COPY_HG="no"
41 UPDATE_HG="no"
42 BACKUP_SOURCES="no"
43 BACKUP_PACKAGES="no"
44 MIRROR_DIR="mirror"
45 PKGISO_DIR="$ISODIR/$MIRROR_DIR/packages"
46 SRCISO_DIR="$ISODIR/$MIRROR_DIR/src"
47 BACKUP_ALL="no"
48 KEY_FILES="init liblinuxlive linuxrc"
49 CLEAN_MODULES_DIR="no"
50 CLEAN_INITRAMFS="no"
51 LOCAL_REPOSITORY="$SLITAZ"
52 PACKAGES_REPOSITORY="$PKGS"
53 INCOMING_REPOSITORY="$INCOMING"
54 SOURCES_REPOSITORY="$SRC"
55 CACHE_DIR="/var/cache/tazpkg"
56 NCPU="-processors 3"
57 HG_LIST="cookutils flavors flavors-stable nim-tools slitaz-arm slitaz-base-files slitaz-configs slitaz-doc slitaz-forge slitaz-modular slitaz-pizza slitaz-tools slitaz-vz spk ssfs tazbug tazlito tazpanel tazpkg tazusb tazweb tazwok tiny-slitaz website wok wok-stable wok-tiny wok-undigest"
58 MY_HG_LIST="piratebox slitaz-cloud slitaz-dev-tools tazpkg-tank slitaz-doc-wiki-data slitaz-boot-scripts my-cookutils wok-tank"
59 MY_HG_URL="https://bitbucket.org/godane"
61 error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
62 warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
63 info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }
65 # do UID checking here so someone can at least get usage instructions
66 #if [ "$EUID" != "0" ]; then
67 # error "error: This script must be run as root."
68 # exit 1
69 #fi
70 if [ ! -d $PROFILE -o "$1" = "" ]; then
71 echo "$0 profile-name"
72 echo "ex $0 core"
73 exit 1
74 fi
76 ROOT_MOD="$(ls -1 ${PROFILE}/list | head -1)"
77 INST_ROOT="${MODULES_DIR}/$(basename ${ROOT_MOD} .list)"
79 if [ -f ${PROFILE}/config ]; then
80 source ${PROFILE}/config
81 fi
83 _overlay()
84 {
85 if [ -d ${MODULES_DIR}/overlay ]; then
86 rm -rf ${MODULES_DIR}/overlay
87 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
88 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
89 else
90 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
91 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
92 fi
94 if [ -f ${MODULES_DIR}/overlay/etc/local-mirror.conf ]; then
95 sed -i "s|^#PKGDIR|PKGDIR=/packages|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
96 sed -i "s|^#SRCDIR|SRCDIR=/src|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
97 fi
99 if [ "${QUIET}" = "y" ]; then
100 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION} >/dev/null
101 else
102 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION}
103 fi
104 }
106 lzma_switches()
107 {
108 echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)"
109 }
111 # Pack rootfs
112 pack_rootfs()
113 {
114 ( cd $1 ; find . -print | cpio -o -H newc ) | \
115 if [ -x /usr/bin/lzma ]; then
116 info "Generating lzma'ed initramfs... "
117 lzma e -si -so $(lzma_switches $1) > $2
118 else
119 info "Generating gziped initramfs... "
120 gzip -9 > $2
121 fi
122 echo 1 > /tmp/rootfs
123 }
125 download()
126 {
127 for file in $@; do
128 wget -q $file && break
129 done
130 }
132 initramfs () {
134 if [ ! -e "$BASEDIR/initramfs/initramfs.list" ]; then
135 error "error: $BASEDIR/initramfs/initramfs.list doesn't exist, aborting."
136 exit 1
137 fi
139 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
140 if [ -d ${INITRAMFS} ]; then
141 rm -Rf ${INITRAMFS}
142 fi
143 fi
145 if [ ! -d ${INITRAMFS} ]; then
146 mkdir -p $INITRAMFS
147 fi
149 info "Making bootable image"
150 [ -f $LOG/initramfs.log ] && rm -f $LOG/initramfs.log
151 cat "$BASEDIR/initramfs/initramfs.list" | grep -v "^#" | while read pkgname; do
152 if [ ! -f ${INITRAMFS}${INSTALLED}/${pkgname}/files.list ]; then
153 tazpkg get-install $pkgname --root=$INITRAMFS 2>&1 | tee -a $LOG/initramfs.log
154 sleep 1
155 else
156 info "${pkgname} installed" | tee -a $LOG/initramfs.log
157 fi
158 done
160 if [ ! -d $ISODIR/boot ]; then
161 mkdir -p $ISODIR/boot
162 fi
164 #if [ ! -f $ISODIR/boot/bzImage ]; then
165 if [ -f $INITRAMFS/boot/vmlinuz* ]; then
166 cp -a $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
167 rm -f $INITRAMFS/boot/vmlinuz*
168 fi
170 if [ -f $INITRAMFS/boot/gpxe ]; then
171 cp -a $INITRAMFS/boot/gpxe $ISODIR/boot/gpxe
172 rm -f $INITRAMFS/boot/gpxe
173 fi
175 if [ -d $BASEDIR/initramfs ]; then
176 for i in $KEY_FILES; do
177 if [ -f $BASEDIR/initramfs/$i ]; then
178 cp -af $BASEDIR/initramfs/$i $INITRAMFS
179 fi
180 done
181 fi
183 if [ -f $INITRAMFS/liblinuxlive ]; then
184 sed -i "s|^#MIRROR|MIRROR=$MIRROR_DIR|g" $INITRAMFS/liblinuxlive
185 fi
187 }
189 copy_hg() {
190 if [ ! -d ${HG_DIR}/${1}/${HG_PATH}/${1} ]; then
191 info "Cloning $1 repo ..."
192 hg clone $HG_URL/${1} ${HG_DIR}/${1}/${HG_PATH}/${1}
193 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
194 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
195 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
196 fi
197 fi
198 elif [ -d ${HG_DIR}/${1}/${HG_PATH}/${1} -a ${UPDATE_HG} = "yes" ]; then
199 info "Updating $1 repo ..."
200 cd ${HG_DIR}/${1}/${HG_PATH}/${1}
201 hg pull $HG_URL/${1} -u
202 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
203 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
204 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
205 fi
206 fi
207 cd $PROFILE
208 fi
209 }
211 squashfs_hg() {
212 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
213 mkdir -p "$ISODIR/$CDNAME/modules/hg"
214 fi
215 if [ -d ${HG_DIR}/${1}/ ]; then
216 _mksquash ${HG_DIR}/${1} "$ISODIR/$CDNAME/modules/hg/" /${HG_PATH}/${1}
217 fi
218 }
220 slitaz_union () {
222 if [ -d ${MODULES_DIR}/${mod}${INSTALLED} ]; then
223 echo "${mod} module exist. Moving on."
224 elif [ ! -d ${MODULES_DIR}/${mod}${INSTALLED} ]; then
225 if [ -f "$PROFILE/list/${mod}.list" ]; then
226 [ -f ${LOG}/${mod}-current.log ] && rm -f ${LOG}/${mod}-current.log
227 cat "$PROFILE/list/${mod}.list" | grep -v "^#" | while read pkgname; do
228 if [ ! -f ${UNION}${INSTALLED}/${pkgname}/files.list ]; then
229 tazpkg get-install $pkgname --root=${UNION} 2>&1 | tee -a ${LOG}/${mod}-current.log
230 sleep 1
231 else
232 info "${pkgname} installed" | tee -a ${LOG}/${mod}-current.log
233 fi
234 done
235 fi
237 if [ -f $PROFILE/list/${mod}.removelist ]; then
238 [ -f ${LOG}/${mod}-current-removelist.log ] && rm -f ${LOG}/${mod}-current-removelist.log
239 cat "$PROFILE/list/${mod}.removelist" | grep -v "^#" | while read pkgname; do
240 if [ -f ${UNION}${INSTALLED}/${pkgname}/files.list ]; then
241 echo "y" | tazpkg remove ${pkgname} --root=${UNION} 2>&1 | tee -a ${LOG}/${mod}-current-removelist.log
242 sleep 1
243 else
244 info "${pkgname} removed"
245 fi
246 done
247 fi
248 fi
249 }
251 union () {
252 if [ "$BASE_MODULES" != "" ]; then
253 UNION_MODULES="$BASE_MODULES $MODULES"
254 elif [ "$MODULES" != "" ]; then
255 UNION_MODULES="$MODULES"
256 else
257 error "Error: no modules assigned in config for profile."
258 exit 1
259 fi
261 mkdir -p $WORKING
262 mkdir -p $UNION
263 mkdir -p $LOG
264 mkdir -p $ISODIR/${CDNAME}/base
265 mkdir -p $ISODIR/${CDNAME}/modules
266 mkdir -p $ISODIR/${CDNAME}/optional
267 mkdir -p $ISODIR/${CDNAME}/rootcopy
268 mkdir -p $ISODIR/${CDNAME}/tmp
269 mkdir -p $LASTBR
271 touch $SGNFILE
273 modprobe aufs
274 if [ $? -ne 0 ]; then
275 error "Error loading Union filesystem module. (aufs)"
276 exit 1
277 fi
279 # $INITRAMFS is now $LASTBR
280 # This will be copyed to /mnt/memory/changes on boot
281 initramfs
283 mount -t aufs -o br:${LASTBR}=rw aufs ${UNION}
284 if [ $? -ne 0 ]; then
285 error "Error mounting $union."
286 exit 1
287 fi
289 info "====> Installing packages to '$UNION'"
290 for mod in $UNION_MODULES; do
292 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
293 if [ -d $MODULES_DIR/$mod ]; then
294 rm -Rf $MODULES_DIR/$mod
295 fi
296 fi
298 if [ ! -d $MODULES_DIR/$mod ]; then
299 mkdir -p $MODULES_DIR/$mod
300 fi
301 info "Adding $MODULES_DIR/$mod as top branch of union."
302 mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION
303 info "Adding $LASTBR as lower branch of union."
304 mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION
305 LASTBR="$MODULES_DIR/${mod}"
307 slitaz_union
308 done
310 if [ -d ${UNION}/${INSTALLED} ]; then
311 ls ${UNION}/${INSTALLED} | sort > $ISODIR/packages-installed.list
312 fi
314 info "Unmounting union"
315 umount -l "${UNION}"
317 info "Removing unionfs .wh. files."
318 find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \;
319 find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \;
320 }
322 backup_pkg() {
323 if [ "${BACKUP_PACKAGES}" = "yes" ]; then
324 [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR
325 [ -f $LOG/backup_pkg.log ] && rm -rf $LOG/backup_pkg.log
326 mkdir -p $PKGISO_DIR
327 info "Making cooking list based installed packages in union"
328 # this is to filter out packages build by get-
329 # packages that don't exist in repo or wok
330 cat $ISODIR/packages-installed.list | while read pkg; do
331 if [ ! -f $WOK/$pkg/receipt ]; then
332 sed -i "s|$pkg||g" $ISODIR/packages-installed.list
333 fi
334 done
335 local pkg wanted rwanted pkg_VERSION incoming_pkg_VERSION cache_pkg_VERSION
336 cook gen-cooklist $ISODIR/packages-installed.list > $ISODIR/cookorder.list
337 [ -f $PKGS/fullco.txt ] || cook gen-wok-db $WOKHG
338 cookorder=$ISODIR/cookorder.list
339 [ "$BACKUP_ALL" = "yes" ] && cookorder=$PKGS/fullco.txt
340 [ "$BACKUP_ALL" = "yes" ] && cp -a $cookorder $PKGISO_DIR/fullco.txt
341 CACHE_REPOSITORY="$CACHE_DIR/$(cat /etc/slitaz-release)/packages"
342 [ -f $PROFILE/list/backupall.banned ] && cp -a $PROFILE/list/backupall.banned $ISODIR/blocked
344 cat $cookorder | grep -v "^#" | while read pkg; do
345 [ -f "$WOK/$pkg/receipt" ] || continue
346 unset rwanted pkg_VERSION incoming_pkg_VERSION cache_pkg_VERSION
347 rwanted=$(grep $'\t'$pkg$ $PKGS/wanted.txt | cut -f 1)
348 pkg_VERSION="$(grep -m1 -A1 ^$pkg$ $PACKAGES_REPOSITORY/packages.txt | \
349 tail -1 | sed 's/ *//')"
350 incoming_pkg_VERSION="$(grep -m1 -A1 ^$pkg$ $INCOMING_REPOSITORY/packages.txt | \
351 tail -1 | sed 's/ *//')"
352 cache_pkg_VERSION="$(grep -m1 -A1 ^$pkg$ $LOCALSTATE/packages.txt | \
353 tail -1 | sed 's/ *//')"
354 for wanted in $rwanted; do
355 if [ -f $PROFILE/list/backupall.banned ]; then
356 if [ "$BACKUP_ALL" = "yes" ]; then
357 [ $(grep -l "^$wanted$" $PROFILE/list/backupall.banned) ] && continue
358 fi
359 fi
361 if [ -f $INCOMING_REPOSITORY/$wanted-$incoming_pkg_VERSION.tazpkg ]; then
362 info "Backing up $INCOMING_REPOSITORY/$wanted-$incoming_pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
363 ln -sf $INCOMING_REPOSITORY/$wanted-$incoming_pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$incoming_pkg_VERSION.tazpkg
364 elif [ -f $PACKAGES_REPOSITORY/$wanted-$pkg_VERSION.tazpkg ]; then
365 info "Backing up $PACKAGES_REPOSITORY/$wanted-$pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
366 ln -sf $PACKAGES_REPOSITORY/$wanted-$pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$pkg_VERSION.tazpkg
367 elif [ -f $CACHE_REPOSITORY/$Wanted-$cache_pkg_VERSION.tazpkg ]; then
368 info "Backing up $CACHE_REPOSITORY/$wanted-$cache_pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
369 ln -sf $CACHE_REPOSITORY/$wanted-$cache_pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$cache_pkg_VERSION.tazpkg
370 fi
371 done
373 if [ -f $PROFILE/list/backupall.banned ]; then
374 if [ "$BACKUP_ALL" = "yes" ]; then
375 [ $(grep -l "^$pkg$" $PROFILE/list/backupall.banned) ] && continue
376 fi
377 fi
379 if [ -f $INCOMING_REPOSITORY/$pkg-$incoming_pkg_VERSION.tazpkg ]; then
380 info "Backing up $INCOMING_REPOSITORY/$pkg-$incoming_pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
381 ln -sf $INCOMING_REPOSITORY/$pkg-$incoming_pkg_VERSION.tazpkg $PKGISO_DIR/$pkg-$incoming_pkg_VERSION.tazpkg
382 elif [ -f $PACKAGES_REPOSITORY/$pkg-$pkg_VERSION.tazpkg ]; then
383 info "Backing up $PACKAGES_REPOSITORY/$pkg-$pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
384 ln -sf $PACKAGES_REPOSITORY/$pkg-$pkg_VERSION.tazpkg $PKGISO_DIR/$pkg-$pkg_VERSION.tazpkg
385 elif [ -f $CACHE_REPOSITORY/$pkg-$cache_pkg_VERSION.tazpkg ]; then
386 info "Backing up $CACHE_REPOSITORY/$pkg-$cache_pkg_VERSION.tazpkg" | tee -a $LOG/backup_pkg.log
387 ln -sf $CACHE_REPOSITORY/$pkg-$cache_pkg_VERSION.tazpkg $PKGISO_DIR/$pkg-$cache_pkg_VERSION.tazpkg
388 fi
389 done
391 if [ "$SRC_PKG" = "yes" ]; then
392 cat $cookorder | grep -v "^#" | while read pkg; do
393 [ -f "$WOK/$pkg/receipt" ] || continue
394 [ $(grep ^$pkg$ $PROFILE/list/srcpkg.banned) ] && continue
395 for i in $(grep -l "^SOURCE=\"$pkg\"" $WOK/*/receipt); do
396 unset SOURCE TARBALL WANTED PACKAGE VERSION COOK_OPT WGET_URL
397 unset pkg_VERSION incoming_pkg_VERSION cache_pkg_VERSION src_pkg src_ver
398 #source $i
399 src_pkg=$(grep ^PACKAGE= $WOK/$pkg/receipt | cut -d "=" -f 2 | sed -e 's/"//g')
400 src_ver=$(grep ^VERSION= $WOK/$pkg/receipt | cut -d "=" -f 2 | sed -e 's/"//g')
401 [ "$VERSION" = "$src_ver" ] || continue
402 pkg_VERSION="$(grep -m1 -A1 ^$src_pkg$ $PACKAGES_REPOSITORY/packages.txt | \
403 tail -1 | sed 's/ *//')"
404 incoming_pkg_VERSION="$(grep -m1 -A1 ^$src_pkg$ $INCOMING_REPOSITORY/packages.txt | \
405 tail -1 | sed 's/ *//')"
406 cache_pkg_VERSION="$(grep -m1 -A1 ^$src_pkg$ $LOCALSTATE/packages.txt | \
407 tail -1 | sed 's/ *//')"
408 rwanted=$(grep $'\t'$src_pkg$ $PKGS/wanted.txt | cut -f 1)
410 for wanted in $rwanted; do
411 if [ -f $INCOMING_REPOSITORY/$wanted-$incoming_pkg_VERSION.tazpkg ]; then
412 ln -sf $INCOMING_REPOSITORY/$wanted-$incoming_pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$incoming_pkg_VERSION.tazpkg
413 elif [ -f $PACKAGES_REPOSITORY/$wanted-$pkg_VERSION.tazpkg ]; then
414 ln -sf $PACKAGES_REPOSITORY/$wanted-$pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$pkg_VERSION.tazpkg
415 elif [ -f $CACHE_REPOSITORY/$Wanted-$pkg_VERSION.tazpkg ]; then
416 ln -sf $CACHE_REPOSITORY/$wanted-$pkg_VERSION.tazpkg $PKGISO_DIR/$wanted-$pkg_VERSION.tazpkg
417 fi
418 done
420 if [ -f $INCOMING_REPOSITORY/$PACKAGE-$incoming_pkg_VERSION.tazpkg ]; then
421 ln -sf $INCOMING_REPOSITORY/$PACKAGE-$incoming_pkg_VERSION.tazpkg $PKGISO_DIR/$PACKAGE-$incoming_pkg_VERSION.tazpkg
422 elif [ -f $PACKAGES_REPOSITORY/$PACKAGE-$pkg_VERSION.tazpkg ]; then
423 ln -sf $PACKAGES_REPOSITORY/$PACKAGE-$pkg_VERSION.tazpkg $PKGISO_DIR/$PACKAGE-$pkg_VERSION.tazpkg
424 elif [ -f $CACHE_REPOSITORY/$PACKAGE-$cache_pkg_VERSION.tazpkg ]; then
425 ln -sf $CACHE_REPOSITORY/$PACKAGE-$cache_pkg_VERSION.tazpkg $PKGISO_DIR/$PACKAGE-$cache_pkg_VERSION.tazpkg
426 fi
427 done
428 done
429 fi
431 [ -f $LOG/packages-gen-list.log ] && rm -f $LOG/packages-gen-list.log
432 [ -d $PKGISO_DIR ] && cook pkgdb $PKGISO_DIR | tee -a $LOG/packages-gen-list.log
433 fi
435 }
437 backup_src() {
439 if [ "${BACKUP_PACKAGES}" = "yes" -a "${BACKUP_SOURCES}" = "yes" ]; then
440 [ -d $SOURCES_REPOSITORY ] || mkdir -p $SOURCES_REPOSITORY
441 [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR
442 mkdir -p $SRCISO_DIR
443 local pkg cookorder pkg_VERSION
444 cookorder=$ISODIR/cookorder.list
445 [ "$BACKUP_ALL" = "yes" ] && cookorder=$PKGS/fullco.txt
446 [ -f $LOG/cook-getsrc.log ] && rm -rf $LOG/cook-getsrc.log
447 [ -f $LOG/backup_src.log ] && rm -rf $LOG/backup_src.log
448 cat $cookorder | grep -v "^#" | while read pkg; do
449 if [ -f $PROFILE/list/backupall.banned ]; then
450 if [ "$BACKUP_ALL" = "yes" ]; then
451 [ $(grep -l "^$pkg$" $PROFILE/list/backupall.banned) ] && continue
452 fi
453 fi
454 unset PATCH SOURCE TARBALL WANTED PACKAGE VERSION COOK_OPT WGET_URL KBASEVER
455 unset pkg_VERSION
456 [ -f $WOK/$pkg/receipt ] || continue
457 source $WOK/$pkg/receipt
458 [ "$WGET_URL" ] || continue
459 [ "$TARBALL" ] || continue
460 pkg_VERSION="$(grep -m1 -A1 ^$pkg$ $PKGISO_DIR/packages.txt | \
461 tail -1 | sed 's/ *//')"
462 [ -f "$PKGISO_DIR/$PACKAGE-$pkg_VERSION.tazpkg" ] || continue
463 #{ [ ! "$TARBALL" ] || [ ! "$WGET_URL" ] ; } && continue
464 LZMA_TARBALL="${SOURCE:-$PACKAGE}-${KBASEVER:-$VERSION}.tar.lzma"
465 if [ "$PATCH" ]; then
466 if [ -f "$SOURCES_REPOSITORY/$(basename $PATCH)" ]; then
467 info "Backing up $SOURCES_REPOSITORY/$(basename $PATCH)" | tee -a $LOG/backup_src.log
468 ln -sf $SOURCES_REPOSITORY/$(basename $PATCH) $SRCISO_DIR/$(basename $PATCH)
469 else
470 cook $PACKAGE --getsrc | tee -a $LOG/cook-getsrc.log
471 if [ -f "$SOURCES_REPOSITORY/$(basename $PATCH)" ]; then
472 info "Backing up $SOURCES_REPOSITORY/$(basename $PATCH)" | tee -a $LOG/backup_src.log
473 ln -sf $SOURCES_REPOSITORY/$(basename $PATCH) $SRCISO_DIR/$(basename $PATCH)
474 fi
475 fi
476 fi
477 if [ -f "$SOURCES_REPOSITORY/$LZMA_TARBALL" ]; then
478 info "Backing up $SOURCES_REPOSITORY/$LZMA_TARBALL" | tee -a $LOG/backup_src.log
479 ln -sf $SOURCES_REPOSITORY/$LZMA_TARBALL $SRCISO_DIR/$LZMA_TARBALL
480 elif [ -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
481 info "Backing up $SOURCES_REPOSITORY/$TARBALL" | tee -a $LOG/backup_src.log
482 ln -sf $SOURCES_REPOSITORY/$TARBALL $SRCISO_DIR/$TARBALL
483 else
484 cook $PACKAGE --getsrc | tee -a $LOG/cook-getsrc.log
485 if [ -f "$SOURCES_REPOSITORY/$TARBALL" ]; then
486 info "Backing up $SOURCES_REPOSITORY/$TARBALL" | tee -a $LOG/backup_src.log
487 ln -sf $SOURCES_REPOSITORY/$TARBALL $SRCISO_DIR/$TARBALL
488 elif [ -f "$SOURCES_REPOSITORY/$LZMA_TARBALL" ]; then
489 info "Backing up $SOURCES_REPOSITORY/$LZMA_TARBALL" | tee -a $LOG/backup_src.log
490 ln -sf $SOURCES_REPOSITORY/$LZMA_TARBALL $SRCISO_DIR/$LZMA_TARBALL
491 fi
492 fi
493 done
494 cd $SRCISO_DIR
495 info "Make md5sum file for sources"
496 find * -not -type d -print0 | xargs -0 md5sum | grep -v md5sum > md5sum
497 cd $WORKING
498 fi
500 }
502 # _mksquash dirname
503 _mksquash () {
504 if [ ! -d "$1" ]; then
505 error "Error: '$1' is not a directory"
506 return 1
507 fi
509 if [ ! -d "$2" ]; then
510 error "Error: '$2' is not a directory"
511 return 1
512 fi
514 if [ ! -d "${1}${3}" ]; then
515 error "Error: '${1}${3}' is not a directory"
516 return 1
517 fi
519 time_dir="${3}"
520 sqimg="${2}/$(basename ${1}).${EXT}"
521 info "====> Generating SquashFS image for '${1}'"
522 if [ -e "${sqimg}" ]; then
523 dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
524 if [ "${dirhaschanged}" != "" ]; then
525 info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
526 rm "${sqimg}"
527 else
528 info "SquashFS image '${sqimg}' is up to date, skipping."
529 return
530 fi
531 fi
533 info "Creating SquashFS image. This may take some time..."
534 start=$(date +%s)
535 if [ "${QUIET}" = "y" ]; then
536 mksquashfs "${1}" "${sqimg}" ${NCPU} -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null
537 else
538 mksquashfs "${1}" "${sqimg}" ${NCPU} -noappend ${MKOPTION} -comp ${COMPRESSION}
539 fi
540 minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }')
541 info "Image creation done in $minutes minutes."
542 }
544 imgcommon () {
545 for MOD in ${BASE_MODULES}; do
546 if [ -d "${MODULES_DIR}/${MOD}" ]; then
547 _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/base" $INSTALLED
548 fi
549 done
551 if [ "${MODULES}" != "" ]; then
552 for MOD in ${MODULES}; do
553 if [ -d "${MODULES_DIR}/${MOD}" ]; then
554 _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/modules" $INSTALLED
555 fi
556 done
557 fi
559 if [ "$HG_LIST" != "" ]; then
560 if [ "$COPY_HG" = "yes" ]; then
561 for hg in $HG_LIST; do
562 copy_hg $hg
563 squashfs_hg $hg
564 done
565 fi
566 fi
568 if [ "$MY_HG_LIST" != "" ]; then
569 if [ "$COPY_HG" = "yes" ]; then
570 for my_hg in $MY_HG_LIST; do
571 HG_URL="$MY_HG_URL"
572 copy_hg $my_hg
573 WOK=${HG_DIR}/wok-tank/repos/wok-tank
574 if [ -d $WOK/.hg ]; then
575 cd $WOK
576 if [ "$(hg branch)" != "cooking" ]; then
577 hg update cooking
578 fi
579 cd $PROFILE
580 fi
581 squashfs_hg $my_hg
582 done
583 fi
584 fi
586 if [ "$DONT_UPDATE_MIRROR" = "no" ]; then
587 [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR
588 [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR
589 if [ -d ${HG_DIR}/wok-tank/repos/wok-tank/.hg ]; then
590 WOK=${HG_DIR}/wok-tank/repos/wok-tank
591 backup_pkg
592 backup_src
593 elif [ -d ${HG_DIR}/wok/repos/wok/.hg ]; then
594 WOK=${HG_DIR}/wok/repos/wok
595 backup_pkg
596 backup_src
597 fi
598 fi
600 info "====> Making bootable image"
602 # Sanity checks
603 if [ ! -d "${ISODIR}" ]; then
604 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
605 exit 1
606 fi
608 if [ ! -f "${SGNFILE}" ]; then
609 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
610 error " Protecting you from yourself and erroring out here..."
611 exit 1
612 fi
615 if [ -e "${IMGNAME}" ]; then
616 if [ "${FORCE}" = "y" ]; then
617 info "Removing existing bootable image..."
618 rm -rf "${IMGNAME}"
619 else
620 error "Error: Image '${IMGNAME}' already exists, aborting."
621 exit 1
622 fi
623 fi
625 }
627 make_iso () {
628 imgcommon
630 info "Creating rootfs.gz"
631 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
633 if [ -d $PROFILE/rootcd ]; then
634 cp -af $PROFILE/rootcd/* $ISODIR/
635 fi
637 info "Copying isolinux files..."
638 if [ -d $INITRAMFS/boot/isolinux ]; then
639 cp -a $INITRAMFS/boot/isolinux $ISODIR/boot
640 fi
642 if [ -d ${PROFILE}/overlay ]; then
643 _overlay
644 fi
646 info "Creating ISO image..."
647 genisoimage -R -l -f -V $VOLUME_ID -o $IMGNAME -b boot/isolinux/isolinux.bin \
648 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
649 -uid 0 -gid 0 \
650 -udf -allow-limited-size -iso-level 3 \
651 -P $PUBLISHER -input-charset utf-8 -boot-info-table $ISODIR
652 if [ -x /usr/bin/isohybrid ]; then
653 info "Creating hybrid ISO..."
654 isohybrid "${IMGNAME}"
655 fi
656 md5sum "$IMGNAME" > $IMGMD5NAME
657 sed -i "s|$PROFILE/||g" $IMGMD5NAME
658 }
660 if [ "$BASE_MODULES" != "" ]; then
661 union
662 else
663 error "BASE_MODULES was empty. exiting."
664 exit 1
665 fi
667 make_iso