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