slitaz-modular view mkiso.sh @ rev 12

Added privoxy user to my overlay.
author Christopher Rogers <slaxemulator@gmail.com>
date Mon Dec 13 07:18:56 2010 +0000 (2010-12-13)
parents 22221b54a22c
children fa6021ca8dbe
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 if [ ! -d ${INITRAMFS} ]; then
110 mkdir -p $INITRAMFS
111 fi
113 info "Making bootable image"
114 cat "$PROFILE/list/initramfs.list" | grep -v "^#" | while read pkgname; do
115 if [ ! -f ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
116 tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log
117 sleep 1
118 else
119 info "${pkgname} installed"
120 fi
121 done
123 if [ ! -d $ISODIR/boot ]; then
124 mkdir -p $ISODIR/boot
125 fi
127 if [ ! -f $ISODIR/boot/bzImage ]; then
128 cp -f $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
129 rm -f $INITRAMFS/boot/vmlinuz*
130 fi
132 info "Copying isolinux files..."
133 if [ -d $INITRAMFS/boot/isolinux ]; then
134 cp -a $INITRAMFS/boot/isolinux $ISODIR/boot
135 fi
137 if [ -d $PROFILE/initramfs ]; then
138 cp -af $PROFILE/initramfs/* $INITRAMFS
139 fi
141 info "Creating rootfs.gz"
142 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
143 }
145 copy_hg() {
146 if [ ! -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
147 info "Cloning $1 repo ..."
148 hg clone http://hg.slitaz.org/$1 ${HG_DIR}/hg-${1}/home/slitaz/hg/$1
149 elif [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 -a ${UPDATE_HG} = "yes" ]; then
150 info "Updating $1 repo ..."
151 cd ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 &&
152 hg pull -u
153 cd $PROFILE
154 fi
155 }
157 squashfs_hg() {
158 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
159 mkdir -p "$ISODIR/$CDNAME/modules/hg"
160 fi
161 if [ -d ${HG_DIR}/hg-${1}/home/slitaz/hg/$1 ]; then
162 _mksquash ${HG_DIR}/hg-${1} "$ISODIR/$CDNAME/modules/hg" /home/slitaz/hg/$1
163 fi
164 }
166 slitaz_union () {
168 if [ -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
169 echo "${mod} module exist. Moving on."
170 elif [ ! -d ${MODULES_DIR}/${mod}/var/lib/tazpkg/installed ]; then
171 if [ -f "$PROFILE/list/${mod}.list" ]; then
172 cat "$PROFILE/list/${mod}.list" | grep -v "^#" | while read pkgname; do
173 if [ ! -f ${UNION}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
174 tazpkg get-install $pkgname --root=${UNION} | tee -a ${LOG}/${mod}-current.log
175 sleep 1
176 else
177 info "${pkgname} installed"
178 fi
179 done
180 fi
182 if [ -f $PROFILE/list/${mod}.removelist ]; then
183 cat "$PROFILE/list/${mod}.removelist" | grep -v "^#" | while read pkgname; do
184 if [ -f ${UNION}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
185 echo "y" | tazpkg remove ${pkgname} --root=${UNION} | tee -a ${LOG}/${mod}-current.log
186 sleep 1
187 else
188 info "${pkgname} removed"
189 fi
190 done
191 fi
192 fi
193 }
195 union () {
196 mkdir -p $WORKING
197 mkdir -p $UNION
198 mkdir -p $LOG
199 mkdir -p $ISODIR/${CDNAME}/base
200 mkdir -p $ISODIR/${CDNAME}/modules
201 mkdir -p $ISODIR/${CDNAME}/optional
202 mkdir -p $ISODIR/${CDNAME}/rootcopy
203 mkdir -p $ISODIR/${CDNAME}/tmp
204 mkdir -p $LASTBR
205 touch $SGNFILE
207 modprobe aufs
208 if [ $? -ne 0 ]; then
209 error "Error loading Union filesystem module. (aufs)"
210 exit 1
211 fi
213 mount -t aufs -o br:${LASTBR}=rw aufs ${UNION}
214 if [ $? -ne 0 ]; then
215 error "Error mounting $union."
216 exit 1
217 fi
219 info "====> Installing packages to '$UNION'"
220 for mod in $MODULES; do
222 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
223 if [ -d $MODULES_DIR/$mod ]; then
224 rm -Rf $MODULES_DIR/$mod
225 fi
226 fi
228 if [ ! -d $MODULES_DIR/$mod ]; then
229 mkdir -p $MODULES_DIR/$mod
230 fi
231 info "Adding $MODULES_DIR/$mod as top branch of union."
232 mount -t aufs -o remount,add:0:${MODULES_DIR}/${mod}=rw aufs $UNION
233 info "Adding $LASTBR as lower branch of union."
234 mount -t aufs -o remount,mod:${LASTBR}=rr+wh aufs $UNION
235 LASTBR="$MODULES_DIR/${mod}"
237 slitaz_union
238 done
240 info "Unmounting union"
241 umount -l "${UNION}"
243 info "Removing unionfs .wh. files."
244 find ${MODULES_DIR} -type f -name ".wh.*" -exec rm {} \;
245 find ${MODULES_DIR} -type d -name ".wh.*" -exec rm -rf {} \;
246 }
249 # _mksquash dirname
250 _mksquash () {
251 if [ ! -d "$1" ]; then
252 error "Error: '$1' is not a directory"
253 return 1
254 fi
256 if [ ! -d "$2" ]; then
257 error "Error: '$2' is not a directory"
258 return 1
259 fi
261 if [ ! -d "${1}${3}" ]; then
262 error "Error: '${1}${3}' is not a directory"
263 return 1
264 fi
266 time_dir="${3}"
267 sqimg="${2}/$(basename ${1}).${EXT}"
268 info "====> Generating SquashFS image for '${1}'"
269 if [ -e "${sqimg}" ]; then
270 dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
271 if [ "${dirhaschanged}" != "" ]; then
272 info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
273 rm "${sqimg}"
274 else
275 info "SquashFS image '${sqimg}' is up to date, skipping."
276 return
277 fi
278 fi
280 info "Creating SquashFS image. This may take some time..."
281 start=$(date +%s)
282 if [ "${QUIET}" = "y" ]; then
283 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION} >/dev/null
284 else
285 mksquashfs "${1}" "${sqimg}" -noappend ${MKOPTION} -comp ${COMPRESSION}
286 fi
287 minutes=$(echo $start $(date +%s) | awk '{ printf "%0.2f",($2-$1)/60 }')
288 info "Image creation done in $minutes minutes."
289 }
291 imgcommon () {
292 if [ "${MODULES}" != "" ]; then
293 for MOD in ${MODULES}; do
294 if [ -d "${MODULES_DIR}/${MOD}" ]; then
295 _mksquash "${MODULES_DIR}/${MOD}" "$ISODIR/$CDNAME/base" /var/lib/tazpkg/installed
296 fi
297 done
298 fi
300 if [ "$HG_LIST" != "" ]; then
301 if [ "$COPY_HG" = "yes" ]; then
302 for hg in $HG_LIST; do
303 copy_hg $hg
304 squashfs_hg $hg
305 done
306 fi
307 fi
309 if [ "${HG_LIST}" != "" ]; then
310 for hg in ${HG_LIST}; do
311 if [ -d "${MODULES_DIR}/hg-${hg}" ]; then
312 squashfs_hg $hg
313 fi
314 done
315 fi
317 info "====> Making bootable image"
319 # Sanity checks
320 if [ ! -d "${ISODIR}" ]; then
321 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
322 exit 1
323 fi
325 if [ ! -f "${SGNFILE}" ]; then
326 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
327 error " Protecting you from yourself and erroring out here..."
328 exit 1
329 fi
332 if [ -e "${IMGNAME}" ]; then
333 if [ "${FORCE}" = "y" ]; then
334 info "Removing existing bootable image..."
335 rm -rf "${IMGNAME}"
336 else
337 error "Error: Image '${IMGNAME}' already exists, aborting."
338 exit 1
339 fi
340 fi
342 }
344 make_iso () {
345 imgcommon
346 initramfs
348 if [ -d ${PROFILE}/overlay ]; then
349 _overlay
350 fi
352 info "Creating ISO image..."
353 genisoimage -R -o $IMGNAME -b boot/isolinux/isolinux.bin \
354 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
355 -V "SliTaz" -input-charset iso8859-1 -boot-info-table $ISODIR
356 if [ -x /usr/bin/isohybrid ]; then
357 info "Creating hybrid ISO..."
358 isohybrid "${IMGNAME}"
359 fi
360 md5sum "${IMGNAME}" > $IMGMD5NAME
361 }
363 if [ "$MODULES" != "" ]; then
364 union
365 else
366 error "MODULES was empty. exiting."
367 exit 1
368 fi
370 make_iso