diff --git a/sysutils/smartmontools/Makefile b/sysutils/smartmontools/Makefile index f18956f8ce16..a20672855ca7 100644 --- a/sysutils/smartmontools/Makefile +++ b/sysutils/smartmontools/Makefile @@ -1,45 +1,45 @@ PORTNAME= smartmontools DISTVERSION= 7.5 -PORTREVISION= 1 +PORTREVISION= 2 CATEGORIES= sysutils MASTER_SITES= SF MAINTAINER= samm@FreeBSD.org COMMENT= S.M.A.R.T. disk monitoring tools WWW= https://www.smartmontools.org LICENSE= GPLv2+ LICENSE_FILE= ${WRKSRC}/COPYING USES= compiler:c++11-lib cpe USE_RC_SUBR= smartd GNU_CONFIGURE= yes CONFIGURE_ARGS= --disable-dependency-tracking \ --enable-sample \ --with-gnupg=yes \ --with-initscriptdir=${PREFIX}/etc/rc.d \ --with-nvme-devicescan=yes SUB_FILES= pkg-message smart PORTDOCS= * OPTIONS_DEFINE= DOCS post-patch: @${REINPLACE_CMD} -e 's| install-initdDATA| |g' \ ${PATCH_WRKSRC}/Makefile.in @${REINPLACE_CMD} -e 's|install-drivedbinstDATA install-examplesDATA|install-drivedbinstDATA|g' \ ${PATCH_WRKSRC}/Makefile.in @${REINPLACE_CMD} -e 's|install-examplesSCRIPTS install-man|install-man|g' \ ${PATCH_WRKSRC}/Makefile.in post-install: @${MKDIR} ${STAGEDIR}${PREFIX}/etc/periodic/daily ${INSTALL_SCRIPT} ${WRKDIR}/smart \ ${STAGEDIR}${PREFIX}/etc/periodic/daily ${MV} ${STAGEDIR}${DATADIR}/drivedb.h \ ${STAGEDIR}${DATADIR}/drivedb.h.sample .include diff --git a/sysutils/smartmontools/files/patch-smartd.cpp b/sysutils/smartmontools/files/patch-smartd.cpp new file mode 100644 index 000000000000..e0e47039ca41 --- /dev/null +++ b/sysutils/smartmontools/files/patch-smartd.cpp @@ -0,0 +1,50 @@ +--- smartd.cpp.orig 2026-02-17 17:19:34 UTC ++++ smartd.cpp +@@ -97,7 +97,7 @@ extern "C" { + typedef void (*signal_handler_type)(int); + } + +-static void set_signal_if_not_ignored(int sig, signal_handler_type handler) ++static void set_signal(int sig, signal_handler_type handler) + { + #if defined(_WIN32) + // signal() emulation +@@ -105,13 +105,7 @@ static void set_signal_if_not_ignored(int sig, signal_ + + #else + // SVr4, POSIX.1-2001, ..., POSIX.1-2024 +- struct sigaction sa; +- sa.sa_handler = SIG_DFL; +- sigaction(sig, (struct sigaction *)0, &sa); +- if (sa.sa_handler == SIG_IGN) +- return; +- +- sa = {}; ++ struct sigaction sa = {}; + sa.sa_handler = handler; + sa.sa_flags = SA_RESTART; // BSD signal() semantics + sigaction(sig, &sa, (struct sigaction *)0); +@@ -4401,17 +4395,17 @@ static void CheckDevicesOnce(const dev_config_vector & + static void install_signal_handlers() + { + // normal and abnormal exit +- set_signal_if_not_ignored(SIGTERM, sighandler); +- set_signal_if_not_ignored(SIGQUIT, sighandler); ++ set_signal(SIGTERM, sighandler); ++ set_signal(SIGQUIT, sighandler); + + // in debug mode, ==> HUP +- set_signal_if_not_ignored(SIGINT, (debugmode ? HUPhandler : sighandler)); ++ set_signal(SIGINT, (debugmode ? HUPhandler : sighandler)); + + // Catch HUP and USR1 +- set_signal_if_not_ignored(SIGHUP, HUPhandler); +- set_signal_if_not_ignored(SIGUSR1, USR1handler); ++ set_signal(SIGHUP, HUPhandler); ++ set_signal(SIGUSR1, USR1handler); + #ifdef _WIN32 +- set_signal_if_not_ignored(SIGUSR2, USR2handler); ++ set_signal(SIGUSR2, USR2handler); + #endif + } + diff --git a/sysutils/smartmontools/files/smartd.in b/sysutils/smartmontools/files/smartd.in index 832b3bb6b2c7..00c87303247a 100644 --- a/sysutils/smartmontools/files/smartd.in +++ b/sysutils/smartmontools/files/smartd.in @@ -1,68 +1,54 @@ #!/bin/sh # PROVIDE: smartd # REQUIRE: DAEMON mail # KEYWORD: shutdown nojail # # Define these smartd_* variables in one of these files: # /etc/rc.conf # /etc/rc.conf.local # /etc/rc.conf.d/smartd # # DO NOT CHANGE THESE DEFAULT VALUES HERE . /etc/rc.subr name=smartd rcvar=smartd_enable load_rc_config smartd : ${smartd_enable:="NO"} required_files=${smartd_config:="%%PREFIX%%/etc/smartd.conf"} pidfile=${smartd_pidfile:="/var/run/smartd.pid"} command="%%PREFIX%%/sbin/smartd" command_args="-c ${required_files} -p ${pidfile}" extra_commands="reload report" -reload_cmd="smartd_reload" report_cmd="smartd_report" - start_precmd=smartd_prestart smartd_prestart() { case "${smartd_flags}" in -p*|*-p*) err 1 'smartd_flags includes the -p option, use smartd_pidfile instead' ;; esac } -smartd_reload() -{ - local status - - if ! status=`run_rc_command status 2>&1`; then - echo $status - return 1 - fi - echo 'Reloading smartd.' - kill -HUP $rc_pid -} - smartd_report() { local status if ! status=`run_rc_command status 2>&1`; then echo $status return 1 fi echo 'Checking SMART devices now.' kill -USR1 $rc_pid } run_rc_command "$1"