summaryrefslogtreecommitdiff
path: root/scripts/build/chroot_hacks
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/build/chroot_hacks')
-rwxr-xr-xscripts/build/chroot_hacks309
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