diff options
4 files changed, 53 insertions, 37 deletions
diff --git a/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh index 9f617b09..2000d3fb 100755 --- a/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh +++ b/builder/dnbd3-rootfs/hooks/cmdline/prepare-network-kcl-parameter.sh @@ -7,22 +7,22 @@ command -v warn >/dev/null || . /lib/dracut-lib.sh mount -t tmpfs tmpfs /fake for parameter in $(getargs ip=); do - local temp="$parameter:" - set -- - while [ -n "$temp" ]; do - set -- "$@" "${temp%%:*}" - temp=${temp#*:} - done - - [ -n "$1" ] && ip=$1 - [ -n "$2" ] && server_ip=$2 - [ -n "$3" ] && gateway_ip=$3 - [ -n "$4" ] && net_mask=$4 - - warn "PXE given net configuration: ip: $ip server_ip: $server_ip gateway_ip: $gateway_ip net_mask: $net_mask" - local final_dracut_ip_config="$ip::$gateway_ip:$net_mask:hiwi-test-28:eno1:none" - warn "Final dracut ip config: $final_dracut_ip_config" - sed --regexp-extended "s/ip=[^ ]*/ip=$final_dracut_ip_config/g" /proc/cmdline > /fake/cmdline + local temp="$parameter:" + set -- + while [ -n "$temp" ]; do + set -- "$@" "${temp%%:*}" + temp=${temp#*:} + done + + [ -n "$1" ] && ip=$1 + [ -n "$2" ] && server_ip=$2 + [ -n "$3" ] && gateway_ip=$3 + [ -n "$4" ] && net_mask=$4 + + warn "PXE given net configuration: ip: $ip server_ip: $server_ip gateway_ip: $gateway_ip net_mask: $net_mask" + local final_dracut_ip_config="$ip::$gateway_ip:$net_mask:hiwi-test-28:eno1:none" + warn "Final dracut ip config: $final_dracut_ip_config" + sed --regexp-extended "s/ip=[^ ]*/ip=$final_dracut_ip_config/g" /proc/cmdline > /fake/cmdline done diff --git a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh index 8b5ea48e..ade25de0 100755 --- a/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh +++ b/builder/dnbd3-rootfs/hooks/pre-mount/prepare-root-partition.sh @@ -1,29 +1,17 @@ -function create_partition_via_offset() { - local device="$1" - local nameOrUUID="$2" - local loopDevice=$(losetup -f) +source "/usr/lib/utils.sh" - local sectorSize=$(blockdev --getbsz $device) - local partitionInfo=$(partx --raw --noheadings --output START,NAME,UUID /dev/nbd0 2>/dev/null| grep $nameOrUUID) - local offsetSectors=$(echo $partitionInfo | cut -d' ' -f1) - if [ -z "$offsetSectors" ]; then - warn "could not find partition with label/uuid '$nameOrUUID' on device $device" - return 1 - fi - #warn $(($offsetSectors*512)) # could overflow on 32bit systems - local offsetBytes=$(echo $| awk -v x=$offsetSectors -v y=$sectorSize '{print x * y}') - - # test if mount works directly (problem with btrfs device id) - #mount -v -o loop,offset=$offsetBytes $device $mountPoint - losetup -v -o $offsetBytes $loopDevice $device - echo $loopDevice -} +declare -rg DNBD3_SERVER="gateway" +declare -rg DNBD3_IMAGE="archLinux.qcow2" +declare -rg DNBD3_RID="0" +declare -rg DNBD3_DEVICE="/dev/dnbd0" # Close previous connections to be able to run this script many times. dnbd3-client --device /dev/dnbd0 --close && \ -dnbd3-client --host gateway --image archLinux.qcow2 --device /dev/dnbd0 && \ +dnbd3-client --host "$DNBD3_SERVER" --image "$DNBD3_IMAGE" --device \ + "$DNBD3_DEVICE" --rid "$DNBD3_RID" && \ qemu-nbd --connect=/dev/nbd0 /dev/dnbd0 --read-only && \ -local read_only_partition="$(create_partition_via_offset /dev/nbd0 system)" && \ +local read_only_partition="$(utils_create_partition_via_offset \ + /dev/nbd0 system)" && \ # Make read-only partition writable. # TODO implement persistent available indicator. if true; then diff --git a/builder/dnbd3-rootfs/module-setup.sh b/builder/dnbd3-rootfs/module-setup.sh index f29a71c9..b2307a77 100755 --- a/builder/dnbd3-rootfs/module-setup.sh +++ b/builder/dnbd3-rootfs/module-setup.sh @@ -56,6 +56,12 @@ install() { inst_hook pre-pivot 00 "$moddir/hooks/pre-pivot/mount-tmp.sh" + # endregion + + # region scripts + + inst "$moddir/scripts/utils.sh" "/usr/lib/utils.sh" + # endregion ## TODO deprecated diff --git a/builder/dnbd3-rootfs/scripts/utils.sh b/builder/dnbd3-rootfs/scripts/utils.sh index 4c0ffee2..95a17af4 100644 --- a/builder/dnbd3-rootfs/scripts/utils.sh +++ b/builder/dnbd3-rootfs/scripts/utils.sh @@ -99,3 +99,25 @@ function utils_dependency_check() { done return $result } +function utils_create_partition_via_offset() { + local device="$1" + local nameOrUUID="$2" + local loopDevice=$(losetup -f) + + local sectorSize=$(blockdev --getbsz $device) + local partitionInfo=$(partx --raw --noheadings --output START,NAME,UUID /dev/nbd0 2>/dev/null| grep $nameOrUUID) + local offsetSectors=$(echo $partitionInfo | cut -d' ' -f1) + if [ -z "$offsetSectors" ]; then + warn "could not find partition with label/uuid '$nameOrUUID' on device $device" + return 1 + fi + #warn $(($offsetSectors*512)) # could overflow on 32bit systems + local offsetBytes=$(echo $| awk -v x=$offsetSectors -v y=$sectorSize '{print x * y}') + + # test if mount works directly (problem with btrfs device id) + #mount -v -o loop,offset=$offsetBytes $device $mountPoint + losetup -v -o $offsetBytes $loopDevice $device + echo $loopDevice +} + + |