diff options
author | Daniel Baumann <daniel@debian.org> | 2012-08-27 15:59:56 +0200 |
---|---|---|
committer | Daniel Baumann <daniel@debian.org> | 2012-08-27 16:05:49 +0200 |
commit | a0a5bbfd1c9b6fc58d1b102ee56fb7d3b8b7bfcf (patch) | |
tree | 584a8f8174bdcbafddb6652e469c5ae5381ce3da /scripts/build/chroot_hacks | |
parent | d6e45a34376c9c80d1488ad4f3c9c1f85bedb338 (diff) | |
download | vyos-live-build-a0a5bbfd1c9b6fc58d1b102ee56fb7d3b8b7bfcf.tar.gz vyos-live-build-a0a5bbfd1c9b6fc58d1b102ee56fb7d3b8b7bfcf.zip |
Dropping lb prefix from live-build scripts, not needed anymore.
Previously, we needed to keep the lb_* prefix as the scripts
could also be executed standalone. Since the lb wrapper is
mandatory since squeeze, we can drop this now.
Diffstat (limited to 'scripts/build/chroot_hacks')
-rwxr-xr-x | scripts/build/chroot_hacks | 309 |
1 files changed, 309 insertions, 0 deletions
diff --git a/scripts/build/chroot_hacks b/scripts/build/chroot_hacks new file mode 100755 index 000000000..f0e885b08 --- /dev/null +++ b/scripts/build/chroot_hacks @@ -0,0 +1,309 @@ +#!/bin/sh + +## live-build(7) - System Build Scripts +## Copyright (C) 2006-2012 Daniel Baumann <daniel@debian.org> +## +## This program comes with ABSOLUTELY NO WARRANTY; for details see COPYING. +## This is free software, and you are welcome to redistribute it +## under certain conditions; see COPYING for details. + + +set -e + +# Including common functions +[ -e "${LIVE_BUILD}/scripts/build.sh" ] && . "${LIVE_BUILD}/scripts/build.sh" || . /usr/lib/live/build.sh + +# Setting static variables +DESCRIPTION="$(Echo 'execute hacks in chroot')" +HELP="" +USAGE="${PROGRAM} [--force]" + +Arguments "${@}" + +# Reading configuration files +Read_conffiles config/all config/common config/bootstrap config/chroot config/binary config/source +Set_defaults + +Echo_message "Begin executing hacks..." + +# Requiring stage file +Require_stagefile .build/config .build/bootstrap + +# Checking stage file +Check_stagefile .build/chroot_hacks + +# Checking lock file +Check_lockfile .lock + +# Creating lock file +Create_lockfile .lock + +case "${LB_PARENT_DISTRIBUTION}" in + squeeze) + if echo "${LB_TASKS}" | grep -qs lxde || + echo "${LB_TASKS}" | grep -qs xfce + then + GDM="gdm" + else + GDM="gdm3" + fi + ;; + + *) + GDM="gdm3" + ;; +esac + +# Handling default desktop configuration +case "${LB_MODE}" in + debian*) + # disable kexec-tools + if [ -e chroot/sbin/kexec ] + then + echo "kexec-tools kexec-tools/load_kexec boolean false" > chroot/root/preseed + Chroot chroot "debconf-set-selections /root/preseed" + rm -f chroot/root/preseed + Chroot chroot "dpkg-reconfigure kexec-tools" + fi + ;; +esac + +for TASK in ${LB_TASKS} +do + case "${TASK}" in + gnome-desktop) + # gnome is the only desktop environment in this image + if [ -z "$(echo ${LB_TASKS} | sed -e 's|gnome-desktop||' -e 's| desktop ||' | grep desktop)" ] + then + # set display manager + echo "${GDM} shared/default-x-display-manager select ${GDM}" > chroot/root/preseed + Chroot chroot "debconf-set-selections /root/preseed" + rm -f chroot/root/preseed + Chroot chroot "dpkg-reconfigure ${GDM}" + echo "/usr/bin/${GDM}" > chroot/etc/X11/default-display-manager + + # set session manager + Chroot chroot "update-alternatives --set x-session-manager /usr/bin/gnome-session" + fi + ;; + + kde-desktop) + # kde is the only desktop-environment in this image + if [ -z "$(echo ${LB_TASKS} | sed -e 's|kde-desktop||' -e 's| desktop ||' | grep desktop)" ] + then + # set display manager + echo "kdm shared/default-x-display-manager select kdm" > chroot/root/preseed + Chroot chroot "debconf-set-selections /root/preseed" + rm -f chroot/root/preseed + Chroot chroot "dpkg-reconfigure kdm" + echo "/usr/bin/kdm" > chroot/etc/X11/default-display-manager + + # set session manager + Chroot chroot "update-alternatives --set x-session-manager /usr/bin/startkde" + + # get rid of resolvconf + Chroot chroot "dpkg -P resolvconf" + fi + ;; + + lxde-desktop) + # lxde is the only desktop environment in this image + if [ -z "$(echo ${LB_TASKS} | sed -e 's|lxde-desktop||' -e 's| desktop ||' | grep desktop)" ] + then + # set display manager + echo "${GDM} shared/default-x-display-manager select ${GDM}" > chroot/root/preseed + Chroot chroot "debconf-set-selections /root/preseed" + rm -f chroot/root/preseed + Chroot chroot "dpkg-reconfigure ${GDM}" + echo "/usr/bin/${GDM}" > chroot/etc/X11/default-display-manager + + # set session manager + Chroot chroot "update-alternatives --set x-session-manager /usr/bin/startlxde" + fi + ;; + + xfce-desktop) + # xfce is the only desktop environment in this image + if [ -z "$(echo ${LB_TASKS} | sed -e 's|xfce-desktop||' -e 's| desktop ||' | grep desktop)" ] + then + # set display manager + echo "${GDM} shared/default-x-display-manager select ${GDM}" > chroot/root/preseed + Chroot chroot "debconf-set-selections /root/preseed" + rm -f chroot/root/preseed + Chroot chroot "dpkg-reconfigure ${GDM}" + echo "/usr/bin/${GDM}" > chroot/etc/X11/default-display-manager + + # set session manager + Chroot chroot "update-alternatives --set x-session-manager /usr/bin/xfce4-session" + fi + ;; + esac +done + +case "${LB_BINARY_IMAGES}" in + netboot) + if [ ! -f chroot/sbin/mount.cifs ] + then + Apt chroot install cifs-utils + fi + + if [ ! -d chroot/etc/initramfs-tools ] + then + mkdir chroot/etc/initramfs-tools + fi + + # Configuring initramfs for NFS + if ! grep -qs "BOOT=nfs" chroot/etc/initramfs-tools/initramfs.conf + then + echo "BOOT=nfs" >> chroot/etc/initramfs-tools/initramfs.conf + fi + + if ! grep -qs "NFSROOT=auto" chroot/etc/initramfs-tools/initramfs.conf + then + echo "NFSROOT=auto" >> chroot/etc/initramfs-tools/initramfs.conf + fi + ;; +esac + +# Update initramfs (always, because of udev rules in initrd) +case "${LB_INITRAMFS}" in + casper) + UPDATE_INITRAMFS_OPTIONS="CASPER_GENERATE_UUID=1" + ;; + + live-boot) + #UPDATE_INITRAMFS_OPTIONS="LIVE_GENERATE_UUID=1" + ;; +esac + +if [ "${LB_INITRAMFS}" != "none" ] +then + Chroot chroot "${UPDATE_INITRAMFS_OPTIONS} update-initramfs -k all -t -u" +fi + +# We probably ought to use COMPRESS= in a temporary file in +# /etc/initramfs-tools/conf.d/ instead, but it's hard to pass options that +# way. +case "${LB_INITRAMFS_COMPRESSION}" in + gzip) + ;; + + bzip2) + for INITRAMFS in $(find chroot/boot -name 'initrd*'); do + zcat "${INITRAMFS}" | bzip2 -c ${BZIP2_OPTIONS} > "${INITRAMFS}.new" + mv "${INITRAMFS}.new" "${INITRAMFS}" + done + ;; + + lzma) + # We probably ought to use COMPRESS= in a temporary file in + # /etc/initramfs-tools/conf.d/ instead, but it's hard to + # pass options that way. + for INITRAMFS in $(find chroot/boot -name 'initrd*'); do + zcat "${INITRAMFS}" | lzma -c ${LZMA_OPTIONS} > "${INITRAMFS}.new" + mv "${INITRAMFS}.new" "${INITRAMFS}" + done + ;; +esac + +# Ensure readable permissions on initramfs. loop-aes-utils sets umask to +# protect GPG keys, which live-build does not support. +# Note: Use find rather than chmod on the wildcard, one never knows what +# people might do in local hooks, and there might be no initrds at all. +find chroot/boot -name 'initrd*' -print0 | xargs -r -0 chmod go+r + +# Remove build systems clock drift +echo "0.0 0 0.0" > chroot/etc/adjtime + +# Remove cruft +rm -f chroot/boot/initrd*bak* +rm -f chroot/etc/apt/trusted.gpg~ +rm -f chroot/etc/group- chroot/etc/passwd- +rm -f chroot/etc/gshadow- chroot/etc/shadow- +rm -f chroot/var/cache/debconf/*-old +rm -f chroot/var/lib/dpkg/*-old +rm -f chroot/var/log/apt/term.log + +# Delete and re-create temporary directories +TEMP_DIRS="/tmp /var/tmp" +for DIR in ${TEMP_DIRS} +do + rm -rf "chroot/${DIR}" + install -d -m 1777 "chroot/${DIR}" +done + +if [ -n "${LB_ROOT_COMMAND}" ] +then + ${LB_ROOT_COMMAND} chown -R --quiet $(whoami):$(whoami) chroot +fi + +case "${LB_INITRAMFS}" in + casper) + ID="999" + ;; + + live-boot) + ID="1000" + ;; + + *) + ID="" + ;; +esac + +if [ "${LB_DEBIAN_INSTALLER}" = "live" ] +then + # This is a temporary hack to get rid of fstab; + # needs cleanup in live-boot first to proper fix. + rm -f chroot/etc/fstab + touch chroot/etc/fstab +fi + +if [ "${LB_EXPOSED_ROOT}" = "true" ] +then + # Make sure RW dirs exist so that the initramfs script has + # a directory in which to bind the tmpfs filesystems + COW_DIRECTORIES="/home /live /tmp /var/lib/live /var/lock /var/log /var/run /var/tmp /var/spool" + + for DIRECTORY in ${COW_DIRECTORIES} + do + mkdir -p chroot/"${DIRECTORY}" + done + + # Config files which need to be RW + COW_FILES="/etc/adjtime /etc/fstab /etc/hostname /etc/hosts /etc/live.conf /etc/network/interfaces /etc/resolv.conf /etc/udev/rules.d/*persistent-net.rules /etc/udev/rules.d/*persistent-cd.rules /etc/X11/xorg.conf" + + # Where we will store RW config files + RW_DIRECTORY="/var/lib/live" + + for FILE in ${COW_FILES} + do + DIRECTORY="$(dirname ${FILE})" + FILE="$(basename ${FILE})" + RELATIVE_PATH="$(echo ${DIRECTORY} | sed 's|[^/]\+|..|g; s|^/||g')" + + # Touch files in case they don't yet exist + mkdir -p chroot/${DIRECTORY} + touch chroot/${DIRECTORY}/${FILE} + + # Move files to the read-write directory + mkdir -p chroot/${RW_DIRECTORY}/${DIRECTORY} + mv chroot/${DIRECTORY}/${FILE} chroot/${RW_DIRECTORY}/${DIRECTORY} + + # Create a symbolic link to RW config file + ln -s ${RELATIVE_PATH}/${RW_DIRECTORY}/${DIRECTORY}/${FILE} chroot/${DIRECTORY}/${FILE} + done + + # Mount doesn't write to a symlink so use /proc/mounts instead, + # see debian bug #154438 for more info + rm -f chroot/etc/mtab + ln -s /proc/mounts chroot/etc/mtab +fi + +if [ "${LB_SWAP_FILE_PATH}" ]; then + dd if=/dev/zero of="chroot/${LB_SWAP_FILE_PATH}" bs=1024k count="${LB_SWAP_FILE_SIZE}" + mkswap "chroot/${LB_SWAP_FILE_PATH}" +fi + +# Creating stage file +Create_stagefile .build/chroot_hacks |