diff options
| author | jandob | 2016-01-21 17:41:00 +0100 |
|---|---|---|
| committer | jandob | 2016-01-21 17:41:00 +0100 |
| commit | 9b89d1346861065516ed8e2129156e24dca67fff (patch) | |
| tree | 33a2f7a3af03adb1af2c21a51564d72b80b2906b | |
| parent | set qemu submodule to libxmount_input branch (diff) | |
| download | systemd-init-9b89d1346861065516ed8e2129156e24dca67fff.tar.gz systemd-init-9b89d1346861065516ed8e2129156e24dca67fff.tar.xz systemd-init-9b89d1346861065516ed8e2129156e24dca67fff.zip | |
bugfixes
| -rwxr-xr-x | builder/dnbd3-rootfs/binaries/nbd/Makefile | 15 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/hooks/fetch-config.sh | 1 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh | 13 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/hooks/prepare-root-partition.sh | 8 | ||||
| -rwxr-xr-x | builder/dnbd3-rootfs/module-setup.sh | 42 | ||||
| -rw-r--r-- | builder/dnbd3-rootfs/scripts/build.sh | 81 |
6 files changed, 73 insertions, 87 deletions
diff --git a/builder/dnbd3-rootfs/binaries/nbd/Makefile b/builder/dnbd3-rootfs/binaries/nbd/Makefile deleted file mode 100755 index 2bd08b8e..00000000 --- a/builder/dnbd3-rootfs/binaries/nbd/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -obj-m += nbd.o - -all: build - -build: update - make --directory /lib/modules/$(shell uname --kernel-release)/build M=$(PWD) modules - -install: - make --directory /lib/modules/$(shell uname --kernel-release)/build M=$(PWD) modules_install - -clean: - make --directory /lib/modules/$(shell uname --kernel-release)/build M=$(PWD) clean - -update: - curl --location --remote-name "https://raw.githubusercontent.com/torvalds/linux/v$(shell uname --kernel-release | cut --delimiter='.' --fields=1-2)/drivers/block/nbd.c" diff --git a/builder/dnbd3-rootfs/hooks/fetch-config.sh b/builder/dnbd3-rootfs/hooks/fetch-config.sh index 299e3135..709d49a9 100755 --- a/builder/dnbd3-rootfs/hooks/fetch-config.sh +++ b/builder/dnbd3-rootfs/hooks/fetch-config.sh @@ -20,7 +20,6 @@ slx_server_base="$(getargs slxbase=)" logging.info 'Getting configuration file.' IFS_backup="$IFS" IFS="," -host for host in ${slx_server}; do logging.info "Trying host \"$host\"." if wget --timeout 5 "http://${host}/${slx_server_base}${configuration_file_name}" \ diff --git a/builder/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh b/builder/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh index 02d697d3..653dc9a7 100755 --- a/builder/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh +++ b/builder/dnbd3-rootfs/hooks/load-custom-kernel-modules.sh @@ -1,13 +1,6 @@ ( # subshell for variable scoping -NBD_MOD_PATH="/usr/lib/modules/current/extra/nbd.ko" DNBD3_MOD_PATH="/usr/lib/modules/current/extra/dnbd3.ko" -# do we actually have our modules? -if [ ! -e "${NBD_MOD_PATH}" ]; then - warn "No such file of directory: ${NBD_MOD_PATH}" - emergency_shell -n "Error in $0" - exit 1 -fi if [ ! -e "${DNBD3_MOD_PATH}" ]; then warn "No such file of directory: ${DNBD3_MOD_PATH}" emergency_shell -n "Error in $0" @@ -20,10 +13,4 @@ if ! insmod "${DNBD3_MOD_PATH}"; then emergency_shell -n "Error in $0" exit 1 fi - -if ! modprobe nbd max_part=16; then - warn "Failed to load NBD kernel module..." - emergency_shell -n "Error in $0" - exit 1 -fi ) || exit $? diff --git a/builder/dnbd3-rootfs/hooks/prepare-root-partition.sh b/builder/dnbd3-rootfs/hooks/prepare-root-partition.sh index 3af24960..a9407287 100755 --- a/builder/dnbd3-rootfs/hooks/prepare-root-partition.sh +++ b/builder/dnbd3-rootfs/hooks/prepare-root-partition.sh @@ -36,7 +36,7 @@ if [[ $return_code != 0 ]]; then exit 1 fi # endregion - +# region scan partitions read_only_device="" if ! qemu-img info --output json "$SLX_DNBD3_DEVICE" | grep '"format": "raw"' then @@ -51,7 +51,9 @@ else udevadm settle read_only_device="$loop_device" fi -# region detect read-only partition +# endregion + +# region find read-only partition for i in 0.5 1 2; do if read_only_partition=$(utils.find_block_device \ "$SLX_SYSTEM_PARTITION_IDENTIFIER" "$read_only_device"); then @@ -65,7 +67,7 @@ for i in 0.5 1 2; do done # endregion -# region detect writable partition +# region find writable partition if ! persistent_device=$(utils.find_block_device \ "$SLX_WRITABLE_DEVICE_IDENTIFIER"); then logging.warn "Failed to find unique device with identifier" \ diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index 8b16e71a..b86273be 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -15,16 +15,11 @@ clean() { # NOTE: This method is currently triggered manually and not supported by # dracut itself. - if [[ -f "$moddir/binaries/nbd/nbd.ko" ]]; then - build_clean_nbd "$moddir/binaries/nbd/" - fi - if [[ -f "$moddir/binaries/dnbd3/build/dnbd3.ko" || ! -f "$moddir/binaries/dnbd3/build/dnbd3-client" ]]; then - build_clean_dnbd3 "$moddir/binaries/dnbd3/" - fi - if [[ -f "$moddir/binaries/systemd-preserve-process-marker/systemd-preserve-process-marker" ]]; then - build_clean_systemd_preserve_process_marker \ - "$moddir/binaries/systemd-preserve-process-marker/" - fi + build_clean_xmount "$moddir/binaries/xmount/" + build_clean_qemu_xmount "$moddir/binaries/qemu-xmount/" + build_clean_dnbd3 "$moddir/binaries/dnbd3/" + build_clean_systemd_preserve_process_marker \ + "$moddir/binaries/systemd-preserve-process-marker/" return 0 } @@ -32,8 +27,13 @@ check() { exceptions.activate - if [[ ! -f "$moddir/binaries/nbd/nbd.ko" ]]; then - build_compile_nbd "$moddir/binaries/nbd/" + if [[ ! -f "$moddir/binaries/xmount/trunk/build/src/xmount" ]] || \ + [[ ! -f "$moddir/binaries/xmount/trunk/build/libxmount_input/libxmount_input_raw/libxmount_input_raw.so" ]] + then + build_compile_xmount "$moddir/binaries/xmount/" + fi + if [[ ! -f "$moddir/binaries/qemu-xmount/libxmount_input_qemu.so" ]]; then + build_compile_qemu_xmount "$moddir/binaries/qemu-xmount/" fi if [[ ! -f "$moddir/binaries/dnbd3/build/dnbd3.ko" ]] || \ [[ ! -f "$moddir/binaries/dnbd3/build/dnbd3-client" ]] @@ -76,8 +76,6 @@ depends() { installkernel() { inst "$moddir/binaries/dnbd3/build/dnbd3.ko" \ /usr/lib/modules/current/extra/dnbd3.ko - inst "$moddir/binaries/nbd/nbd.ko" \ - /usr/lib/modules/current/extra/nbd.ko # Debugging: instmods cfg80211 rfkill vboxsf nls_iso8859_1 ppdev nls_cp437 iosf_mbi \ @@ -108,6 +106,19 @@ install() { /usr/bin/device-add-write-layer inst "$moddir/scripts/container-unpack-xmount.sh" \ /usr/bin/container-unpack-xmount + # xmount + inst "$moddir/binaries/xmount/trunk/build/src/xmount" /usr/bin/xmount + inst_dir /usr/lib/xmount + inst "$moddir/binaries/xmount/trunk/build/libxmount_input/libxmount_input_raw/libxmount_input_raw.so" \ + /usr/local/lib/xmount/libxmount_input_raw.so + inst "$moddir/binaries/xmount/trunk/build/libxmount_morphing/libxmount_morphing_combine/libxmount_morphing_combine.so" \ + /usr/local/lib/xmount/libxmount_morphing_combine.so + inst "$moddir/binaries/xmount/trunk/build/libxmount_morphing/libxmount_morphing_raid/libxmount_morphing_raid.so" \ + /usr/local/lib/xmount/libxmount_morphing_raid.so + inst "$moddir/binaries/xmount/trunk/build/libxmount_morphing/libxmount_morphing_unallocated/libxmount_morphing_unallocated.so" \ + /usr/local/lib/xmount/libxmount_morphing_unallocated.so + inst "$moddir/binaries/qemu-xmount/libxmount_input_qemu.so" \ + /usr/local/lib/xmount/libxmount_input_qemu.so # endregion @@ -183,9 +194,6 @@ install() { insmod blockdev partx dmsetup sed cut awk tr insmod \ blockdev partx dmsetup cat cut awk losetup dd mkfs.ext4 grep \ basename dirname sort mktemp diff qemu-img genfstab mountpoint xmount - for file in "/usr/local/lib/xmount/*"; do - inst_simple $file - done # Production: # inst_multiple insmod blockdev partx dmsetup sed cat cut awk tr touch \ # losetup grep basename dirname mktemp diff sleep wget mount sort \ diff --git a/builder/dnbd3-rootfs/scripts/build.sh b/builder/dnbd3-rootfs/scripts/build.sh index 186bdef4..1aa835ab 100644 --- a/builder/dnbd3-rootfs/scripts/build.sh +++ b/builder/dnbd3-rootfs/scripts/build.sh @@ -1,10 +1,49 @@ source "$(dirname "${BASH_SOURCE[0]}")/rebash/core.sh" core.import logging -build_clean_qemu_nbd() { - # removes qemu-nbd. +build_compile_qemu_xmount() { + # Downloads and compiles qemu libxmount. # - rm --recursive --force "$1/*" + # Provides the following file: + # "$1/libxmount_input_qemu.so" + + pushd "$1" + ./configure --enable-xmount-input --extra-cflags=-fPIC \ + --python=$(which python2) + make libxmount_input_qemu.so + local ret=$? + popd + return $ret +} +build_clean_qemu_xmount() { + pushd "$1" + make clean + popd + return $? +} +build_compile_xmount() { + # Downloads and compiles xmount + # + # Provides the following files: + # "$1/trunk/build/libxmount_input/libxmount_input_raw/libxmount_input_raw.so" + # "$1/trunk/build/src/xmount" + pushd "$1" + mkdir -p trunk/build + cd trunk/build + cmake -DCMAKE_BUILD_TYPE=Release .. + make + local ret=$? + popd + return $ret +} +build_clean_xmount() { + rm -rf "$1/trunk/build" +} +build_clean_qemu_nbd() { + pushd "$1" + make clean + popd + return $? } build_compile_qemu_nbd() { # Downloads and compiles qemu-nbd. @@ -23,8 +62,6 @@ build_compile_qemu_nbd() { #yaourt --noconfirm -S glib2-static glibc-static pcre-static #exit pushd "$(dirname $1)" - [ ! -e qemu ] && git clone git://git.qemu.org/qemu.git qemu - cd qemu # TODO check what other features can be disabled # --static ./configure --target-list=x86_64-linux-user \ @@ -75,10 +112,7 @@ build_compile_dnbd3() { # ... # Provides the following file: # "$1/build/dnbd3.ko" - pushd "$1/.." - rm --recursive --force "$1" - git clone git://git.openslx.org/dnbd3.git - cd dnbd3 + pushd "$1" ./build.sh popd return $? @@ -117,32 +151,3 @@ build_clean_systemd_preserve_process_marker() { popd return $? } -build_mount_partition() { - # Mounts a partition at given offset. - # - # Examples: - # - # >>> build_mount_partition /dev/DEVICE_NAME PARTITION_IDENTIFIER - # ... - local device="$1" - local partition_identifier="$2" - local loop_device="$(losetup --find)" - - local sector_size="$(blockdev --getbsz "$device")" - local partition_info="(partx --raw --noheadings --output START,NAME,UUID \ - "$device" 2>/dev/null| grep part)" - local offset_sectors="$(echo "$partition_identifier" | \ - cut --delimiter=' ' --fields=1)" - if [ -z "$offset_sectors" ]; then - logging.warn "could not find partition with identifier \"$partition_identifier\" on device $device" - return 1 - fi - # NOTE: Could overflow on 32bit systems - # logging.warn "$(("$offset_sectors"*512))" - local offset_bytes="$(echo | awk -v x="$offset_sectors" -v y="$sector_size" '{print x * y}')" - - # NOTE: Test if mount works directly (problem with btrfs device id). - # mount --verbose --options loop,offset="$offset_bytes" "$device" "$mount_point" - losetup --verbose --offset "$offset_bytes" "$loop_device" "$device" - echo "$loop_device" -} |
