Magellan Linux

Contents of /trunk/mlivecdbuild/mlivecdbuild2.sh

Parent Directory Parent Directory | Revision Log Revision Log


Revision 2122 - (show annotations) (download) (as text)
Thu May 16 13:23:45 2013 UTC (10 years, 11 months ago) by niro
File MIME type: application/x-sh
File size: 17087 byte(s)
-use museradd provided by to be busbox-compat
1 #!/bin/bash
2
3 # some default settings - gets overidden with the profile config
4 CDPROFILE="$2"
5 [[ -z ${CDPROFILE} ]] && CDPROFILE="default"
6 LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}"
7 CDCHROOTDIR="${LIVECDROOT}/chroot"
8 CDISONAME="livecd-${CDPROFILE}.iso"
9 CDISOROOT="${LIVECDROOT}/isoroot"
10 CDKERNELNAME="magelive"
11 CDHOSTNAME="livecd-${CDPROFILE}"
12 MAGERC="/etc/mage.rc"
13 MAGE_PROFILE="$(basename $(readlink /etc/mage-profile))"
14 #TOOLCHAIN=toolchain
15 BASESYSTEM=livecdsystem26
16 CDID="mlcd-$(date +%F-%k%M)"
17
18 # global profile pathes
19 PROFILES_DIR="/usr/lib/mlivecdbuild/profiles"
20 GLOBAL_PROFILE="${PROFILES_DIR}/global"
21
22 # get full path to isolinux.bin, may vary on multilib systems
23 if [[ -f /usr/share/syslinux/isolinux.bin ]]
24 then
25 ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin
26 elif [[ -f /usr/lib64/mkinitrd/isolinux.bin ]]
27 then
28 ISOLINUX_BIN=/usr/lib64/mkinitrd/isolinux.bin
29 else
30 ISOLINUX_BIN=/usr/lib/mkinitrd/isolinux.bin
31 fi
32
33 die() { echo "ERROR: $@"; exit 1; }
34
35 # get_profile $filename
36 get_profile()
37 {
38 local file="$1"
39
40 if [[ -z ${file} ]] || [[ ! -e ${PROFILES_DIR}/${CDPROFILE}/${file} ]]
41 then
42 echo "${GLOBAL_PROFILE}/${file}"
43 return 0
44 fi
45
46 echo "${PROFILES_DIR}/${CDPROFILE}/${file}"
47 }
48
49 bootstrap_system()
50 {
51 mage-bootstrap \
52 --root "${CDCHROOTDIR}" \
53 --magerc "${MAGERC}" \
54 --profile "${MAGE_PROFILE}" \
55 --toolchain "${TOOLCHAIN}" \
56 --basesystem "${BASESYSTEM}" \
57 --update-tarball \
58 || die "bootstrapping toolchain"
59 }
60
61 custom_services()
62 {
63 local cmd="$1"
64 local services="$2"
65 local systemdcmd
66
67 case ${cmd} in
68 add|del|default)
69 # add given services from profile
70 if [[ -n ${services} ]]
71 then
72 local i
73 for i in ${services}
74 do
75 # systemd
76 if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]]
77 then
78 case ${cmd} in
79 add) chroot ${CDCHROOTDIR} systemctl enable ${i} ;;
80 del) chroot ${CDCHROOTDIR} systemctl disable ${i} ;;
81 default)
82 # convert targets
83 case ${i} in
84 2|3|multi-user) service="multi-user.target" ;;
85 5|graphical) service="graphical.target" ;;
86 esac
87 chroot ${CDCHROOTDIR} systemctl enable ${i} ;;
88 esac
89 fi
90 # busybox and sysvinit
91 if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]] && [[ ! -x ${CDCHROOTDIR}/bin/systemctl ]] && [[ ! -x ${CDCHROOTDIR}/usr/bin/systemctl ]]
92 then
93 MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}"
94 fi
95 done
96 fi
97 ;;
98 *) die "custom_services: unkown command ${cmd}";;
99 esac
100 }
101
102 add_initrc()
103 {
104 local var="$1"
105
106 # sanity checks
107 [[ -z ${CDCHROOTDIR} ]] && die "\$CDCHROOTDIR not given."
108 echo "${var}" >> ${CDCHROOTDIR}/.installrc || die "add_initrc() adding \$var"
109 }
110
111 custom_packages()
112 {
113 local cmd="$1"
114 local packages="$2"
115
116 case ${cmd} in
117 install|uninstall)
118 if [[ -n ${packages} ]]
119 then
120 :> ${CDCHROOTDIR}/.installrc
121
122 # respect proxies
123 [[ -n ${http_proxy} ]] && add_initrc "export http_proxy=${http_proxy}"
124 [[ -n ${ftp_proxy} ]] && add_initrc "export ftp_proxy=${ftp_proxy}"
125 [[ -n ${no_proxy} ]] && add_initrc "export no_proxy=${no_proxy}"
126
127 # do not auto-start any services!
128 add_initrc "export MAGE_BOOTSTRAP=true"
129 add_initrc 'die() { if [ $? -eq 1 ]; then echo "ERROR: $@"; exit 1; fi; }'
130
131 local i
132 for i in ${packages}
133 do
134 add_initrc "mage ${cmd} ${i} || die ${i}"
135 done
136 add_initrc "mage clean"
137
138 # now run the .installrc script
139 mount -t proc proc ${CDCHROOTDIR}/proc || die "mount proc"
140 mount -t sysfs sysfs ${CDCHROOTDIR}/sys || die "mount sys"
141 mount -o bind /dev ${CDCHROOTDIR}/dev || die "mount dev"
142 chroot ${CDCHROOTDIR} /bin/bash -i /.installrc || die "chr00ting"
143 umount ${CDCHROOTDIR}/dev || die "umount dev"
144 umount ${CDCHROOTDIR}/proc || die "umount proc"
145 umount ${CDCHROOTDIR}/sys || die "umount sys"
146 [ -f ${CDCHROOTDIR}/.installrc ] && rm ${CDCHROOTDIR}/.installrc
147 fi
148 ;;
149 *) die "custom_packages: unkown command ${cmd}";;
150 esac
151 }
152
153 read_config()
154 {
155 local file="$1"
156 local pkg
157
158 ( cat ${file}; echo ) | while read pkg
159 do
160 case "${pkg}" in
161 \#*|"") continue ;;
162 esac
163 echo "${pkg}"
164 done
165 }
166
167 prepare_iso()
168 {
169 echo Preparing LiveCD ISO Image ...
170
171 # fixes some issues with xfree/xorg xkb
172 if [[ -L ${CDCHROOTDIR}/etc/X11/xkb ]] &&
173 [[ -d ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ]]
174 then
175 rm ${CDCHROOTDIR}/etc/X11/xkb || die
176 mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11 || die
177 ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb || die
178 fi
179
180 # fix issues with >=dracut-014 which drops some default modules like livecd
181 if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] ||
182 [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] ||
183 [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]]
184 then
185 install -d ${CDCHROOTDIR}/etc/dracut.conf.d || die
186 echo 'add_dracutmodules+=" dmsquash-live "' \
187 > ${CDCHROOTDIR}/etc/dracut.conf.d/02-livecd.conf || die
188 fi
189
190 # only on sysvinit or busybox systems
191 if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
192 then
193 install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die
194 fi
195 if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]]
196 then
197 # check lock group on systemd systems
198 if [[ -z $(chroot ${CDCHROOTDIR} getent group lock) ]]
199 then
200 echo "adding missing group 'lock'"
201 chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 54" lock
202 fi
203 # dbus plugdev group
204 if [[ -z $(chroot ${CDCHROOTDIR} getent group plugdev) ]]
205 then
206 echo "adding missing group 'plugdev'"
207 chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 302" plugdev
208 fi
209 # dbus messagebus group
210 if [[ -z $(chroot ${CDCHROOTDIR} getent group messagebus) ]]
211 then
212 echo "adding missing group 'messagebus'"
213 chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 300" messagebus
214 fi
215 # dbus messagebus user
216 if [[ -z $(chroot ${CDCHROOTDIR} getent passwd messagebus) ]]
217 then
218 echo "adding missing user 'messagebus'"
219 chroot ${CDCHROOTDIR} /usr/lib/mage/museradd -o "-u 300 -g messagebus -d /dev/null -s /bin/false" messagebus
220 fi
221 fi
222 install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die
223 install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die
224 install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die
225 install -m 0644 $(get_profile net.eth0) ${CDCHROOTDIR}/etc/conf.d/net.eth0 || die
226 echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die
227 install -d ${CDCHROOTDIR}/mnt/magellan || die
228
229 echo Setting up services ...
230
231 # install systemd default services
232 if [[ -x ${CDCHROOTDIR}/bin/systemctl ]]
233 then
234 # install tmpfs /tmp and /var/tmp
235 install -m 0644 $(get_profile tmp.mount) ${CDCHROOTDIR}/lib/systemd/system/ || die
236 install -m 0644 $(get_profile var-tmp.mount) ${CDCHROOTDIR}/lib/systemd/system/ || die
237 # enable them
238 ln -snf ../tmp.mount ${CDCHROOTDIR}/lib/systemd/system/local-fs.target.wants/tmp.mount || die
239 ln -snf ../var-tmp.mount ${CDCHROOTDIR}/lib/systemd/system/local-fs.target.wants/var-tmp.mount || die
240 fi
241 # newer systemd goes to /usr/lib
242 if [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]]
243 then
244 # install tmpfs /tmp and /var/tmp
245 install -m 0644 $(get_profile tmp.mount) ${CDCHROOTDIR}/usr/lib/systemd/system/ || die
246 install -m 0644 $(get_profile var-tmp.mount) ${CDCHROOTDIR}/usr/lib/systemd/system/ || die
247 # enable them
248 ln -snf ../tmp.mount ${CDCHROOTDIR}/usr/lib/systemd/system/local-fs.target.wants/tmp.mount || die
249 ln -snf ../var-tmp.mount ${CDCHROOTDIR}/usr/lib/systemd/system/local-fs.target.wants/var-tmp.mount || die
250 fi
251
252 if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]]
253 then
254 install -m 0644 $(get_profile getty) ${CDCHROOTDIR}/etc/conf.d/getty || die
255
256 custom_services add getty@.service
257 custom_services add remote-fs.target
258 # disable readahead
259 custom_services del systemd-readahead-replay.service
260 custom_services del systemd-readahead-collect.service
261 fi
262
263 # # add hardware detection
264 # if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
265 # then
266 # MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect"
267 # fi
268
269 # del checkfs
270 if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]]
271 then
272 MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs"
273 fi
274
275 # add custom packages
276 [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}"
277 [ -f $(get_profile add_packages) ] && custom_packages install "$(read_config $(get_profile add_packages))"
278
279 # del custom packages
280 [[ -n ${DEL_PACKAGES} ]] && custom_packages uninstall "${DEL_PACKAGES}"
281 [ -f $(get_profile del_packages) ] && custom_packages uninstall "$(read_config $(get_profile del_packages))"
282
283 # add given services from profile
284 [[ -n ${ADD_SERVICES} ]] && custom_services add "${ADD_SERVICES}"
285 [ -f $(get_profile add_services) ] && custom_services add "$(read_config $(get_profile add_services))"
286
287 # del given services from profile
288 [[ -n ${DEL_SERVICES} ]] && custom_services del "${DEL_SERVICES}"
289 [ -f $(get_profile del_services) ] && custom_services del "$(read_config $(get_profile del_services))"
290
291 # setup default runlevel
292 [[ -n ${DEFAULT_RUNLEVEL} ]] && custom_services default "${DEFAULT_RUNLEVEL}"
293
294 if [ -f $(get_profile prepare_custom) ]
295 then
296 echo Running custom user script ...
297 source $(get_profile prepare_custom) || die "running custom user script"
298 fi
299
300 echo Cleaning unwanted files ...
301 # do this only if not a symlink!
302 if [[ ! -L ${CDCHROOTDIR}/etc/mtab ]]
303 then
304 :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab"
305 fi
306 [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history
307 }
308
309 generate_rootfs()
310 {
311 local loopdev
312 local size
313
314 if [ -f ${LIVECDROOT}/loop/LiveOS/ext3fs.img ]
315 then
316 rm ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
317 fi
318 if [ -f ${CDISOROOT}/LiveOS/squashfs.img ]
319 then
320 rm ${CDISOROOT}/LiveOS/squashfs.img
321 fi
322 if [ -f ${CDISOROOT}/livecdrootfs.sqsh ]
323 then
324 rm ${CDISOROOT}/livecdrootfs.sqsh
325 fi
326
327 echo Generating squashfs compressed rootfs loopfile ...
328 if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] ||
329 [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] ||
330 [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]]
331 then
332 install -d ${LIVECDROOT}/loop/{LiveOS,mnt} || die
333
334 # get the actual size of the chroot
335 size=$(du -s ${LIVECDROOT}/chroot | sed 's:^\(.*\)[[:space:]].*:\1:')
336
337 # generate a ext3fs file for devicemapper
338 dd if=/dev/zero of=${LIVECDROOT}/loop/LiveOS/ext3fs.img bs=1024 count=$(( ${size} + 10 )) || die
339 # create a filesystem
340 mkfs.ext3 -L "_${CDID}_EXT3" -m 1 -b 1024 -F ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
341 # set mount_counts and check_intervals to 0
342 # set dir_index top, to speed up thing with hashed b-trees
343 # allow acls too
344 tune2fs -c0 -i0 -Odir_index -ouser_xattr,acl ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
345
346 # losetup the device
347 loopdev=$(losetup -f)
348 [[ -z ${loopdev} ]] && die "No unused loopdev found. Maybe you want 'modprobe loop'?"
349
350 # mount the image
351 losetup ${loopdev} ${LIVECDROOT}/loop/LiveOS/ext3fs.img || die
352 mount ${loopdev} ${LIVECDROOT}/loop/mnt || die
353
354 # copy everything to the image file and preserve permissions
355 ( cd ${CDCHROOTDIR} && tar cpf - . ) | ( cd ${LIVECDROOT}/loop/mnt && tar xvpf - )
356 sleep 3
357
358 # now umount everything and create the squashfs image
359 umount ${LIVECDROOT}/loop/mnt || die
360 losetup -d ${loopdev} || die
361 # remove mount to not ending up in the squashfs image
362 if [[ -d ${LIVECDROOT}/loop/mnt ]]
363 then
364 rm -r ${LIVECDROOT}/loop/mnt || die
365 fi
366 mksquashfs ${LIVECDROOT}/loop ${LIVECDROOT}/livecdrootfs.sqsh || die
367
368 # final cleanup
369 if [[ -d ${LIVECDROOT}/loop ]]
370 then
371 rm -r ${LIVECDROOT}/loop || die
372 fi
373 else
374 mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh || die
375 fi
376
377 echo Moving rootfs loopfile to isoroot ...
378 install -d ${CDISOROOT}
379 if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] ||
380 [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] ||
381 [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]]
382 then
383 install -d ${CDISOROOT}/LiveOS
384 mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}/LiveOS/squashfs.img
385 else
386 mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}
387 fi
388 }
389
390 install_bootloader()
391 {
392 echo Installing Bootloader ...
393
394 # iso linux binary
395 install -d ${CDISOROOT}/isolinux
396 install ${ISOLINUX_BIN} ${CDISOROOT}/isolinux || die
397
398 # kernel
399 local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))"
400 install ${CDCHROOTDIR}/boot/${kimg} ${CDISOROOT}/isolinux/${CDKERNELNAME} || die
401
402 install -m 0644 $(get_profile isolinux.cfg) ${CDISOROOT}/isolinux || die
403 install -m 0644 $(get_profile boot.lss) ${CDISOROOT}/isolinux || die
404 install -m 0644 $(get_profile boot.msg) ${CDISOROOT}/isolinux || die
405 install -m 0644 $(get_profile help.msg) ${CDISOROOT}/isolinux || die
406 # support the new layout too
407 if [[ -f $(get_profile index.msg) ]]
408 then
409 install -m 0644 $(get_profile index.msg) ${CDISOROOT}/isolinux || die
410 fi
411 if [[ -f $(get_profile debug.msg) ]]
412 then
413 install -m 0644 $(get_profile debug.msg) ${CDISOROOT}/isolinux || die
414 fi
415
416 return 0
417 }
418
419 generate_initrd()
420 {
421 local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})"
422
423 is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
424 is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
425 is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
426
427 echo Generating initrd image ...
428 echo '#!/bin/bash' > ${CHROOTSH} || die
429 echo 'export LC_ALL=C' >> ${CHROOTSH} || die
430 echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die
431 echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die
432 # prefer dracut
433 echo 'if [[ -x /sbin/dracut ]] || [[ -x /usr/sbin/dracut ]] || [[ -x /usr/bin/dracut ]]' >> ${CHROOTSH} || die
434 echo 'then' >> ${CHROOTSH} || die
435 echo ' dracut -v -f /initrd.gz ${kv}' >> ${CHROOTSH} || die
436 echo 'else' >> ${CHROOTSH} || die
437 echo ' mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die
438 echo 'fi' >> ${CHROOTSH} || die
439 chmod +x ${CHROOTSH} || die
440 chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die
441 [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die
442
443 is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
444 is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
445 is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
446
447 # move initrd to isoroot
448 install -d ${CDISOROOT}/isolinux || die
449 mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die
450 }
451
452 generate_iso()
453 {
454 echo Generating ISO Image ...
455 install -d ${CDISOROOT}
456 pushd ${CDISOROOT} &&
457 mkisofs -rock \
458 -full-iso9660-filenames \
459 -allow-leading-dots \
460 -disable-deep-relocation \
461 -output ${LIVECDROOT}/${CDISONAME} \
462 -eltorito-boot isolinux/isolinux.bin \
463 -eltorito-catalog isolinux/boot.cat \
464 -no-emul-boot \
465 -boot-load-size 4 \
466 -boot-info-table \
467 -volid "${CDID}" \
468 ${CDISOROOT} #&> /dev/null
469 popd
470 }
471
472 enter_livecd()
473 {
474 is_loc_mounted "${CDCHROOTDIR}/sys" || mount -t sysfs sysfs ${CDCHROOTDIR}/sys
475 is_loc_mounted "${CDCHROOTDIR}/proc" || mount -t proc proc ${CDCHROOTDIR}/proc
476 is_loc_mounted "${CDCHROOTDIR}/dev" || mount -o bind /dev ${CDCHROOTDIR}/dev
477
478 chroot ${CDCHROOTDIR} \
479 /usr/bin/env -i \
480 HOME=/root \
481 TERM=$TERM PS1='\u:\w\$ ' \
482 PATH=/bin:/usr/bin:/sbin:/usr/sbin \
483 http_proxy=${http_proxy} \
484 ftp_proxy=${ftp_proxy} \
485 no_proxy=${no_proxy} \
486 /bin/bash -i
487
488 is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
489 is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
490 is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
491 }
492
493 is_loc_mounted()
494 {
495 local filesys
496 local i
497 filesys=$1
498
499 i="$(cat /proc/mounts | grep " ${filesys} " | cut -d ' ' -f2)"
500 [[ ${i} != ${filesys} ]] && return 1
501
502 return 0
503 }
504
505 trap_exit()
506 {
507 is_loc_mounted "${CDCHROOTDIR}/dev" && umount ${CDCHROOTDIR}/dev
508 is_loc_mounted "${CDCHROOTDIR}/proc" && umount ${CDCHROOTDIR}/proc
509 is_loc_mounted "${CDCHROOTDIR}/sys" && umount ${CDCHROOTDIR}/sys
510 }
511
512 usage()
513 {
514 echo "Usage: $(basename $0) [command] [profile] ..."
515 echo
516 echo "Commands:"
517 echo " bootstrap - bootstraps the rootfs for the livecd"
518 echo " prepare - prepare the rootfs to run from a livecd"
519 echo " rootfs - generates the squashfs rootfs image"
520 echo " initrd - generates a livecd suitable initrd"
521 echo " bootloader - installs the bootloader"
522 echo " isogen - generate the final livecd iso image"
523 echo " all - runs all tasks to get a livecd from zero"
524 echo " enter - enters the rootfs of a livecd"
525 echo
526 echo " for example '$(basename $0) all default'"
527 echo " creates a livecd using the default profile."
528 echo
529 }
530
531 # set some proper traps
532 trap "trap_exit" SIGINT SIGQUIT
533
534 # source profile config - overrides all other vars
535 [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config
536
537 case $1 in
538 bootstrap) bootstrap_system;;
539 prepare) prepare_iso;;
540 rootfs) generate_rootfs;;
541 initrd) generate_initrd;;
542 bootloader) install_bootloader;;
543 isogen) generate_iso;;
544 all)
545 bootstrap_system
546 prepare_iso
547 generate_rootfs
548 generate_initrd
549 install_bootloader
550 generate_iso
551 ;;
552 enter) enter_livecd ;;
553 *|'') usage;;
554 esac