slitaz-modular view mkiso.sh @ rev 2

Added CLEAN_INITRAMFS variable into mkiso.sh. Made sure union does run if MODULES in null.
author Christopher Rogers <slaxemulator@gmail.com>
date Fri Nov 26 05:13:44 2010 +0000 (2010-11-26)
parents 6d654d523ac8
children 22221b54a22c
line source
1 #!/bin/sh
3 if [ -f "./tazwok.conf" ]; then
4 . ./tazwok.conf
5 elif [ -f "/etc/tazwok.conf" ]; then
6 . /etc/tazwok.conf
7 else
8 echo -e "\nUnable to find tazwok configuration file : /etc/tazwok.conf"
9 exit 1
10 fi
12 QUIET="y"
13 FORCE="y"
14 export LABEL="slitaz_$(date +%Y%m)"
15 PUBLISHER="Slitaz"
16 APPLICATION="Slitaz"
17 CREATE_DEFAULT="n"
18 PROFILE="$(pwd)"
19 ver=""
20 CDNAME="slitaz"
21 RMSTUFF=n
22 MVSTUFF=n
23 UNGZIP=n
24 EXT="sqfs"
25 COMPRESSION="gzip"
26 MKOPTION="-b 256k"
27 MODULES=""
28 WORKING="$PROFILE/working"
29 INITRAMFS="$WORKING/initramfs"
30 UNION="$WORKING/union"
31 LOG="$WORKING/log"
32 ISODIR="$WORKING/iso"
33 IMGNAME="$PROFILE/$CDNAME-$(date +%F).iso"
34 IMGMD5NAME="$IMGNAME.md5"
35 LASTBR="$WORKING/empty"
36 SGNFILE="$ISODIR/$CDNAME/livecd.sgn"
37 MODULES_DIR="$WORKING/modules"
38 HG_DIR="$WORKING/hg"
39 COPY_HG="no"
40 UPDATE_HG="no"
41 BACKUP_SOURCES="no"
42 BACKUP_PACKAGES="no"
43 CLEAN_MODULES_DIR="no"
44 CLEAN_INITRAMFS="no"
45 HG_LIST="flavors flavors-stable slitaz-base-files slitaz-boot-scripts slitaz-configs slitaz-doc slitaz-pizza slitaz-tools tank tazlito tazpkg tazusb tazwok website wok"
47 error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
48 warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
49 info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }
51 # do UID checking here so someone can at least get usage instructions
52 #if [ "$EUID" != "0" ]; then
53 # error "error: This script must be run as root."
54 # exit 1
55 #fi
57 if [ -f ${PROFILE}/config ]; then
58 source ${PROFILE}/config
59 fi
61 _overlay()
62 {
63 if [ -d ${MODULES_DIR}/overlay ]; then
64 rm -rf ${MODULES_DIR}/overlay
65 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
66 else
67 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
68 fi
70 if [ "${QUIET}" = "y" ]; then
71 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION} >/dev/null
72 else
73 mksquashfs "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" -comp ${COMPRESSION} -noappend ${MKOPTION}
74 fi
75 }
77 lzma_switches()
78 {
79 echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)"
80 }
82 # Pack rootfs
83 pack_rootfs()
84 {
85 ( cd $1 ; find . -print | cpio -o -H newc ) | \
86 if [ -x /usr/bin/lzma ]; then
87 info "Generating lzma'ed initramfs... "
88 lzma e -si -so $(lzma_switches $1) > $2
89 else
90 info "Generating gziped initramfs... "
91 gzip -9 > $2
92 fi
93 echo 1 > /tmp/rootfs
94 }
96 initramfs () {
98 if [ ! -e "$PROFILE/list/initramfs.list" ]; then
99 error "error: $PROFILE/list/initramfs.list doesn't exist, aborting."
100 exit 1
101 fi
103 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
104 if [ -d ${INITRAMFS} ]; then
105 rm -Rf ${INITRAMFS}
106 fi
107 fi
109 info "Making bootable image"
110 cat "$PROFILE/list/initramfs.list" | grep -v "^#" | while read pkgname; do
111 if [ ! -d ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname} ]; then
112 tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log
113 sleep 1
114 else
115 info "${pkgname} installed"
116 fi
117 done
119 if [ ! -d $ISODIR/boot ]; then
120 mkdir -p $ISODIR/boot
121 fi
123 if [ ! -f $ISODIR/boot/bzImage ]; then
124 cp -f $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
125 rm -f $INITRAMFS/boot/vmlinuz*
126 fi
128 info "Copying isolinux files..."
129 if [ -d $INITRAMFS/boot/isolinux ]; then
130 cp -a $INITRAMFS/boot/isolinux $ISODIR/boot
131 fi
133 if [ -d $PROFILE/initramfs ]; then
134 cp -af $PROFILE/initramfs/* $INITRAMFS
135 fi
137 info "Creating rootfs.gz"
138 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
139 }
141 copy_hg() {
142 if [ ! -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
143 info "Cloning $1 repo ..."
144 hg clone http://hg.slitaz.org/$1 ${HG_DIR}/hg-${1}/home/slitaz/hg/$1
145 elif [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 -a ${UPDATE_HG} = "yes" ]; then
146 info "Updating $1 repo ..."
147 cd ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 &&
148 hg pull -u
149 cd $PROFILE
150 fi
151 }
153 squashfs_hg() {
154 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
155 mkdir -p "$ISODIR/$CDNAME/modules/hg"
156 fi
157 if [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
158 _mksquash ${HG_DIR}/hg-${1} "$ISODIR/$CDNAME/modules/hg" /home/slitaz/hg/$1
159 fi
160 }
162 slitaz_union () {
164 if [ -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
165 echo "${mod} module exist. Moving on."
166 elif [ ! -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
167 if [ -f "$PROFILE/list/${mod}.list" ]; then
168 cat "$PROFILE/list/${mod}.list" | grep -v "^#" | while read pkgname; do
169 if [ ! -d ${UNION}/var/lib/tazpkg/installed/${pkgname} ]; then
170 tazpkg get-install $pkgname --root=${UNION} | tee -a ${LOG}/${mod}-current.log
171 sleep 1
172 else
173 info "${pkgname} installed"
174 fi
175 done
176 fi
178 if [ -f $PROFILE/list/${mod}.removelist ]; then
179 cat "$PROFILE/list/${mod}.removelist" | grep -v "^#" | while read pkgname; do
180 if [ -d ${UNION}/var/lib/tazpkg/installed/${pkgname} ]; then
181 echo "y" | tazpkg remove ${pkgname} --root=${UNION} | tee -a ${LOG}/${mod}-current.log
182 sleep 1
183 else
184 info "${pkgname} removed"
185 fi
186 done
187 fi
188 fi
189 }
191 union () {
192 mkdir -p $WORKING
193 mkdir -p $UNION
194 mkdir -p $LOG
195 mkdir -p $INITRAMFS
196 mkdir -p $ISODIR/${CDNAME}/base
197 mkdir -p $ISODIR/${CDNAME}/modules
198 mkdir -p $ISODIR/${CDNAME}/optional
199 mkdir -p $ISODIR/${CDNAME}/rootcopy
200 mkdir -p $ISODIR/${CDNAME}/tmp
201 mkdir -p $LASTBR
202 touch $SGNFILE
204 modprobe aufs
205 if [ $? -ne 0 ]; then
206 error "Error loading Union filesystem module. (aufs)"
207 exit 1
208 fi
210 mount -t aufs -o br:${LASTBR}=rw aufs ${UNION}
211 if [ $? -ne 0 ]; then
212 error "Error mounting $union."
213 exit 1
214 fi
216 info "====> Installing packages to '$UNION'"
217 for mod in $MODULES; do
219 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
220 if [ -d $MODULES_DIR/$mod ]; then
221 rm -Rf $MODULES_DIR/$mod
222 fi
223 fi
225 if [ ! -d $MODULES_DIR/$mod ]; then
226 mkdir -p $MODULES_DIR/$mod
227 fi
228 info "Adding $MODULES_DIR/$mod as top branch of union."
229 mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION
230 info "Adding $LASTBR as lower branch of union."
231 mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION
232 LASTBR="$MODULES_DIR/${mod}"
234 slitaz_union
235 done
237 info "Unmounting union"
238 umount -l "${UNION}"
240 info "Removing unionfs .wh. files."
241 find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \;
242 find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \;
243 }
246 # _mksquash dirname
247 _mksquash () {
248 if [ ! -d "$1" ]; then
249 error "Error: '$1' is not a directory"
250 return 1
251 fi
253 if [ ! -d "$2" ]; then
254 error "Error: '$2' is not a directory"
255 return 1
256 fi
258 if [ ! -d "${1}${3}" ]; then
259 error "Error: '${1}${3}' is not a directory"
260 return 1
261 fi
263 time_dir="${3}"
264 sqimg="${2}/$(basename ${1}).${EXT}"
265 info "====> Generating SquashFS image for '${1}'"
266 if [ -e "${sqimg}" ]; then
267 dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
268 if [ "${dirhaschanged}" != "" ]; then
269 info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
270 rm "${sqimg}"
271 else
272 info "SquashFS image '${sqimg}' is up to date, skipping."
273 return
274 fi
275 fi
277 info "Creating SquashFS image. This may take some time..."
278 start=$(date +%s)
279 if [ "${QUIET}" = "y" ]; then
280 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null
281 else
282 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION}
283 fi
284 minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }')
285 info "Image creation done in $minutes minutes."
286 }
288 imgcommon () {
289 if [ "${MODULES}" != "" ]; then
290 for MOD in ${MODULES}; do
291 if [ -d "${MODULES_DIR}/${MOD}" ]; then
292 _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/base" /var/lib/tazpkg/installed
293 fi
294 done
295 fi
297 if [ "$HG_LIST" != "" ]; then
298 if [ "$COPY_HG" = "yes" ]; then
299 for hg in $HG_LIST; do
300 copy_hg $hg
301 squashfs_hg $hg
302 done
303 fi
304 fi
306 if [ "${HG_LIST}" != "" ]; then
307 for hg in ${HG_LIST}; do
308 if [ -d "${MODULES_DIR}/hg-${hg}" ]; then
309 squashfs_hg $hg
310 fi
311 done
312 fi
314 info "====> Making bootable image"
316 # Sanity checks
317 if [ ! -d "${ISODIR}" ]; then
318 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
319 exit 1
320 fi
322 if [ ! -f "${SGNFILE}" ]; then
323 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
324 error " Protecting you from yourself and erroring out here..."
325 exit 1
326 fi
329 if [ -e "${IMGNAME}" ]; then
330 if [ "${FORCE}" = "y" ]; then
331 info "Removing existing bootable image..."
332 rm -rf "${IMGNAME}"
333 else
334 error "Error: Image '${IMGNAME}' already exists, aborting."
335 exit 1
336 fi
337 fi
339 }
341 make_iso () {
342 imgcommon
343 initramfs
345 if [ -d ${PROFILE}/overlay ]; then
346 _overlay
347 fi
349 info "Creating ISO image..."
350 genisoimage -R -o $IMGNAME -b boot/isolinux/isolinux.bin \
351 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
352 -V "SliTaz" -input-charset iso8859-1 -boot-info-table $ISODIR
353 if [ -x /usr/bin/isohybrid ]; then
354 info "Creating hybrid ISO..."
355 isohybrid "${IMGNAME}"
356 fi
357 md5sum "${IMGNAME}" > $IMGMD5NAME
358 }
360 if [ "$MODULES" != "" ]; then
361 union
362 else
363 error "MODULES was empty. exiting."
364 exit 1
365 fi
367 make_iso