sys-apps/smartmontools: Rev bump to address several problems
authorThomas Deutschmann <whissi@gentoo.org>
Tue, 31 Oct 2017 21:51:15 +0000 (22:51 +0100)
committerThomas Deutschmann <whissi@gentoo.org>
Tue, 31 Oct 2017 21:52:56 +0000 (22:52 +0100)
- EAPI updated to EAPI 6.

- Depend on sys-freebsd/freebsd-lib[usb] on FreeBSD. (bug #552054)

- Update smartd systemd service to reflect that we don't provide a general
  config file for the service. Users are supposed to overwrite the
  provided service if they want to pass additional
  parameters. (bug #527648)

- We no longer install executable files in /usr/share/{PN}. (bug #622072)

- "minimal" USE flag was replaced by "daemon" USE flag to better indicate
  what the USE flag does.

- "caps" USE flag now requires "daemon" USE flag.

- It is now possible to use the "update_drivedb" USE flag
  alone (i.e. without the "minimal", now "daemon" USE flag). (bug #635700)

- The drive database logic was rewritten: Per default we try to install
  the drive database shipped with the package. If there's already a drive
  database installed we will not replace the database anymore in
  assumption that the user has updated the database in the meantime and
  want to preserve the changes.
  A warning will be displayed in this case with an instruction how to
  update or restore the default drive database shipped with the package.
  The new logic now also works when using binary packages. (bug #575292)

- RDEPENDs on net-misc/curl, net-misc/wget, www-client/lynx and
  dev-vcs/subversion (just one of them is required!) were added when using
  "update_drivedb" USE flag.

Closes: https://bugs.gentoo.org/552054
Closes: https://bugs.gentoo.org/527648
Closes: https://bugs.gentoo.org/622072
Closes: https://bugs.gentoo.org/635700
Closes: https://bugs.gentoo.org/575292
Package-Manager: Portage-2.3.13, Repoman-2.3.4

sys-apps/smartmontools/files/smartd.systemd [new file with mode: 0644]
sys-apps/smartmontools/metadata.xml
sys-apps/smartmontools/smartmontools-6.5-r1.ebuild [new file with mode: 0644]

diff --git a/sys-apps/smartmontools/files/smartd.systemd b/sys-apps/smartmontools/files/smartd.systemd
new file mode 100644 (file)
index 0000000..bdcbdbb
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=Self Monitoring and Reporting Technology (SMART) Daemon
+Documentation=man:smartd(8) man:smartd.conf(5)
+
+[Service]
+ExecStart=/usr/sbin/smartd -n
+ExecReload=/bin/kill -HUP $MAINPID
+StandardOutput=syslog
+
+[Install]
+WantedBy=multi-user.target
index b3555884800177939fcc4341b39075faa04f5840..0ae4667bf8d9bf610b5e6374cae593fc417596b7 100644 (file)
@@ -6,6 +6,8 @@
        <name>Gentoo Base System</name>
 </maintainer>
 <use>
+       <flag name="caps">Build against <pkg>sys-libs/libcap-ng</pkg> to allow smartd to drop its privileges.</flag>
+       <flag name="daemon">Install the monitoring daemon (smartd) and associated scripts.</flag>
        <flag name="minimal">Do not install the monitoring daemon and associated scripts.</flag>
        <flag name="update_drivedb">Install a script to update the drivedb file.</flag>
 </use>
diff --git a/sys-apps/smartmontools/smartmontools-6.5-r1.ebuild b/sys-apps/smartmontools/smartmontools-6.5-r1.ebuild
new file mode 100644 (file)
index 0000000..499584d
--- /dev/null
@@ -0,0 +1,148 @@
+# Copyright 1999-2017 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+
+EAPI="6"
+
+inherit autotools flag-o-matic systemd
+if [[ ${PV} == "9999" ]] ; then
+       ESVN_REPO_URI="https://svn.code.sf.net/p/smartmontools/code/trunk/smartmontools"
+       ESVN_PROJECT="smartmontools"
+       inherit subversion
+else
+       SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
+       KEYWORDS="~alpha ~amd64 ~arm ~arm64 ~hppa ~ia64 ~mips ~ppc ~ppc64 ~sparc ~x86 ~x86-fbsd ~amd64-linux ~arm-linux ~x86-linux ~x64-macos"
+fi
+
+DESCRIPTION="Tools to monitor storage systems to provide advanced warning of disk degradation"
+HOMEPAGE="https://www.smartmontools.org"
+
+LICENSE="GPL-2"
+SLOT="0"
+IUSE="caps +daemon selinux static update_drivedb"
+
+DEPEND="
+       caps? (
+               static? ( sys-libs/libcap-ng[static-libs] )
+               !static? ( sys-libs/libcap-ng )
+       )
+       kernel_FreeBSD? (
+               sys-freebsd/freebsd-lib[usb]
+       )
+       selinux? (
+               sys-libs/libselinux
+       )"
+RDEPEND="${DEPEND}
+       daemon? ( virtual/mailx )
+       selinux? ( sec-policy/selinux-smartmon )
+       update_drivedb? (
+               || (
+                       net-misc/curl
+                       net-misc/wget
+                       www-client/lynx
+                       dev-vcs/subversion
+               )
+       )
+"
+
+REQUIRED_USE="( caps? ( daemon ) )"
+
+src_prepare() {
+       default
+
+       eautoreconf
+}
+
+src_configure() {
+       use static && append-ldflags -static
+       # The build installs /etc/init.d/smartd, but we clobber it
+       # in our src_install, so no need to manually delete it.
+       myeconfargs=(
+               --docdir="${EPREFIX}/usr/share/doc/${PF}"
+               --with-drivedbdir="${EPREFIX}/var/db/${PN}" #575292
+               --with-initscriptdir="${EPREFIX}/etc/init.d"
+               $(use_with caps libcap-ng)
+               $(use_with selinux)
+               --with-systemdsystemunitdir="$(systemd_get_systemunitdir)"
+               $(use_with update_drivedb update-smart-drivedb)
+       )
+       econf "${myeconfargs[@]}"
+}
+
+src_install() {
+       local db_path="/var/db/${PN}"
+
+       if use daemon; then
+               default
+
+               newinitd "${FILESDIR}"/smartd-r1.rc smartd
+               newconfd "${FILESDIR}"/smartd.confd smartd
+               systemd_newunit "${FILESDIR}"/smartd.systemd smartd.service
+       else
+               dosbin smartctl
+               doman smartctl.8
+
+               local DOCS=( AUTHORS ChangeL* COPYING INSTALL NEWS README TODO )
+               einstalldocs
+       fi
+
+       if use update_drivedb ; then
+               if ! use daemon; then
+                       dosbin "${S}"/update-smart-drivedb
+               fi
+
+               exeinto /etc/cron.monthly
+               doexe "${FILESDIR}/${PN}-update-drivedb"
+       fi
+
+       if use daemon || use update_drivedb; then
+               keepdir "${db_path}"
+
+               # Install a copy of the initial drivedb.h to /usr/share/${PN}
+               # so that we can access that file later in pkg_postinst
+               # even when dealing with binary packages (bug #575292)
+               insinto /usr/share/${PN}
+               doins "${S}"/drivedb.h
+       fi
+
+       # Make sure we never install drivedb.h into the db location
+       # of the acutal image so we don't record hashes because user
+       # can modify that file
+       rm -f "${ED%/}${db_path}/drivedb.h" || die
+
+       # Bug #622072
+       find "${ED%/}"/usr/share/doc -type f -exec chmod a-x '{}' \; || die
+}
+
+pkg_postinst() {
+       if use daemon || use update_drivedb; then
+               local initial_db_file="${EPREFIX%/}/usr/share/${PN}/drivedb.h"
+               local db_path="${EPREFIX%/}/var/db/${PN}"
+
+               if [[ ! -f "${db_path}/drivedb.h" ]] ; then
+                       # No initial database found
+                       cp "${initial_db_file}" "${db_path}" || die
+                       einfo "Default drive database which was shipped with this release of ${PN}"
+                       einfo "has been installed to '${db_path}'."
+               else
+                       ewarn "WARNING: There's already a drive database in '${db_path}'!"
+                       ewarn "Because we cannot determine if this database is untouched"
+                       ewarn "or was modified by the user you have to manually update the"
+                       ewarn "drive database:"
+                       ewarn ""
+                       ewarn "a) Replace '${db_path}/drivedb.h' by the database shipped with this"
+                       ewarn "   release which can be found in '${initial_db_file}', i.e."
+                       ewarn ""
+                       ewarn "     cp \"${initial_db_file}\" \"${db_path}\""
+                       ewarn ""
+                       ewarn "b) Run the following command as root:"
+                       ewarn ""
+                       ewarn "     /usr/sbin/update-smart-drivedb"
+
+                       if ! use update_drivedb ; then
+                               ewarn ""
+                               ewarn "However, 'update-smart-drivedb' requires that you re-emerge ${PN}"
+                               ewarn "with USE='update_drivedb'."
+                       fi
+               fi
+       fi
+}