From 173965e73ed4d3712aa5eec2c688d2b8e25a98c5 Mon Sep 17 00:00:00 2001 From: asmithakarun Date: Wed, 26 Jun 2019 02:04:53 -0500 Subject: meta-openpower: avahi: Append MAC address to the hostname The idea of this commit is to handle situations where the serial number is not written into bmc-vpd. In such cases, the MAC address will be appended with the hostname to make the hostname unique. Tested By: 1. When BMC Serial Number is present: Output: root@witherspoon-YL10UF78A0H4:~# hostname witherspoon-YL10UF78A0H4 2. In the absence of BMC Serial Number, MAC Address is appended: Output: root@witherspoon:/# hostname witherspoon After enabling first-boot-set-hostname.service and reboot, root@witherspoon-70e284143365:/# hostname witherspoon-70e284143365 3. When Inventory interface is not found: Output: Exits with error: "No Ethernet interface found in the Inventory. Unique hostname not set!" Hostname will not be set. It remains the same. (From meta-openpower rev: d9e4700f7a09894fdd17b2fe97e51cf88135c585) Signed-off-by: asmithakarun Signed-off-by: Brad Bishop Change-Id: Ia753e9797ee1627bf3ddd2edbb7ceed81fccad12 Signed-off-by: Brad Bishop --- .../first-boot-set-hostname.sh | 56 +++++++++++++++++----- 1 file changed, 45 insertions(+), 11 deletions(-) (limited to 'meta-openpower') diff --git a/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh index 42a85b873..401dd9de8 100644 --- a/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh +++ b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh @@ -12,9 +12,10 @@ sync_hostname() { MAPPER_IFACE='xyz.openbmc_project.ObjectMapper' MAPPER_PATH='/xyz/openbmc_project/object_mapper' INVENTORY_PATH='/xyz/openbmc_project/inventory' + BMC_ITEM_IFACE='xyz.openbmc_project.Inventory.Item.Bmc' INV_ASSET_IFACE='xyz.openbmc_project.Inventory.Decorator.Asset' - + BMC_SN='' BMC_ITEM_PATH=$(busctl --no-pager --verbose call \ ${MAPPER_IFACE} \ ${MAPPER_PATH} \ @@ -30,21 +31,54 @@ sync_hostname() { BMC_ITEM_SERVICE=$(mapper get-service \ ${BMC_ITEM_PATH} 2>/dev/null || true) - if [[ -z "${BMC_ITEM_SERVICE}" ]]; then + if [[ -n "${BMC_ITEM_SERVICE}" ]]; then + BMC_SN=$(busctl get-property ${BMC_ITEM_SERVICE} \ + ${BMC_ITEM_PATH} \ + ${INV_ASSET_IFACE} SerialNumber) + # 's "002B0DH1000"' + BMC_SN=${BMC_SN#*\"} + BMC_SN=${BMC_SN%\"*} + else show_error "No BMC item found in the Inventory. Is VPD EEPROM empty?" - return fi - BMC_SN=$(busctl get-property ${BMC_ITEM_SERVICE} \ - ${BMC_ITEM_PATH} \ - ${INV_ASSET_IFACE} SerialNumber) - # 's "002B0DH1000"' - BMC_SN=${BMC_SN#*\"} - BMC_SN=${BMC_SN%\"*} + if [[ -z "${BMC_SN}" ]] ; then + show_error "BMC Serial Number empty! Setting Hostname as 'hostname + mac address' " + + NETWORK_ITEM_IFACE='xyz.openbmc_project.Inventory.Item.NetworkInterface' + NETWORK_ITEM_PATH=$(busctl --no-pager --verbose call \ + ${MAPPER_IFACE} \ + ${MAPPER_PATH} \ + ${MAPPER_IFACE} \ + GetSubTree sias \ + ${INVENTORY_PATH} 0 1 ${NETWORK_ITEM_IFACE} \ + 2>/dev/null | grep ${INVENTORY_PATH} || true) + + NETWORK_ITEM_PATH=${NETWORK_ITEM_PATH#*\"} + NETWORK_ITEM_PATH=${NETWORK_ITEM_PATH%\"*} + + NETWORK_ITEM_OBJ=$(mapper get-service ${NETWORK_ITEM_PATH} 2>/dev/null || true) + + if [[ -z "${NETWORK_ITEM_OBJ}" ]]; then + show_error 'No Ethernet interface found in the Inventory. Unique hostname not set!' + exit 1 + fi + + MAC_ADDR=$(busctl get-property ${NETWORK_ITEM_OBJ} \ + ${NETWORK_ITEM_PATH} \ + ${NETWORK_ITEM_IFACE} MACAddress) + + # 's "54:52:01:02:03:04"' + MAC_ADDR=${MAC_ADDR#*\"} + MAC_ADDR=${MAC_ADDR%\"*} + + hostnamectl set-hostname $(hostname)-${MAC_ADDR} + else + hostnamectl set-hostname $(hostname)-${BMC_SN} + fi - hostnamectl set-hostname {MACHINE}-${BMC_SN} } -[ "$(hostname)" = "{MACHINE}" ] && sync_hostname +sync_hostname systemctl disable first-boot-set-hostname.service -- cgit v1.2.3