blob: 7a4d4c1bf189059b62ab9be089c361cde8ccc63c (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
# Copyright 1999-2023 Gentoo Authors
# Distributed under the terms of the GNU General Public License v2
EAPI=7
inherit 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 autotools subversion
else
SRC_URI="mirror://sourceforge/${PN}/${P}.tar.gz"
KEYWORDS="~alpha amd64 ~arm ~arm64 hppa ~ia64 ~loong ~mips ~ppc ppc64 ~riscv ~sparc ~x86 ~amd64-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 systemd +update-drivedb"
DEPEND="
caps? (
static? ( sys-libs/libcap-ng:=[static-libs] )
!static? ( sys-libs/libcap-ng:= )
)
selinux? (
sys-libs/libselinux:=
)
"
RDEPEND="
${DEPEND}
daemon? ( virtual/mailx )
selinux? ( sec-policy/selinux-smartmon )
systemd? ( sys-apps/systemd )
update-drivedb? (
app-crypt/gnupg
|| (
net-misc/curl
net-misc/wget
www-client/lynx
dev-vcs/subversion
)
)
"
REQUIRED_USE="(
caps? ( daemon )
static? ( !systemd )
)"
src_prepare() {
default
if [[ ${PV} == 9999 ]] ; then
eautoreconf
fi
}
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=(
--with-drivedbdir="${EPREFIX}/var/db/${PN}" #575292
--with-initscriptdir="${EPREFIX}/etc/init.d"
#--with-smartdscriptdir="${EPREFIX}/usr/share/${PN}"
$(use_with caps libcap-ng)
$(use_with selinux)
$(use_with systemd libsystemd)
$(use_with update-drivedb gnupg)
$(use_with update-drivedb update-smart-drivedb)
$(usex systemd "--with-systemdsystemunitdir=$(systemd_get_systemunitdir)" '')
)
econf "${myeconfargs[@]}"
}
src_install() {
local db_path="/var/db/${PN}"
insopts -m0644 -p # preserve timestamps
if use daemon; then
default
newinitd "${FILESDIR}"/smartd-r1.rc smartd
newconfd "${FILESDIR}"/smartd.confd smartd
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="${EROOT}/usr/share/${PN}/drivedb.h"
local db_path="${EROOT}/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
}
|