diff options
| author | jandob | 2016-01-21 15:29:05 +0100 |
|---|---|---|
| committer | jandob | 2016-01-21 15:29:05 +0100 |
| commit | ad9d66426c3a00c81da5ab76ba6269948d6609d0 (patch) | |
| tree | c22fe002d7f590fe957f6d3f12096733a8df0d90 /builder/dnbd3-rootfs/scripts | |
| parent | debugging (diff) | |
| download | systemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.tar.gz systemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.tar.xz systemd-init-ad9d66426c3a00c81da5ab76ba6269948d6609d0.zip | |
add xmount; refactor
Diffstat (limited to 'builder/dnbd3-rootfs/scripts')
3 files changed, 92 insertions, 0 deletions
diff --git a/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh b/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh new file mode 100644 index 00000000..ea3f2620 --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/container-unpack-qemu.sh @@ -0,0 +1,39 @@ +#!/usr/bin/env bash + +# region imports + +source "/usr/lib/rebash/core.sh" +core.import exceptions +exceptions.activate + +# endregion + +in_device="$1" +nbd_device="$2" # TODO detect first free nbd device + +systemd-preserve-process-marker qemu-nbd --connect="$nbd_device" \ + "$in_device" --read-only --persistent --nocache + +# TODO better way to wait for the device to be made? +i=0 +while [ ! -b "$nbd_device" ]; do + [ $i -ge 20 ] && exit 1 + if [ $UDEVVERSION -ge 143 ]; then + udevadm settle --exit-if-exists="$nbd_device" + else + sleep 0.1 + fi + i=$(($i + 1)) +done + +# NBD doesn't emit uevents when it gets connected, so kick it +# TODO get path from $nbd_device +echo change > /sys/block/nbd0/uevent +udevadm settle + +# region vim modline + +# vim: set tabstop=4 shiftwidth=4 expandtab: +# vim: foldmethod=marker foldmarker=region,endregion: + +# endregion diff --git a/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh b/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh new file mode 100644 index 00000000..a5658e25 --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/container-unpack-xmount.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash + +# region imports + +source "/usr/lib/rebash/core.sh" +core.import exceptions +exceptions.activate + +# endregion + +in_device="$1" + +mkdir /mnt +systemd-preserve-process-marker xmount --in qemu $in_device --out raw /mnt +loop_device="$(losetup -f)" +losetup "$loop_device" /mnt/*.dd --partscan +udevadm settle +echo "$loop_device" + +# region vim modline + +# vim: set tabstop=4 shiftwidth=4 expandtab: +# vim: foldmethod=marker foldmarker=region,endregion: + +# endregion diff --git a/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh b/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh new file mode 100644 index 00000000..67c14314 --- /dev/null +++ b/builder/dnbd3-rootfs/scripts/device-add-write-layer.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +# region imports + +source "/usr/lib/rebash/core.sh" +core.import exceptions +exceptions.activate + +# endregion +combined_device_name="$1" +read_only_device="$2" +writable_device="$3" +persistent="$4" # P or N +chunksize='1' + +partition_size="$(blockdev --getsz "$read_only_device")" +writable_partition_name='root' +modprobe dm_snapshot +dmsetup create "$combined_device_name" --noudevsync --table \ + "0 $partition_size snapshot $read_only_device $writable_device $persistent $chunksize" +dmsetup mknodes --noudevsync "$combined_device_name" + +# region vim modline + +# vim: set tabstop=4 shiftwidth=4 expandtab: +# vim: foldmethod=marker foldmarker=region,endregion: + +# endregion |
