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

Updated slitaz-modular script to make subfolders for differnet flavors packages lists. This way you can get a iso to load one of the more basic flavors.
author Christopher Rogers <slaxemulator@gmail.com>
date Tue Apr 12 20:20:45 2011 +0000 (2011-04-12)
parents b4cd8833c2dd
children b4d15139088e
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/config" ]; then
54 echo "$PROFILE/config doesn't exist."
55 exit 1
56 fi
58 cd $PROFILE
60 lzma_switches()
61 {
62 echo "-d$(echo 24) -mt$(grep ^processor < /proc/cpuinfo | wc -l)"
63 }
65 # Pack rootfs
66 pack_rootfs()
67 {
68 ( cd $1 ; find . -print | cpio -o -H newc ) | \
69 if [ -x /usr/bin/lzma ]; then
70 info "Generating lzma'ed initramfs... "
71 lzma e -si -so $(lzma_switches $1) > $2
72 else
73 info "Generating gziped initramfs... "
74 gzip -9 > $2
75 fi
76 echo 1 > /tmp/rootfs
77 }
79 look_for_dep()
80 {
81 grep -m1 ^$1$'\t' $INCOMING_REPOSITORY/wok-depends.txt | \
82 cut -f 2 | sed 's|^[ \t]*||g' | sed 's| |\n|g' | sed '/^$/d'
83 }
85 _overlay()
86 {
87 if [ -d ${MODULES_DIR}/overlay ]; then
88 rm -rf ${MODULES_DIR}/overlay
89 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
90 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
91 else
92 cp -rf ${PROFILE}/overlay ${MODULES_DIR}
93 cp -af ${BASEDIR}/initramfs/* ${MODULES_DIR}/overlay
94 fi
96 if [ -f ${MODULES_DIR}/overlay/etc/local-mirror.conf ]; then
97 sed -i "s|^#PKGDIR|PKGDIR=/packages|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
98 sed -i "s|^#SRCDIR|SRCDIR=/src|g" ${MODULES_DIR}/overlay/etc/local-mirror.conf
99 fi
100 create_module "${MODULES_DIR}/overlay" "${ISODIR}/${CDNAME}/modules/zzz.overlay.${EXT}" >/dev/null
101 }
103 initramfs () {
105 if [ ! -e "$BASEDIR/initramfs/initramfs.list" ]; then
106 error "error: $BASEDIR/initramfs/initramfs.list doesn't exist, aborting."
107 exit 1
108 fi
110 if [ ! -d ${INITRAMFS} ]; then
111 mkdir -p $INITRAMFS
112 fi
114 info "Making bootable image"
115 cat "$BASEDIR/initramfs/initramfs.list" | grep -v "^#" | while read pkgname; do
116 if [ ! -f ${INITRAMFS}/var/lib/tazpkg/installed/${pkgname}/files.list ]; then
117 tazpkg get-install $pkgname --root=$INITRAMFS | tee -a $LOG/initramfs.log
118 echo "$pkgname" >> $ISODIR/packages-order.txt
119 sleep 1
120 else
121 info "${pkgname} installed"
122 fi
123 done
125 if [ ! -d $ISODIR/boot ]; then
126 mkdir -p $ISODIR/boot
127 fi
129 #if [ ! -f $ISODIR/boot/bzImage ]; then
130 cp -a $INITRAMFS/boot/vmlinuz* $ISODIR/boot/bzImage
131 rm -f $INITRAMFS/boot/vmlinuz*
132 if [ -f $INITRAMFS/boot/gpxe ]; then
133 cp -a $INITRAMFS/boot/gpxe $ISODIR/boot/gpxe
134 rm -f $INITRAMFS/boot/gpxe
135 fi
136 #fi
137 if [ -d $BASEDIR/initramfs ]; then
138 for i in $KEY_FILES; do
139 if [ -f $BASEDIR/initramfs/$i ]; then
140 cp -af $BASEDIR/initramfs/$i $INITRAMFS
141 fi
142 done
143 fi
145 if [ -f $INITRAMFS/liblinuxlive ]; then
146 sed -i "s|^#MIRROR|MIRROR=$MIRROR_DIR|g" $INITRAMFS/liblinuxlive
147 fi
149 }
151 copy_hg() {
152 if [ ! -d ${HG_DIR}/${1}/${HG_PATH}/${1} ]; then
153 info "Cloning $1 repo ..."
154 hg clone $HG_URL/${1} ${HG_DIR}/${1}/${HG_PATH}/${1}
155 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
156 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
157 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
158 fi
159 fi
160 elif [ -d ${HG_DIR}/${1}/${HG_PATH}/${1} -a ${UPDATE_HG} = "yes" ]; then
161 info "Updating $1 repo ..."
162 cd ${HG_DIR}/${1}/${HG_PATH}/${1}
163 hg pull $HG_URL/${1} -u
164 if [ $(grep -l "^HG_URL=$HG_URL" $PROFILE/config) ]; then
165 if [ ! $(grep -l "$HG_URL" ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc) ]; then
166 echo "mirror = $HG_URL/$1" >> ${HG_DIR}/${1}/${HG_PATH}/${1}/.hg/hgrc
167 fi
168 fi
169 cd $PROFILE
170 fi
171 }
173 mktaz2xz()
174 {
175 CUR_DIR="$2"
176 local i
178 tazpkg get $1 || exit 1
179 PACKAGE_FILE="$(find -name "$1*.tazpkg")"
180 if [ -f "$PACKAGE_FILE" ]; then
181 { cpio --quiet -i receipt > /dev/null 2>&1; } < $PACKAGE_FILE
182 unset PKGNAME PACKAGE VERSION EXTRAVERSION
183 source receipt || exit 1
184 PKGNAME="${PACKAGE}-${VERSION}${EXTRAVERSION}"
185 tazpkg extract $PKGNAME.tazpkg
186 for i in $INSTALL_FILES; do
187 if [ -f "$PKGNAME/$i" ]; then
188 mkdir -p $PKGNAME/fs/$INSTALLED/$PACKAGE
189 cp -a $PKGNAME/$i $PKGNAME/fs/$INSTALLED/$PACKAGE/$i
190 fi
191 done
192 [ -d $CUR_DIR ] || mkdir $CUR_DIR
193 md5sum $PKGNAME.tazpkg > $PKGNAME/fs/$INSTALLED/$PACKAGE/pkgmd5
194 create_module $PKGNAME/fs $CUR_DIR/$PKGNAME.$EXT /var/lib/tazpkg/installed
195 fi
196 }
198 backup_all()
199 {
200 if [ "${BACKUP_ALL}" = "yes" ]; then
201 [ -d $SRCISO_DIR ] || ln -sf $SOURCES_REPOSITORY $SRCISO_DIR
202 [ -d $PKGISO_DIR ] || ln -sf $PACKAGES_REPOSITORY $PKGISO_DIR
203 fi
204 }
206 create_module()
207 {
208 if [ ! -d "$1" ]; then
209 error "Error: '$1' is not a directory"
210 return 1
211 fi
213 #if [ -d "${1}${3}" ]; then
214 # time_dir="${3}"
215 # sqimg="${2}/$(basename ${1}).${EXT}"
216 # info "====> Generating SquashFS image for '${1}'"
217 # if [ -e "${sqimg}" ]; then
218 # dirhaschanged=$(find ${1}${time_dir} -newer ${sqimg})
219 # if [ "${dirhaschanged}" != "" ]; then
220 # info "SquashFS image '${sqimg}' is not up to date, rebuilding..."
221 # rm -f "${sqimg}"
222 # else
223 # info "SquashFS image '${sqimg}' is up to date, skipping."
224 # return
225 # fi
226 # fi
227 #fi
228 rm -f "$2" # overwrite, never append to existing file
229 mksquashfs "$1" "$2" -b 256K -comp $COMPRESSION >/dev/null
230 if [ $? -ne 0 ]; then return 1; fi
231 chmod a-wx "$2" # remove execute and write attrib
232 chmod a+r "$2" # add read for everyone
233 }
235 squashfs_hg() {
236 if [ ! -d "$ISODIR/$CDNAME/modules/hg" ]; then
237 mkdir -p "$ISODIR/$CDNAME/modules/hg"
238 fi
239 if [ -d ${HG_DIR}/${1}/ ]; then
240 create_module ${HG_DIR}/${1} "$ISODIR/$CDNAME/modules/hg/" /${HG_PATH}/${1}
241 fi
242 }
244 pkg_flavors_modules()
245 {
246 local i
247 for i in $(cat $PROFILE/list/${flavors}.list); do
248 look_for_dep $i > /tmp/deps
249 if [ "$(cat /tmp/deps)" != "" ]; then
250 cat /tmp/deps | while read d; do
251 if [ ! $(grep "^$d$" $ISODIR/packages-order.txt) ]; then
252 [ -d $MODULES_DIR/$d ] || mkdir -p $MODULES_DIR/$d
253 [ -f $MODULES_DIR/$d/receipt ] && continue
254 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
255 if [ -d $MODULES_DIR/$d ]; then
256 rm -Rf $MODULES_DIR/$d
257 fi
258 fi
259 info "Make module of depend package $i"
260 echo "$d" >> $ISODIR/packages-order.txt
261 cd $MODULES_DIR/$d
262 mktaz2xz $d $ISODIR/$CDNAME/base/$flavors
263 cd $PROFILE
264 fi
265 done
266 fi
267 if [ ! $(grep "^$i$" $ISODIR/packages-order.txt) ]; then
268 [ -d $MODULES_DIR/$i ] || mkdir -p $MODULES_DIR/$i
269 [ -f $MODULES_DIR/$i/receipt ] && continue
270 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
271 if [ -d $MODULES_DIR/$i ]; then
272 rm -Rf $MODULES_DIR/$i
273 fi
274 fi
275 echo "$i" >> $ISODIR/packages-order.txt
276 info "Make module of main package $i"
277 cd $MODULES_DIR/$i
278 mktaz2xz $i $ISODIR/$CDNAME/base/$flavors
279 cd $PROFILE
280 fi
281 done
282 }
284 build_modules()
285 {
286 mkdir -p $WORKING
287 mkdir -p $LOG
288 mkdir -p $ISODIR/${CDNAME}/base
289 mkdir -p $ISODIR/${CDNAME}/modules
290 mkdir -p $ISODIR/${CDNAME}/optional
291 mkdir -p $ISODIR/${CDNAME}/rootcopy
292 mkdir -p $ISODIR/${CDNAME}/tmp
294 touch $SGNFILE
296 if [ "$CLEAN_MODULES_DIR" = "yes" ]; then
297 [ -f $ISODIR/packages-order.txt ] && rm -f $ISODIR/packages-order.txt
298 touch $ISODIR/packages-order.txt
299 fi
301 if [ "$CLEAN_INITRAMFS" = "yes" ]; then
302 if [ -d ${INITRAMFS} ]; then
303 rm -Rf ${INITRAMFS}
304 fi
305 fi
307 if [ ! -d $INITRAMFS ]; then
308 initramfs
309 fi
311 if [ ! -d $SLITAZ_DIR/repos/wok ]; then
312 hg clone $HG_URL/wok $SLITAZ_DIR/repos/wok
313 fi
315 [ -d $INCOMING_REPOSITORY ] || mkdir -p $INCOMING_REPOSITORY
316 tazwok gen-wok-db --WOK=$SLITAZ_DIR/repos/wok
318 local i
319 for flavors in $FLAVORS_LIST; do
320 if [ -f "$PROFILE/list/${flavors}.list" ]; then
321 pkg_flavors_modules
322 fi
323 done
325 }
327 imgcommon () {
329 build_modules
331 if [ "$HG_LIST" != "" ]; then
332 if [ "$COPY_HG" = "yes" ]; then
333 for hg in $HG_LIST; do
334 copy_hg $hg
335 squashfs_hg $hg
336 done
337 fi
338 fi
340 if [ "${HG_LIST}" != "" ]; then
341 for hg in ${HG_LIST}; do
342 if [ -d "${MODULES_DIR}/${hg}" ]; then
343 squashfs_hg $hg
344 fi
345 done
346 fi
348 [ -d $SRCISO_DIR ] && rm -r $SRCISO_DIR
349 [ -d $PKGISO_DIR ] && rm -r $PKGISO_DIR
351 if [ -d ${HG_DIR}/wok ]; then
352 backup_pkg
353 backup_src
354 fi
356 backup_all
358 info "====> Making bootable image"
360 # Sanity checks
361 if [ ! -d "${ISODIR}" ]; then
362 error "Error: '${ISODIR}' doesn't exist. What did you do?!"
363 exit 1
364 fi
366 if [ ! -f "${SGNFILE}" ]; then
367 error "Error: the ${SGNFILE} file doesn't exist. This image won't do anything"
368 error " Protecting you from yourself and erroring out here..."
369 exit 1
370 fi
373 if [ -e "${IMGNAME}" ]; then
374 if [ "${FORCE}" = "y" ]; then
375 info "Removing existing bootable image..."
376 rm -rf "${IMGNAME}"
377 else
378 error "Error: Image '${IMGNAME}' already exists, aborting."
379 exit 1
380 fi
381 fi
383 }
385 make_iso () {
386 imgcommon
388 info "Creating rootfs.gz"
389 pack_rootfs $INITRAMFS $ISODIR/boot/rootfs.gz
391 if [ -d $PROFILE/rootcd ]; then
392 cp -af $PROFILE/rootcd/* $ISODIR/
393 fi
395 info "Copying isolinux files..."
396 if [ -d $INITRAMFS/boot/isolinux ]; then
397 mv -f $INITRAMFS/boot/isolinux $ISODIR/boot
398 fi
400 if [ -d ${PROFILE}/overlay ]; then
401 _overlay
402 fi
404 info "Creating ISO image..."
405 genisoimage -R -l -f -o $IMGNAME -b boot/isolinux/isolinux.bin \
406 -c boot/isolinux/boot.cat -no-emul-boot -boot-load-size 4 \
407 -uid 0 -gid 0 \
408 -udf -allow-limited-size -iso-level 3 \
409 -V "SliTaz" -input-charset utf-8 -boot-info-table $ISODIR
410 if [ -x /usr/bin/isohybrid ]; then
411 info "Creating hybrid ISO..."
412 isohybrid "${IMGNAME}"
413 fi
414 md5sum "$IMGNAME" > $IMGMD5NAME
415 sed -i "s|$PROFILE/||g" $IMGMD5NAME
416 }
418 make_iso