From 436e19902cf8f23717c3605903248dcb273b890e Mon Sep 17 00:00:00 2001 From: "Robin H. Johnson" Date: Sat, 24 Oct 2020 14:37:04 -0700 Subject: sys-apps/ipmitool: cleanup init & add contrib tools Signed-off-by: Robin H. Johnson --- .../files/exchange-bmc-os-info-1.8.18.initd | 23 +++ .../ipmitool/files/ipmitool-1.8.18-ipmievd.confd | 27 +++ .../ipmitool/files/ipmitool-1.8.18-ipmievd.initd | 28 +++ sys-apps/ipmitool/files/log_bmc-1.8.18.initd | 25 +++ .../ipmitool/ipmitool-1.8.18_p20201004-r2.ebuild | 200 +++++++++++++++++++++ 5 files changed, 303 insertions(+) create mode 100644 sys-apps/ipmitool/files/exchange-bmc-os-info-1.8.18.initd create mode 100644 sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.confd create mode 100644 sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.initd create mode 100644 sys-apps/ipmitool/files/log_bmc-1.8.18.initd create mode 100644 sys-apps/ipmitool/ipmitool-1.8.18_p20201004-r2.ebuild diff --git a/sys-apps/ipmitool/files/exchange-bmc-os-info-1.8.18.initd b/sys-apps/ipmitool/files/exchange-bmc-os-info-1.8.18.initd new file mode 100644 index 000000000000..9c63983f21f3 --- /dev/null +++ b/sys-apps/ipmitool/files/exchange-bmc-os-info-1.8.18.initd @@ -0,0 +1,23 @@ +#!/sbin/openrc-run +# Copyright 2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 +# /etc/init.d/exchange-bmc-os-info + +name="exchange-bmc-os-info" +description="Exchange Information between BMC and OS" +command=/usr/libexec/exchange-bmc-os-info +command_args="" +: "${DEVICENUM:=0}" # which BMC +required_files=/dev/ipmi${DEVICENUM} + +depend() { + use hostname modules + keyword -docker -lxc -prefix -systemd-nspawn +} + +start() { + "${command}" start +} +stop() { + "${command}" stop +} diff --git a/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.confd b/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.confd new file mode 100644 index 000000000000..b860c23c7f89 --- /dev/null +++ b/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.confd @@ -0,0 +1,27 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 +# /etc/conf.d/ipmievd + +# Interfaces: +# open Linux OpenIPMI Interface +# imb Intel IMB Interface +# bmc IPMI v2.0 BMC interface +# lan IPMI v1.5 LAN Interface +# lanplus IPMI v2.0 RMCP+ LAN Interface + +INTERFACE="open" + +# Commands: +# open Use OpenIPMI for asyncronous notification of events +# sel Poll SEL for notification of events +# +# 'pidfile=...' will be appended! +COMMAND="open daemon" + +# Options. + +OPTIONS="" + +# Device number: +# Used to target a specific BMC on a multi-node, multi-BMC system via the open interface +DEVICENUM=0 diff --git a/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.initd b/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.initd new file mode 100644 index 000000000000..e8ef2c39d454 --- /dev/null +++ b/sys-apps/ipmitool/files/ipmitool-1.8.18-ipmievd.initd @@ -0,0 +1,28 @@ +#!/sbin/openrc-run +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 +# /etc/init.d/ipmievd + +depend() { + use logger modules + keyword -docker -lxc -prefix -systemd-nspawn +} + +# TODO: ipmievd has a mode where it could be used to monitor multiple BMCs via +# DEVICENUM or remote systems, and it would be valid to run multiple instances. +# That is not supported by this init script at this time. + +description="IPMI event daemon for sending events to syslog LOCAL4" + +: "${DEVICENUM:=0}" +: "${INTERFACE:=open}" +: "${COMMAND:=open daemon}" +: "${OPTIONS:=}" + +daemon=ipmievd + +pidfile=/run/${daemon}.pid${DEVICENUM} # see manpage re suffix +command=/usr/sbin/${daemon} +cachefile=/run/${daemon}.${DEVICENUM}.sdr-cache +command_args="-d ${DEVICENUM} -S ${cachefile} -I ${INTERFACE} ${OPTIONS} ${COMMAND} pidfile=${pidfile}" +required_files=/dev/ipmi$DEVICENUM diff --git a/sys-apps/ipmitool/files/log_bmc-1.8.18.initd b/sys-apps/ipmitool/files/log_bmc-1.8.18.initd new file mode 100644 index 000000000000..4064edf3b84d --- /dev/null +++ b/sys-apps/ipmitool/files/log_bmc-1.8.18.initd @@ -0,0 +1,25 @@ +#!/sbin/openrc-run +# Copyright 2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +name="log_bmc" +description="Add SEL entries to indicate OS Boot status" +command=/usr/libexec/log_bmc.sh +command_args="" +: "${DEVICENUM:=0}" # which BMC +required_files=/dev/ipmi${DEVICENUM} + +depend() { + use modules + after ipmievd # to capture our own log event + keyword -docker -lxc -prefix -systemd-nspawn +} + +start() { + # TODO: should this keep start so it only fires once per boot? + "${command}" os_boot +} + +stop() { + "${command}" os_shutdown +} diff --git a/sys-apps/ipmitool/ipmitool-1.8.18_p20201004-r2.ebuild b/sys-apps/ipmitool/ipmitool-1.8.18_p20201004-r2.ebuild new file mode 100644 index 000000000000..a57247179375 --- /dev/null +++ b/sys-apps/ipmitool/ipmitool-1.8.18_p20201004-r2.ebuild @@ -0,0 +1,200 @@ +# Copyright 1999-2020 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=7 +inherit autotools eutils flag-o-matic systemd + +DESCRIPTION="Utility for controlling IPMI enabled devices." +HOMEPAGE="http://ipmitool.sf.net/" +DEBIAN_PR="9.debian" +DEBIAN_PV="${PV/_p*}" +DEBIAN_P="${PN}_${DEBIAN_PV}" +DEBIAN_PF="${DEBIAN_P}-${DEBIAN_PR}" +COMMIT_ID=7fd7c0f2ba39e223868a8d83d81d4074f057d6fc +if [[ -n "${COMMIT_ID}" ]]; then + S="${WORKDIR}/${PN}-${COMMIT_ID}" + SRC_URI="https://github.com/ipmitool/ipmitool/archive/${COMMIT_ID}.tar.gz -> ${P}.tar.gz" +else + SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz" +fi +# https://www.iana.org/assignments/enterprise-numbers/enterprise-numbers +# is not available with version numbers or dates! +SRC_URI+=" + https://dev.gentoo.org/~robbat2/distfiles/ipmitool_1.8.18-9.debian-ported-gentoo.tar.xz + https://dev.gentoo.org/~robbat2/distfiles/enterprise-numbers.2020-10-21.xz + " + #http://http.debian.net/debian/pool/main/i/${PN}/${DEBIAN_PF}.tar.xz + # https://launchpad.net/ubuntu/+archive/primary/+files/${DEBIAN_PF}.tar.xz +#IUSE="freeipmi openipmi status" +IUSE="libressl openbmc openipmi static" +SLOT="0" +KEYWORDS="~amd64 ~arm64 ~hppa ~ia64 ~ppc ~ppc64 ~x86" +LICENSE="BSD" + +RDEPEND=" + !libressl? ( dev-libs/openssl:0= ) + libressl? ( dev-libs/libressl:0= ) + openbmc? ( sys-apps/systemd:0= ) + sys-libs/readline:0=" +DEPEND="${RDEPEND} + openipmi? ( sys-libs/openipmi ) + virtual/os-headers" + #freeipmi? ( sys-libs/freeipmi ) +# ipmitool CAN build against || ( sys-libs/openipmi sys-libs/freeipmi ) +# but it doesn't actually need either. + +PATCHES=( + #"${FILESDIR}"/${P}-openssl-1.1.patch +) + +# I hope all of this will get MUCH cleaner if upstream will just make a new +# release! - robbat2 2020/10/21 +src_prepare() { + default + if [ -d "${S}"/debian ] ; then + mv "${S}"/debian{,.package} + ln -s "${WORKDIR}"/debian "${S}" + eautoreconf + # Upstream commit includes SOME of the debian changes, but not all of them + sed -i \ + -e '/^#/d' \ + -e '/0120-openssl1.1.patch/d' \ + debian/patches/series + for p in $(cat debian/patches/series) ; do + echo $p + if ! nonfatal eapply -p1 debian/patches/$p ; then + echo "failed $p" + fail=1 + fi + done + [[ $fail -eq 1 ]] && die "fail" + fi + pd="${WORKDIR}"/ipmitool_1.8.18-9.debian-ported-gentoo/ + PATCHES=( + #"${pd}"/0000.0120-openssl1.1.patch + "${pd}"/0001.0100-fix_buf_overflow.patch + "${pd}"/0002.0500-fix_CVE-2011-4339.patch + "${pd}"/0003.0600-manpage_longlines.patch + #"${pd}"/0004.0110-getpass-prototype.patch + #"${pd}"/0005.0115-typo.patch + "${pd}"/0006.0125-nvidia-iana.patch + "${pd}"/0007.0615-manpage_typo.patch + #"${pd}"/0008.0130-Correct_lanplus_segment_violation.patch + "${pd}"/0009.0005-gcc10.patch + #"${pd}"/0010.0010-utf8.patch + ) + for p in "${PATCHES[@]}" ; do + eapply -p1 $p || die "failed $p" + done + + # Gentoo chooses to install ipmitool in /usr/sbin + # Where RedHat chooses /usr/bin + sed -i -e \ + 's,/usr/bin/ipmitool,/usr/sbin/ipmitool,g' \ + "${S}"/contrib/* \ + || die "sed bindir failed" + + # Consistent RUNSTATEDIR + sed -i -e \ + 's,/var/run,/run,g' \ + "${S}/doc/ipmievd.8.in" \ + "${S}"/contrib/* \ + "${S}"/lib/helper.c \ + "${S}"/src/ipmievd.c \ + || die "sed /var/run failed" + + eautoreconf + + # If this file is not present, then ipmitool will try to download it during make install! + cp -al \ + "${WORKDIR}/enterprise-numbers.2020-10-21" \ + "${S}"/enterprise-numbers \ + || die "Could not place IANA enterprise-numbers" +} + +src_configure() { + # - LIPMI and BMC are the Solaris libs + # - OpenIPMI is unconditionally enabled in the configure as there is compat + # code that is used if the library itself is not available + # FreeIPMI does build now, but is disabled until the other arches keyword it + # `use_enable freeipmi intf-free` \ + # --enable-ipmievd is now unconditional + + # for pidfiles, runstatedir not respected in all parts of code + append-cppflags -D_PATH_VARRUN=/run/ + + # WGET & CURL are set to avoid network interaction, we manually inject the + # IANA enterprise-numbers file instead. + # + # DEFAULT_INTF=open # default to OpenIPMI, do not take external input + WGET=/bin/true \ + CURL=/bin/true \ + DEFAULT_INTF=open \ + econf \ + $(use_enable static) \ + --enable-ipmishell \ + --enable-intf-lan \ + --enable-intf-usb \ + $(use_enable openbmc intf-dbus) \ + --enable-intf-lanplus \ + --enable-intf-open \ + --enable-intf-serial \ + --disable-intf-bmc \ + --disable-intf-dummy \ + --disable-intf-free \ + --disable-intf-imb \ + --disable-intf-lipmi \ + --disable-internal-md5 \ + --with-kerneldir=/usr \ + --bindir=/usr/sbin \ + --runstatedir=/run \ + CFLAGS="${CFLAGS}" + + # Fix linux/ipmi.h to compile properly. This is a hack since it doesn't + # include the below file to define some things. + echo "#include " >>config.h + +} + +src_install() { + emake DESTDIR="${D}" PACKAGE="${PF}" install + rm -f "${D}"/usr/share/doc/${PF}/COPYING + into /usr + + newinitd "${FILESDIR}"/${PN}-1.8.18-ipmievd.initd ipmievd + newconfd "${FILESDIR}"/${PN}-1.8.18-ipmievd.confd ipmievd + + # Everything past this point is installing contrib/ + dosbin contrib/bmclanconf + + exeinto /usr/libexec + doexe contrib/log_bmc.sh + newinitd "${FILESDIR}/log_bmc-1.8.18.initd" log_bmc + + # contrib/exchange-bmc-os-info.init.redhat + # contrib/exchange-bmc-os-info.service.redhat + # contrib/exchange-bmc-os-info.sysconf + exeinto /usr/libexec + newexe contrib/exchange-bmc-os-info.init.redhat exchange-bmc-os-info + insinto /etc/sysconfig + newins contrib/exchange-bmc-os-info.sysconf exchange-bmc-os-info + systemd_newunit contrib/exchange-bmc-os-info.service.redhat exchange-bmc-os-info.service + newinitd "${FILESDIR}/exchange-bmc-os-info-1.8.18.initd" exchange-bmc-os-info + + # contrib/bmc-snmp-proxy + # contrib/bmc-snmp-proxy.service + # contrib/bmc-snmp-proxy.sysconf + exeinto /usr/libexec + doexe contrib/bmc-snmp-proxy + insinto /etc/sysconfig + newins contrib/bmc-snmp-proxy.sysconf bmc-snmp-proxy + systemd_dounit contrib/bmc-snmp-proxy.service + # TODO: initd for bmc-snmp-proxy + + insinto /usr/share/${PN} + doins contrib/oem_ibm_sel_map + + docinto contrib + cd "${S}"/contrib + dodoc collect_data.sh create_rrds.sh create_webpage_compact.sh create_webpage.sh README +} -- cgit v1.2.3