summaryrefslogtreecommitdiff
path: root/helpers/binary_rootfs
diff options
context:
space:
mode:
Diffstat (limited to 'helpers/binary_rootfs')
-rwxr-xr-xhelpers/binary_rootfs453
1 files changed, 453 insertions, 0 deletions
diff --git a/helpers/binary_rootfs b/helpers/binary_rootfs
new file mode 100755
index 0000000..a862895
--- /dev/null
+++ b/helpers/binary_rootfs
@@ -0,0 +1,453 @@
+#!/bin/sh
+
+# lh_binary_rootfs(1) - build rootfs image
+# Copyright (C) 2006-2009 Daniel Baumann <daniel@debian.org>
+#
+# 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:-/usr/share/live-helper}"/live-helper.sh
+
+# Setting static variables
+DESCRIPTION="$(Echo 'build rootfs image')"
+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 building root filesystem image..."
+
+# Requiring stage file
+Require_stagefile .stage/config .stage/bootstrap .stage/binary_chroot
+
+# Checking stage file
+Check_stagefile .stage/binary_rootfs
+
+# Checking lock file
+Check_lockfile .lock
+
+# Creating lock file
+Create_lockfile .lock
+
+case "${LH_ARCHITECTURE}" in
+ amd64|i386)
+ LINUX="vmlinuz"
+ ;;
+
+ powerpc)
+ LINUX="vmlinux"
+ ;;
+esac
+
+case "${LH_INITRAMFS}" in
+ casper)
+ INITFS="casper"
+ ;;
+
+ live-initramfs)
+ INITFS="live"
+ ;;
+esac
+
+# Creating directory
+mkdir -p binary/${INITFS}
+
+for STAGE in ${LH_CACHE_STAGES}
+do
+ if [ "${STAGE}" = "rootfs" ] && [ -d cache/stages_rootfs ]
+ then
+ # Removing old chroot
+ rm -rf binary/"${INITFS}"/filesystem.*
+
+ # Restoring old cache
+ mkdir -p binary/"${INITFS}"
+ ${LH_ROOT_COMMAND} cp -a cache/stages_rootfs/filesystem.* binary/"${INITFS}"
+
+ if [ -n "${LH_ROOT_COMMAND}" ]
+ then
+ ${LH_ROOT_COMMAND} chown -R $(whoami):$(whoami) binary
+ fi
+
+ # Creating stage file
+ Create_stagefile .stage/binary_rootfs
+ exit 0
+ fi
+done
+
+# Handling chroot excludes
+if [ "${LH_CHROOT_BUILD}" = "true" ]
+then
+ if [ -f config/binary_rootfs/excludes ]
+ then
+ cp config/binary_rootfs/excludes chroot/chroot/excludes
+ chroot chroot/chroot /usr/bin/env -i xargs --arg-file=/excludes -I FILE bash -c 'rm -rf FILE'
+ rm -f chroot/chroot/excludes
+ fi
+
+ if [ "${LH_DEBIAN_INSTALLER}" != "live" ]
+ then
+ case "${LH_PACKAGES_LISTS}" in
+ stripped|minimal)
+ # kernel images
+ rm -f chroot/chroot/boot/${LINUX}*
+ rm -f chroot/chroot/boot/initrd.img*
+
+ # kernel symlinks
+ rm -f chroot/chroot/${LINUX}*
+ rm -f chroot/chroot/initrd.img*
+ ;;
+ esac
+ fi
+else
+ if [ "${LH_CHROOT_FILESYSTEM}" != "squashfs" ]
+ then
+ Echo_warning "rootfs excludes are not supported on non-chrooted builds unless squashfs as chroot filesystem is used, thus ignoring excludes now."
+ fi
+fi
+
+case "${LH_CHROOT_FILESYSTEM}" in
+ ext2|ext3)
+ # Checking depends
+ Check_package chroot/usr/bin/genext2fs genext2fs
+
+ # Restoring cache
+ Restore_cache cache/packages_binary
+
+ # Installing depends
+ Install_package
+
+ # Remove old image
+ if [ -f binary/${INITFS}/filesystem.${LH_CHROOT_FILESYSTEM} ]
+ then
+ rm -f binary/${INITFS}/filesystem.${LH_CHROOT_FILESYSTEM}
+ fi
+
+ DU_DIM="$(du -ks chroot/chroot | cut -f1)"
+ REAL_DIM="$(Calculate_partition_size ${DU_DIM} ${LH_CHROOT_FILESYSTEM})"
+
+ RESERVED_PERCENTAGE="--reserved-percentage"
+
+ case "${LH_CHROOT_BUILD}" in
+ true)
+ Chroot chroot "genext2fs --size-in-blocks=${REAL_DIM} ${RESERVED_PERCENTAGE}=0 --root=chroot filesystem.${LH_CHROOT_FILESYSTEM}"
+
+ # Move image
+ mv chroot/filesystem.${LH_CHROOT_FILESYSTEM} binary/${INITFS}
+
+ if [ -e chroot/chroot.cache ]
+ then
+ rm -f .lock
+ mv chroot/chroot chroot.tmp
+
+ lh chroot_linux-image remove ${*}
+ lh chroot_sources remove ${*}
+ lh chroot_apt remove ${*}
+ lh chroot_hostname remove ${*}
+ lh chroot_resolv remove ${*}
+ lh chroot_hosts remove ${*}
+ lh chroot_sysv-rc remove ${*}
+ lh chroot_dpkg remove ${*}
+ lh chroot_debianchroot remove ${*}
+ lh chroot_sysfs remove ${*}
+ lh chroot_selinuxfs remove ${*}
+ lh chroot_proc remove ${*}
+ lh chroot_devpts remove ${*}
+
+ rm -rf chroot
+ mv chroot.tmp chroot
+
+ lh chroot_devpts install ${*}
+ lh chroot_proc install ${*}
+ lh chroot_selinuxfs install ${*}
+ lh chroot_sysfs install ${*}
+ lh chroot_debianchroot install ${*}
+ lh chroot_dpkg install ${*}
+ lh chroot_sysv-rc install ${*}
+ lh chroot_hosts install ${*}
+ lh chroot_resolv install ${*}
+ lh chroot_hostname install ${*}
+ lh chroot_apt install ${*}
+ lh chroot_sources install ${*}
+ lh chroot_linux-image install ${*}
+
+ touch .lock
+ else
+ rm -rf chroot/chroot
+ fi
+ ;;
+
+ false)
+ genext2fs --size-in-blocks=${REAL_DIM} ${RESERVED_PERCENTAGE}=0 --root=chroot binary/${INITFS}/filesystem.${LH_CHROOT_FILESYSTEM}
+ ;;
+ esac
+
+ # Saving cache
+ Save_cache cache/packages_binary
+
+ # Removing depends
+ Remove_package
+ ;;
+
+ jffs2)
+ # Checking depends
+ Check_package chroot/usr/sbin/mkfs.jffs2 mtd-tools
+
+ # Restoring cache
+ Restore_cache cache/packages_binary
+
+ # Installing depends
+ Install_package
+
+ # Remove old jffs2 image
+ if [ -f binary/${INITFS}/filesystem.jffs2 ]
+ then
+ rm -f binary/${INITFS}/filesystem.jffs2
+ fi
+
+ if [ -n "${LH_JFFS2_ERASEBLOCK}" ]
+ then
+ JFFS2_OPTIONS="--eraseblock=${LH_JFFS2_ERASEBLOCK}"
+ fi
+
+ case "${LH_CHROOT_BUILD}" in
+ true)
+ Chroot chroot "mkfs.jffs2 ${JFFS2_OPTIONS} --root=chroot --output filesystem.jffs2"
+
+ # Move image
+ mv chroot/filesystem.jffs2 binary/${INITFS}
+
+ if [ -e chroot/chroot.cache ]
+ then
+ rm -f .lock
+ mv chroot/chroot chroot.tmp
+
+ lh chroot_linux-image remove ${*}
+ lh chroot_sources remove ${*}
+ lh chroot_apt remove ${*}
+ lh chroot_hostname remove ${*}
+ lh chroot_resolv remove ${*}
+ lh chroot_hosts remove ${*}
+ lh chroot_sysv-rc remove ${*}
+ lh chroot_dpkg remove ${*}
+ lh chroot_debianchroot remove ${*}
+ lh chroot_sysfs remove ${*}
+ lh chroot_selinuxfs remove ${*}
+ lh chroot_proc remove ${*}
+ lh chroot_devpts remove ${*}
+
+ rm -rf chroot
+ mv chroot.tmp chroot
+
+ lh chroot_devpts install ${*}
+ lh chroot_proc install ${*}
+ lh chroot_selinuxfs install ${*}
+ lh chroot_sysfs install ${*}
+ lh chroot_debianchroot install ${*}
+ lh chroot_dpkg install ${*}
+ lh chroot_sysv-rc install ${*}
+ lh chroot_hosts install ${*}
+ lh chroot_resolv install ${*}
+ lh chroot_hostname install ${*}
+ lh chroot_apt install ${*}
+ lh chroot_sources install ${*}
+ lh chroot_linux-image install ${*}
+
+ touch .lock
+ else
+ rm -rf chroot/chroot
+ fi
+ ;;
+
+ false)
+ mkfs.jffs2 ${JFFS2_OPTIONS} --root=chroot --output binary/${INITFS}/filesystem.jffs2
+ ;;
+ esac
+
+ # Saving cache
+ Save_cache cache/packages_binary
+
+ # Removing depends
+ Remove_package
+ ;;
+
+ plain)
+ if [ -d binary/${INITFS}/filesystem.dir ]
+ then
+ rm -rf binary/${INITFS}/filesystem.dir
+ fi
+
+ case "${LH_CHROOT_BUILD}" in
+ true)
+ mv chroot/chroot binary/${INITFS}/filesystem.dir
+ ;;
+
+ false)
+ cp -a chroot binary/${INITFS}/filesystem.dir
+ ;;
+ esac
+ ;;
+
+ squashfs)
+ # Checking depends
+ Check_package chroot/usr/share/doc/squashfs-tools squashfs-tools
+
+ # Restoring cache
+ Restore_cache cache/packages_binary
+
+ # Installing depends
+ Install_package
+
+ Echo_message "Preparing squashfs image..."
+ Echo_message "This may take a while."
+
+ # Remove old squashfs image
+ if [ -f binary/${INITFS}/filesystem.squashfs ]
+ then
+ rm -f binary/${INITFS}/filesystem.squashfs
+ fi
+
+ # Remove stale squashfs image
+ rm -f chroot/filesystem.squashfs
+
+ MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -no-progress"
+
+ if [ "${_VERBOSE}" = "true" ]
+ then
+ MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -info"
+ fi
+
+ if [ -f config/binary_rootfs/squashfs.sort ]
+ then
+ MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -sort squashfs.sort"
+ cp config/binary_rootfs/squashfs.sort chroot #FIXME
+ fi
+
+ case "${LH_CHROOT_BUILD}" in
+ true)
+ # Create image
+ Chroot chroot "mksquashfs chroot filesystem.squashfs ${MKSQUASHFS_OPTIONS}"
+
+ # Move image
+ ${LH_ROOT_COMMAND} mv chroot/filesystem.squashfs binary/${INITFS}
+ ${LH_ROOT_COMMAND} rm -f chroot/squashfs.sort
+
+ if [ -e chroot/chroot.cache ]
+ then
+ rm -f .lock
+ mv chroot/chroot chroot.tmp
+
+ lh chroot_linux-image remove ${*}
+ lh chroot_sources remove ${*}
+ lh chroot_apt remove ${*}
+ lh chroot_hostname remove ${*}
+ lh chroot_resolv remove ${*}
+ lh chroot_hosts remove ${*}
+ lh chroot_sysv-rc remove ${*}
+ lh chroot_dpkg remove ${*}
+ lh chroot_debianchroot remove ${*}
+ lh chroot_sysfs remove ${*}
+ lh chroot_selinuxfs remove ${*}
+ lh chroot_proc remove ${*}
+ lh chroot_devpts remove ${*}
+
+ rm -rf chroot
+ mv chroot.tmp chroot
+
+ lh chroot_devpts install ${*}
+ lh chroot_proc install ${*}
+ lh chroot_selinuxfs install ${*}
+ lh chroot_sysfs install ${*}
+ lh chroot_debianchroot install ${*}
+ lh chroot_dpkg install ${*}
+ lh chroot_sysv-rc install ${*}
+ lh chroot_hosts install ${*}
+ lh chroot_resolv install ${*}
+ lh chroot_hostname install ${*}
+ lh chroot_apt install ${*}
+ lh chroot_sources install ${*}
+ lh chroot_linux-image install ${*}
+
+ touch .lock
+ else
+ rm -rf chroot/chroot
+ fi
+
+ ${LH_ROOT_COMMAND} chmod 0644 binary/${INITFS}/filesystem.squashfs
+ ;;
+
+ false)
+ if [ -f config/binary_rootfs/excludes ]
+ then
+ case "${LH_DISTRIBUTION}" in
+ lenny|sid)
+ MKSQUASHFS_OPTIONS="${MKSQUASHFS_OPTIONS} -wildcards -ef config/binary_rootfs/excludes"
+ ;;
+ esac
+ fi
+
+ mksquashfs chroot binary/${INITFS}/filesystem.squashfs ${MKSQUASHFS_OPTIONS}
+ ;;
+ esac
+
+ if [ -n "${LH_ROOT_COMMAND}" ]
+ then
+ ${LH_ROOT_COMMAND} chown -R $(whoami):$(whoami) binary/${INITFS}
+ fi
+
+ # Saving cache
+ Save_cache cache/packages_binary
+
+ # Removing depends
+ Remove_package
+ ;;
+
+ none)
+ if [ -d binary ]
+ then
+ rm -rf binary
+ fi
+
+ case "${LH_CHROOT_BUILD}" in
+ true)
+ mv chroot/chroot binary
+ ;;
+
+ false)
+ Echo_message "This may take a while."
+ cp -a chroot binary
+ ;;
+ esac
+ ;;
+
+esac
+
+for STAGE in ${LH_CACHE_STAGES}
+do
+ if [ "${STAGE}" = "rootfs" ]
+ then
+ rm -rf cache/stages_rootfs
+
+ mkdir -p cache/stages_rootfs
+
+ if [ "${LH_CHROOT_FILESYSTEM}" != "none" ]
+ then
+ ${LH_ROOT_COMMAND} cp -a binary/"${INITFS}"/filesystem.* cache/stages_rootfs
+ fi
+
+ if [ -n "${LH_ROOT_COMMAND}" ]
+ then
+ ${LH_ROOT_COMMAND} chown -R $(whoami):$(whoami) cache/stages_rootfs
+ fi
+ fi
+done
+
+# Creating stage file
+Create_stagefile .stage/binary_rootfs