#!/bin/sh # lh_chroot_hacks(1) - execute hacks in chroot # Copyright (C) 2006-2008 Daniel Baumann # # live-helper 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 LH_BASE="${LH_BASE:-/usr/share/live-helper}" for FUNCTION in "${LH_BASE}"/functions/*.sh do . "${FUNCTION}" done # Setting static variables DESCRIPTION="execute hacks in chroot" HELP="" USAGE="${PROGRAM} [--force]" Arguments "${@}" # Reading configuration files Read_conffile config/all config/common config/bootstrap config/chroot config/binary config/source Set_defaults Echo_message "Begin executing hacks..." # Requiring stage file Require_stagefile .stage/bootstrap # Checking stage file Check_stagefile .stage/chroot_hacks # Checking lock file Check_lockfile .lock # Creating lock file Create_lockfile .lock # Removing udev mac caching rule rm -f chroot/etc/udev/rules.d/*persistent-net.rules case "${LH_BINARY_IMAGES}" in net) if [ ! -f chroot/usr/bin/smbmount ] then Apt install smbfs fi if [ ! -d chroot/etc/initramfs-tools ] then mkdir chroot/etc/initramfs-tools fi if [ ! "$(grep 'MODULES=netboot' chroot/etc/initramfs-tools/initramfs.conf)" ] then # Configuring initramfs for NFS cat >> chroot/etc/initramfs-tools/initramfs.conf << EOF MODULES=netboot BOOT=nfs NFSROOT=auto EOF fi ;; esac # Remove resume if [ "${LH_DISTRIBUTION}" = "etch" ] && [ -e /etc/initramfs-tools/conf.d/resume ] then rm -f /etc/initramfs-tools/conf.d/resume fi # Ensure readable permissions on initramfs. loop-aes-utils sets umask to # protect GPG keys, which live-helper does not support. chmod go+r chroot/boot/initrd* # 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/cache/man/index.db rm -f chroot/var/lib/dpkg/*-old if [ -n "${LH_ROOT_COMMAND}" ] then ${LH_ROOT_COMMAND} chown -R --quiet $(whoami):$(whoami) chroot fi if [ "${LH_INITRAMFS}" = "casper" ] && [ -d chroot/home/${LH_USERNAME} ] then chown -R --quiet 999:999 chroot/home/${LH_USERNAME} fi # Setting ownership for /etc/skel - this is where people often include stuff # through local includes. chown -R --quiet 0:0 chroot/home/etc/skel # Making sure /etc/sudoers has right owner/permissions chown --quiet 0:0 chroot/home/etc/sudoers chmod 0440 chroot/etc/sudoers # This is a temporary hack to get rid of fstab; # needs cleanup in live-initramfs first to proper fix. if [ "${LH_DEBIAN_INSTALLER}" = "live" ] then rm -f chroot/etc/fstab fi if [ "${LH_EXPOSED_ROOT}" = "enabled" ] 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 # Creating stage file Create_stagefile .stage/chroot_hacks