diff options
Diffstat (limited to 'meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh')
-rw-r--r-- | meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh | 58 |
1 files changed, 46 insertions, 12 deletions
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..62284d16b 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 +systemctl --no-reload disable first-boot-set-hostname.service |