summaryrefslogtreecommitdiffstats
path: root/builder/build-initramfs.sh
diff options
context:
space:
mode:
authortorben2016-03-10 17:52:08 +0100
committertorben2016-03-10 17:52:08 +0100
commit5f3702c0f7b3b1ca1518852f1cba9f11b06f11f4 (patch)
tree0f25c21c28d0d2db2db20ac6a6747e89843ec5e4 /builder/build-initramfs.sh
parentSync (diff)
downloadsystemd-init-5f3702c0f7b3b1ca1518852f1cba9f11b06f11f4.tar.gz
systemd-init-5f3702c0f7b3b1ca1518852f1cba9f11b06f11f4.tar.xz
systemd-init-5f3702c0f7b3b1ca1518852f1cba9f11b06f11f4.zip
Improve.
Diffstat (limited to 'builder/build-initramfs.sh')
-rwxr-xr-xbuilder/build-initramfs.sh305
1 files changed, 159 insertions, 146 deletions
diff --git a/builder/build-initramfs.sh b/builder/build-initramfs.sh
index 846663a4..1adcf7ca 100755
--- a/builder/build-initramfs.sh
+++ b/builder/build-initramfs.sh
@@ -50,12 +50,12 @@ set +o errexit
## endregion
source "$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs/scripts/rebash/core.sh"
core.import exceptions
-exceptions.activate
core.import logging
core.import utils
core.import change_root
# endregion
# region properties
+build_initramfs__doc_test_setup__='exceptions.activate'
dracut_resource_url='https://www.kernel.org/pub/linux/utils/boot/dracut/dracut-043.tar.gz'
file_path='/boot/initramfs.img'
dracut_parameter='--force --no-hostonly'
@@ -413,159 +413,172 @@ cleanup() {
## endregion
# endregion
# region controller
-result=0
-if ! [ -f "/lib/modules/$(uname --kernel-release)/build/Makefile" ];then
- logging.critical 'Missing core dependency "linux-headers" to compile against given or current kernel.'
-fi
-dependency_check core dependencies utils_dependency_check program || \
- result=$?
-dependency_check core shared_library_pattern_dependencies \
- utils_dependency_check_shared_library 'shared library' || result=$?
-dependency_check core package_dependencies utils_dependency_check_pkgconfig \
- package || result=$?
-[[ $result == 0 ]] || exit $result
-
-logging.set_commands_level debug
-logging.set_level critical
-
-if ! parse_command_line "$@"; then
- print_help_message "$0"
- exit 1
-fi
+main() {
+ local __doc__='
+ Main Entry point for the build initramfs logic. Triggers command line
+ parsing and calls sub routines depending on given command line arguments.
-dependency_check optional dependencies utils_dependency_check program || \
- result=$?
-dependency_check optional shared_library_pattern_dependencies \
- utils_dependency_check_shared_library 'shared library' || result=$?
-dependency_check optional package_dependencies \
- utils_dependency_check_pkgconfig package || result=$?
-[[ $result == 1 ]] && exit $result
-## region handle delegated operations to specified target
-if [[ "$target" != '' ]]; then
- _target="$target"
- if [[ -f "$target" ]]; then
- _target="$(mktemp --directory)"
- _xmount_mountpoint_target="$(mktemp --directory)"
- xmount --in qemu "$target" --out raw "$_xmount_mountpoint_target"
- _xmount_device_target="$(losetup --find)"
- losetup "$_xmount_device_target" loopdev \
- "${_xmount_mountpoint_target}/"*.dd
- mount "$_xmount_device_target" "$_target"
+ Example:
+
+ `main`
+ '
+ exceptions.activate
+ # region dependency checks and command line parsing
+ result=0
+ if ! [ -f "/lib/modules/$(uname --kernel-release)/build/Makefile" ]; then
+ logging.critical 'Missing core dependency "linux-headers" to compile against given or current kernel.'
fi
- if [[ -d "$_target" ]]; then
- _temporary_working_directory="$(chroot "$_target" mktemp --directory)"
- mount --bind "$(pwd)" "${_target}${_temporary_working_directory}"
- _parameter_skip=false
- _parameter_to_forward=()
- for _parameter; do
- if $_parameter_skip; then
- _parameter_skip=false
- elif [[ "$_parameter" == '-t' ]] || \
- [[ "$_parameter" == '--target' ]]
- then
- _parameter_skip=true
- else
- _parameter_to_forward+=("$_parameter")
- fi
- done
- # 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 "${_target}" \
- "${_temporary_working_directory}/${BASH_SOURCE[0]}" \
- ${_parameter_to_forward[*]}
- mv "${_target}/$file_path" "$file_path"
- # Do cleanup procedures.
- umount "${_target}${_temporary_working_directory}"
- rm --recursive --force "${_target}${_temporary_working_directory}"
+ dependency_check core dependencies utils_dependency_check program || \
+ result=$?
+ dependency_check core shared_library_pattern_dependencies \
+ utils_dependency_check_shared_library 'shared library' || result=$?
+ dependency_check core package_dependencies utils_dependency_check_pkgconfig \
+ package || result=$?
+ [[ $result == 0 ]] || exit $result
+
+ logging.set_commands_level debug
+ logging.set_level critical
+
+ if ! parse_command_line "$@"; then
+ print_help_message "$0"
+ exit 1
+ fi
+
+ dependency_check optional dependencies utils_dependency_check program || \
+ result=$?
+ dependency_check optional shared_library_pattern_dependencies \
+ utils_dependency_check_shared_library 'shared library' || result=$?
+ dependency_check optional package_dependencies \
+ utils_dependency_check_pkgconfig package || result=$?
+ [[ $result == 1 ]] && exit $result
+ # endregion
+ # region handle delegated operations to specified target
+ if [[ "$target" != '' ]]; then
+ _target="$target"
if [[ -f "$target" ]]; then
- umount "$_target"
- losetup --detach "$_xmount_device_target"
- umount "$_xmount_mountpoint_target"
- rm --recursive --force "$_target" "$_xmount_mountpoint_target"
+ _target="$(mktemp --directory)"
+ _xmount_mountpoint_target="$(mktemp --directory)"
+ xmount --in qemu "$target" --out raw "$_xmount_mountpoint_target"
+ _xmount_device_target="$(losetup --find)"
+ losetup "$_xmount_device_target" loopdev \
+ "${_xmount_mountpoint_target}/"*.dd
+ mount "$_xmount_device_target" "$_target"
fi
+ if [[ -d "$_target" ]]; then
+ _temporary_working_directory="$(chroot "$_target" mktemp --directory)"
+ mount --bind "$(pwd)" "${_target}${_temporary_working_directory}"
+ _parameter_skip=false
+ _parameter_to_forward=()
+ for _parameter; do
+ if $_parameter_skip; then
+ _parameter_skip=false
+ elif [[ "$_parameter" == '-t' ]] || \
+ [[ "$_parameter" == '--target' ]]
+ then
+ _parameter_skip=true
+ else
+ _parameter_to_forward+=("$_parameter")
+ fi
+ done
+ # 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 "${_target}" \
+ "${_temporary_working_directory}/${BASH_SOURCE[0]}" \
+ ${_parameter_to_forward[*]}
+ mv "${_target}/$file_path" "$file_path"
+ # Do cleanup procedures.
+ umount "${_target}${_temporary_working_directory}"
+ rm --recursive --force "${_target}${_temporary_working_directory}"
+ if [[ -f "$target" ]]; then
+ umount "$_target"
+ losetup --detach "$_xmount_device_target"
+ umount "$_xmount_mountpoint_target"
+ rm --recursive --force "$_target" "$_xmount_mountpoint_target"
+ fi
+ 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."
+ initialize_dracut
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."
- initialize_dracut
-fi
-_dracut_modules_source='../../dnbd3-rootfs'
-_dracut_modules_target="$(dirname "${BASH_SOURCE[0]}")/dracut/modules.d/90dnbd3-rootfs"
-if [[ ! -L "$_dracut_modules_target" || "$(readlink \
- "$_dracut_modules_target")" != "$_dracut_modules_source" ]]
-then
- logging.info \
- "Link dnbd3 plugin into dracut modules folder ($_dracut_modules_source -> $_dracut_modules_target)."
- if ! ln --symbolic --force "$_dracut_modules_source" \
- "$_dracut_modules_target" 2>/dev/null; then
- logging.warn \
- "Link \"$_dracut_modules_source\" to \"$_dracut_modules_target\" fails. We will copy them. So we have to recopy it every time to ensure that recompiled things take effect."
- cp --recursive --force --no-target-directory \
- "$(dirname "${BASH_SOURCE[0]}")/$(basename "$_dracut_modules_source")" \
- "$_dracut_modules_target"
+ _dracut_modules_source='../../dnbd3-rootfs'
+ _dracut_modules_target="$(dirname "${BASH_SOURCE[0]}")/dracut/modules.d/90dnbd3-rootfs"
+ if [[ ! -L "$_dracut_modules_target" || "$(readlink \
+ "$_dracut_modules_target")" != "$_dracut_modules_source" ]]
+ then
+ logging.info \
+ "Link dnbd3 plugin into dracut modules folder ($_dracut_modules_source -> $_dracut_modules_target)."
+ if ! ln --symbolic --force "$_dracut_modules_source" \
+ "$_dracut_modules_target" 2>/dev/null; then
+ logging.warn \
+ "Link \"$_dracut_modules_source\" to \"$_dracut_modules_target\" fails. We will copy them. So we have to recopy it every time to ensure that recompiled things take effect."
+ cp --recursive --force --no-target-directory \
+ "$(dirname "${BASH_SOURCE[0]}")/$(basename "$_dracut_modules_source")" \
+ "$_dracut_modules_target"
+ fi
fi
-fi
-## endregion
-## region prepare and perform final dracut call
-_loglevel=''
-if [ "$verbose" == 'yes' ]; then
- _loglevel='--verbose'
-fi
-_modules='dnbd3-rootfs'
-if [ "$debug" == 'yes' ]; then
- _loglevel="$_loglevel --stdlog 4"
- _modules="$_modules i18n terminfo"
-fi
-if [ "$use_systemd_in_initramfs" == 'yes' ]; then
- _modules="$_modules systemd systemd-initrd dracut-systemd"
-fi
-if [[ "$full_cleanup" == 'yes' ]]; then
- logging.info 'Removing all modules.'
- rm "$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs" \
- "$(dirname "${BASH_SOURCE[0]}")/dracut" --recursive --force
-elif [[ "$cleanup" == 'yes' ]]; then
- logging.info 'Removing distribution specific files.'
- cleanup
-else
- logging.info 'Build initramfs.'
- # NOTE: We deactivate our exception handle since dracut returns "1" if it
- # is launched with help parameter ("-h" or "--help").
- exceptions.deactivate
- # NOTE: We temporary allow dracut to forward all messages since we forward
- # all logging configurations.
- _commands_log_level_backup="$(logging.get_commands_level)"
- _log_level_backup="$(logging.get_level)"
- logging.set_level debug
- logging.set_commands_level debug
- "$(dirname "${BASH_SOURCE[0]}")/dracut/dracut.sh" --local \
- $_loglevel --modules "$_modules" ${dracut_parameter[*]} "$file_path"
- _return_code=$?
- logging.set_commands_level "$_commands_log_level_backup"
- logging.set_level "$_log_level_backup"
- if [[ "$_return_code" != 0 ]]; then
- logging.error 'Building initial ram file system fails.'
- exit 1
+ # endregion
+ # region prepare and perform final dracut call
+ _loglevel=''
+ if [ "$verbose" == 'yes' ]; then
+ _loglevel='--verbose'
fi
- exceptions.activate
-fi
-exceptions.deactivate
-## endregion
+ _modules='dnbd3-rootfs'
+ if [ "$debug" == 'yes' ]; then
+ _loglevel="$_loglevel --stdlog 4"
+ _modules="$_modules i18n terminfo"
+ fi
+ if [ "$use_systemd_in_initramfs" == 'yes' ]; then
+ _modules="$_modules systemd systemd-initrd dracut-systemd"
+ fi
+ if [[ "$full_cleanup" == 'yes' ]]; then
+ logging.info 'Removing all modules.'
+ rm "$(dirname "${BASH_SOURCE[0]}")/dnbd3-rootfs" \
+ "$(dirname "${BASH_SOURCE[0]}")/dracut" --recursive --force
+ elif [[ "$cleanup" == 'yes' ]]; then
+ logging.info 'Removing distribution specific files.'
+ cleanup
+ else
+ logging.info 'Build initramfs.'
+ # NOTE: We deactivate our exception handle since dracut returns "1" if it
+ # is launched with help parameter ("-h" or "--help").
+ exceptions.deactivate
+ # NOTE: We temporary allow dracut to forward all messages since we forward
+ # all logging configurations.
+ _commands_log_level_backup="$(logging.get_commands_level)"
+ _log_level_backup="$(logging.get_level)"
+ logging.set_level debug
+ logging.set_commands_level debug
+ "$(dirname "${BASH_SOURCE[0]}")/dracut/dracut.sh" --local \
+ $_loglevel --modules "$_modules" ${dracut_parameter[*]} "$file_path"
+ _return_code=$?
+ logging.set_commands_level "$_commands_log_level_backup"
+ logging.set_level "$_log_level_backup"
+ if [[ "$_return_code" != 0 ]]; then
+ logging.error 'Building initial ram file system fails.'
+ exit 1
+ fi
+ exceptions.activate
+ fi
+ # endregion
+ exceptions.deactivate
+}
# endregion
# region vim modline
# vim: set tabstop=4 shiftwidth=4 expandtab: