#!/bin/sh ## live-build(7) - System Build Scripts ## Copyright (C) 2006-2012 Daniel Baumann ## ## 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