23 lines
1007 B
Bash
23 lines
1007 B
Bash
#!/usr/bin/env bash
|
|||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
# Require a local native Linux daemon, not SSH/TCP or Docker Desktop's VM.
|
||
|
|
[[ $(uname -s) == Linux ]] || { echo 'Local Linux Docker required.' >&2; exit 1; }
|
||
|
|
if [[ -n ${DOCKER_CONTEXT:-} ]]; then
|
||
|
|
endpoint=$(docker context inspect "$DOCKER_CONTEXT" --format '{{.Endpoints.docker.Host}}')
|
||
|
|
elif [[ -n ${DOCKER_HOST:-} ]]; then
|
||
|
|
endpoint=$DOCKER_HOST
|
||
|
|
else
|
||
|
|
endpoint=$(docker context inspect --format '{{.Endpoints.docker.Host}}')
|
||
|
|
fi
|
||
|
|
[[ $endpoint == unix://* ]] || { echo 'Remote Docker endpoints are unsupported.' >&2; exit 1; }
|
||
|
|
os=$(docker info --format '{{.OperatingSystem}}')
|
||
|
|
[[ $os != *"Docker Desktop"* ]] || { echo 'Docker Desktop USB mapping is unsupported.' >&2; exit 1; }
|
||
|
|
|
||
|
|
# shellcheck source=.devcontainer/usb.sh
|
||
|
|
source "$(dirname "${BASH_SOURCE[0]}")/usb.sh"
|
||
|
|
output="$(dirname "${BASH_SOURCE[0]}")/compose.usb.yaml"
|
||
|
|
tmp=$(mktemp "$output.tmp.XXXXXX")
|
||
|
|
trap 'rm -f "$tmp"' EXIT
|
||
|
|
generate_usb /sys/bus/usb/devices /dev/bus/usb > "$tmp"
|
||
|
|
mv "$tmp" "$output"
|