#!/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_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 # 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