--- trunk/mlivecdbuild/mlivecdbuild2.sh 2011/06/05 18:27:47 1403 +++ trunk/mlivecdbuild/mlivecdbuild2.sh 2013/05/16 13:23:45 2122 @@ -19,8 +19,11 @@ PROFILES_DIR="/usr/lib/mlivecdbuild/profiles" GLOBAL_PROFILE="${PROFILES_DIR}/global" -# get full path to isolinux.bin, may vary an multilib systems -if [[ -f /usr/lib64/mkinitrd/isolinux.bin ]] +# get full path to isolinux.bin, may vary on multilib systems +if [[ -f /usr/share/syslinux/isolinux.bin ]] +then + ISOLINUX_BIN=/usr/share/syslinux/isolinux.bin +elif [[ -f /usr/lib64/mkinitrd/isolinux.bin ]] then ISOLINUX_BIN=/usr/lib64/mkinitrd/isolinux.bin else @@ -51,6 +54,7 @@ --profile "${MAGE_PROFILE}" \ --toolchain "${TOOLCHAIN}" \ --basesystem "${BASESYSTEM}" \ + --update-tarball \ || die "bootstrapping toolchain" } @@ -69,15 +73,22 @@ for i in ${services} do # systemd - if [[ -x ${CDCHROOTDIR}/sbin/systemctl ]] + if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]] then case ${cmd} in add) chroot ${CDCHROOTDIR} systemctl enable ${i} ;; del) chroot ${CDCHROOTDIR} systemctl disable ${i} ;; + default) + # convert targets + case ${i} in + 2|3|multi-user) service="multi-user.target" ;; + 5|graphical) service="graphical.target" ;; + esac + chroot ${CDCHROOTDIR} systemctl enable ${i} ;; esac fi # busybox and sysvinit - if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]] + if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]] && [[ ! -x ${CDCHROOTDIR}/bin/systemctl ]] && [[ ! -x ${CDCHROOTDIR}/usr/bin/systemctl ]] then MROOT="${CDCHROOTDIR}" rc-config ${cmd} ${i} || die "rc ${cmd} ${i}" fi @@ -158,26 +169,97 @@ echo Preparing LiveCD ISO Image ... # fixes some issues with xfree/xorg xkb - if [[ -L ${CDCHROOTDIR}/etc/X11/xkb ]] && [[ -d /usr/X11R6/lib/X11/xkb ]] + if [[ -L ${CDCHROOTDIR}/etc/X11/xkb ]] && + [[ -d ${CDCHROOTDIR}/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 + # fix issues with >=dracut-014 which drops some default modules like livecd + if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]] + then + install -d ${CDCHROOTDIR}/etc/dracut.conf.d || die + echo 'add_dracutmodules+=" dmsquash-live "' \ + > ${CDCHROOTDIR}/etc/dracut.conf.d/02-livecd.conf || die + fi + # only on sysvinit or busybox systems if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]] then install -m 0644 $(get_profile inittab) ${CDCHROOTDIR}/etc/inittab || die fi + if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]] + then + # check lock group on systemd systems + if [[ -z $(chroot ${CDCHROOTDIR} getent group lock) ]] + then + echo "adding missing group 'lock'" + chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 54" lock + fi + # dbus plugdev group + if [[ -z $(chroot ${CDCHROOTDIR} getent group plugdev) ]] + then + echo "adding missing group 'plugdev'" + chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 302" plugdev + fi + # dbus messagebus group + if [[ -z $(chroot ${CDCHROOTDIR} getent group messagebus) ]] + then + echo "adding missing group 'messagebus'" + chroot ${CDCHROOTDIR} /usr/lib/mage/mgroupadd -o "-g 300" messagebus + fi + # dbus messagebus user + if [[ -z $(chroot ${CDCHROOTDIR} getent passwd messagebus) ]] + then + echo "adding missing user 'messagebus'" + chroot ${CDCHROOTDIR} /usr/lib/mage/museradd -o "-u 300 -g messagebus -d /dev/null -s /bin/false" messagebus + fi + fi 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 install -m 0644 $(get_profile net.eth0) ${CDCHROOTDIR}/etc/conf.d/net.eth0 || die echo "${CDHOSTNAME}" > ${CDCHROOTDIR}/etc/hostname || die + install -d ${CDCHROOTDIR}/mnt/magellan || die echo Setting up services ... + # install systemd default services + if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] + then + # install tmpfs /tmp and /var/tmp + install -m 0644 $(get_profile tmp.mount) ${CDCHROOTDIR}/lib/systemd/system/ || die + install -m 0644 $(get_profile var-tmp.mount) ${CDCHROOTDIR}/lib/systemd/system/ || die + # enable them + ln -snf ../tmp.mount ${CDCHROOTDIR}/lib/systemd/system/local-fs.target.wants/tmp.mount || die + ln -snf ../var-tmp.mount ${CDCHROOTDIR}/lib/systemd/system/local-fs.target.wants/var-tmp.mount || die + fi + # newer systemd goes to /usr/lib + if [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]] + then + # install tmpfs /tmp and /var/tmp + install -m 0644 $(get_profile tmp.mount) ${CDCHROOTDIR}/usr/lib/systemd/system/ || die + install -m 0644 $(get_profile var-tmp.mount) ${CDCHROOTDIR}/usr/lib/systemd/system/ || die + # enable them + ln -snf ../tmp.mount ${CDCHROOTDIR}/usr/lib/systemd/system/local-fs.target.wants/tmp.mount || die + ln -snf ../var-tmp.mount ${CDCHROOTDIR}/usr/lib/systemd/system/local-fs.target.wants/var-tmp.mount || die + fi + + if [[ -x ${CDCHROOTDIR}/bin/systemctl ]] || [[ -x ${CDCHROOTDIR}/usr/bin/systemctl ]] + then + install -m 0644 $(get_profile getty) ${CDCHROOTDIR}/etc/conf.d/getty || die + + custom_services add getty@.service + custom_services add remote-fs.target + # disable readahead + custom_services del systemd-readahead-replay.service + custom_services del systemd-readahead-collect.service + fi + # # add hardware detection # if [[ -x ${CDCHROOTDIR}/sbin/rc-config ]] # then @@ -243,12 +325,14 @@ fi echo Generating squashfs compressed rootfs loopfile ... - if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] + if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]] then install -d ${LIVECDROOT}/loop/{LiveOS,mnt} || die # get the actual size of the chroot - size=$(du -s chroot | sed 's:^\(.*\)[[:space:]].*:\1:') + size=$(du -s ${LIVECDROOT}/chroot | sed 's:^\(.*\)[[:space:]].*:\1:') # generate a ext3fs file for devicemapper dd if=/dev/zero of=${LIVECDROOT}/loop/LiveOS/ext3fs.img bs=1024 count=$(( ${size} + 10 )) || die @@ -269,6 +353,7 @@ # copy everything to the image file and preserve permissions ( cd ${CDCHROOTDIR} && tar cpf - . ) | ( cd ${LIVECDROOT}/loop/mnt && tar xvpf - ) + sleep 3 # now umount everything and create the squashfs image umount ${LIVECDROOT}/loop/mnt || die @@ -291,7 +376,9 @@ echo Moving rootfs loopfile to isoroot ... install -d ${CDISOROOT} - if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] + if [[ -x ${CDCHROOTDIR}/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/sbin/dracut ]] || + [[ -x ${CDCHROOTDIR}/usr/bin/dracut ]] then install -d ${CDISOROOT}/LiveOS mv ${LIVECDROOT}/livecdrootfs.sqsh ${CDISOROOT}/LiveOS/squashfs.img @@ -316,6 +403,15 @@ 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 + # support the new layout too + if [[ -f $(get_profile index.msg) ]] + then + install -m 0644 $(get_profile index.msg) ${CDISOROOT}/isolinux || die + fi + if [[ -f $(get_profile debug.msg) ]] + then + install -m 0644 $(get_profile debug.msg) ${CDISOROOT}/isolinux || die + fi return 0 } @@ -334,7 +430,7 @@ echo 'kv="$(readlink /boot/vmlinuz)"' >> ${CHROOTSH} || die echo 'kv="${kv/kernel-}/"' >> ${CHROOTSH} || die # prefer dracut - echo 'if [[ -x /sbin/dracut ]]' >> ${CHROOTSH} || die + echo 'if [[ -x /sbin/dracut ]] || [[ -x /usr/sbin/dracut ]] || [[ -x /usr/bin/dracut ]]' >> ${CHROOTSH} || die echo 'then' >> ${CHROOTSH} || die echo ' dracut -v -f /initrd.gz ${kv}' >> ${CHROOTSH} || die echo 'else' >> ${CHROOTSH} || die