diff --git a/sysutils/smartmontools/Makefile b/sysutils/smartmontools/Makefile index 85d841432579..e4cc6bc5a5a5 100644 --- a/sysutils/smartmontools/Makefile +++ b/sysutils/smartmontools/Makefile @@ -1,45 +1,46 @@ PORTNAME= smartmontools DISTVERSION= 7.5 +PORTREVISION= 1 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 PORTDOCS= * SUB_FILES= pkg-message smart CONFIGURE_ARGS= --disable-dependency-tracking \ --enable-sample \ --with-gnupg=yes \ --with-initscriptdir=${PREFIX}/etc/rc.d \ --with-nvme-devicescan=yes 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/smart.in b/sysutils/smartmontools/files/smart.in index 8460df0f231a..606bd02cefa3 100644 --- a/sysutils/smartmontools/files/smart.in +++ b/sysutils/smartmontools/files/smart.in @@ -1,88 +1,91 @@ #!/bin/sh # This script is in the public domain. Original author: Garrett Wollman if [ -r /etc/defaults/periodic.conf ]; then . /etc/defaults/periodic.conf source_periodic_confs fi smartctl=%%PREFIX%%/sbin/smartctl : ${daily_status_smartctl_flags="-H"} : ${daily_status_smartctl_extra_status_flags="-a"} case "${daily_status_smart_devices}" in # XXX AUTO mode selects only regular ad/da disks [Aa][Uu][Tt][Oo]) - daily_status_smart_devices="$(sysctl -n kern.disks | sed -E 's/[[:<:]](cd|ar|vtbd)[0-9]+//g; s/n(da|vd)/nvme/g')" + daily_status_smart_devices="$(sysctl -n kern.disks | sed -E 's/[[:<:]](cd|ar|vtbd|mfid)[0-9]+//g; s/n(da|vd)/nvme/g')" ;; *) ;; esac if [ -z "${daily_status_smart_devices}" ]; then : ${daily_status_smart_enable="NO"} else : ${daily_status_smart_enable="YES"} fi trim_junk="tail -n +4" tmpfile="$(mktemp -t daily)" trap "rm -f ${tmpfile}" 0 1 3 15 rc=0 case "${daily_status_smart_enable}" in [Yy][Ee][Ss]) echo echo 'SMART status:' cd /dev for device in ${daily_status_smart_devices}; do device="${device#/dev/}" devflags="" case ${device} in tw[aes]*) devflags="-d3ware,${device##tw[aes][0-9]*,}" device="/dev/${device%,[0-9]*}" ;; ciss*) devflags="-dcciss,${device##ciss[0-9]*,}" device="/dev/${device%,[0-9]*}" ;; arcmsr*) devflags="-dareca,${device##arcmsr[0-9]*,}" device="/dev/${device%,[0-9]*}" ;; mrsas*) devflags="-dmegaraid,${device##mrsas[0-9]*,}" device="/dev/${device%,[0-9]*}" ;; + pass*) devflags="${device#pass[0-9]*,}" + device="/dev/${device%%,[:alpha:0-9-]*}" + ;; /*) ;; *) device="/dev/${device}" ;; esac if [ -e ${device} ]; then echo -n "Checking health of ${device}" if [ -n "${devflags}" ]; then echo -n " (${devflags})" fi echo -n ": " ${smartctl} ${devflags} ${daily_status_smartctl_flags} ${device} > "${tmpfile}" status=$? if [ ${status} -eq 0 ]; then echo "OK" elif [ ${status} -eq 32 ]; then echo "OK (but has failed in the past)" elif [ $((status & 3)) -ne 0 ]; then rc=2 ${trim_junk} "${tmpfile}" elif [ `grep -c '^SMART support is: Unavailable' ${tmpfile}` -eq 1 ] ; then rc=2 echo "N/A" else rc=3 ${smartctl} ${devflags} ${daily_status_smartctl_extra_status_flags} \ ${device} | ${trim_junk} fi fi done ;; esac exit "${rc}" diff --git a/sysutils/smartmontools/files/smartd.in b/sysutils/smartmontools/files/smartd.in index 1176089041ad..832b3bb6b2c7 100644 --- a/sysutils/smartmontools/files/smartd.in +++ b/sysutils/smartmontools/files/smartd.in @@ -1,68 +1,68 @@ #!/bin/sh # PROVIDE: smartd -# REQUIRE: root ldconfig devfs syslogd mail +# 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"