diff options
author | gson <gson@pkgsrc.org> | 2011-12-06 16:13:42 +0000 |
---|---|---|
committer | gson <gson@pkgsrc.org> | 2011-12-06 16:13:42 +0000 |
commit | b0fad7cc2c32d7fd934607f1f4343b8c1854243c (patch) | |
tree | eed810fdb17065bb76261033d54b656db8bd4957 /sysutils/mkmemstick/files | |
parent | 7dd81821af9bc3a6d1cd3936184de9f8f4305b10 (diff) | |
download | pkgsrc-b0fad7cc2c32d7fd934607f1f4343b8c1854243c.tar.gz |
Find the first free vnd device using next_avil () function from Robert Elz
instead of hardcoding vnd0.
Diffstat (limited to 'sysutils/mkmemstick/files')
-rw-r--r-- | sysutils/mkmemstick/files/mkmemstick.sh | 49 |
1 files changed, 45 insertions, 4 deletions
diff --git a/sysutils/mkmemstick/files/mkmemstick.sh b/sysutils/mkmemstick/files/mkmemstick.sh index b1960db5b4e..db7b1716a98 100644 --- a/sysutils/mkmemstick/files/mkmemstick.sh +++ b/sysutils/mkmemstick/files/mkmemstick.sh @@ -32,14 +32,55 @@ drivedata: 0 a: @SECTORS@ 0 4.2BSD 1024 8192 0 d: @SECTORS@ 0 unused 0 0 " -vnddev="vnd0" -vndmnt="${dstbase}/mnt" - die() { echo "fatal: $0" exit 2 } +next_avail () +{ + local dev="$1" + local N=$(( ${#dev} + 1 )) + local unit units + + units=$( + sysctl -n hw.disknames | + tr ' ' '\012' | + grep '^'"${dev}"'[0-9]' | + sort -n -k 1.$N ) + + test -z "${units}" && { + test -e "/dev/${dev}0a" || { + echo >&2 "No ${dev}s available!" + return 1 + } + echo "${dev}0" + return + } + + N=0 + for unit in ${units} + do + if [ "${unit}" = "${dev}${N}" ] + then + N=$(( N + 1 )) + else + echo "${dev}${N}" + return + fi + done + + test -e /dev/"${dev}${N}a" || { + echo >&2 "All ${dev}s in use" + return 1 + } + + echo "${dev}${N}" +} + +vnddev=$(next_avail vnd) +vndmnt="${dstbase}/mnt" + if [ -z "$img" ]; then echo "usage: $0 source.iso memdisk.img" exit 1 @@ -62,7 +103,7 @@ fi mkdir -p "$dst" || die "couldn't create directory $dst" printf " => extracting iso image..." -vnconfig "$vnddev" "$src" +vnconfig "$vnddev" "$src" || die "couldn't configure vnd device $vnddev" mkdir "$vndmnt" mount -r -t cd9660 "/dev/${vnddev}a" "$vndmnt" (cd "$vndmnt" && tar cf - .) | (cd "$dst" && tar xf -) |