summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO19
-rw-r--r--PKGBUILD37
-rwxr-xr-xserver.sh35
-rw-r--r--virt-domain-by-addr-sysusers.conf1
-rw-r--r--virt-domain-by-addr.service12
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