slitaz-modular view mkiso.sh @ rev 119

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