diff options
author | jandob | 2016-01-07 16:42:58 +0100 |
---|---|---|
committer | jandob | 2016-01-07 16:42:58 +0100 |
commit | dcd15c54bd70ef7c9cdf92a957e93053ff2bde47 (patch) | |
tree | be41014ee47834674f96a90cef0727b65da11066 /builder | |
parent | change hooks variable scoping (diff) | |
parent | Integrate new systemd cli option. (diff) | |
download | systemd-init-dcd15c54bd70ef7c9cdf92a957e93053ff2bde47.tar.gz systemd-init-dcd15c54bd70ef7c9cdf92a957e93053ff2bde47.tar.xz systemd-init-dcd15c54bd70ef7c9cdf92a957e93053ff2bde47.zip |
merge
Diffstat (limited to 'builder')
-rwxr-xr-x | builder/build-initramfs.sh | 104 | ||||
-rwxr-xr-x | builder/dnbd3-rootfs/module-setup.sh | 6 | ||||
m--------- | builder/dnbd3-rootfs/scripts/rebash | 0 |
3 files changed, 63 insertions, 47 deletions
diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh index a513b752..550826cc 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' @@ -91,12 +96,16 @@ 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 fakeroot fakechroot \ - chroot qemu-nbd) + 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 @@ -133,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 @@ -178,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" @@ -232,7 +249,9 @@ function build_initramfs_parse_command_line() { } ## endregion + ## region helper + function build_initramfs_initialize_dracut() { # Downloads and compiles dracut. # @@ -285,10 +304,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 @@ -296,12 +320,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 @@ -310,28 +338,10 @@ 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}" - - # 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 @@ -345,37 +355,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." @@ -399,8 +404,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' @@ -410,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" @@ -427,9 +438,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/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index 3b60417d..87484fb3 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -188,10 +188,10 @@ install() { mount fdisk mkfs.xfs env busybox ps agetty \ insmod blockdev partx dmsetup sed cut awk tr insmod qemu-nbd \ blockdev partx dmsetup cat cut awk losetup dd mkfs.ext4 grep \ - basename dirname sort diff mktemp nohup genfstab mountpoint qemu-img + basename dirname sort mktemp diff qemu-img # Production: - # inst_multiple insmod 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 } # region vim modline diff --git a/builder/dnbd3-rootfs/scripts/rebash b/builder/dnbd3-rootfs/scripts/rebash -Subproject b77bbd65f70f56c5941f0368c2e488c470072af +Subproject 46681d9d6caef2c14b10f4512f12176a7b0c1f4 |