Move scripts to bin/ directory
This commit is contained in:
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
# returns an unused nbd device
|
||||
for sys_path in /sys/block/nbd[0-9]*; do
|
||||
[ -d "$sys_path" ] || continue
|
||||
|
||||
if [ -f "$sys_path/size" ] && [ "$(< "$sys_path/size")" -eq 0 ] ; then
|
||||
TARGET="/dev/${sys_path##*/}"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
if [ -z "$TARGET" ]; then
|
||||
echo "Error: no free NBD device found" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo $TARGET
|
||||
Executable
+39
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
# readies a VHD device in Linux
|
||||
# nbd-mount /path/to/vhd /dev/nbd0
|
||||
APP_DIR="$(dirname "$0")"
|
||||
NBD_FIND_FREE="$APP_DIR/nbd-find-free"
|
||||
DRIVE="$1"
|
||||
DISK_LABEL="$2"
|
||||
DISK_PATH="/dev/disk/by-label/$DISK_LABEL"
|
||||
SLEEP_INTERVAL=0.5
|
||||
|
||||
# find an empty nbd device
|
||||
NBD_TARGET="$($NBD_FIND_FREE)"
|
||||
if [ -z "$NBD_TARGET" ]; then
|
||||
echo "Cannot find free nbd device"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# refuse to connect twice
|
||||
EXISTING_DRIVE=$(pgrep -f "qemu-nbd.*$DRIVE")
|
||||
if [ -n "$EXISTING_DRIVE" ]; then
|
||||
echo "$DRIVE already mounted" >&2
|
||||
exit 1
|
||||
fi
|
||||
EXISTING_NBD="$(pgrep -f "qemu-nbd.*$NBD_TARGET")"
|
||||
if [ -n "$EXISTING_NBD" ]; then
|
||||
echo "$NBD_TARGET already mounted" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
|
||||
# wait for device to appear
|
||||
if ! [ -e "$DISK_PATH" ]; then
|
||||
qemu-nbd --connect="$NBD_TARGET" "$DRIVE"
|
||||
|
||||
# poll until the block device node appears or task times out
|
||||
until [ -L "$DISK_PATH" ] && [ -b "$DISK_PATH" ]; do
|
||||
sleep "$SLEEP_INTERVAL"
|
||||
done
|
||||
fi
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# returns succesful when nbd is ready
|
||||
if [ -b /dev/nbd0 ]; then
|
||||
exit 0
|
||||
fi
|
||||
exit 1
|
||||
Executable
+36
@@ -0,0 +1,36 @@
|
||||
#!/bin/bash
|
||||
# disconnects a VHD device from linux (should be unmounted)
|
||||
# nbd-unmount path-to-vhd
|
||||
DRIVE="$1"
|
||||
QEMU_NBD_COMMAND="ps aux|grep '[q]emu-nbd.*--connect='|tr -s ' '|cut -f 11- -d ' '"
|
||||
|
||||
if [ -z "$DRIVE" ]; then
|
||||
echo "Drive not provided"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! [ -f "$DRIVE" ]; then
|
||||
echo "$DRIVE not existing"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# iterate over all mounted nbds
|
||||
NBD_TARGET=
|
||||
while read MOUNT; do
|
||||
if echo "$MOUNT" | egrep "$DRIVE$" > /dev/null; then
|
||||
NBD_TARGET="$(echo "$MOUNT" | sed -E 's!.*(--connect=?|-c\s+)([^[:space:]]+).*!\2!g')"
|
||||
fi
|
||||
done < <(eval "$QEMU_NBD_COMMAND")
|
||||
|
||||
if [ -z "$NBD_TARGET" ]; then
|
||||
echo "$DRIVE not mounted"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo going to unmount "$NBD_TARGET"
|
||||
if mount | grep ^"$NBD_TARGET" -q ; then
|
||||
echo "$NBD_TARGET mounted, refusing to detach"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo qemu-nbd --disconnect=$NBD_TARGET
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
# wait until nbd is ready
|
||||
APP_DIR="$(dirname "$0")"
|
||||
NBD_READY="$APP_DIR/nbd-ready"
|
||||
INTERVAL=0.5
|
||||
|
||||
TIMEOUT=$1
|
||||
SECONDS=0
|
||||
|
||||
until $NBD_READY; do
|
||||
if [ "$TIMEOUT" ] && (( SECONDS >= "$TIMEOUT" )); then
|
||||
echo "Timeout waiting for NBD" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep $INTERVAL
|
||||
done
|
||||
Executable
+7
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
# returns if windows is mounted
|
||||
MOUNTED="$(mount | egrep -w '^C:\\')"
|
||||
if [ -z "$MOUNTED" ]; then
|
||||
exit 1
|
||||
fi
|
||||
echo "$MOUNTED" | sed -n 's/^.* on \(.*\) type [a-zA-Z0-9_.]\+ (.*)$/\1/p'
|
||||
Executable
+8
@@ -0,0 +1,8 @@
|
||||
#!/bin/bash
|
||||
# returns succesful when wsl interop is ready
|
||||
shopt -s nullglob
|
||||
if [ -f /proc/sys/fs/binfmt_misc/WSLInterop ] && \
|
||||
sockets=(/run/WSL/*_interop) && [ -S "${sockets[0]:-}" ]; then
|
||||
exit 0
|
||||
fi
|
||||
exit 1
|
||||
Executable
+17
@@ -0,0 +1,17 @@
|
||||
#!/bin/bash
|
||||
# wait until wsl environment is ready
|
||||
APP_DIR="$(dirname "$0")"
|
||||
WSL_INTEROP_READY="$APP_DIR/wsl-interop-ready"
|
||||
INTERVAL=0.5
|
||||
|
||||
TIMEOUT=$1
|
||||
SECONDS=0
|
||||
|
||||
until $WSL_INTEROP_READY; do
|
||||
if [ "$TIMEOUT" ] && (( SECONDS >= "$TIMEOUT" )); then
|
||||
echo "Timeout waiting for WSL socket dir" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
sleep $INTERVAL
|
||||
done
|
||||
Executable
+33
@@ -0,0 +1,33 @@
|
||||
#!/bin/bash
|
||||
# mounts a windows VHD in wsl
|
||||
APP_DIR="$(dirname "$0")"
|
||||
WINDOWS_MOUNT="$APP_DIR/windows-mount"
|
||||
WSL_PATH="$APP_DIR/wsl-path"
|
||||
WSL_INTEROP_READY="$APP_DIR/wsl-interop-ready"
|
||||
SLEEP_INTERVAL=0.5
|
||||
|
||||
DRIVE="$1"
|
||||
DISK_LABEL="$2"
|
||||
DISK_PATH="/dev/disk/by-label/$DISK_LABEL"
|
||||
|
||||
if ! $WINDOWS_MOUNT >/dev/null; then
|
||||
echo "Error: Windows not mounted" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! $WSL_INTEROP_READY; then
|
||||
echo "Error: WSL Interop not ready" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WSL="$($WSL_PATH)"
|
||||
if ! [ -e "$DISK_PATH" ]; then
|
||||
$WSL --mount --bare --vhd "$DRIVE"
|
||||
|
||||
# poll until the block device node appears or task times out
|
||||
until [ -L "$DISK_PATH" ] && [ -b "$DISK_PATH" ]; do
|
||||
sleep "$SLEEP_INTERVAL"
|
||||
done
|
||||
fi
|
||||
|
||||
exit 0
|
||||
Executable
+6
@@ -0,0 +1,6 @@
|
||||
#!/bin/bash
|
||||
# outputs the wsl.exe path by constructing the C:\Windows\System32 mountpoint
|
||||
APP_DIR="$(dirname "$0")"
|
||||
WINDOWS_MOUNT="$APP_DIR/windows-mount"
|
||||
WINDOWS="$($WINDOWS_MOUNT)" || { echo Windows not mounted; exit 1; }
|
||||
echo "$WINDOWS/Windows/System32/wsl.exe"
|
||||
Executable
+20
@@ -0,0 +1,20 @@
|
||||
#!/bin/bash
|
||||
APP_DIR="$(dirname "$0")"
|
||||
WINDOWS_MOUNT="$APP_DIR/windows-mount"
|
||||
WSL_INTEROP_READY="$APP_DIR/wsl-interop-ready"
|
||||
WSL_PATH="$APP_DIR/wsl-path"
|
||||
|
||||
DRIVE="$1"
|
||||
|
||||
if ! $WINDOWS_MOUNT >/dev/null; then
|
||||
echo "Error: Windows not mounted" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if ! $WSL_INTEROP_READY; then
|
||||
echo "Error: WSL Interop not found in /run/WSL" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
WSL="$($WSL_PATH)"
|
||||
$WSL --unmount "$DRIVE"
|
||||
Reference in New Issue
Block a user