Sync from SUSE:SLFO:Main smartmontools revision 37d1c6123e0431a8c27b5075e48fa4a1
This commit is contained in:
commit
7e1a63a7f8
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
||||
## Default LFS
|
||||
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||
*.png filter=lfs diff=lfs merge=lfs -text
|
||||
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||
*.zst filter=lfs diff=lfs merge=lfs -text
|
21
harden_smartd.service.patch
Normal file
21
harden_smartd.service.patch
Normal file
@ -0,0 +1,21 @@
|
||||
Index: smartmontools-7.4/smartd.service.in
|
||||
===================================================================
|
||||
--- smartmontools-7.4.orig/smartd.service.in
|
||||
+++ smartmontools-7.4/smartd.service.in
|
||||
@@ -7,6 +7,16 @@ Documentation=man:smartd(8) man:smartd.c
|
||||
ConditionVirtualization=no
|
||||
|
||||
[Service]
|
||||
+# added automatically, for details please see
|
||||
+# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
|
||||
+ProtectSystem=full
|
||||
+ProtectHome=true
|
||||
+ProtectHostname=true
|
||||
+ProtectKernelModules=true
|
||||
+ProtectKernelLogs=true
|
||||
+ProtectControlGroups=true
|
||||
+RestrictRealtime=true
|
||||
+# end of automatic additions
|
||||
Type=notify
|
||||
EnvironmentFile=-/usr/local/etc/sysconfig/smartmontools
|
||||
ExecStart=/usr/local/sbin/smartd -n -q never $smartd_opts
|
11
smartd_generate_opts.path
Normal file
11
smartd_generate_opts.path
Normal file
@ -0,0 +1,11 @@
|
||||
[Unit]
|
||||
Description=Watch for changes in smartmontools sysconfig file
|
||||
After=local-fs.target
|
||||
|
||||
[Path]
|
||||
Unit=smartd_generate_opts.service
|
||||
PathChanged=/etc/sysconfig/smartmontools
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
21
smartd_generate_opts.service
Normal file
21
smartd_generate_opts.service
Normal file
@ -0,0 +1,21 @@
|
||||
[Unit]
|
||||
Description=Update smartd options
|
||||
Wants=local-fs.target
|
||||
|
||||
[Service]
|
||||
# added automatically, for details please see
|
||||
# https://en.opensuse.org/openSUSE:Security_Features#Systemd_hardening_effort
|
||||
ProtectSystem=full
|
||||
ProtectHome=true
|
||||
ProtectHostname=true
|
||||
ProtectKernelModules=true
|
||||
ProtectKernelLogs=true
|
||||
ProtectControlGroups=true
|
||||
RestrictRealtime=true
|
||||
# end of automatic additions
|
||||
Type=oneshot
|
||||
ExecStart=/usr/lib/smartmontools/generate_smartd_opts
|
||||
|
||||
[Install]
|
||||
WantedBy=default.target
|
||||
|
13
smartd_service_dont_quit.patch
Normal file
13
smartd_service_dont_quit.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: smartmontools-7.4/smartd.service.in
|
||||
===================================================================
|
||||
--- smartmontools-7.4.orig/smartd.service.in
|
||||
+++ smartmontools-7.4/smartd.service.in
|
||||
@@ -9,7 +9,7 @@ ConditionVirtualization=no
|
||||
[Service]
|
||||
Type=notify
|
||||
EnvironmentFile=-/usr/local/etc/sysconfig/smartmontools
|
||||
-ExecStart=/usr/local/sbin/smartd -n $smartd_opts
|
||||
+ExecStart=/usr/local/sbin/smartd -n -q never $smartd_opts
|
||||
ExecReload=/bin/kill -HUP $MAINPID
|
||||
|
||||
[Install]
|
BIN
smartmontools-7.4.tar.gz
(Stored with Git LFS)
Normal file
BIN
smartmontools-7.4.tar.gz
(Stored with Git LFS)
Normal file
Binary file not shown.
16
smartmontools-7.4.tar.gz.asc
Normal file
16
smartmontools-7.4.tar.gz.asc
Normal file
@ -0,0 +1,16 @@
|
||||
-----BEGIN PGP SIGNATURE-----
|
||||
|
||||
iQIcBAABAgAGBQJkyOXyAAoJEAowgS7/Ou/1yocP/1wKzrSB7rYuqNrjcOKd2IDQ
|
||||
sp4JlOXheoy6Y6PgYGjHAFtf3E8YBR1OjeJsf57BwdNa8mW52ctrXuUDdt2vMaMf
|
||||
WAgBFCIGdMH2gvcIYTOTdn3MFMP9KuJD7CvWtvZpWEVWgeEbk1gopusKFL4L0u9T
|
||||
iFIcYoN2AjFOPtNmQYrpjTpJ6/LYtx20UBdP8sMbM8fq++vREjZEu466zooWPTYF
|
||||
70EILbxy+K8sB6Z+WdttwTqasYdMFwiSZNExxmykYB3M8MeHcA+Y4Je6xiaSVFIp
|
||||
HOdgZjQJDyoMNFrETNm8lj07NBrtMf2TAJ25AVxZPFmdjzVVxOSap/4UzPjR9Rfz
|
||||
MDPKxRqiktII+cwE3ReuZz6Av1fLkOW3BJSFzU6SeVL4WHK0Z5p+6gyNxtWhWJ0S
|
||||
DRvTpUblUZDX2otkNHyCj4+0mkpufjY7TXybcgtYGwfBuuvGouHtWdyPeMoq3wBW
|
||||
y1znPhZcXvKc6ecUPb9FFdP5MLP9oNZE+sGjCRqbl6r4GjjfS4f5fnp+NptAwv9N
|
||||
w6ESTd6rQH+RrwBiECPyFefNvmW/Z3esSrsmQFobkBJKD61bpP+LeGoAS9N6k9/T
|
||||
6yhwzZboQPsPALYGcCyN8gcBHGCziyKkr9ELlpEaD57VQtvmMmXItJUyjx+CgC0X
|
||||
P9hd8uy9uOXXEzNt2IM3
|
||||
=vpX/
|
||||
-----END PGP SIGNATURE-----
|
114
smartmontools-drivedb_h-update.sh
Normal file
114
smartmontools-drivedb_h-update.sh
Normal file
@ -0,0 +1,114 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Packaged drivedb.h/smartmontools-drivedb.h update script.
|
||||
# Usage: bash ./smartmontools-drivedb_h-update.sh
|
||||
# Exit codes:
|
||||
# O: Changes performed. You should commit.
|
||||
# 1: No changes performed.
|
||||
# 2: Internal error.
|
||||
|
||||
set -o errexit
|
||||
|
||||
VERSION=`sed -n 's/^Version:[[:space:]]*//p' <smartmontools.spec`
|
||||
|
||||
WORKDIR="smartmontools-drivedb_h-update.tmp"
|
||||
|
||||
rm -rf "$WORKDIR"
|
||||
mkdir "$WORKDIR"
|
||||
cd "$WORKDIR"
|
||||
|
||||
tar -zxf ../smartmontools-$VERSION.tar.gz smartmontools-$VERSION/update-smart-drivedb.in smartmontools-$VERSION/configure smartmontools-$VERSION/drivedb.h
|
||||
# There can be script update.
|
||||
# TODO: This patch can be generated automatically.
|
||||
if test -f ../smartmontools-update-smart-drivedb.patch ; then
|
||||
patch -p0 <../smartmontools-update-smart-drivedb.patch
|
||||
fi
|
||||
|
||||
# Extract expression that derives DRIVEDB_BRANCH from the version string
|
||||
# (from configure, to not include autoconf square brackets):
|
||||
eval "$(sed -n -e '/^[^ ]*drivedb_version=/p; /^DRIVEDB_BRANCH=/,/`/p' <smartmontools-$VERSION/configure)"
|
||||
if test -z "$DRIVEDB_BRANCH"; then
|
||||
echo "Unable to derive DRIVEDB_BRANCH from VERSION=$VERSION."
|
||||
cd - >/dev/null
|
||||
rm -r "$WORKDIR"
|
||||
exit 2
|
||||
fi
|
||||
BRANCHNAME=$DRIVEDB_BRANCH
|
||||
|
||||
PCK_TIME=$(date -d "$(sed -n 's/^.*$Id: drivedb.h [0-9][0-9]* \([^ ]* [^ ]*\) .*$/\1/p' <smartmontools-$VERSION/drivedb.h)" +%s)
|
||||
|
||||
echo "Updating drivedb.h for branch $DRIVEDB_BRANCH."
|
||||
|
||||
# Generate and call specially crafted update-smart-drivedb.
|
||||
sed "
|
||||
/^PACKAGE=/i rm update-smart-drivedb-wd
|
||||
s:@PACKAGE@:smartmontools:g
|
||||
s:@VERSION@:$VERSION:g
|
||||
s:@DRIVEDB_BRANCH@:$DRIVEDB_BRANCH:g
|
||||
s:@ENABLE_SCRIPTPATH_TRUE@:#:g
|
||||
s:@ENABLE_SCRIPTPATH_FALSE@::g
|
||||
s:@gnupg@:/usr/bin/gpg:
|
||||
s:^DRIVEDB=.*$:DRIVEDB=smartmontools-drivedb.h:
|
||||
s:@drivedbdir@:.:g
|
||||
s:@os_dltools@:curl wget lynx:g
|
||||
" <smartmontools-$VERSION/update-smart-drivedb.in >update-smart-drivedb-wd
|
||||
chmod +x update-smart-drivedb-wd
|
||||
# Verification of the downloaded drivedb.h has to be done by the packaged smartctl.
|
||||
# Skip it on the host system, and run it as part of %build stage.
|
||||
./update-smart-drivedb-wd -u trac -s -
|
||||
rm -f "$DEST.lastcheck"
|
||||
rm -f "$DEST.old"
|
||||
|
||||
# Compare time (file in the drivedb branch can be older) and compare
|
||||
# files without Id (files can be equal but committed in two commits).
|
||||
UPD_TIME=$(date -d "$(sed -n 's/^.*$Id: drivedb.h [0-9][0-9]* \([^ ]* [^ ]*\) .*$/\1/p' <../smartmontools-drivedb.h)" +%s)
|
||||
sed '/^.*$Id:/d' <smartmontools-$VERSION/drivedb.h >drivedb-noid.h
|
||||
sed '/^.*$Id:/d' <../smartmontools-drivedb.h >smartmontools-drivedb-noid.h
|
||||
if cmp -s drivedb-noid.h smartmontools-drivedb-noid.h ; then
|
||||
EQUAL=true
|
||||
else
|
||||
EQUAL=false
|
||||
fi
|
||||
|
||||
# Return to the OSC repository and perform needed changes.
|
||||
cd - >/dev/null
|
||||
|
||||
if test $EQUAL = true -o \( $UPD_TIME -le $PCK_TIME \) ; then
|
||||
echo "No drivedb.h update available."
|
||||
if test -f smartmontools-drivedb.h ; then
|
||||
osc rm --force smartmontools-drivedb.h
|
||||
fi
|
||||
sed 's/^Source[0-9]*:[ ]*smartmontools-drivedb.h$/#&/;s/^cp -a .* drivedb\.h\.new$/#&/' <smartmontools.spec >"$WORKDIR/smartmontools.spec"
|
||||
if ! cmp -s smartmontools.spec "$WORKDIR/smartmontools.spec" ; then
|
||||
echo "Removing smartmontools-drivedb.h from spec file."
|
||||
osc vc -m "Remove smartmontools-drivedb.h. No update available in the
|
||||
upstream branch $BRANCHNAME."
|
||||
mv "$WORKDIR/smartmontools.spec" ./
|
||||
fi
|
||||
else
|
||||
if test -f smartmontools-drivedb.h ; then
|
||||
if cmp -s "$WORKDIR/smartmontools-drivedb.h" smartmontools-drivedb.h ; then
|
||||
echo "smartmontools-drivedb.h is up to date. Nothing to be done."
|
||||
rm -r "$WORKDIR"
|
||||
exit 1
|
||||
else
|
||||
echo "smartmontools-drivedb.h updated."
|
||||
mv "$WORKDIR/smartmontools-drivedb.h" ./
|
||||
osc vc -m "Update smartmontools-drivedb.h to the latest version from the
|
||||
upstream branch $BRANCHNAME."
|
||||
fi
|
||||
else
|
||||
sed 's/^#\(Source[0-9]*:[ ]*smartmontools-drivedb.h\)$/\1/;s/^#\(cp -a .* drivedb\.h\.new\)$/\1/' <smartmontools.spec >"$WORKDIR/smartmontools.spec"
|
||||
if ! cmp -s smartmontools.spec "$WORKDIR/smartmontools.spec" ; then
|
||||
echo "Adding smartmontools-drivedb.h to the spec file."
|
||||
osc vc -m "Add smartmontools-drivedb.h, the latest version from the upstream
|
||||
branch $BRANCHNAME."
|
||||
mv "$WORKDIR/smartmontools.spec" ./
|
||||
mv "$WORKDIR/smartmontools-drivedb.h" ./
|
||||
osc add smartmontools-drivedb.h
|
||||
fi
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "Consider submitting of changes that just were done."
|
||||
rm -r "$WORKDIR"
|
6
smartmontools-rpmlintrc
Normal file
6
smartmontools-rpmlintrc
Normal file
@ -0,0 +1,6 @@
|
||||
# Two .h files are config files in C include file format
|
||||
addFilter("devel-file-in-non-devel-package")
|
||||
# Use the name registered by LANANA
|
||||
addFilter("incoherent-init-script-name smartd")
|
||||
# Still valid for SLE10
|
||||
addFilter("obsolete-suse-version-check 1020")
|
20
smartmontools-suse-default.patch
Normal file
20
smartmontools-suse-default.patch
Normal file
@ -0,0 +1,20 @@
|
||||
Index: smartd.conf
|
||||
===================================================================
|
||||
--- a/smartd.conf
|
||||
+++ b/smartd.conf
|
||||
@@ -9,6 +9,15 @@
|
||||
# device per line. Text after a hash (#) is ignored, and you may use
|
||||
# spaces and tabs for white space. You may use '\' to continue lines.
|
||||
|
||||
+# SUSE default:
|
||||
+# -d removable: Prevent error messages after disconnecting of
|
||||
+# monitored removable discs.
|
||||
+# -s S/: Run Short Self Test every day in the deep night.
|
||||
+# (Takes several minutes.)
|
||||
+# -s L/: Run Extended Self Test every first Sunday in the
|
||||
+# month. (Start earlier, it could take tens of hours.)
|
||||
+DEFAULT -d removable -s (S/../.././03|L/../(01|02|03|04|05|06|07)/7/01)
|
||||
+
|
||||
# The word DEVICESCAN will cause any remaining lines in this
|
||||
# configuration file to be ignored: it tells smartd to scan for all
|
||||
# ATA and SCSI devices. DEVICESCAN may be followed by any of the
|
13
smartmontools-var-lock-subsys.patch
Normal file
13
smartmontools-var-lock-subsys.patch
Normal file
@ -0,0 +1,13 @@
|
||||
Index: smartmontools-5.42/smartd.initd.in
|
||||
===================================================================
|
||||
--- smartmontools-5.42.orig/smartd.initd.in
|
||||
+++ smartmontools-5.42/smartd.initd.in
|
||||
@@ -50,7 +50,7 @@ if [ -f /etc/redhat-release -o -f /etc/y
|
||||
RETVAL=0
|
||||
|
||||
prog=smartd
|
||||
- pidfile=/var/lock/subsys/smartd
|
||||
+ pidfile=/var/run/smartd.pid
|
||||
config=/etc/smartd.conf
|
||||
|
||||
start()
|
1109
smartmontools.changes
Normal file
1109
smartmontools.changes
Normal file
File diff suppressed because it is too large
Load Diff
54
smartmontools.generate_smartd_opts.in
Normal file
54
smartmontools.generate_smartd_opts.in
Normal file
@ -0,0 +1,54 @@
|
||||
#! /bin/bash
|
||||
|
||||
# smartmontools sysconfig command line options generator
|
||||
# Copyright (C) 2012 Stanislav Brabec <sbrabec@suse.cz>
|
||||
|
||||
# This program is free software; you can redistribute it and/or modify it
|
||||
# under the terms of the GNU General Public License as published by the Free
|
||||
# Software Foundation; either version 2, or (at your option) any later
|
||||
# version.
|
||||
# You should have received a copy of the GNU General Public License (for
|
||||
# example COPYING); if not, write to the Free Software Foundation, Inc., 51
|
||||
# Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
||||
|
||||
# Following code should be in sync with sysv init script for older distros!
|
||||
|
||||
# source configuration file.
|
||||
smartd_opts=
|
||||
[ -r @localstatedir@/lib/smartmontools/smartd_opts ] && . @localstatedir@/lib/smartmontools/smartd_opts
|
||||
smartd_opts_old="$smartd_opts"
|
||||
[ -r /etc/sysconfig/smartmontools ] && . /etc/sysconfig/smartmontools
|
||||
smartd_opts=
|
||||
if test -n "$SMARTD_CHECK_INTERVAL" -a "$SMARTD_CHECK_INTERVAL" != 1800 ; then
|
||||
smartd_opts=" -i $SMARTD_CHECK_INTERVAL"
|
||||
fi
|
||||
if test -n "$SMARTD_LOG_FACILITY" -a "$SMARTD_LOG_FACILITY" != "daemon" ; then
|
||||
smartd_opts="$smartd_opts -l $SMARTD_LOG_FACILITY"
|
||||
fi
|
||||
if test -n "$SMARTD_DRIVEDB" ; then
|
||||
smartd_opts="$smartd_opts -B $SMARTD_DRIVEDB"
|
||||
fi
|
||||
if test "$SMARTD_SAVESTATES" = "no" ; then
|
||||
smartd_opts="$smartd_opts -s -"
|
||||
fi
|
||||
if test "$SMARTD_ATTRLOG" = "no" ; then
|
||||
smartd_opts="$smartd_opts -A -"
|
||||
fi
|
||||
if test -n "$SMARTD_EXTRA_OPTS" ; then
|
||||
smartd_opts="$smartd_opts $SMARTD_EXTRA_OPTS"
|
||||
fi
|
||||
|
||||
if test "$smartd_opts" = "$smartd_opts_old" ; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p @localstatedir@/lib/smartmontools
|
||||
|
||||
echo "# Generated by @prefix@/lib/smartmontools/generate_smartd_opts
|
||||
smartd_opts=\"$smartd_opts\"" >@localstatedir@/lib/smartmontools/smartd_opts
|
||||
|
||||
# SMARTD_SKIP_INIT is used during installation.
|
||||
if test -z "$SMARTD_SKIP_INIT" ; then
|
||||
# Behavior of both "Command" and "ServiceRestart" is undefined. Restart service here.
|
||||
@SERVICE@ smartd try-restart
|
||||
fi
|
60
smartmontools.keyring
Normal file
60
smartmontools.keyring
Normal file
@ -0,0 +1,60 @@
|
||||
-----BEGIN PGP PUBLIC KEY BLOCK-----
|
||||
Comment: Hostname:
|
||||
Version: Hockeypuck ~unreleased
|
||||
|
||||
xsFNBF/gs9YBEADyn0P5OLnlgjujm1VsVyltEqFm3iOtniHoeiUAZYhBdG0b9gQE
|
||||
G/NFMtyd5h9WY4ZWUu3rlD30cHKK52IHz1zvHFoscz+T32hBAPN6xG+990PCRtZ7
|
||||
9qZRt6KlfV/7gCQk31W5BBUOaQaquhP5Ud1m+VFUjShta4r0bXya00PZvfI02Ky2
|
||||
l+9mwrD5FsGP3ri7Yf81Lx2xLmiW2BwphDYmqJ0uzGBKeJgi5myUjqTbfWTRAsaX
|
||||
ji0n570Pd6xtEvCjWdPU7q+/3XmD8rIoizOB0ChGoLLQc5cjNCzAeuiExFd9ule2
|
||||
RomO+czylB2rsmxbw2vUlkcZ2LmRBvZskMAZWmc0z9LGnGQA9RZZFyEOTC10cC69
|
||||
YMae5JHp+veS/2qw/5UOsR6RfbT+BUPLLJW+/RrUvgfxs36oG/DCxSNqrQpRuvlk
|
||||
gGsmrl+W8s+pxL8dn5F1W4mkkiR6g5P5xVrYckkQnXblQL8qAVtBLFClvyme9ilf
|
||||
ZzeGpamk8+m/8P1omlnfJjMTXueWz47+XXFLj37+lnWhRo+B+u7orphTUCYi7zYy
|
||||
fYYXQcZsT2j+804aKTRyNDksoaAp1fa6oqOvBkkHq/FlkIDsxfCbF++WFgRZZfyK
|
||||
R8HAdn9MrRkSWjUoJLVd+1EEr3OZYk/lYhOFYfwlGpuY5VPmkRxfS2FSOQARAQAB
|
||||
zVJTbWFydG1vbnRvb2xzIFNpZ25pbmcgS2V5ICh0aHJvdWdoIDIwMjUpIDxzbWFy
|
||||
dG1vbnRvb2xzLXN1cHBvcnRAbGlzdGkuanBiZXJsaW4uZGU+wsF+BBMBAgAoBQJf
|
||||
4LPWAhsDBQkJdIIABgsJCAcDAgYVCAIJCgsEFgIDAQIeAQIXgAAKCRAKMIEu/zrv
|
||||
9VjhEADLuXMN7pRyOj9sMcio72fI2rmATxawd3vxWuW6aaGqwJlO78r7yxTI7Myi
|
||||
EmZ4qCJWvR7/98t/1NXPDB1mMedicVcLl154EyJeeYhWJxtKe95yuib5lSlJmGTu
|
||||
gue/n1dbIIqPSd4v3s8Y7DUpsjnebnShqXSoSXhq3hGpcL3cYsL1M0+4vEweHEeN
|
||||
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
|
||||
tzwtU0yGYRfROALZz8CtVwDq
|
||||
=oCbP
|
||||
-----END PGP PUBLIC KEY BLOCK-----
|
251
smartmontools.spec
Normal file
251
smartmontools.spec
Normal file
@ -0,0 +1,251 @@
|
||||
#
|
||||
# spec file for package smartmontools
|
||||
#
|
||||
# Copyright (c) 2023 SUSE LLC
|
||||
#
|
||||
# All modifications and additions to the file contributed by third parties
|
||||
# remain the property of their copyright owners, unless otherwise agreed
|
||||
# upon. The license for this file, and modifications and additions to the
|
||||
# file, is the same license as for the pristine package itself (unless the
|
||||
# license for the pristine package is not an Open Source License, in which
|
||||
# case the license is the MIT License). An "Open Source License" is a
|
||||
# license that conforms to the Open Source Definition (Version 1.9)
|
||||
# published by the Open Source Initiative.
|
||||
|
||||
# Please submit bugfixes or comments via https://bugs.opensuse.org/
|
||||
#
|
||||
|
||||
|
||||
#Compat macro for new _fillupdir macro introduced in Nov 2017
|
||||
%if ! %{defined _fillupdir}
|
||||
%define _fillupdir /var/adm/fillup-templates
|
||||
%endif
|
||||
Name: smartmontools
|
||||
Version: 7.4
|
||||
Release: 0
|
||||
Summary: Monitor for SMART devices
|
||||
License: GPL-2.0-or-later
|
||||
Group: Hardware/Other
|
||||
URL: https://www.smartmontools.org/
|
||||
Source: https://sourceforge.net/projects/smartmontools/files/smartmontools/%{version}/%{name}-%{version}.tar.gz
|
||||
Source1: https://sourceforge.net/projects/smartmontools/files/smartmontools/%{version}/%{name}-%{version}.tar.gz.asc
|
||||
Source2: smartmontools.sysconfig
|
||||
Source3: %{name}-rpmlintrc
|
||||
Source4: %{name}.keyring
|
||||
# SOURCE-FEATURE-OPENSUSE smartmontools.generate_smartd_opts.in sbrabec@suse.cz -- sysconfig support for systemd.
|
||||
Source5: %{name}.generate_smartd_opts.in
|
||||
# SOURCE-FEATURE-SLE smartmontools-drivedb_h-update.sh bnc851276 sbrabec@suse.cz -- Supplementary script to update drivedb.h.
|
||||
Source6: smartmontools-drivedb_h-update.sh
|
||||
# SOURCE-FEATURE-UPSTREAM smartmontools-drivedb.h bnc851276 sbrabec@suse.cz -- Update of drivedb.h. (Following line is handled by smartmontools-drivedb_h-update.sh.)
|
||||
#Source7: smartmontools-drivedb.h
|
||||
Source8: smartd_generate_opts.path
|
||||
Source9: smartd_generate_opts.service
|
||||
# PATCH-FEATURE-OPENSUSE smartmontools-suse-default.patch sbrabec@suse.cz -- Define smart SUSE defaults.
|
||||
Patch4: smartmontools-suse-default.patch
|
||||
# PATCH-FIX-OPENSUSE smartmontools-var-lock-subsys.patch sbrabec@suse.cz -- Do not use unsupported /var/lock/subsys.
|
||||
Patch10: smartmontools-var-lock-subsys.patch
|
||||
# PATCH-FIX-SLE smartd_service_dont_quit.patch bsc990406 bsc1167051 msuchanek@suse.de -- Do not quit when no drives are available.
|
||||
Patch11: smartd_service_dont_quit.patch
|
||||
Patch12: harden_smartd.service.patch
|
||||
BuildRequires: gcc-c++
|
||||
BuildRequires: libcap-ng-devel
|
||||
BuildRequires: libselinux-devel
|
||||
BuildRequires: pkgconfig
|
||||
BuildRequires: pkgconfig(libsystemd)
|
||||
BuildRequires: pkgconfig(systemd)
|
||||
Requires(pre): %fillup_prereq
|
||||
# Needed by generate_smartd_opt:
|
||||
Requires(pre): coreutils
|
||||
%{?systemd_requires}
|
||||
|
||||
%description
|
||||
SMARTmontools controls and monitors storage devices using the
|
||||
Self-Monitoring, Analysis, and Reporting Technology System (S.M.A.R.T.)
|
||||
built into ATA, SATA and SCSI Hard Drives. This is used to check the
|
||||
hard drive reliability and to predict drive failures. The suite
|
||||
contains two utilities. The first, smartctl, is a command line utility
|
||||
designed to perform simple S.M.A.R.T. tasks. The second, smartd, is a
|
||||
daemon that periodically monitors the smart status and reports errors
|
||||
to syslog. The package is compatible with the ATA/ATAPI-3 to -7
|
||||
specification. The package is intended to incorporate as much "vendor
|
||||
specific" and "reserved" information as possible about disk drives. The
|
||||
commands man smartctl and man smartd will provide more information.
|
||||
|
||||
%prep
|
||||
%autosetup -p1
|
||||
cp -a %{SOURCE2} %{SOURCE5} .
|
||||
# Following line is handled by smartmontools-drivedb_h-update.sh.
|
||||
#cp -a %{SOURCE7} drivedb.h.new
|
||||
#
|
||||
# PATCH-FEATURE-OPENSUSE (sed on smartd.service.in) sbrabec@suse.cz -- Use generated smartd_opts (from SUSE sysconfig file). Systemd smartd.service cannot be smart enough to parse SUSE sysconfig file and generate smartd_opts on fly. And we do not want to launch shell just for it in every boot.
|
||||
sed "s:/usr/local/etc/sysconfig/smartmontools:%{_localstatedir}/lib/smartmontools/smartd_opts:" <smartd.service.in >smartd.service.in.new
|
||||
if cmp -s smartd.service.in smartd.service.in.new ; then
|
||||
echo "Failed to modify smartd.service.in"
|
||||
exit 1
|
||||
fi
|
||||
mv smartd.service.in.new smartd.service.in
|
||||
#
|
||||
# Check whether drivedb.h from the tarball is older than drivedb.h.new
|
||||
# If yes, replace it. If not, fail.
|
||||
# PACKAGERS: Don't delete this section. It prevents packaging of outdated smartmontools-drivedb.h.
|
||||
if test -f drivedb.h.new ; then
|
||||
UPD_TIME=$(date -d "$(sed -n 's/^.*$Id: drivedb.h [0-9][0-9]* \([^ ]* [^ ]*\) .*$/\1/p' <drivedb.h.new)" +%s)
|
||||
PCK_TIME=$(date -d "$(sed -n 's/^.*$Id: drivedb.h [0-9][0-9]* \([^ ]* [^ ]*\) .*$/\1/p' <drivedb.h)" +%s)
|
||||
if test $UPD_TIME -lt $PCK_TIME ; then
|
||||
echo >&2 "Packaging error: Attached smartmontools-drivedb.h is older than the one from the release.
|
||||
Please call \"bash ./smartmontools-drivedb_h-update.sh\" to fix it."
|
||||
exit 1
|
||||
fi
|
||||
mv drivedb.h.new drivedb.h
|
||||
fi
|
||||
|
||||
%build
|
||||
export CFLAGS="%{optflags} $(getconf LFS_CFLAGS) -fPIE"
|
||||
export CXXFLAGS="%{optflags} -fPIE $(getconf LFS_CFLAGS)"
|
||||
export LDFLAGS="-pie"
|
||||
%configure\
|
||||
--docdir=%{_defaultdocdir}/%{name}\
|
||||
--with-selinux\
|
||||
--with-libsystemd\
|
||||
--with-systemdsystemunitdir=%{_unitdir}\
|
||||
--with-savestates \
|
||||
--with-attributelog \
|
||||
--with-nvme-devicescan
|
||||
|
||||
%make_build BUILD_INFO='"(SUSE RPM)"'
|
||||
SERVICE=%{_sbindir}/service
|
||||
sed "s:@prefix@:%{_prefix}:g;s:@localstatedir@:%{_localstatedir}:g;s:@SERVICE@:$SERVICE:" <smartmontools.generate_smartd_opts.in >generate_smartd_opts
|
||||
|
||||
%install
|
||||
%make_install
|
||||
mkdir -p %{buildroot}%{_prefix}/lib/smartmontools
|
||||
mkdir -p %{buildroot}%{_fillupdir}
|
||||
cp smartmontools.sysconfig %{buildroot}%{_fillupdir}/sysconfig.smartmontools
|
||||
mkdir -p %{buildroot}%{_localstatedir}/lib/smartmontools
|
||||
touch %{buildroot}%{_localstatedir}/lib/smartmontools/smartd_opts
|
||||
install generate_smartd_opts %{buildroot}%{_prefix}/lib/smartmontools/
|
||||
cat >%{buildroot}%{_sysconfdir}/smart_drivedb.h <<EOF
|
||||
/* smart_drivedb.h: Custom drive database. See also %{_datadir}/smartmontools/drivedb.h. */
|
||||
EOF
|
||||
cp smartd.service %{buildroot}/%{_unitdir}
|
||||
cp %{SOURCE8} %{buildroot}/%{_unitdir}
|
||||
cp %{SOURCE9} %{buildroot}/%{_unitdir}
|
||||
ln -sf %{_sbindir}/service %{buildroot}%{_sbindir}/rcsmartd
|
||||
# INSTALL file is intended only for packagers.
|
||||
rm %{buildroot}%{_defaultdocdir}/%{name}/INSTALL
|
||||
# Create empty ghost files for files created by update-smart-drivedb.
|
||||
touch %{buildroot}%{_datadir}/smartmontools/drivedb.h.{error,lastcheck,old}
|
||||
|
||||
# Check syntax of drivedb.h that may come from a later snapshot (code from update-smart-drivedb)
|
||||
if ./smartctl -B drivedb.h -P showall >/dev/null; then :; else
|
||||
echo "drivedb.h.error: rejected by smartctl, probably no longer compatible" >&2
|
||||
exit 1
|
||||
fi
|
||||
# Intelligent drivedb.h update, part 0.
|
||||
# Check that drivedb.h has well formed svn RELEASE. We will need it for the intelligent update.
|
||||
DRIVEDB_H_RELEASE_CHECK="$(sed -n 's/^.*$Id: drivedb.h \([0-9][0-9]*\) .*$/\1/p' <%{buildroot}%{_datadir}/smartmontools/drivedb.h)"
|
||||
# Fail if the file has broken release number.
|
||||
test "$DRIVEDB_H_RELEASE_CHECK" -ge 0
|
||||
# Fail if there is no default_branch= in update-smart-drivedb
|
||||
grep -q "^default_branch=\"[^\"]*\"$" update-smart-drivedb
|
||||
|
||||
%pre
|
||||
%service_add_pre smartd.service smartd_generate_opts.path smartd_generate_opts.service
|
||||
# Intelligent drivedb.h update, part 1.
|
||||
# Extract drivedb.h branch for installed version. We will need it in %%post.
|
||||
if test -f %{_sbindir}/update-smart-drivedb ; then
|
||||
BRANCH=
|
||||
eval $(grep "^BRANCH=\"[^\"]*\"$" %{_sbindir}/update-smart-drivedb)
|
||||
if test -n "$BRANCH" ; then
|
||||
echo -n "$BRANCH" >%{_datadir}/smartmontools/drivedb.h.branch.rpmtemp
|
||||
fi
|
||||
fi
|
||||
# Save installed drivedb.h. Maybe the sysadmin called update-smart-drivedb,
|
||||
# and the installed drivedb.h may be even newer than the new packaged one.
|
||||
if test -f %{_datadir}/smartmontools/drivedb.h ; then
|
||||
# Be on safe side, remove any potential drivedb.h.rpmsave.
|
||||
rm -f %{_datadir}/smartmontools/drivedb.h.rpmsave
|
||||
ln %{_datadir}/smartmontools/drivedb.h %{_datadir}/smartmontools/drivedb.h.rpmsave
|
||||
fi
|
||||
|
||||
%post
|
||||
# First prepare sysconfig.
|
||||
%fillup_only
|
||||
# Up to Leap 42.3 and SLE 15 SP3 Maintenance Update there was a "Command" meta comment in the sysconfig file.
|
||||
# It is not needed any more, but fillup does not delete it. Do it explicitly. (bsc#1195785, bsc#1196103)
|
||||
sed -i '\@^##[[:space:]]*Command:[[:space:]]*%{_prefix}/lib/smartmontools/generate_smartd_opts$@d' %{_sysconfdir}/sysconfig/smartmontools
|
||||
# Then generate initial %%{_localstatedir}/lib/smartmontools/smartd_opts needed by smartd.service.
|
||||
SMARTD_SKIP_INIT=1 %{_prefix}/lib/smartmontools/generate_smartd_opts
|
||||
# No start by default here.. belongs to -presets packages
|
||||
%service_add_post smartd.service smartd_generate_opts.path smartd_generate_opts.service
|
||||
# Intelligent drivedb.h update, part 2.
|
||||
# Now we have the old system drivedb.h.rpmsave and the new packaged drivedb.h.
|
||||
if test -f %{_datadir}/smartmontools/drivedb.h.rpmsave ; then
|
||||
# Compare their release numbers.
|
||||
DRIVEDB_H_RELEASE_RPM="$(sed -n 's/^.*$Id: drivedb.h \([0-9][0-9]*\) .*$/\1/p' <%{_datadir}/smartmontools/drivedb.h)"
|
||||
DRIVEDB_H_RELEASE_SAVED="$(sed -n 's/^.*$Id: drivedb.h \([0-9][0-9]*\) .*$/\1/p' <%{_datadir}/smartmontools/drivedb.h.rpmsave)"
|
||||
# Note: The SAVED release number may be broken. The test syntax must cover it and replace old file.
|
||||
if test "$DRIVEDB_H_RELEASE_RPM" -lt "${DRIVEDB_H_RELEASE_SAVED:-0}" ; then
|
||||
# If it is an update to the new branch, always replace the database.
|
||||
# Extract drivedb.h branch for the new version to default_branch.
|
||||
eval $(grep "^default_branch=\"[^\"]*\"$" %{_sbindir}/update-smart-drivedb)
|
||||
OLD_BRANCH=
|
||||
if test -f %{_datadir}/smartmontools/drivedb.h.branch.rpmtemp ; then
|
||||
OLD_BRANCH=$(<%{_datadir}/smartmontools/drivedb.h.branch.rpmtemp)
|
||||
fi
|
||||
if test "$default_branch" = "$OLD_BRANCH" ; then
|
||||
# It is safe to keep later version of installed database.
|
||||
mv %{_datadir}/smartmontools/drivedb.h.rpmsave %{_datadir}/smartmontools/drivedb.h
|
||||
else
|
||||
# Saved file needs to be replaced.
|
||||
rm %{_datadir}/smartmontools/drivedb.h.rpmsave
|
||||
# We returned to the vanilla packages, remove files created by update-smart-drivedb.
|
||||
rm -f %{_datadir}/smartmontools/drivedb.h.{error,lastcheck,old}
|
||||
echo >&2 "%{name} updated to a version that requires new branch of drivedb.h"
|
||||
echo >&2 "Replacing your custom drivedb.h."
|
||||
echo >&2 "You may need to call update-smart-drivedb."
|
||||
fi
|
||||
else
|
||||
# Saved file is older or equal, or saved file has broken release number.
|
||||
rm %{_datadir}/smartmontools/drivedb.h.rpmsave
|
||||
# We returned to the vanilla packages, remove files created by update-smart-drivedb.
|
||||
rm -f %{_datadir}/smartmontools/drivedb.h.{error,lastcheck,old}
|
||||
fi
|
||||
fi
|
||||
rm -f %{_datadir}/smartmontools/drivedb.h.branch.rpmtemp
|
||||
# Before Leap 15 / SLE 15, there was a incorrect configuration of self tests (bsc#1073918).
|
||||
# Perform a fix of this nonsense, even if the noreplace configuration file was edited.
|
||||
if grep -q -F -- '-s S/../.././03 -s L/../(01|02|03|04|05|06|07)/7/01' %{_sysconfdir}/smartd.conf ; then
|
||||
sed -i 's:-s S/\.\./\.\./\./03 -s L/\.\./(01|02|03|04|05|06|07)/7/01:-s (S/../.././03|L/../(01|02|03|04|05|06|07)/7/01):g' %{_sysconfdir}/smartd.conf
|
||||
fi
|
||||
|
||||
%preun
|
||||
%service_del_preun smartd.service smartd_generate_opts.path smartd_generate_opts.service
|
||||
|
||||
%postun
|
||||
%service_del_postun smartd.service smartd_generate_opts.path smartd_generate_opts.service
|
||||
# Clean all attrlogs and state files.
|
||||
if test "$1" = 0 ; then
|
||||
rm -rf %{_localstatedir}/lib/smartmontools
|
||||
fi
|
||||
|
||||
%files
|
||||
%doc %{_docdir}/%{name}
|
||||
%dir %{_datadir}/smartmontools
|
||||
%verify(not md5 size mtime) %{_datadir}/smartmontools/drivedb.h
|
||||
%ghost %{_datadir}/smartmontools/drivedb.h.error
|
||||
%ghost %{_datadir}/smartmontools/drivedb.h.lastcheck
|
||||
%ghost %{_datadir}/smartmontools/drivedb.h.old
|
||||
%{_mandir}/man*/*
|
||||
%dir %{_localstatedir}/lib/smartmontools
|
||||
%ghost %{_localstatedir}/lib/smartmontools/smartd_opts
|
||||
%{_prefix}/lib/smartmontools
|
||||
%{_unitdir}/*
|
||||
%{_sbindir}/*
|
||||
%config(noreplace) %{_sysconfdir}/smart_drivedb.h
|
||||
%config(noreplace) %{_sysconfdir}/smartd.conf
|
||||
%config(noreplace) %{_sysconfdir}/smartd_warning.sh
|
||||
%config %dir %{_sysconfdir}/smartd_warning.d
|
||||
%{_fillupdir}/sysconfig.*
|
||||
|
||||
%changelog
|
52
smartmontools.sysconfig
Normal file
52
smartmontools.sysconfig
Normal file
@ -0,0 +1,52 @@
|
||||
## Path: Hardware/S.M.A.R.T.
|
||||
## Description: Hard disc health monitoring
|
||||
|
||||
## Type: integer(10:)
|
||||
## Default: 1800
|
||||
#
|
||||
# Interval between disk checks in seconds
|
||||
#
|
||||
SMARTD_CHECK_INTERVAL="1800"
|
||||
|
||||
## Type: list(local0,local1,local2,local3,local4,local5,local6,local7,daemon)
|
||||
## Default: daemon
|
||||
#
|
||||
# Syslog facility used to log messages from smartd
|
||||
#
|
||||
SMARTD_LOG_FACILITY="daemon"
|
||||
|
||||
## Type: string
|
||||
## Default:
|
||||
#
|
||||
# Read and replace drive database from specified file instead of
|
||||
# system files. Prepend "+" to read and add drive database from
|
||||
# specified file.
|
||||
#
|
||||
SMARTD_DRIVEDB=""
|
||||
|
||||
## Type: yesno
|
||||
## Default: yes
|
||||
#
|
||||
# Preserve SMART attributes in files and read them when smartd starts.
|
||||
# This feature is now ATA only, so you may want to disable it to supress
|
||||
# warnings. See smartd(8) option -s for details.
|
||||
#
|
||||
SMARTD_SAVESTATES="yes"
|
||||
|
||||
## Type: yesno
|
||||
## Default: yes
|
||||
#
|
||||
# Enable or disable SMART attribute logging.
|
||||
# If you don't consider this log useful for you, you can disable it.
|
||||
# This feature is now ATA only, so you may want to disable it to supress
|
||||
# warnings. See smartd(8) option -s for details.
|
||||
#
|
||||
SMARTD_ATTRLOG="yes"
|
||||
|
||||
## Type: string
|
||||
## Default:
|
||||
#
|
||||
# Arbitrary options passed to the smart daemon in addition to above. See
|
||||
# smartd(8) for the full list of options.
|
||||
#
|
||||
SMARTD_EXTRA_OPTS=""
|
Loading…
Reference in New Issue
Block a user