--- trunk/mlivecdbuild/mlivecdbuild2.sh 2006/03/05 02:18:28 348 +++ trunk/mlivecdbuild/mlivecdbuild2.sh 2006/03/27 21:23:02 360 @@ -1,7 +1,7 @@ #!/bin/bash # some default settings - gets overidden with the profile config -CDPROFILE="$1" +CDPROFILE="$2" [[ -z ${CDPROFILE} ]] && CDPROFILE="default" LIVECDROOT="/mnt/MLIVECDBUILD/${CDPROFILE}" CDCHROOTDIR="${LIVECDROOT}/chroot" @@ -46,6 +46,83 @@ || die "bootstrapping toolchain" } +custom_services() +{ + local cmd="$1" + local services="$2" + + case ${cmd} in + add|del|default) continue;; + *) die "custom_services: unkown command ${cmd}";; + esac + + # add given services from profile + if [[ -n ${services} ]] + then + local i + for i in ${services} + do + MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}" + done + fi +} + +add_initrc() +{ + local var="$1" + + # sanity checks + [ -z "${CDCHROOTDIR}" ] && die "\$CDCHROOTDIR not given." + echo "${var}" >> ${CDCHROOTDIR}/.installrc || die "add_initrc() adding \$var" +} + +custom_packages() +{ + local cmd="$1" + local packages="$2" + + case ${cmd} in + install|uninstall) continue;; + *) die "custom_packages: unkown command ${cmd}";; + esac + + if [[ -n ${packages} ]] + then + + :> ${CDCHROOTDIR}/.installrc + local i + for i in ${packages} + do + add_initrc "mage install ${i}" + done + add_initrc "mage clean" + + # now run the .installrc script + mount -t proc proc ${CDCHROOTDIR}/proc || die "mount proc" + mount -t sysfs sysfs ${CDCHROOTDIR}/sys || die "mount sys" + mount -o bind /dev ${CDCHROOTDIR}/dev || die "mount dev" + chroot ${CDCHROOTDIR} /bin/bash -i /.installrc || die "chr00ting" + umount ${CDCHROOTDIR}/dev || die "umount dev" + umount ${CDCHROOTDIR}/proc || die "umount proc" + umount ${CDCHROOTDIR}/sys || die "umount sys" + [ -f ${CDCHROOTDIR}/.installrc ] && rm ${CDCHROOTDIR}/.installrc + fi +} + +read_config() +{ + local file="$1" + local pkg + + ( cat ${file}; echo ) | while read pkg + do + case "${pkg}" in + \#*|"") continue ;; + esac + echo "${pkg}" + done +} + prepare_iso() { echo Preparing LiveCD ISO Image ... @@ -66,9 +143,10 @@ 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" +# not needed with initscripts 0.3.6-r2 +# # 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" @@ -76,8 +154,34 @@ # del checkfs MROOT="${CDCHROOTDIR}" rc-config del checkfs || die "rc del checkfs" + # add custom packages + [[ -n ${ADD_PACKAGES} ]] && custom_packages install "${ADD_PACKAGES}" + [ -f $(get_profile add_packages) ] && custom_packages install "$(read_config $(get_profile add_packages))" + + # del custom packages + [[ -n ${DEL_PACKAGES} ]] && custom_packages uninstall "${DEL_PACKAGES}" + [ -f $(get_profile del_packages) ] && custom_packages uninstall "$(read_config $(get_profile del_packages))" + + # add given services from profile + [[ -n ${ADD_SERVICES} ]] && custom_services add "${ADD_SERVICES}" + [ -f $(get_profile add_services) ] && custom_services add "$(read_config $(get_profile add_services))" + + # del given services from profile + [[ -n ${DEL_SERVICES} ]] && custom_services del "${DEL_SERVICES}" + [ -f $(get_profile del_services) ] && custom_services del "$(read_config $(get_profile del_services))" + + # setup default runlevel + [[ -n ${DEFAULT_RUNLEVEL} ]] && custom_services default "${DEFAULT_RUNLEVEL}" + + if [ -f $(get_profile prepare_custom) ] + then + echo Running custom user script ... + source $(get_profile prepare_custom) || die "running custom user script" + fi + echo Cleaning unwanted files ... :> ${CDCHROOTDIR}/etc/mtab || die "whiping /etc/mtab" + [ -f ${CDCHROOTDIR}/root/.bash_history ] && rm ${CDCHROOTDIR}/root/.bash_history } generate_rootfs() @@ -113,7 +217,6 @@ generate_initrd() { local CHROOTSH="$(mktemp -p ${CDCHROOTDIR})" - echo "DEBUG: ${CHROOTSH}" echo Generating initrd image ... echo '#!/bin/bash' > ${CHROOTSH} || die @@ -163,12 +266,48 @@ /bin/bash -i } +usage() +{ + echo "Usage: $(basename $0) [command] [profile] ..." + echo + echo "Commands:" + echo " bootstrap - bootstraps the rootfs for the livecd" + echo " prepare - prepare the rootfs to run from a livecd" + echo " rootfs - generates the squashfs rootfs image" + echo " initrd - generates a livecd suitable initrd" + echo " bootloader - installs the bootloader" + echo " isogen - generate the final livecd iso image" + echo " all - runs all tasks to get a livecd from zero" + echo + echo " for example '$(basename $0) all default'" + echo " creates a livecd using the default profile." + echo +} + # 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 +#bootstrap_system +#prepare_iso +#generate_rootfs +#generate_initrd +#install_bootloader +#generate_iso + +case $1 in + bootstrap) bootstrap_system;; + prepare) prepare_iso;; + rootfs) generate_rootfs;; + initrd) generate_initrd;; + bootloader) install_bootloader;; + isogen) generate_iso;; + all) + bootstrap_system + prepare_iso + generate_rootfs + generate_initrd + install_bootloader + generate_iso + ;; + *|'') usage;; +esac