From 0c5d9878159a7d59de0f3eac891f1d7dbdc518ed Mon Sep 17 00:00:00 2001 From: torben Date: Thu, 17 Dec 2015 16:48:13 +0100 Subject: Remove fakeroot to switch root. --- builder/build-initramfs.sh | 7 +++---- builder/dnbd3-rootfs/module-setup.sh | 6 +++--- builder/dnbd3-rootfs/scripts/rebash | 2 +- 3 files changed, 7 insertions(+), 8 deletions(-) (limited to 'builder') diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index a513b752..6a81eccf 100755 --- a/builder/build-initramfs.sh +++ b/builder/build-initramfs.sh @@ -92,8 +92,7 @@ build_initramfs_target='' build_initramfs_create_system_image='' build_initramfs_cleanup='no' build_initramfs_dependencies=(cpio git test shift mktemp cat rm sed gzip curl \ - tar grep make gcc cmake readlink dirname dmsetup fakeroot fakechroot \ - chroot qemu-nbd) + tar grep make gcc cmake readlink dirname dmsetup chroot qemu-nbd) # endregion # region functions ## region command line interface @@ -310,8 +309,8 @@ if [[ "$build_initramfs_target" != '' ]]; then #qemu-nbd "$build_initramfs_target" "$build_initramfs__target" fi if [[ -d "$build_initramfs__target" ]]; then - build_initramfs__temporary_working_directory="$(fakeroot \ - fakechroot chroot "$build_initramfs__target" mktemp --directory)" + build_initramfs__temporary_working_directory="$(chroot \ + "$build_initramfs__target" mktemp --directory)" mount --bind "$(pwd)" \ "${build_initramfs__target}${build_initramfs__temporary_working_directory}" diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index b4440ddd..4088bc29 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -158,8 +158,8 @@ install() { mount fdisk mkfs.xfs env busybox ps agetty \ insmod qemu-nbd blockdev partx dmsetup sed cut awk tr insmod qemu-nbd \ blockdev partx dmsetup cat cut awk losetup dd mkfs.ext4 grep \ - basename dirname sort + basename dirname sort mktemp diff # Production: - # inst_multiple insmod qemu-nbd blockdev partx dmsetup cat cut awk tr \ - # losetup dd mkfs.ext4 grep + # inst_multiple insmod qemu-nbd blockdev partx dmsetup sed cat cut awk tr \ + # losetup dd mkfs.ext4 grep basename dirname mktemp diff } diff --git a/builder/dnbd3-rootfs/scripts/rebash b/builder/dnbd3-rootfs/scripts/rebash index 5a708c0c..b77bbd65 160000 --- a/builder/dnbd3-rootfs/scripts/rebash +++ b/builder/dnbd3-rootfs/scripts/rebash @@ -1 +1 @@ -Subproject commit 5a708c0c68be05b50fdb77d211912110f910c519 +Subproject commit b77bbd65f70f56c5941f0368c2e488c470072af2 -- cgit v1.2.3-55-g7522 From 20718e888d32ff94fa5f5e9589e7ed11651c74ff Mon Sep 17 00:00:00 2001 From: torben Date: Fri, 18 Dec 2015 16:36:13 +0100 Subject: Provide new change root remote building approach. --- builder/build-initramfs.sh | 85 ++++++++++++++++++++----------------- builder/dnbd3-rootfs/scripts/rebash | 2 +- 2 files changed, 46 insertions(+), 41 deletions(-) (limited to 'builder') diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index 6a81eccf..26293ebe 100755 --- a/builder/build-initramfs.sh +++ b/builder/build-initramfs.sh @@ -51,6 +51,7 @@ # PATTERN. By default, grep prints the matching lines. ## region ensure presence of needed dependencies + set -o errexit build_initramfs__needed_location="$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs" if ! [[ -d "$build_initramfs__needed_location" ]]; then @@ -71,6 +72,7 @@ if ! [[ -d "$build_initramfs__needed_location" ]]; then rm --recursive --force "$build_initramfs__temporary_repository_location" fi set +o errexit + ## endregion source "$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs/scripts/rebash/core.sh" @@ -78,12 +80,15 @@ core.import exceptions exceptions.activate core.import logging core.import utils +core.import change_root + # endregion logging.set_commands_log_level debug logging.set_log_level critical # region properties + build_initramfs_file_path='/boot/initramfs.img' build_initramfs_dracut_parameter='--force --no-hostonly' build_initramfs_verbose='no' @@ -93,9 +98,13 @@ build_initramfs_create_system_image='' build_initramfs_cleanup='no' build_initramfs_dependencies=(cpio git test shift mktemp cat rm sed gzip curl \ tar grep make gcc cmake readlink dirname dmsetup chroot qemu-nbd) + # endregion + # region functions + ## region command line interface + function build_initramfs_print_usage_message() { # Prints a description about how to use this program. logging.cat << EOF @@ -231,7 +240,9 @@ function build_initramfs_parse_command_line() { } ## endregion + ## region helper + function build_initramfs_initialize_dracut() { # Downloads and compiles dracut. # @@ -284,10 +295,15 @@ function build_initramfs_cleanup() { clean return $? } + ## endregion + # endregion + # region controller + ## region dependency checks + utils.dependency_check "${build_initramfs_dependencies[*]}" # TODO check for existing kernel headers. # Find lib locations: $(gcc -print-prog-name=cc1plus) -v @@ -295,12 +311,16 @@ if ! ldconfig --print-cache | grep libz.so; then logging.critical "You have to install the compression library \"libz\". Otherwise we aren't able to compile dnbd3 for your kernel." exit 1 fi + ## endregion + if ! build_initramfs_parse_command_line "$@"; then build_initramfs_print_help_message "$0" exit 1 fi + ## region handle delegated operations to specified target + if [[ "$build_initramfs_target" != '' ]]; then build_initramfs__target="$build_initramfs_target" if [[ -f "$build_initramfs_target" ]]; then @@ -313,24 +333,6 @@ if [[ "$build_initramfs_target" != '' ]]; then "$build_initramfs__target" mktemp --directory)" mount --bind "$(pwd)" \ "${build_initramfs__target}${build_initramfs__temporary_working_directory}" - - # TODO implement a more nice chroot method - mkdir --parents "${build_initramfs__temporary_working_directory}/proc" - mount /proc \ - "${build_initramfs__temporary_working_directory}/proc" --types \ - proc --options nosuid,noexec,nodev - mkdir --parents "${build_initramfs__temporary_working_directory}/dev" - mount udev "${build_initramfs__temporary_working_directory}/dev" \ - --types devtmpfs --options mode=0755,nosuid - mkdir --parents \ - "${build_initramfs__temporary_working_directory}/dev/pts" - mount devpts "${build_initramfs__temporary_working_directory}/dev/pts" \ - --types devpts --options mode=0620,gid=5,nosuid,noexec - mkdir --parents \ - "${build_initramfs__temporary_working_directory}/dev/shm" - mount shm "${build_initramfs__temporary_working_directory}/dev/shm" \ - --types tmpfs --options mode=1777,nosuid,nodev - build_initramfs__parameter_skip=false build_initramfs__parameter_to_forward=() for build_initramfs__parameter; do @@ -344,37 +346,32 @@ if [[ "$build_initramfs_target" != '' ]]; then build_initramfs__parameter_to_forward+=("$build_initramfs__parameter") fi done - # NOTE: We temporary patch dracut to avoid removing the environment - # variables "LD_LIBRARY_PATH" and "LD_PRELOAD" to get "fakechroot" - # working with dracut. So we should remove this variables before - # running the patched dracut version to follow the initial intention. - unset LD_LIBRARY_PATH - unset LD_PRELOAD - # TODO - # patch dracut.sh temporary: - # unset LD_LIBRARY_PATH - # unset LD_PRELOAD - # have to be removed! Since they broke the fakechroot environment. - # TODO check FAKECHROOT_CMD_SUBST - FAKECHROOT_CMD_SUBST=/usr/bin/ldconfig=/usr/bin/ldconfig fakeroot \ - fakechroot chroot "${build_initramfs__target}" \ + # NOTE: We would have to temporary patch dracut to avoid removing the + # environment variables "LD_LIBRARY_PATH" and "LD_PRELOAD" to get + # "fakechroot" working with dracut. So we should remove this variables + # before running the patched dracut version to follow the initial + # intention. You should first do: + # >>> unset LD_LIBRARY_PATH + # >>> unset LD_PRELOAD + # and patch "dracut.sh" temporary to comment out: + # >>> unset LD_LIBRARY_PATH + # >>> unset LD_PRELOAD + # To avoid to broke the "fakechroot" environment pipe the ldconfig call + # to the native one: + # >>> FAKECHROOT_CMD_SUBST=/usr/bin/ldconfig=/usr/bin/ldconfig + change_root "${build_initramfs__target}" \ "${build_initramfs__temporary_working_directory}/${BASH_SOURCE[0]}" \ ${build_initramfs__parameter_to_forward[*]} - - umount /proc - umount /dev - umount /dev/pts - umount /dev/shm - - umount "${build_initramfs__target}${build_initramfs__temporary_working_directory}" - mv "${build_initramfs__target}/$build_initramfs_file_path" \ "$build_initramfs_file_path" fi exit 0 fi + ## endregion + ## region handle dependencies which can be resolved automatically + logging.info 'Checking dracut.' if ! [[ -f "$(dirname "${BASH_SOURCE[0]}")/dracut/dracut-install" ]]; then logging.info "Dracut isn't available yet loading it." @@ -398,8 +395,11 @@ then "$build_initramfs__dracut_modules_target" fi fi + ## endregion + ## region prepare and perform final dracut call + build_initramfs__loglevel='' if [ "$build_initramfs_verbose" == 'yes' ]; then build_initramfs__loglevel='--verbose' @@ -426,9 +426,14 @@ else exceptions.activate fi exceptions.deactivate + ## endregion + # endregion + # region vim modline + # vim: set tabstop=4 shiftwidth=4 expandtab: # vim: foldmethod=marker foldmarker=region,endregion: + # endregion diff --git a/builder/dnbd3-rootfs/scripts/rebash b/builder/dnbd3-rootfs/scripts/rebash index b77bbd65..46681d9d 160000 --- a/builder/dnbd3-rootfs/scripts/rebash +++ b/builder/dnbd3-rootfs/scripts/rebash @@ -1 +1 @@ -Subproject commit b77bbd65f70f56c5941f0368c2e488c470072af2 +Subproject commit 46681d9d6caef2c14b10f4512f12176a7b0c1f47 -- cgit v1.2.3-55-g7522 From 3a4b143d1e48b9fd02670f39f6cec17781151bd8 Mon Sep 17 00:00:00 2001 From: torben Date: Thu, 7 Jan 2016 15:30:52 +0100 Subject: Integrate new systemd cli option. --- builder/build-initramfs.sh | 12 ++++++++++++ 1 file changed, 12 insertions(+) (limited to 'builder') diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index 26293ebe..550826cc 100755 --- a/builder/build-initramfs.sh +++ b/builder/build-initramfs.sh @@ -96,6 +96,7 @@ build_initramfs_debug='no' build_initramfs_target='' build_initramfs_create_system_image='' build_initramfs_cleanup='no' +build_initramfs_use_systemd_in_initramfs='no' build_initramfs_dependencies=(cpio git test shift mktemp cat rm sed gzip curl \ tar grep make gcc cmake readlink dirname dmsetup chroot qemu-nbd) @@ -141,6 +142,10 @@ function build_initramfs_print_command_line_option_description() { explicitly speicifed current system will be used as template system (default). +-s --use-systemd-in-initramfs Use Systemd as init process in initramfs + (improved performance but less features) + (default: "$build_initramfs_use_systemd_in_initramfs"). + Additional dracut parameter and normal parameter can be deleimiter via a single dash (-) (default: "$build_initramfs_dracut_parameter"). EOF @@ -186,6 +191,10 @@ function build_initramfs_parse_command_line() { shift build_initramfs_cleanup='yes' ;; + -s|--use-systemd-in-initramfs) + shift + build_initramfs_use_systemd_in_initramfs='yes' + ;; -i|--create-system-image) shift build_initramfs_create_system_image="$1" @@ -409,6 +418,9 @@ if [ "$build_initramfs_debug" == 'yes' ]; then build_initramfs__loglevel="$build_initramfs__loglevel --stdlog 4" build_initramfs__modules="$build_initramfs__modules i18n terminfo" fi +if [ "$build_initramfs_use_systemd_in_initramfs" == 'yes' ]; then + build_initramfs__modules="$build_initramfs__modules systemd systemd-initrd dracut-systemd" +fi if [[ "$build_initramfs_create_system_image" != '' ]]; then logging.info 'Create system image.' build_initramfs_create_qcow2_system "$build_initramfs_create_system_image" -- cgit v1.2.3-55-g7522