commit:     436e19902cf8f23717c3605903248dcb273b890e
Author:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
AuthorDate: Sat Oct 24 21:37:04 2020 +0000
Commit:     Robin H. Johnson <robbat2 <AT> gentoo <DOT> org>
CommitDate: Sat Oct 24 22:12:00 2020 +0000
URL:        https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=436e1990

sys-apps/ipmitool: cleanup init & add contrib tools

Signed-off-by: Robin H. Johnson <robbat2 <AT> gentoo.org>

 .../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(+)

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 00000000000..9c63983f21f
--- /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 00000000000..b860c23c7f8
--- /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 00000000000..e8ef2c39d45
--- /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 00000000000..4064edf3b84
--- /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 00000000000..a5724717937
--- /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 <asm/byteorder.h>" >>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
+}

Reply via email to