diff options
author | Jonathan Bauer | 2020-05-13 11:04:02 +0200 |
---|---|---|
committer | Jonathan Bauer | 2020-05-13 11:04:02 +0200 |
commit | 1130873aa55c9b0a7e5af48edc44bd6c6fd1f888 (patch) | |
tree | 0fcfa186cd631d8d36611b3d4bc509fd38841d51 /builder/modules.d/dnbd3-rootfs | |
parent | Merge branch 'centos8' into downloader (diff) | |
download | systemd-init-1130873aa55c9b0a7e5af48edc44bd6c6fd1f888.tar.gz systemd-init-1130873aa55c9b0a7e5af48edc44bd6c6fd1f888.tar.xz systemd-init-1130873aa55c9b0a7e5af48edc44bd6c6fd1f888.zip |
restructure repo
* remove packager
* move everything from builder/* back to root
Diffstat (limited to 'builder/modules.d/dnbd3-rootfs')
21 files changed, 0 insertions, 857 deletions
diff --git a/builder/modules.d/dnbd3-rootfs/binaries/dnbd3 b/builder/modules.d/dnbd3-rootfs/binaries/dnbd3 deleted file mode 160000 -Subproject a6ddfe1212a2df72cacb0f44cc872b1bd0363c3 diff --git a/builder/modules.d/dnbd3-rootfs/binaries/kernel-qcow2-linux b/builder/modules.d/dnbd3-rootfs/binaries/kernel-qcow2-linux deleted file mode 160000 -Subproject 0761b3e9e03ed63b4adfd8b4a82f334352729a4 diff --git a/builder/modules.d/dnbd3-rootfs/binaries/kernel-qcow2-util-linux b/builder/modules.d/dnbd3-rootfs/binaries/kernel-qcow2-util-linux deleted file mode 160000 -Subproject 0692b963aa3cb846d8abab5ef5247c4dbb3fec9 diff --git a/builder/modules.d/dnbd3-rootfs/binaries/qemu-xmount b/builder/modules.d/dnbd3-rootfs/binaries/qemu-xmount deleted file mode 160000 -Subproject 4873cd023da8511ed9792a318d1456c94904612 diff --git a/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/Makefile b/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/Makefile deleted file mode 100644 index 406ec50f..00000000 --- a/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/Makefile +++ /dev/null @@ -1,12 +0,0 @@ -CC=gcc -OPTS=-c -Wall -SOURCES=$(wildcard *.c) -OBJECTS=$(SOURCES:.c=.o) -BINS=$(SOURCES:.c=) - -all: $(BINS) - -$(BINS): $(OBJECTS) - -clean: - rm -f $(BINS) $(OBJECTS) diff --git a/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c b/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c deleted file mode 100644 index 8f0fc108..00000000 --- a/builder/modules.d/dnbd3-rootfs/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker.c +++ /dev/null @@ -1,33 +0,0 @@ -#include <unistd.h> -#include <stdlib.h> -#include <string.h> -#include <stdio.h> - -void print_array(int argc, char *argv[]) { - // Helper function to print given array with given length. - int i = 0; - int j = 0; - for (i = 0; i < argc; i ++) { - j = 0; - while(argv[i][j] != '\0') - printf("%c", argv[i][j++]); - printf(" "); - } - printf("\n"); -} -int main(int argc, char *argv[]) { - int count; - // Last item acts as null pointer. - char **copy = calloc(sizeof(char *), argc); - // Slice first given command line argument. - for (count = 0; count < argc - 1; count++) - copy[count] = strdup(argv[count + 1]); - // Adding systemd indicator to preserve wrapped process during changing - // root filesystem. We mark wrapper and child process. - argv[0][0] = '@'; - copy[0][0] = '@'; - if (-1 == execvp(argv[1], copy)) { - perror("Executing child process failed."); - return -1; - } -} diff --git a/builder/modules.d/dnbd3-rootfs/binaries/xmount b/builder/modules.d/dnbd3-rootfs/binaries/xmount deleted file mode 160000 -Subproject 015137556fce1e21273f198ae0b9158157f74f7 diff --git a/builder/modules.d/dnbd3-rootfs/configuration/bash b/builder/modules.d/dnbd3-rootfs/configuration/bash deleted file mode 100755 index adefda40..00000000 --- a/builder/modules.d/dnbd3-rootfs/configuration/bash +++ /dev/null @@ -1,3 +0,0 @@ -alias poweroff='poweroff --force' -alias halt='poweroff' -alias reboot='reboot --force' diff --git a/builder/modules.d/dnbd3-rootfs/helper/build.inc b/builder/modules.d/dnbd3-rootfs/helper/build.inc deleted file mode 100644 index b3f9561c..00000000 --- a/builder/modules.d/dnbd3-rootfs/helper/build.inc +++ /dev/null @@ -1,291 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- - -declare -rg _mainmoddir="$(dirname "${BASH_SOURCE[0]}")/.." 2> /dev/null - -declare -rg _supported_qcow_handlers=("xmount" "kernel") -build_initialize_components() { - local qcow_handler="$_QCOW_HANDLER" - IFS='|' _pattern="^(${_supported_qcow_handlers[*]})$" export _pattern - if [[ ! "$qcow_handler" =~ $_pattern ]] ; then - echo "Unknown qcow handler '$qcow_handler' - will built all known." - echo "Supported handlers: ${_supported_qcow_handlers[*]}" - fi - _deps_base_dir="${_mainmoddir}/binaries" - # We might want to move the "binaries" repos from the dnbd3-rootfs module to main repo one day... - # TODO check for its existence using modinfo -k <kernel_version> - if [[ ! -f "${_deps_base_dir}/dnbd3/build/dnbd3.ko" ]] || \ - [[ ! -f "${_deps_base_dir}/dnbd3/build/dnbd3-client" ]]; then - echo "Could not find dnbd3, building it..." - if ! CMAKE_FLAGS="-DKERNEL_DIR=${kernel_headers}" \ - build_compile_dnbd3 "${_deps_base_dir}/dnbd3/"; then - echo "Failed to build dnbd3." - return 1 - fi - fi - # take care of the qcow handler - if [ -z "$qcow_handler" ] || [ "$qcow_handler" = "xmount" ]; then - if [[ ! -f "${_deps_base_dir}/xmount/trunk/build/src/xmount" ]]; then - echo "Could not find xmount binary, building it..." - if ! build_compile_xmount "${_deps_base_dir}/xmount/"; then - echo "Failed to build xmount binary." - return 1 - fi - fi - if [[ ! -f "${_deps_base_dir}/qemu-xmount/libxmount_input_qemu.so" ]]; then - echo "Could not find xmount qemu library, building it..." - if ! build_compile_qemu_xmount "${_deps_base_dir}/qemu-xmount/"; then - echo "Failed to build xmount qemu library." - return 1 - fi - fi - fi - if [ -z "$qcow_handler" ] || [ "$qcow_handler" = "kernel" ]; then - if [ ! -f "${_deps_base_dir}/kernel-qcow2-linux/drivers/block/loop/loop.ko" ] \ - || [ ! -f "${_deps_base_dir}/kernel-qcow2-linux/drivers/block/loop/loop_file_fmt_qcow.ko" ] \ - || [ ! -f "${_deps_base_dir}/kernel-qcow2-linux/drivers/block/loop/loop_file_fmt_raw.ko" ]; then - echo "Could not find loop kernel modules, building them..." - if ! build_compile_kernel_qcow "${_deps_base_dir}/kernel-qcow2-linux"; then - echo "Failed to build qcow loop kernel modules." - return 1 - fi - fi - if [ ! -f "${_deps_base_dir}/kernel-qcow2-util-linux/losetup" ]; then - echo "Could not find losetup with qcow2 support, building it..." - if ! build_compile_losetup_qcow "${_deps_base_dir}/kernel-qcow2-util-linux"; then - echo "Failed to build losetup with qcow support." - return 1 - fi - fi - fi - - # always compile this helper since it does not cost much to do so - if [[ ! -f "${_deps_base_dir}/systemd-preserve-process-marker/systemd-preserve-process-marker" ]]; then - echo "Could not find systemd-preserve-process-marker binary, building it ..." - if ! build_compile_systemd_preserve_process_marker \ - "${_deps_base_dir}/systemd-preserve-process-marker/"; then - echo "Failed to build systemd-preserve-process-marker" - return 1 - fi - fi - echo "Compilation of dnbd3-rootfs dependencies succeeded." - return 0 -} - -clean_components() { - local __doc__=' - Removes all compiled kernel specific files. - NOTE: This method is triggered manually and not supported by dracut itself. - - Example: - - `clean` - ' - local _submoddir="${_mainmoddir}/binaries" - build_clean_xmount "${_submoddir}/xmount/" - build_clean_qemu_xmount "${_submoddir}/qemu-xmount/" - build_clean_dnbd3 "${_submoddir}/dnbd3/" - build_clean_losetup_qcow "${_submoddir}/kernel-qcow2-util-linux" - build_clean_dnbd3 "${_submoddir}/dnbd3/" - build_clean_systemd_preserve_process_marker \ - "${_submoddir}/systemd-preserve-process-marker/" - return 0 -} -# endregion - -build_compile_qemu_xmount() { - local __doc__=' - Compiles qemu libxmount. - NOTE: expects xmount installation under - $1/../xmount/trunk/build/release_build/ - - Provides the following file: - "$1/libxmount_input_qemu.so" - - Example: - - `build_compile_qemu_xmount /qemu_source /xmount/installation` - ' - pushd "$1" - local xmount_installation="../xmount/trunk/build/release_build/usr" - [ ! -z "$2" ] && xmount_installation="$2" - ./configure --enable-xmount-input --python="$(which python2)" \ - --extra-cflags="-std=gnu99" \ - --disable-werror \ - --extra-cflags="-fPIC" \ - --extra-cflags="-I${xmount_installation}/include" \ - --extra-cflags="-I${xmount_installation}/include/xmount" \ - --disable-fdt --target-list="" - make -j libxmount_input_qemu.so - local ret=$? - popd - return $ret -} -build_clean_qemu_xmount() { - local __doc__='Clean the build of `build_compile_qemu_xmount`.' - pushd "$1" - make clean - local ret=$? - popd - return $ret -} -build_compile_xmount() { - local __doc__=' - Compiles xmount. - - Provides the xmount installation under: - "$1/trunk/build/release_build/" - - Example: - - `build_compile_xmount /xmount_source /xmount_source/build /usr` - ' - pushd "$1" - - local destination_directory="./release_build" - [ ! -z "$2" ] && destination_directory="$2" - local install_prefix="/usr" - [ ! -z "$3" ] && install_prefix="$3" - - mkdir --parents trunk/build - cd trunk/build || return 1 - cmake -DCMAKE_BUILD_TYPE=Release \ - -DCMAKE_INSTALL_PREFIX="$install_prefix" .. - make -j - make install DESTDIR="$destination_directory" - local ret=$? - popd - return $ret -} -build_clean_xmount() { - local __doc__='Clean the build of `build_compile_xmount`.' - rm --recursive --force "$1/trunk/build" -} -build_compile_dnbd3() { - local __doc__=' - Compiles dnbd3 kernel module and client. - - Provides the following file: - "$1/build/dnbd3.ko" - "$1/build/dnbd3-client" - - Examples: - - `build_compile_dnbd3 path/to/dnbd3/source/` - - Passing the kernel version to cmake: - `CMAKE_FLAGS="-DKERNEL_VERSION=4.14.6-openslx+" \ - build_compile_dnbd3 path/to/dnbd3/source/` - ' - pushd "$1" - # NOTE: The generic way would be: "./build.sh" but this tries to build - # more than we really need and takes more time. - mkdir --parents build - cd build - # Inject CMAKE_FLAGS as a way to control how cmake is called, - # e.g. to pass the kernel version - cmake ${CMAKE_FLAGS} \ - -DBUILD_FUSE_CLIENT=OFF \ - -DBUILD_KERNEL_MODULE=ON \ - -DBUILD_SERVER=OFF \ - -DBUILD_STRESSTEST=OFF \ - ../ - make -j dnbd3 dnbd3-client - local ret=$? - popd - return $ret -} -build_clean_dnbd3() { - local __doc__='Clean the build of `build_compile_dnbd3`.' - rm --recursive --force "$1/build" - return $? -} -build_compile_kernel_qcow() { - pushd "$1" - # https://lab.ks.uni-freiburg.de/projects/kernel-qcow2/wiki - if [ -z "$kernel_headers" ]; then - echo "Kernel header directory not set, ignoring." - return 1 - fi - mkdir -p "${kernel_headers}/drivers/block/loop" - for _file in \ - include/uapi/linux/loop.h \ - drivers/block/Kconfig \ - drivers/block/loop/loop_main.h \ - drivers/block/loop/loop_file_fmt.h \ - drivers/block/loop/Kconfig; do - cp -f "${_file}" "${kernel_headers}/${_file}" - done - ( - set -o errexit - make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP=m \ - M=$(pwd)/drivers/block/loop loop.ko - make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP_FILE_FMT_RAW=m \ - M=$(pwd)/drivers/block/loop loop_file_fmt_raw.ko - make -C "$kernel_headers" CONFIG_BLK_DEV_LOOP_FILE_FMT_QCOW=m \ - M=$(pwd)/drivers/block/loop loop_file_fmt_qcow.ko - ) - local ret=$? - popd - return $ret -} -build_clean_kernel_qcow() { - if [ -z "$kernel_headers" ]; then - echo "Kernel header directory not set, ignoring." - return 1 - fi - pushd "$kernel_headers" - make -C "$kernel_headers" M=$(pwd)/drivers/block/loop clean - local ret=$? - popd - return $ret -} -build_compile_losetup_qcow() { - pushd "$1" - ( - set -o errexit - ./autogen.sh - ./configure - make -j losetup - gcc -I./libsmartcols/src -O2 -o .libs/losetup sys-utils/losetup-losetup.o .libs/libcommon.a .libs/libsmartcols.a - ) - local ret=$? - popd - return $ret -} -build_clean_losetup_qcow() { - pushd "$1" - make clean - local ret=$? - popd - return $ret -} -build_compile_systemd_preserve_process_marker() { - local __doc__=' - Compiles simple c program. - - Examples: - - `build_compile_systemd_preserve_process_marker path/to/program/folder` - ' - pushd "$1" - make - local ret=$? - popd - return $ret -} -build_clean_systemd_preserve_process_marker() { - local __doc__=' - Clean the build of - `build_compile_systemd_preserve_process_marker`. - ' - pushd "$1" - make clean - local ret=$? - popd - return $ret -} -# region vim modline -# vim: set tabstop=4 shiftwidth=4 expandtab: -# vim: foldmethod=marker foldmarker=region,endregion: -# endregion diff --git a/builder/modules.d/dnbd3-rootfs/hooks/copy-dnbd3-service-into-newroot.sh b/builder/modules.d/dnbd3-rootfs/hooks/copy-dnbd3-service-into-newroot.sh deleted file mode 100755 index ddfe4992..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/copy-dnbd3-service-into-newroot.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh - -systemd_system_unit_path="$(dirname \ - "$(systemctl show -p FragmentPath dracut-mount.service | cut -c 14-)")" -new_systemd_system_unit_path="${NEWROOT}/lib/systemd/system" -cp "${systemd_system_unit_path}/dnbd3root.service" \ - "${new_systemd_system_unit_path}/dnbd3root.service" -mkdir --parents "${new_systemd_system_unit_path}/sysinit.target.wants" -ln --symbolic '../dnbd3root.service' \ - "${new_systemd_system_unit_path}/sysinit.target.wants/dnbd3root.service" diff --git a/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh b/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh deleted file mode 100755 index 5de1f2e9..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/copy-dracut-systemd-files-into-newroot.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh - -# Needed to be able to go back to dracut at system shutdown. -temporary_directory_path="$(mktemp --directory)" -mount --options bind / "$temporary_directory_path" -cp --recursive --no-target-directory "$temporary_directory_path" /run/initramfs -umount "$temporary_directory_path" -rm --dir "$temporary_directory_path" - -# Dracut may not be installed on the new root. Thus copy all services over. -dracut_mount_unit_path="$(systemctl show -p FragmentPath dracut-mount.service \ - | cut -c 14-)" -systemd_system_unit_path="${dracut_mount_unit_path%/*}" -new_systemd_system_unit_path="${NEWROOT}/lib/systemd/system" - -mkdir --parents "$new_systemd_system_unit_path/initrd.target.wants" -for file in \ - dracut-cmdline.service \ - dracut-initqueue.service \ - dracut-mount.service \ - dracut-pre-mount.service \ - dracut-pre-pivot.service \ - dracut-pre-trigger.service \ - dracut-pre-udev.service -do - cp "${systemd_system_unit_path}/${file}" \ - "${new_systemd_system_unit_path}/${file}" - # "ln" returns an error if the link already exists. - source_path="../${file}" - target_path="${new_systemd_system_unit_path}/initrd.target.wants/${file}" - ln --symbolic "$source_path" "$targetPath" &>/dev/null || \ - warn "Failed to link \"$source_path\" to \"$target_path\"." -done diff --git a/builder/modules.d/dnbd3-rootfs/hooks/copy-openslx-configuration-into-newroot.sh b/builder/modules.d/dnbd3-rootfs/hooks/copy-openslx-configuration-into-newroot.sh deleted file mode 100755 index ff01474f..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/copy-openslx-configuration-into-newroot.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh -source "/etc/openslx" - -mkdir --parents "${NEWROOT}/opt/openslx" -cp "/etc/openslx" "${NEWROOT}/opt/openslx/config" - -echo "## Generated by '$0' in stage3" >> "${NEWROOT}/opt/openslx/config" -cat "/run/openslx/network.conf" >> "${NEWROOT}/opt/openslx/config" - -# Set root/demo password for stage4, if set -if [ -n "${SLX_ROOT_PASS}" ]; then - sed -i "s#^root:[^:]*:#root:$SLX_ROOT_PASS:#" $NEWROOT/etc/shadow -fi -if [ -n "${SLX_DEMO_PASS}" ] && grep -q '^demo' $NEWROOT/etc/shadow; then - sed -i "s#^demo:[^:]*:#demo:$SLX_DEMO_PASS:#" $NEWROOT/etc/shadow -fi diff --git a/builder/modules.d/dnbd3-rootfs/hooks/enable-sysrq.sh b/builder/modules.d/dnbd3-rootfs/hooks/enable-sysrq.sh deleted file mode 100755 index 323ec45e..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/enable-sysrq.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- - -# Enables magic sysrq kernel supported key combinations. -echo 1 > /proc/sys/kernel/sysrq diff --git a/builder/modules.d/dnbd3-rootfs/hooks/fetch-config.sh b/builder/modules.d/dnbd3-rootfs/hooks/fetch-config.sh deleted file mode 100755 index a11332a7..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/fetch-config.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- -# region imports -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh -# endregion - -slx_server="$(getarg slxsrv=)" -slx_server_base="$(getarg slxbase=)" - -# build config_url -config_url="http://${slx_server#@}/${slx_server_base}/config" - -# check if system's uuid was set -if [ -s "/run/system-uuid" ]; then - uuid=$(cat "/run/system-uuid") - if [ -n "$uuid" ]; then - config_url="${config_url}?uuid=${uuid}" - fi -fi - -config_path="/etc/openslx.tmp" - -echo "Downloading '$config_url'..." -slx-tools download_retry -s "$config_url" > "$config_path" - -if [ ! -s "$config_path" ] ; then - warn "Downloading OpenSLX configuration file from '$config_url' failed with: $return_code" - emergency_shell "CRITICAL: System unusable." -fi - -if ! ash -n "$config_path"; then - warn "Downloaded OpenSLX configuration failed syntax check!" - emergency_shell "CRITICAL: System unusable." -fi - -# remember kcl server and base -{ - echo "SLX_KCL_SERVERS='$slx_server'" - echo "SLX_BASE_PATH='$slx_server_base'" - echo "# Config fetched from $config_url" - echo "CONFIG_DOWNLOAD_TIME=$(sed -r 's/^([0-9]+)\.([0-9]+).*$/\1\2/' /proc/uptime)" - echo '#_RCONFIG_TAG' -} > /etc/openslx - -# finally copy remote config into it -cat "$config_path" >> /etc/openslx - -# slxsrv overrides SLX_DNBD3_SERVERS if prefixed with @ -[ "${slx_server#@}" != "${slx_server}" ] && sed -i "s/^SLX_DNBD3_SERVERS=.*/SLX_DNBD3_SERVERS='${slx_server#@}'/" "/etc/openslx" -true diff --git a/builder/modules.d/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh b/builder/modules.d/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh deleted file mode 100755 index b3d3eb75..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh -for kmod in dnbd3 \ - "loop max_loop=8" \ - loop_file_fmt_qcow \ - loop_file_fmt_raw; do - if ! modprobe ${kmod}; then - warn "Failed to load kernel module: $kmod" - ! : - fi -done diff --git a/builder/modules.d/dnbd3-rootfs/hooks/mount-root-device.sh b/builder/modules.d/dnbd3-rootfs/hooks/mount-root-device.sh deleted file mode 100755 index 6f31bbac..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/mount-root-device.sh +++ /dev/null @@ -1,9 +0,0 @@ -type emergency_shell >/dev/null 2>&1 || source /lib/dracut-lib.sh - -source "/etc/openslx" -mount "$SLX_DNBD3_DEVICE_COW" "$NEWROOT" $SLX_MOUNT_ROOT_OPTIONS -if [ -n "$SLX_GENERATE_FSTAB_SCRIPT" ]; then - eval "$SLX_GENERATE_FSTAB_SCRIPT" -else - echo "" > "$NEWROOT/etc/fstab" -fi diff --git a/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh b/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh deleted file mode 100755 index aa782184..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/prepare-root-partition.sh +++ /dev/null @@ -1,107 +0,0 @@ -#!/usr/bin/env bash -type emergency_shell > /dev/null 2>&1 || source /lib/dracut-lib.sh -source /etc/openslx - -export PATH="/usr/local/bin:$PATH" -export LD_LIBRARY_PATH="/usr/local/lib" - - -# hardcode dnbd device path -declare -rg _dnbd3_dev="/dev/dnbd0" - -# all outputs are redirected to stderr, since this functions should -# only echo the path to the unpacked container to stdout. -container_unpack_xmount() { - local in_device="$1" - local out_path="/mnt/xmount" - mkdir -p "$out_path" - # check tools first - if ! hash xmount systemd-preserve-process-marker; then - warn "Missing xmount deps, will try raw..." 1>&2 - elif ! systemd-preserve-process-marker xmount \ - --in qemu "$in_device" \ - --out raw "$out_path" &>/dev/null; then - warn "xmount call failed, assuming raw image." 1>&2 - else - in_device="${out_path}/${_dnbd3_dev##*/}.dd" - fi - local out_device="$(losetup -f)" - if ! losetup "$out_device" "$in_device" --partscan; then - warn "Failed to attach '$in_device' to '$out_device'." - return 1 - fi - udevadm settle - echo "$out_device" -} - -container_unpack_losetup() { - local in_device="$1" - local out_device="$(losetup -f)" - if ! losetup -r -t QCOW "$out_device" "$in_device" --partscan; then - warn "Failed to attach '$in_device' to '$out_device'." - return - fi - udevadm settle - echo "$out_device" -} -# endregion - -( -IFS=", " -for host in ${SLX_DNBD3_SERVERS} FAIL; do - if [ "$host" = "FAIL" ]; then - emergency_shell "Failed to connect '${SLX_DNBD3_IMAGE}' "\ - "${SLX_DNBD3_RID:+(revision: $SLX_DNBD3_RID)} " - "from one of '$SLX_DNBD3_SERVERS' to '$_dnbd3_dev'." - fi - info "Trying host \"$host\"." - if systemd-preserve-process-marker dnbd3-client \ - --host "$host" \ - --image "${SLX_DNBD3_IMAGE}" \ - --device "$_dnbd3_dev" \ - ${SLX_DNBD3_RID:+--rid "$SLX_DNBD3_RID"}; then - break - fi -done -) -# endregion -# region unpack dnbd3 image -[ -z "$SLX_QCOW_HANDLER" ] && SLX_QCOW_HANDLER="xmount" -if [ "$SLX_QCOW_HANDLER" = "xmount" ]; then - read_only_device="$(container_unpack_xmount "$_dnbd3_dev")" -elif [ "$SLX_QCOW_HANDLER" = "kernel" ]; then - read_only_device="$(container_unpack_losetup "$_dnbd3_dev")" -else - warn "Unsupported QCOW handler: $SLX_QCOW_HANDLER" -fi - -# Fail fast if unpacking dnbd3 image failed. -[ -z "$read_only_device" ] && exit 1 - -# endregion -# region find system partition within dnbd3 image -if [ -z "$SLX_SYSTEM_PARTITION_PREPARATION_SCRIPT" ]; then - if [ -z "$SLX_SYSTEM_PARTITION_IDENTIFIER" ]; then - # if empty use whole device - read_only_partition="$read_only_device" - true - else - read_only_partition="$(slx-tools dev_find_partitions \ - "$read_only_device" "$SLX_SYSTEM_PARTITION_IDENTIFIER")" - fi -else - eval "$SLX_SYSTEM_PARTITION_PREPARATION_SCRIPT" -fi -if [[ ! $? || -z "$read_only_partition" ]]; then - warn "Failed to find unique device with identifier" \ - "\"${SLX_SYSTEM_PARTITION_IDENTIFIER}\"; matched devices:" \ - "\"${read_only_partition}\"" - exit 1 -fi -info "Using read-only partition: $read_only_partition" -# endregion - -# region add rw layer to dnbd3 image -# don't be fooled to think we are done, the next part is crucial -dmsetup-slx-device "$read_only_partition" -# endregion diff --git a/builder/modules.d/dnbd3-rootfs/hooks/set-dracut-environment-variables.sh b/builder/modules.d/dnbd3-rootfs/hooks/set-dracut-environment-variables.sh deleted file mode 100755 index ad80349b..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/set-dracut-environment-variables.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- - -# Set rootok and root as dracut expects them to be set by the module preparing -# the root filesystem. - -# Tell dracut that we parsed the command line and all needed parameters are -# available. -rootok=1 -# Tell dracut where the final root fs will be located. -root=block:/dev/devicemapper/root - -# region vim modline -# vim: set tabstop=4 shiftwidth=4 expandtab: -# vim: foldmethod=marker foldmarker=region,endregion: -# endregion diff --git a/builder/modules.d/dnbd3-rootfs/hooks/shutdown-umount.sh b/builder/modules.d/dnbd3-rootfs/hooks/shutdown-umount.sh deleted file mode 100644 index ab78733c..00000000 --- a/builder/modules.d/dnbd3-rootfs/hooks/shutdown-umount.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -source /etc/openslx - -export PATH=$PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin - -umount /oldroot -dmsetup --noudevsync remove root -losetup --detach-all -umount /mnt/* -dnbd3-client --device "$SLX_DNBD3_DEVICE" --close diff --git a/builder/modules.d/dnbd3-rootfs/module-setup.sh b/builder/modules.d/dnbd3-rootfs/module-setup.sh deleted file mode 100755 index 77543a54..00000000 --- a/builder/modules.d/dnbd3-rootfs/module-setup.sh +++ /dev/null @@ -1,231 +0,0 @@ -#!/usr/bin/env bash -# -*- coding: utf-8 -*- - - -_parse_dracut_args() { - local __doc__=' - Set log level via dracut logging options and returns current debug state. - - >>> echo "$_debug" - 1 - >>> _parse_dracut_args; echo $? - 1 - - >>> _parse_dracut_args --stdlog 3; echo $? - - >>> _parse_dracut_args --stdlog 4; echo $? - >>> logging.get_commands_level - >>> logging.get_level - 0 - debug - debug - - >>> logging.get_level - critical - >>> _parse_dracut_args --stdlog 4 --verbose - >>> logging.get_level - debug - - >>> _parse_dracut_args --stdlog 4 --unknown-dracut-option; echo $? - 0 - ' - local verbose=false - local debug=false - while true; do - case "$1" in - --stdlog) - shift - local level="$1" - shift - [[ "$level" -ge 4 ]] && debug=true - ;; - --verbose) - shift - verbose=true - ;; - '') - break - ;; - *) - shift - ;; - esac - local level - $verbose && level=info - $debug && level=debug - #logging.set_level "$level" - #logging.set_commands_level debug - done - $debug - return $? -} -# WTF does this actually do aside from taking space! -_debug=0 -_parse_dracut_args ${dracut_args[*]} || _debug=$? -# endregion - -clean() { -# Sourcing some helper functions - . "$(dirname "${BASH_SOURCE[0]}")/helper/build.inc" - clean_components -} -# region dracut plugin api -check() { -# Sourcing some helper functions - . "$(dirname "${BASH_SOURCE[0]}")/helper/build.inc" - if ! build_initialize_components; then - echo "Failed to initialize components." - return 1 - fi - # NOTE: xmount must be compiled before qemu_xmount - local xmount_is_built=true - if [[ ! -f "$moddir/binaries/xmount/trunk/build/src/xmount" ]] || - [[ ! -f "$moddir/binaries/qemu-xmount/libxmount_input_qemu.so" ]]; then - xmount_is_built=false - fi - # non-critical if failed - $xmount_is_built || warn "Compiling 'xmount'/'libxmount_input_qemu' failed." - - if [[ ! -f "$moddir/binaries/dnbd3/build/dnbd3.ko" ]] || \ - [[ ! -f "$moddir/binaries/dnbd3/build/dnbd3-client" ]]; then - CMAKE_FLAGS="-DKERNEL_VERSION=${kernel}" \ - build_compile_dnbd3 "$moddir/binaries/dnbd3/" - [[ $? != 0 ]] && return 1 - fi - if [[ ! -f "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" ]]; then - build_compile_systemd_preserve_process_marker \ - "$moddir/binaries/systemd-preserve-process-marker/" - [[ $? != 0 ]] && return 1 - fi - # TODO do we still need this ? - # NOTE: This are workarounds for: - # - distributions where "systemd-udevd" doesn't lives in "/usr/lib" but in - # "/lib". - local alternate_systemd_udevd_location='/lib/systemd/systemd-udevd' - if [[ ! -f "${systemdutildir}/systemd-udevd" ]] && \ - [[ -f "$alternate_systemd_udevd_location" ]]; then - mkdir --parents "${initdir}${systemdutildir}" - ln --symbolic --force "$alternate_systemd_udevd_location" \ - "${initdir}${systemdutildir}/systemd-udevd" - fi - # WTF? - # - "/usr/bin/sh" isn't available but "/bin/sh". - if [[ ! -f /usr/bin/sh ]] && [[ -f /bin/sh ]]; then - ln --symbolic --force /bin/sh /usr/bin/sh - fi - return 255 -} -depends() { - echo base bash kernel-modules shutdown slx-dmsetup slx-network -} -installkernel() { - local block_kmod_dir="/lib/modules/${kernel}/kernel/drivers/block" - - # dnbd3 - mkdir -p "${initdir}/${block_kmod_dir}" - inst "${moddir}/binaries/dnbd3/build/dnbd3.ko" "${block_kmod_dir}/dnbd3.ko" - - # kqcow2 kernel - local kqcow_loop_kmod_dir="${moddir}/binaries/kernel-qcow2-linux/drivers/block/loop" - if [ -e "${kqcow_loop_kmod_dir}/loop.ko" ] && \ - [ -e "${kqcow_loop_kmod_dir}/loop_file_fmt_raw.ko" ] && \ - [ -e "${kqcow_loop_kmod_dir}/loop_file_fmt_qcow.ko" ]; then - mkdir -p "${initdir}/${block_kmod_dir}/loop" - for kmod in "${kqcow_loop_kmod_dir}/"*.ko ; do - inst "$kmod" "${block_kmod_dir}/loop/$(basename $kmod)" - done - fi -} -install() { - # region binaries - inst "$moddir/binaries/dnbd3/build/dnbd3-client" /usr/local/bin/dnbd3-client - inst "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" \ - /usr/local/bin/systemd-preserve-process-marker - # xmount - local \ - xmount_installation="$moddir/binaries/xmount/trunk/build/release_build" - if [[ -f "${xmount_installation}/usr/bin/xmount" ]]; then - inst "${xmount_installation}/usr/bin/xmount" /usr/bin/xmount - for file in ${xmount_installation}/usr/lib/xmount/*; do - inst "$file" /usr/lib/xmount/"$(basename "$file")" - done - inst "$moddir/binaries/qemu-xmount/libxmount_input_qemu.so" \ - /usr/lib/xmount/libxmount_input_qemu.so - # HACK fix missing libraries for some xmount input libs - # TODO copy the dependencies using dracut functions... - inst_libdir_file 'libafflib.so*' - inst_libdir_file 'libewf.so*' - fi - # kqcow2 losetup - local losetup_qcow2_dir="$moddir/binaries/kernel-qcow2-util-linux" - if [[ -f "${losetup_qcow2_dir}/.libs/losetup" ]]; then - inst "${losetup_qcow2_dir}/.libs/losetup" /usr/local/bin/losetup - mkdir -p "${initdir}/usr/local/lib" - cp -a "${losetup_qcow2_dir}/.libs/"*.so* "${initdir}/usr/local/lib" - fi - # endregion - # region hooks - inst_hook cmdline 00 "$moddir/hooks/enable-sysrq.sh" - # NOTE: Can be used to support old style ip append syntax and have an - # exclusive interface name - required when using dracut's regular - # 'network' module - dracut_module_included "network" && inst_hook cmdline 10 \ - "$moddir/hooks/prepare-kernel-command-line-parameter.sh" - inst_hook cmdline 90 "$moddir/hooks/set-dracut-environment-variables.sh" - inst_hook pre-udev 00 "$moddir/hooks/load-custom-kernel-modules.sh" - # Get the openslx config from the servers configured in the kernel command - # line (${SLX_SERVER}/${SLX_SERVER_BASE}/config). - inst_hook pre-mount 10 "$moddir/hooks/fetch-config.sh" - # make the final blockdevice for the root system (dnbd3 -> xmount -> - # device-mapper) - if dracut_module_included "systemd-initrd"; then - inst "$moddir/hooks/prepare-root-partition.sh" \ - /usr/local/bin/dnbd3root - inst_simple "${moddir}/services/dnbd3root.service" \ - "${systemdsystemunitdir}/dnbd3root.service" - mkdir --parents \ - "${initdir}/${systemdsystemunitdir}/dracut-mount.service.requires" - ln_r "${systemdsystemunitdir}/dnbd3root.service" \ - "${systemdsystemunitdir}/dracut-mount.service.requires/dnbd3root.service" - mkdir --parents \ - "${initdir}/${systemdsystemunitdir}/initrd.target.requires" - ln_r "${systemdsystemunitdir}/dnbd3root.service" \ - "${systemdsystemunitdir}/initrd.target.requires/dnbd3root.service" - # Copy systemd services to new root (so they don't get killed after - # switch_root) - inst_hook pre-pivot 00 \ - "$moddir/hooks/copy-dnbd3-service-into-newroot.sh" - inst_hook pre-pivot 00 \ - "$moddir/hooks/copy-dracut-systemd-files-into-newroot.sh" - inst_hook pre-shutdown 00 "$moddir/hooks/shutdown-umount.sh" - else - inst_hook pre-mount 10 "$moddir/hooks/prepare-root-partition.sh" - fi - inst_hook mount 10 "$moddir/hooks/mount-root-device.sh" - inst_hook pre-pivot 00 \ - "$moddir/hooks/copy-openslx-configuration-into-newroot.sh" - # endregion - # region scripts - # endregion - # region configuration files - # Use terminal readline settings from the template system. - inst /etc/inputrc /etc/inputrc - # Set some aliases for the initramfs context. - if [[ "$_debug" == 0 ]]; then - inst "$moddir/configuration/bash" '/etc/bash.bashrc' - inst "$moddir/configuration/bash" '/etc/profile.d/aliases' - fi - # endregion - inst_multiple \ - awk \ - basename bash blockdev \ - cat cut curl \ - dd diff dirname dmsetup \ - find \ - grep \ - insmod \ - lsblk \ - mkfifo mktemp mount mountpoint \ - sed sleep sort \ - tee touch tr -} diff --git a/builder/modules.d/dnbd3-rootfs/services/dnbd3root.service b/builder/modules.d/dnbd3-rootfs/services/dnbd3root.service deleted file mode 100644 index df079576..00000000 --- a/builder/modules.d/dnbd3-rootfs/services/dnbd3root.service +++ /dev/null @@ -1,12 +0,0 @@ -[Unit] -Description=root fs on dnbd3 (distributed network block device) -After=dracut-pre-mount.service network.target -Before=dracut-mount.service -DefaultDependencies=no -IgnoreOnIsolate=true - -[Service] -Type=oneshot -RemainAfterExit=true -KillMode=none -ExecStart=/usr/local/bin/dnbd3root |