1SUMMARY = "Phosphor OpenBMC IPMI daemon" 2DESCRIPTION = "Phosphor OpenBMC IPMI router and plugin libraries" 3PR = "r1" 4PV = "1.0+git${SRCPV}" 5LICENSE = "Apache-2.0" 6LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" 7 8RRECOMMENDS:${PN} += "packagegroup-obmc-ipmid-providers-libs" 9 10inherit meson pkgconfig 11inherit obmc-phosphor-ipmiprovider-symlink 12inherit obmc-phosphor-sdbus-service 13inherit obmc-phosphor-systemd 14inherit phosphor-ipmi-host 15inherit python3native 16 17def ipmi_whitelists(d): 18 whitelists = d.getVar( 19 'VIRTUAL-RUNTIME_phosphor-ipmi-providers', True) or '' 20 whitelists = whitelists.split() 21 whitelists = [ '{}-whitelist-native'.format(x) for x in whitelists ] 22 return ' '.join(whitelists) 23 24PACKAGECONFIG ??= "allowlist i2c-allowlist boot-flag-safe-mode softoff libuserlayer entity-manager-decorators" 25PACKAGECONFIG[dynamic-sensors] = "-Ddynamic-sensors=enabled,-Ddynamic-sensors=disabled" 26PACKAGECONFIG[hybrid-sensors] = "-Dhybrid-sensors=enabled,-Dhybrid-sensors=disabled" 27PACKAGECONFIG[allowlist] = "-Dipmi-whitelist=enabled,-Dipmi-whitelist=disabled" 28PACKAGECONFIG[i2c-allowlist] = "-Di2c-whitelist-check=enabled,-Di2c-whitelist-check=disabled" 29PACKAGECONFIG[transport-oem] = "-Dtransport-oem=enabled,-Dtransport-oem=disabled" 30PACKAGECONFIG[boot-flag-safe-mode] = "-Dboot-flag-safe-mode-support=enabled,-Dboot-flag-safe-mode-support=disabled" 31PACKAGECONFIG[softoff] = "-Dsoftoff=enabled,-Dsoftoff=disabled" 32PACKAGECONFIG[update-functional-on-fail] = "-Dupdate-functional-on-fail=enabled,-Dupdate-functional-on-fail=disabled" 33PACKAGECONFIG[libuserlayer] = "-Dlibuserlayer=enabled,-Dlibuserlayer=disabled" 34PACKAGECONFIG[sensors-cache] = "-Dsensors-cache=enabled,-Dsensors-cache=disabled" 35PACKAGECONFIG[entity-manager-decorators] = "-Dentity-manager-decorators=enabled,-Dentity-manager-decorators=disabled" 36PACKAGECONFIG[dynamic-storages-only] = "-Ddynamic-storages-only=enabled,-Ddynamic-storages-only=disabled" 37 38DEPENDS += "nlohmann-json" 39DEPENDS += "openssl" 40DEPENDS += "phosphor-state-manager" 41DEPENDS += "${@ipmi_whitelists(d)}" 42DEPENDS += "phosphor-dbus-interfaces" 43DEPENDS += "phosphor-logging" 44DEPENDS += "libmapper" 45DEPENDS += "sdbusplus" 46DEPENDS += "${PYTHON_PN}-sdbus++-native" 47DEPENDS += "virtual/phosphor-ipmi-inventory-sel" 48DEPENDS += "virtual/phosphor-ipmi-fru-merge-config" 49DEPENDS += "virtual/phosphor-ipmi-sensor-inventory" 50DEPENDS += "boost" 51DEPENDS += "sdeventplus" 52DEPENDS += "${PYTHON_PN}-native" 53DEPENDS += "${PYTHON_PN}-pyyaml-native" 54DEPENDS += "${PYTHON_PN}-mako-native" 55 56VIRTUAL-RUNTIME_ipmi-config ?= "phosphor-ipmi-config" 57 58RDEPENDS:${PN} += "clear-once" 59RDEPENDS:${PN} += "phosphor-network" 60RDEPENDS:${PN} += "phosphor-time-manager" 61RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_ipmi-config}" 62RDEPENDS:${PN} += "phosphor-watchdog" 63RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_obmc-bmc-state-manager}" 64RDEPENDS:${PN} += "phosphor-software-manager-version" 65RDEPENDS:${PN} += "phosphor-software-manager-updater" 66 67inherit useradd 68 69USERADD_PACKAGES = "${PN}" 70# add ipmi group 71GROUPADD_PARAM:${PN} = "ipmi" 72 73SYSTEMD_SERVICE:${PN} += "xyz.openbmc_project.Ipmi.Internal.SoftPowerOff.service phosphor-ipmi-host.service" 74 75RRECOMMENDS:${PN} += "phosphor-settings-manager" 76 77 78require ${BPN}.inc 79 80# Setup IPMI Whitelist Conf files 81WHITELIST_CONF = " \ 82 ${STAGING_DATADIR_NATIVE}/phosphor-ipmi-host/*.conf \ 83 ${S}/host-ipmid-whitelist.conf \ 84 " 85EXTRA_OEMESON = " \ 86 -Dsensor-yaml-gen=${STAGING_DIR_NATIVE}${sensor_datadir}/sensor.yaml \ 87 -Dinvsensor-yaml-gen=${STAGING_DIR_NATIVE}${sensor_datadir}/invsensor.yaml \ 88 -Dfru-yaml-gen=${STAGING_DIR_NATIVE}${config_datadir}/fru_config.yaml \ 89 " 90EXTRA_OEMESON:append = " \ 91 -Dwhitelist-conf="${WHITELIST_CONF}" \ 92 " 93 94EXTRA_OEMESON:append = " -Dtests=disabled" 95 96S = "${WORKDIR}/git" 97 98SRC_URI += "file://merge_yamls.py " 99 100HOSTIPMI_PROVIDER_LIBRARY += "libipmi20.so" 101HOSTIPMI_PROVIDER_LIBRARY += "libsysintfcmds.so" 102HOSTIPMI_PROVIDER_LIBRARY += "libusercmds.so" 103 104NETIPMI_PROVIDER_LIBRARY += "libipmi20.so" 105NETIPMI_PROVIDER_LIBRARY += "libusercmds.so" 106 107FILES:${PN}:append = " ${libdir}/host-ipmid/lib*${SOLIBS}" 108FILES:${PN}:append = " ${libdir}/ipmid-providers/lib*${SOLIBS}" 109FILES:${PN}:append = " ${libdir}/net-ipmid/lib*${SOLIBS}" 110FILES:${PN}:append = " ${systemd_system_unitdir}/phosphor-ipmi-host.service.d/*.conf" 111FILES:${PN}-dev:append = " ${libdir}/ipmid-providers/lib*${SOLIBSDEV} ${libdir}/ipmid-providers/*.la" 112 113# Soft Power Off 114# install the soft power off service in the host shutdown target 115SOFT_SVC = "xyz.openbmc_project.Ipmi.Internal.SoftPowerOff.service" 116SOFT_TGTFMT = "obmc-host-shutdown@{0}.target" 117SOFT_FMT = "../${SOFT_SVC}:${SOFT_TGTFMT}.requires/${SOFT_SVC}" 118SYSTEMD_LINK:${PN} += "${@compose_list_zip(d, 'SOFT_FMT', 'OBMC_HOST_INSTANCES')}" 119 120#Collect all hardcoded sensor yamls from different recipes and 121#merge all of them with sensor.yaml. 122python do_merge_sensors () { 123 import subprocess 124 125 # TODO: Perform the merge in a temporary directory? 126 workdir = d.getVar('WORKDIR', True) 127 nativedir = d.getVar('STAGING_DIR_NATIVE', True) 128 sensorsdir = d.getVar('sensor_datadir', True) 129 sensorsdir = sensorsdir[1:] 130 sensorsdir = os.path.join(nativedir, sensorsdir) 131 cmd = [] 132 cmd.append(os.path.join(workdir, 'merge_yamls.py')) 133 cmd.append(os.path.join(sensorsdir, 'sensor.yaml')) 134 135 if os.stat(os.path.join(sensorsdir, 'sensor.yaml')).st_size == 0: 136 return 137 fetch = bb.fetch2.Fetch([], d) 138 override_urls = [url for url in fetch.urls if url.endswith('.hardcoded.yaml')] 139 for url in override_urls: 140 bb.debug(2, 'Overriding with source: ' + url) 141 local_base = os.path.basename(fetch.localpath(url)) 142 filename = os.path.join(workdir, local_base) 143 cmd.append(filename) 144 145 # Invoke the script and don't catch any resulting exception. 146 subprocess.check_call(cmd) 147} 148 149# python-pyyaml-native is installed by do_configure, so put this task after 150addtask merge_sensors after do_configure before do_compile 151 152IPMI_HOST_NEEDED_SERVICES = "\ 153 mapper-wait@-xyz-openbmc_project-control-host{}-boot.service \ 154 mapper-wait@-xyz-openbmc_project-control-host{}-boot-one_time.service \ 155 mapper-wait@-xyz-openbmc_project-control-host{}-power_restore_policy.service \ 156 mapper-wait@-xyz-openbmc_project-control-host{}-restriction_mode.service \ 157 " 158 159do_install:append() { 160 161 # Create service override file. 162 override_dir=${D}${systemd_system_unitdir}/phosphor-ipmi-host.service.d 163 override_file=${override_dir}/10-override.conf 164 mkdir -p ${override_dir} 165 echo "[Unit]" > ${override_file} 166 167 # Insert host-instance based service dependencies. 168 for i in ${OBMC_HOST_INSTANCES}; 169 do 170 for s in ${IPMI_HOST_NEEDED_SERVICES}; 171 do 172 service=$(echo ${s} | sed "s/{}/${i}/g") 173 echo "Wants=${service}" >> ${override_file} 174 echo "After=${service}" >> ${override_file} 175 done 176 done 177} 178