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

Fixed slitaz-modular script to only remove packages-order.txt if CLEAN_MODULES_DIR equals yes. Also made sure to add old code in mkiso.sh script into slitaz-modular script to remove modules folders if CLEAN_MODULES_DIR equals yes.
author Christopher Rogers <slaxemulator@gmail.com>
date Mon Apr 11 13:23:13 2011 +0000 (2011-04-11)
parents 3baad9f857a2
children b4cd8833c2dd
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"
180 tazpkg get $1 || exit 1
181 PACKAGE_FILE="$(find -name "$1*.tazpkg")"
182 if [ -f "$PACKAGE_FILE" ]; then
183 { cpio --quiet -i receipt > /dev/null 2>&1; } < $PACKAGE_FILE
184 unset PKGNAME PACKAGE VERSION EXTRAVERSION
185 source receipt || exit 1
186 PKGNAME="${PACKAGE}-${VERSION}${EXTRAVERSION}"
187 tazpkg extract $PKGNAME.tazpkg
188 for i in $INSTALL_FILES; do
189 if [ -f "$PKGNAME/$i" ]; then
190 mkdir -p $PKGNAME/fs/$INSTALLED/$PACKAGE
191 cp -a $PKGNAME/$i $PKGNAME/fs/$INSTALLED/$PACKAGE/$i
192 fi
193 done
194 md5sum $PKGNAME.tazpkg > $PKGNAME/fs/$INSTALLED/$PACKAGE/pkgmd5
195 create_module $PKGNAME/fs $CUR_DIR/$PKGNAME.$EXT /var/lib/tazpkg/installed
196 fi
197 }
199 backup_all()
200 {
201 if [ "${BACKUP_ALL}" = "yes" ]; then
202 [ -d $SRCISO_DIR ] || ln -sf $SOURCES_REPOSITORY $SRCISO_DIR
203 [ -d $PKGISO_DIR ] || ln -sf $PACKAGES_REPOSITORY $PKGISO_DIR
204 fi
205 }
207 create_module()
208 {
209 if [ ! -d "$1" ]; then
210 error "Error: '$1' is not a directory"
211 return 1
212 fi
214 #if [ -d "${1}${3}" ]; then
215 # time_dir="${3}"
216 # sqimg="${2}/$(basename ${1}).${EXT}"
217 # info "====> Generating SquashFS image for '${1}'"
218 # if [ -e "${sqimg}" ]; then
219 # dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
220 # if [ "${dirhaschanged}" != "" ]; then
221 # info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
222 # rm -f "${sqimg}"
223 # else
224 # info "SquashFS image '${sqimg}' is up to date, skipping."
225 # return
226 # fi
227 # fi
228 #fi
229 rm -f "$2" # overwrite, never append to existing file
230 mksquashfs "$1" "$2" -b 256K -comp $COMPRESSION >/dev/null
231 if [ $? -ne 0 ]; then return 1; fi
232 chmod a-wx "$2" # remove execute and write attrib
233 chmod a+r "$2" # add read for everyone
234 }
236 squashfs_hg() {
237 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
238 mkdir -p "$ISODIR/$CDNAME/modules/hg"
239 fi
240 if [ -d ${HG_DIR}/${1}/ ]; then
241 create_module ${HG_DIR}/${1} "$ISODIR/$CDNAME/modules/hg/" /${HG_PATH}/${1}
242 fi
243 }
245 build_modules()
246 {
247 mkdir -p $WORKING
248 mkdir -p $LOG
249 mkdir -p $ISODIR/${CDNAME}/base
250 mkdir -p $ISODIR/${CDNAME}/modules
251 mkdir -p $ISODIR/${CDNAME}/optional
252 mkdir -p $ISODIR/${CDNAME}/rootcopy
253 mkdir -p $ISODIR/${CDNAME}/tmp
255 touch $SGNFILE
257 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
258 [ -f $ISODIR/packages-order.txt ] && rm -f $ISODIR/packages-order.txt
259 touch $ISODIR/packages-order.txt
260 fi
262 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
263 if [ -d ${INITRAMFS} ]; then
264 rm -Rf ${INITRAMFS}
265 fi
266 fi
268 if [ ! -d $INITRAMFS ]; then
269 initramfs
270 fi
272 if [ ! -d $SLITAZ_DIR/repos/wok ]; then
273 hg clone $HG_URL/wok $SLITAZ/repos/wok
274 fi
276 [ -d $INCOMING_REPOSITORY ] || mkdir -p $INCOMING_REPOSITORY
277 tazwok gen-wok-db --WOK=$SLITAZ_DIR/repos/wok
279 for i in $(cat $PROFILE/packages.list); do
280 look_for_dep $i > /tmp/deps
281 if [ "$(cat /tmp/deps)" != "" ]; then
282 cat /tmp/deps | while read d; do
283 if [ ! $(grep "^$d$" $ISODIR/packages-order.txt) ]; then
284 [ -d $MODULES_DIR/$d ] || mkdir -p $MODULES_DIR/$d
285 [ -f $MODULES_DIR/$d/receipt ] && continue
286 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
287 if [ -d $MODULES_DIR/$d ]; then
288 rm -Rf $MODULES_DIR/$d
289 fi
290 fi
291 info "Make module of depend package $i"
292 echo "$d" >> $ISODIR/packages-order.txt
293 cd $MODULES_DIR/$d
294 mktaz2xz $d $ISODIR/$CDNAME/base
295 cd $PROFILE
296 fi
297 done
298 fi
299 if [ ! $(grep "^$i$" $ISODIR/packages-order.txt) ]; then
300 [ -d $MODULES_DIR/$i ] || mkdir -p $MODULES_DIR/$i
301 [ -f $MODULES_DIR/$i/receipt ] && continue
302 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
303 if [ -d $MODULES_DIR/$i ]; then
304 rm -Rf $MODULES_DIR/$i
305 fi
306 fi
307 echo "$i" >> $ISODIR/packages-order.txt
308 info "Make module of main package $i"
309 cd $MODULES_DIR/$i
310 mktaz2xz $i $ISODIR/$CDNAME/base
311 cd $PROFILE
312 fi
313 done
315 }
317 imgcommon () {
319 build_modules
321 if [ "$HG_LIST" != "" ]; then
322 if [ "$COPY_HG" = "yes" ]; then
323 for hg in $HG_LIST; do
324 copy_hg $hg
325 squashfs_hg $hg
326 done
327 fi
328 fi
330 if [ "${HG_LIST}" != "" ]; then
331 for hg in ${HG_LIST}; do
332 if [ -d "${MODULES_DIR}/${hg}" ]; then
333 squashfs_hg $hg
334 fi
335 done
336 fi
338 [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR
339 [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR
341 if [ -d ${HG_DIR}/wok ]; then
342 backup_pkg
343 backup_src
344 fi
346 backup_all
348 info "====> Making bootable image"
350 # Sanity checks
351 if [ ! -d "${ISODIR}" ]; then
352 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
353 exit 1
354 fi
356 if [ ! -f "${SGNFILE}" ]; then
357 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
358 error " Protecting you from yourself and erroring out here..."
359 exit 1
360 fi
363 if [ -e "${IMGNAME}" ]; then
364 if [ "${FORCE}" = "y" ]; then
365 info "Removing existing bootable image..."
366 rm -rf "${IMGNAME}"
367 else
368 error "Error: Image '${IMGNAME}' already exists, aborting."
369 exit 1
370 fi
371 fi
373 }
375 make_iso () {
376 imgcommon
378 info "Creating rootfs.gz"
379 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
381 if [ -d $PROFILE/rootcd ]; then
382 cp -af $PROFILE/rootcd/* $ISODIR/
383 fi
385 info "Copying isolinux files..."
386 if [ -d $INITRAMFS/boot/isolinux ]; then
387 mv -f $INITRAMFS/boot/isolinux $ISODIR/boot
388 fi
390 if [ -d ${PROFILE}/overlay ]; then
391 _overlay
392 fi
394 info "Creating ISO image..."
395 genisoimage -R -l -f -o $IMGNAME -b boot/isolinux/isolinux.bin \
396 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
397 -uid 0 -gid 0 \
398 -udf -allow-limited-size -iso-level 3 \
399 -V "SliTaz" -input-charset utf-8 -boot-info-table $ISODIR
400 if [ -x /usr/bin/isohybrid ]; then
401 info "Creating hybrid ISO..."
402 isohybrid "${IMGNAME}"
403 fi
404 md5sum "$IMGNAME" > $IMGMD5NAME
405 sed -i "s|$PROFILE/||g" $IMGMD5NAME
406 }
408 make_iso