#!/bin/bash # some default settings - gets overidden with the profile config CDPROFILE="$1" [[ -z ${CDPROFILE} ]] && CDPROFILE="default" LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}" CDCHROOTDIR="${LIVECDROOT}/chroot" CDISONAME="livecd-${CDPROFILE}.iso" CDISOROOT="${LIVECDROOT}/isoroot" CDKERNELNAME="magelive" CDHOSTNAME="livecd-${CDPROFILE}" MAGERC="/etc/mage.rc" MAGE_PROFILE="$(basename $(readlink /etc/mage-profile))" #TOOLCHAIN=toolchain BASESYSTEM=livecdsystem26 CDID="mlcd-$(date +%F-%k%M)" # global profile pathes PROFILES_DIR="/usr/lib/mlivecdbuild/profiles" GLOBAL_PROFILE="${PROFILES_DIR}/global" die() { echo "ERROR: $@"; exit 1; } # get_profile $filename get_profile() { local file="$1" if [[ -z ${file} ]] || [[ ! -e ${PROFILES_DIR}/${CDPROFILE}/${file} ]] then echo "${GLOBAL_PROFILE}/${file}" return 0 fi echo "${PROFILES_DIR}/${CDPROFILE}/${file}" } bootstrap_system() { mage-bootstrap \ --root "${CDCHROOTDIR}" \ --magerc "${MAGERC}" \ --profile "${MAGE_PROFILE}" \ --toolchain "${TOOLCHAIN}" \ --basesystem "${BASESYSTEM}" \ || die "bootstrapping toolchain" } prepare_iso() { echo Preparing LiveCD ISO Image ... # fixes some issues with xfree/xorg xkb if [ -L "${CDCHROOTDIR}/etc/X11/xkb" -a -d "/usr/X11R6/lib/X11/xkb" ] then rm ${CDCHROOTDIR}/etc/X11/xkb || die mv ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb ${CDCHROOTDIR}/etc/X11 || die ln -s ../../../../etc/X11/xkb ${CDCHROOTDIR}/usr/X11R6/lib/X11/xkb || die fi install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die install -m 0644 $(get_profile fstab) ${CDCHROOTDIR}/etc/fstab || die install -m 0644 $(get_profile motd) ${CDCHROOTDIR}/etc/motd || die install -m 0644 $(get_profile issue) ${CDCHROOTDIR}/etc/issue || die echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die echo Setting up services ... # change mountfs with mountfslivecd MROOT="${CDCHROOTDIR}" rc-config del mountfs || die "rc del mountfs" MROOT="${CDCHROOTDIR}" rc-config add mountfslivecd || die "rc add mountfslivecd" # add hardware detection MROOT="${CDCHROOTDIR}" rc-config add hwdetect || die "rc add hwdetect" # del checkfs MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs" echo Cleaning unwanted files ... :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab" } generate_rootfs() { echo Generating squashfs compressed rootfs loopfile ... mksquashfs ${CDCHROOTDIR} ${LIVECDROOT}/livecdrootfs.sqsh #>/dev/null 2>&1 echo Moving rootfs loopfile to isoroot ... install -d ${CDISOROOT} mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT} } install_bootloader() { echo Installing Bootloader ... # iso linux binary install -d ${CDISOROOT}/isolinux install /usr/lib/mlivecdbuild/isolinux.bin ${CDISOROOT}/isolinux || die # kernel local kimg="$(basename $(readlink ${CDCHROOTDIR}/boot/vmlinuz))" install ${CDCHROOTDIR}/boot/${kimg} ${CDISOROOT}/isolinux/${CDKERNELNAME} || die install -m 0644 $(get_profile isolinux.cfg) ${CDISOROOT}/isolinux || die install -m 0644 $(get_profile boot.lss) ${CDISOROOT}/isolinux || die install -m 0644 $(get_profile boot.msg) ${CDISOROOT}/isolinux || die install -m 0644 $(get_profile help.msg) ${CDISOROOT}/isolinux || die return 0 } generate_initrd() { local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})" echo "DEBUG: ${CHROOTSH}" echo Generating initrd image ... echo '#!/bin/bash' > ${CHROOTSH} || die echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die echo 'mkinitrd-livecd -f --initramfs /initrd.gz ${kv}' >> ${CHROOTSH} || die chmod +x ${CHROOTSH} || die chroot ${CDCHROOTDIR} /$(basename ${CHROOTSH}) || die [[ -f ${CHROOTSH} ]] && rm ${CHROOTSH} || die # move initrd to isoroot install -d ${CDISOROOT}/isolinux || die mv ${CDCHROOTDIR}/initrd.gz ${CDISOROOT}/isolinux || die } generate_iso() { echo Generating ISO Image ... install -d ${CDISOROOT} pushd ${CDISOROOT} && mkisofs -rock \ -full-iso9660-filenames \ -allow-leading-dots \ -disable-deep-relocation \ -output ${LIVECDROOT}/${CDISONAME} \ -eltorito-boot isolinux/isolinux.bin \ -eltorito-catalog isolinux/boot.cat \ -no-emul-boot \ -boot-load-size 4 \ -boot-info-table \ -volid "${CDID}" \ ${CDISOROOT} #&> /dev/null popd } enter_livecd() { mount -t sysfs sysfs ${CDCHROOTDIR}/proc mount -t proc proc ${CDCHROOTDIR}/proc mount -o bind /dev ${CDCHROOTDIR}/dev chroot ${CDCHROOTDIR} \ /usr/bin/env -i \ HOME=/root \ TERM=$TERM PS1='\u:\w\$ ' \ PATH=/bin:/usr/bin:/sbin:/usr/sbin \ /bin/bash -i } # source profile config - overrides all other vars [ -f ${PROFILES_DIR}/${CDPROFILE}/config ] && . ${PROFILES_DIR}/${CDPROFILE}/config bootstrap_system prepare_iso generate_rootfs generate_initrd install_bootloader generate_iso