diff options
-rw-r--r-- | .SRCINFO | 19 | ||||
-rw-r--r-- | PKGBUILD | 37 | ||||
-rwxr-xr-x | server.sh | 35 | ||||
-rw-r--r-- | virt-domain-by-addr-sysusers.conf | 1 | ||||
-rw-r--r-- | virt-domain-by-addr.service | 12 |
5 files changed, 104 insertions, 0 deletions
diff --git a/.SRCINFO b/.SRCINFO new file mode 100644 index 000000000000..ed21e97a7f1a --- /dev/null +++ b/.SRCINFO @@ -0,0 +1,19 @@ +pkgbase = virt-domain-by-addr + pkgdesc = A basic server written in shell answering with a libvirt domain name when given a mac + pkgver = 1.0.0 + pkgrel = 1 + url = https://github.com/vbouchaud/aur/tree/main/virt-domain-by-addr + arch = any + license = MIT + depends = netcat + depends = libvirt + source = LICENSE::https://bouchaud.org/misc/MIT.txt + source = server.sh + source = virt-domain-by-addr-sysusers.conf + source = virt-domain-by-addr.service + sha256sums = 35e3cbe726e28f2f624acbe4fce8af09715e55537df7aa22ac89f00cde399515 + sha256sums = 8cc9675b089121fb8ff1c71b7274568f32839b812c22ca5cccd9530c5c3e4507 + sha256sums = b6b86d4cce7774016d03f1ded10d4b37a93e05a7ae2439f03860c5c10beed837 + sha256sums = 4e74b7cd4ba113510ce25a249b9143761679b51823002a9d937918245cbbf289 + +pkgname = virt-domain-by-addr diff --git a/PKGBUILD b/PKGBUILD new file mode 100644 index 000000000000..37051314a7d4 --- /dev/null +++ b/PKGBUILD @@ -0,0 +1,37 @@ +# Maintainer: Vianney Bouchaud <aur dot vianney at bouchaud dot org> + +pkgname=virt-domain-by-addr +pkgdesc="A basic server written in shell answering with a libvirt domain name when given a mac" +pkgver=1.0.0 +pkgrel=1 +arch=('any') +url='https://github.com/vbouchaud/aur/tree/main/virt-domain-by-addr' +license=('MIT') +depends=( + netcat + libvirt +) + +source=( + LICENSE::https://bouchaud.org/misc/MIT.txt + server.sh + virt-domain-by-addr-sysusers.conf + virt-domain-by-addr.service +) + +sha256sums=( + 35e3cbe726e28f2f624acbe4fce8af09715e55537df7aa22ac89f00cde399515 + 8cc9675b089121fb8ff1c71b7274568f32839b812c22ca5cccd9530c5c3e4507 + b6b86d4cce7774016d03f1ded10d4b37a93e05a7ae2439f03860c5c10beed837 + 4e74b7cd4ba113510ce25a249b9143761679b51823002a9d937918245cbbf289 +) + +package() { + install -D -m0755 "$srcdir/server.sh" "$pkgdir/usr/bin/virt-domain-by-addr" + + install -D -m0644 "$srcdir/LICENSE" "$pkgdir/usr/share/licenses/$pkgname/LICENSE" + + install -D -m0644 "$srcdir/virt-domain-by-addr-sysusers.conf" "$pkgdir/usr/lib/sysusers.d/virt-domain-by-addr.conf" + install -D -m0644 "$srcdir/virt-domain-by-addr.service" "$pkgdir/usr/lib/systemd/system/virt-domain-by-addr.service" + +} diff --git a/server.sh b/server.sh new file mode 100755 index 000000000000..011c40d0eec2 --- /dev/null +++ b/server.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env sh +tmpdir=$(mktemp -d) + +mkfifo "${tmpdir}/response" + +handle() { + while read line; do + trline=$(echo "$line" | tr -d '[\r\n]') + [ -z "$trline" ] && break + + echo $trline + MAC_REGEX='.*\s.*mac=(.{17})\sHTTP.*' + [[ "$trline" =~ $MAC_REGEX ]] && + MAC=$(echo $trline | sed -E "s/$MAC_REGEX/\1/") + done + + domain=$(for name in $(virsh list --name); do virsh domiflist "${name}" | grep -i -q "${MAC}" && echo "${name}" && break; done) + echo "${domain}" + ([[ -z "${MAC}" ]] || [[ -z "${domain}" ]]) && + domain="-" + + RESPONSE="$(cat <<EOF +HTTP/1.1 200 +Content-Type: text/plain + +${domain} +EOF +)" + + echo -e "$RESPONSE" > "${tmpdir}/response" +} + +while true; do + cat "${tmpdir}/response" | nc -lN "${PORT:-3000}" | handle +done diff --git a/virt-domain-by-addr-sysusers.conf b/virt-domain-by-addr-sysusers.conf new file mode 100644 index 000000000000..0f9cd9f20749 --- /dev/null +++ b/virt-domain-by-addr-sysusers.conf @@ -0,0 +1 @@ +u vdba -:libvirt "virt-domain-by-addr daemon" / diff --git a/virt-domain-by-addr.service b/virt-domain-by-addr.service new file mode 100644 index 000000000000..a77955c12516 --- /dev/null +++ b/virt-domain-by-addr.service @@ -0,0 +1,12 @@ +[Service] +Environment="LIBVIRT_DEFAULT_URI=qemu:///system" +User=vdba +ExecStart=/usr/bin/virt-domain-by-addr +Restart=on-failure + +[Unit] +Description=virt-domain-by-addr +After=network.target + +[Install] +WantedBy=default.target |