slitaz-modular view initramfs/usr/bin/slitaz-modular @ rev 62

Make varable i local in mktaz2xz function in slitaz-modular script.
author Christopher Rogers <slaxemulator@gmail.com>
date Tue Apr 12 17:31:51 2011 +0000 (2011-04-12)
parents ce6ee9d73775
children 33965d6fb879
line source
1 #!/bin/sh
3 . /etc/slitaz/slitaz.conf
5 BASEDIR="$LOCAL_REPOSITORY/slitaz-modular"
6 PROFILE="$BASEDIR/$1"
7 WORKING="$BASEDIR/working"
8 CDNAME="slitaz"
9 QUIET="y"
10 FORCE="y"
11 export LABEL="slitaz_${1}_$(date +%Y%m)"
12 PUBLISHER="Slitaz-$1"
13 APPLICATION="Slitaz-$1"
14 EXT="xz"
15 COMPRESSION="xz -Xbcj x86"
16 WORKING="$PROFILE/working"
17 INITRAMFS="$WORKING/initramfs"
18 UNION="$WORKING/union"
19 LOG="$WORKING/log"
20 ISODIR="$WORKING/iso"
21 IMGNAME="$PROFILE/$CDNAME-$1-$(date +%F).iso"
22 IMGMD5NAME="$IMGNAME.md5"
23 SGNFILE="$ISODIR/$CDNAME/livecd.sgn"
24 MODULES_DIR="$WORKING/modules"
25 HG_DIR="$WORKING/hg"
26 HG_URL="http://hg.slitaz.org"
27 HG_PATH="home/slitaz/repos"
28 COPY_HG="no"
29 UPDATE_HG="no"
30 BACKUP_SOURCES="no"
31 BACKUP_PACKAGES="no"
32 MIRROR_DIR="mirror"
33 PKGISO_DIR="$ISODIR/$MIRROR_DIR/packages"
34 SRCISO_DIR="$ISODIR/$MIRROR_DIR/src"
35 BACKUP_ALL="no"
36 KEY_FILES="init liblinuxlive linuxrc"
37 INSTALL_FILES="files.list md5sum receipt volatile.cpio.gz"
38 CLEAN_MODULES_DIR="no"
39 CLEAN_INITRAMFS="no"
40 PACKAGES_REPOSITORY="$LOCAL_REPOSITORY/packages"
41 INCOMING_REPOSITORY="$LOCAL_REPOSITORY/packages-incoming"
42 SOURCES_REPOSITORY="$LOCAL_REPOSITORY/src"
43 HG_LIST="flavors flavors-stable slitaz-base-files slitaz-boot-scripts \
44 slitaz-configs slitaz-dev-tools slitaz-doc slitaz-doc-wiki-data slitaz-forge \
45 slitaz-modular slitaz-pizza slitaz-tools tazlito tazpanel tazpkg tazusb tazweb \
46 tazwok website wok wok-stable wok-tiny wok-undigest"
48 error () { echo -e "\033[1;31;40m!!! \033[1;37;40m$@\033[1;0m"; }
49 warn () { echo -e "\033[1;33;40m*** \033[1;37;40m$@\033[1;0m"; }
50 info () { echo -e "\033[1;32;40m>>> \033[1;37;40m$@\033[1;0m"; }
53 if [ ! -f "$PROFILE/packages.list" ]; then
54 echo "$PROFILE/packages.list doesn't exist."
55 exit 1
56 elif [ ! -f "$PROFILE/config" ]; then
57 echo "$PROFILE/config doesn't exist."
58 exit 1
59 fi
61 cd $PROFILE
63 lzma_switches()
64 {
65 echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)"
66 }
68 # Pack rootfs
69 pack_rootfs()
70 {
71 ( cd $1 ; find . -print | cpio -o -H newc ) | \
72 if [ -x /usr/bin/lzma ]; then
73 info "Generating lzma'ed initramfs... "
74 lzma e -si -so $(lzma_switches $1) > $2
75 else
76 info "Generating gziped initramfs... "
77 gzip -9 > $2
78 fi
79 echo 1 > /tmp/rootfs
80 }
82 look_for_dep()
83 {
84 grep -m1 ^$1$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
85 cut -f 2 | sed 's|^[ \t]*||g' | sed 's| |\n|g' | sed '/^$/d'
86 }
88 _overlay()
89 {
90 if [ -d ${MODULES_DIR}/overlay ]; then
91 rm -rf ${MODULES_DIR}/overlay
92 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
93 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
94 else
95 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
96 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
97 fi
99 if [ -f ${MODULES_DIR}/overlay/etc/local-mirror.conf ]; then
100 sed -i "s|^#PKGDIR|PKGDIR=/packages|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
101 sed -i "s|^#SRCDIR|SRCDIR=/src|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
102 fi
103 create_module "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" >/dev/null
104 }
106 initramfs () {
108 if [ ! -e "$BASEDIR/initramfs/initramfs.list" ]; then
109 error "error: $BASEDIR/initramfs/initramfs.list doesn't exist, aborting."
110 exit 1
111 fi
113 if [ ! -d ${INITRAMFS} ]; then
114 mkdir -p $INITRAMFS
115 fi
117 info "Making bootable image"
118 cat "$BASEDIR/initramfs/initramfs.list" | grep -v "^#" | while read pkgname; do
119 if [ ! -f ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
120 tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log
121 echo "$pkgname" >> $ISODIR/packages-order.txt
122 sleep 1
123 else
124 info "${pkgname} installed"
125 fi
126 done
128 if [ ! -d $ISODIR/boot ]; then
129 mkdir -p $ISODIR/boot
130 fi
132 #if [ ! -f $ISODIR/boot/bzImage ]; then
133 cp -a $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
134 rm -f $INITRAMFS/boot/vmlinuz*
135 if [ -f $INITRAMFS/boot/gpxe ]; then
136 cp -a $INITRAMFS/boot/gpxe $ISODIR/boot/gpxe
137 rm -f $INITRAMFS/boot/gpxe
138 fi
139 #fi
140 if [ -d $BASEDIR/initramfs ]; then
141 for i in $KEY_FILES; do
142 if [ -f $BASEDIR/initramfs/$i ]; then
143 cp -af $BASEDIR/initramfs/$i $INITRAMFS
144 fi
145 done
146 fi
148 if [ -f $INITRAMFS/liblinuxlive ]; then
149 sed -i "s|^#MIRROR|MIRROR=$MIRROR_DIR|g" $INITRAMFS/liblinuxlive
150 fi
152 }
154 copy_hg() {
155 if [ ! -d ${HG_DIR}/${1}/${HG_PATH}/${1} ]; then
156 info "Cloning $1 repo ..."
157 hg clone $HG_URL/${1} ${HG_DIR}/${1}/${HG_PATH}/${1}
158 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
159 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
160 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
161 fi
162 fi
163 elif [ -d ${HG_DIR}/${1}/${HG_PATH}/${1} -a ${UPDATE_HG} = "yes" ]; then
164 info "Updating $1 repo ..."
165 cd ${HG_DIR}/${1}/${HG_PATH}/${1}
166 hg pull $HG_URL/${1} -u
167 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
168 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
169 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
170 fi
171 fi
172 cd $PROFILE
173 fi
174 }
176 mktaz2xz()
177 {
178 CUR_DIR="$2"
179 local i
181 tazpkg get $1 || exit 1
182 PACKAGE_FILE="$(find -name "$1*.tazpkg")"
183 if [ -f "$PACKAGE_FILE" ]; then
184 { cpio --quiet -i receipt > /dev/null 2>&1; } < $PACKAGE_FILE
185 unset PKGNAME PACKAGE VERSION EXTRAVERSION
186 source receipt || exit 1
187 PKGNAME="${PACKAGE}-${VERSION}${EXTRAVERSION}"
188 tazpkg extract $PKGNAME.tazpkg
189 for i in $INSTALL_FILES; do
190 if [ -f "$PKGNAME/$i" ]; then
191 mkdir -p $PKGNAME/fs/$INSTALLED/$PACKAGE
192 cp -a $PKGNAME/$i $PKGNAME/fs/$INSTALLED/$PACKAGE/$i
193 fi
194 done
195 md5sum $PKGNAME.tazpkg > $PKGNAME/fs/$INSTALLED/$PACKAGE/pkgmd5
196 create_module $PKGNAME/fs $CUR_DIR/$PKGNAME.$EXT /var/lib/tazpkg/installed
197 fi
198 }
200 backup_all()
201 {
202 if [ "${BACKUP_ALL}" = "yes" ]; then
203 [ -d $SRCISO_DIR ] || ln -sf $SOURCES_REPOSITORY $SRCISO_DIR
204 [ -d $PKGISO_DIR ] || ln -sf $PACKAGES_REPOSITORY $PKGISO_DIR
205 fi
206 }
208 create_module()
209 {
210 if [ ! -d "$1" ]; then
211 error "Error: '$1' is not a directory"
212 return 1
213 fi
215 #if [ -d "${1}${3}" ]; then
216 # time_dir="${3}"
217 # sqimg="${2}/$(basename ${1}).${EXT}"
218 # info "====> Generating SquashFS image for '${1}'"
219 # if [ -e "${sqimg}" ]; then
220 # dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
221 # if [ "${dirhaschanged}" != "" ]; then
222 # info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
223 # rm -f "${sqimg}"
224 # else
225 # info "SquashFS image '${sqimg}' is up to date, skipping."
226 # return
227 # fi
228 # fi
229 #fi
230 rm -f "$2" # overwrite, never append to existing file
231 mksquashfs "$1" "$2" -b 256K -comp $COMPRESSION >/dev/null
232 if [ $? -ne 0 ]; then return 1; fi
233 chmod a-wx "$2" # remove execute and write attrib
234 chmod a+r "$2" # add read for everyone
235 }
237 squashfs_hg() {
238 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
239 mkdir -p "$ISODIR/$CDNAME/modules/hg"
240 fi
241 if [ -d ${HG_DIR}/${1}/ ]; then
242 create_module ${HG_DIR}/${1} "$ISODIR/$CDNAME/modules/hg/" /${HG_PATH}/${1}
243 fi
244 }
246 build_modules()
247 {
248 mkdir -p $WORKING
249 mkdir -p $LOG
250 mkdir -p $ISODIR/${CDNAME}/base
251 mkdir -p $ISODIR/${CDNAME}/modules
252 mkdir -p $ISODIR/${CDNAME}/optional
253 mkdir -p $ISODIR/${CDNAME}/rootcopy
254 mkdir -p $ISODIR/${CDNAME}/tmp
256 touch $SGNFILE
258 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
259 [ -f $ISODIR/packages-order.txt ] && rm -f $ISODIR/packages-order.txt
260 touch $ISODIR/packages-order.txt
261 fi
263 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
264 if [ -d ${INITRAMFS} ]; then
265 rm -Rf ${INITRAMFS}
266 fi
267 fi
269 if [ ! -d $INITRAMFS ]; then
270 initramfs
271 fi
273 if [ ! -d $SLITAZ_DIR/repos/wok ]; then
274 hg clone $HG_URL/wok $SLITAZ/repos/wok
275 fi
277 [ -d $INCOMING_REPOSITORY ] || mkdir -p $INCOMING_REPOSITORY
278 tazwok gen-wok-db --WOK=$SLITAZ_DIR/repos/wok
280 for i in $(cat $PROFILE/packages.list); do
281 look_for_dep $i > /tmp/deps
282 if [ "$(cat /tmp/deps)" != "" ]; then
283 cat /tmp/deps | while read d; do
284 if [ ! $(grep "^$d$" $ISODIR/packages-order.txt) ]; then
285 [ -d $MODULES_DIR/$d ] || mkdir -p $MODULES_DIR/$d
286 [ -f $MODULES_DIR/$d/receipt ] && continue
287 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
288 if [ -d $MODULES_DIR/$d ]; then
289 rm -Rf $MODULES_DIR/$d
290 fi
291 fi
292 info "Make module of depend package $i"
293 echo "$d" >> $ISODIR/packages-order.txt
294 cd $MODULES_DIR/$d
295 mktaz2xz $d $ISODIR/$CDNAME/base
296 cd $PROFILE
297 fi
298 done
299 fi
300 if [ ! $(grep "^$i$" $ISODIR/packages-order.txt) ]; then
301 [ -d $MODULES_DIR/$i ] || mkdir -p $MODULES_DIR/$i
302 [ -f $MODULES_DIR/$i/receipt ] && continue
303 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
304 if [ -d $MODULES_DIR/$i ]; then
305 rm -Rf $MODULES_DIR/$i
306 fi
307 fi
308 echo "$i" >> $ISODIR/packages-order.txt
309 info "Make module of main package $i"
310 cd $MODULES_DIR/$i
311 mktaz2xz $i $ISODIR/$CDNAME/base
312 cd $PROFILE
313 fi
314 done
316 }
318 imgcommon () {
320 build_modules
322 if [ "$HG_LIST" != "" ]; then
323 if [ "$COPY_HG" = "yes" ]; then
324 for hg in $HG_LIST; do
325 copy_hg $hg
326 squashfs_hg $hg
327 done
328 fi
329 fi
331 if [ "${HG_LIST}" != "" ]; then
332 for hg in ${HG_LIST}; do
333 if [ -d "${MODULES_DIR}/${hg}" ]; then
334 squashfs_hg $hg
335 fi
336 done
337 fi
339 [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR
340 [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR
342 if [ -d ${HG_DIR}/wok ]; then
343 backup_pkg
344 backup_src
345 fi
347 backup_all
349 info "====> Making bootable image"
351 # Sanity checks
352 if [ ! -d "${ISODIR}" ]; then
353 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
354 exit 1
355 fi
357 if [ ! -f "${SGNFILE}" ]; then
358 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
359 error " Protecting you from yourself and erroring out here..."
360 exit 1
361 fi
364 if [ -e "${IMGNAME}" ]; then
365 if [ "${FORCE}" = "y" ]; then
366 info "Removing existing bootable image..."
367 rm -rf "${IMGNAME}"
368 else
369 error "Error: Image '${IMGNAME}' already exists, aborting."
370 exit 1
371 fi
372 fi
374 }
376 make_iso () {
377 imgcommon
379 info "Creating rootfs.gz"
380 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
382 if [ -d $PROFILE/rootcd ]; then
383 cp -af $PROFILE/rootcd/* $ISODIR/
384 fi
386 info "Copying isolinux files..."
387 if [ -d $INITRAMFS/boot/isolinux ]; then
388 mv -f $INITRAMFS/boot/isolinux $ISODIR/boot
389 fi
391 if [ -d ${PROFILE}/overlay ]; then
392 _overlay
393 fi
395 info "Creating ISO image..."
396 genisoimage -R -l -f -o $IMGNAME -b boot/isolinux/isolinux.bin \
397 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
398 -uid 0 -gid 0 \
399 -udf -allow-limited-size -iso-level 3 \
400 -V "SliTaz" -input-charset utf-8 -boot-info-table $ISODIR
401 if [ -x /usr/bin/isohybrid ]; then
402 info "Creating hybrid ISO..."
403 isohybrid "${IMGNAME}"
404 fi
405 md5sum "$IMGNAME" > $IMGMD5NAME
406 sed -i "s|$PROFILE/||g" $IMGMD5NAME
407 }
409 make_iso