From 89bd384d4518e0d45bf7e103a789c6638c2fc22d Mon Sep 17 00:00:00 2001 From: Alexander Filippov Date: Wed, 22 May 2019 11:07:30 +0300 Subject: meta-openpower: Set unique BMC hostname To prevent hostnames conflicts this service appends to the default hostname a Serial Number retrieved from Inventory Manager. This operation is executed only at the first boot or after a factory reset. This will be skipped if hostname is manually configured to a non default value. (From meta-openpower rev: 55281dffb43c4c59a5fce24727627fa3de1498fe) Change-Id: I9c3aa7c19cf595a599baab71b2af49defb4b8c76 Signed-off-by: Alexander Filippov Signed-off-by: Brad Bishop --- .../first-boot-set-hostname.service | 13 ++++++ .../first-boot-set-hostname.sh | 46 ++++++++++++++++++++++ .../network/first-boot-set-hostname_1.0.bb | 22 +++++++++++ 3 files changed, 81 insertions(+) create mode 100644 meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.service create mode 100644 meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh create mode 100644 meta-openpower/recipes-phosphor/network/first-boot-set-hostname_1.0.bb (limited to 'meta-openpower/recipes-phosphor/network') diff --git a/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.service b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.service new file mode 100644 index 000000000..ce59b3377 --- /dev/null +++ b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.service @@ -0,0 +1,13 @@ +[Unit] +Description=Init BMC Hostname +Wants=mapper-wait@-xyz-openbmc_project-inventory.service +After=mapper-wait@-xyz-openbmc_project-inventory.service + +[Service] +ExecStart=/usr/bin/first-boot-set-hostname.sh +Type=oneshot +RemainAfterExit=Yes + +[Install] +WantedBy=multi-user.target + 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 new file mode 100644 index 000000000..541523760 --- /dev/null +++ b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname/first-boot-set-hostname.sh @@ -0,0 +1,46 @@ +#!/bin/sh -eu + +show_error() { + echo "$@" >&2 +} + +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' + + BMC_ITEM_PATH=$(busctl --no-pager --verbose call \ + ${MAPPER_IFACE} \ + ${MAPPER_PATH} \ + ${MAPPER_IFACE} \ + GetSubTree sias \ + ${INVENTORY_PATH} 0 1 ${BMC_ITEM_IFACE} \ + 2>/dev/null | grep ${INVENTORY_PATH} || true) + + # ' STRING "/xyz/openbmc_project/inventory/system/chassis/bmc";' + BMC_ITEM_PATH=${BMC_ITEM_PATH#*\"} + BMC_ITEM_PATH=${BMC_ITEM_PATH%\"*} + + BMC_ITEM_SERVICE=$(mapper get-service \ + ${BMC_ITEM_PATH} 2>/dev/null || true) + + if [[ -z "${BMC_ITEM_SERVICE}" ]]; then + echo "No BMC item found in the Inventory. Is VPD EEPROM empty?" >&2 + return + fi + + BMC_SN=$(busctl get-property ${BMC_ITEM_SERVICE} \ + ${BMC_ITEM_PATH} \ + ${BMC_ITEM_IFACE} SerialNumber) + # 's "002B0DH1000"' + BMC_SN=${BMC_SN#*\"} + BMC_SN=${BMC_SN%\"*} + + hostnamectl set-hostname {MACHINE}-${BMC_SN} +} + +[ "$(hostname)" = "{MACHINE}" ] && sync_hostname + +systemctl disable first-boot-set-hostname.service + diff --git a/meta-openpower/recipes-phosphor/network/first-boot-set-hostname_1.0.bb b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname_1.0.bb new file mode 100644 index 000000000..1e9fdd66f --- /dev/null +++ b/meta-openpower/recipes-phosphor/network/first-boot-set-hostname_1.0.bb @@ -0,0 +1,22 @@ +SUMMARY = "Init BMC Hostname" +DESCRIPTION = "Setup BMC Unique hostname" +PR = "r1" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${OPENPOWERBASE}/COPYING.apache-2.0;md5=34400b68072d710fecd0a2940a0d1658" + +inherit allarch systemd + +RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_base-utils}" + +SYSTEMD_SERVICE_${PN} = "first-boot-set-hostname.service" + +SRC_URI = "file://${PN}.sh file://${PN}.service" + +S = "${WORKDIR}" +do_install() { + sed "s/{MACHINE}/${MACHINE}/" -i ${PN}.sh + install -d ${D}${bindir} ${D}${systemd_system_unitdir} + install ${PN}.sh ${D}${bindir}/ + install -m 644 ${PN}.service ${D}${systemd_system_unitdir}/ +} + -- cgit v1.2.3