confd: allow setting factory hostname from qemu_fw_cfg

This patch adds support for overriding the default hostname generation
on Qemu systems with the /sys/firmware/qemu_fw_cfg/by_name/opt/hostname
file.  E.g., virtual Infamy test systems using Qeneth.

Signed-off-by: Joachim Wiberg <troglobit@gmail.com>
This commit is contained in:
Joachim Wiberg
2024-04-29 08:44:44 +02:00
committed by Tobias Waldekranz
parent bb18afa883
commit c3a227289d
+15 -24
View File
@@ -1,38 +1,29 @@
#!/bin/sh
# Generate ietf-system.yang hostname based on:
# 1. Command line argument + MAC suffix
# 2. Specific hostname from qemu_fw_cfg, from Qeneth
# 3. /etc/hostname from squashfs + MAC suffix
#
set -e
base_mac_lowest_physical()
gen()
{
ip -d -j link show | jq -r '
.[] |
select(.link_type == "ether") |
select(has("linkinfo") | not) | .address' \
| sort | head -n 1
}
base_mac=$(jq -r '.["mac-address"]' /run/system.json)
if [ -z "$base_mac" ] || [ "$base_mac" = "null" ]; then
base_mac=00:00:00:00:00:00
fi
source_base_mac()
{
# TODO: Source the base MAC from the vital product data memory, if
# available.
# base_mac=$(base_mac_vpd)
# [ "$base_mac" ] && return
base_mac=$(base_mac_lowest_physical)
[ "$base_mac" ] && return
base_mac=00:00:00:00:00:00
echo "$1-$(echo $base_mac | tail -c 9 | tr ':' '-')"
}
if [ "$1" ]; then
sysname="$1"
sysname=$(gen "$1")
elif [ -f "/sys/firmware/qemu_fw_cfg/by_name/opt/hostname/raw" ]; then
sysname="$(cat /sys/firmware/qemu_fw_cfg/by_name/opt/hostname/raw)"
else
sysname="$(cat /etc/hostname)"
sysname=$(gen "$(cat /etc/hostname)")
fi
source_base_mac
sysname="${sysname}-$(echo $base_mac | tail -c 9 | tr ':' '-')"
cat <<EOF
{
"ietf-system:system": {