diff --git a/0001-Allow-binding-to-a-listen-address-that-doesn-t-exist.patch b/0001-Allow-binding-to-a-listen-address-that-doesn-t-exist.patch new file mode 100644 index 0000000000000000000000000000000000000000..0aeb35a7b05120abf645243f735cd8c290949a67 --- /dev/null +++ b/0001-Allow-binding-to-a-listen-address-that-doesn-t-exist.patch @@ -0,0 +1,26 @@ +From e677018004a41a1895a44fca88a6ff2323093064 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Skytt=C3=A4?= +Date: Fri, 10 Jan 2014 00:21:07 +0200 +Subject: [PATCH] Allow binding to a listen address that doesn't exist yet + +--- + src/daemon.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/src/daemon.c b/src/daemon.c +index 3e211f2..ee836e5 100644 +--- a/src/daemon.c ++++ b/src/daemon.c +@@ -98,6 +98,9 @@ void daemon_open_sockets(void) + /* Allow local port reuse in TIME_WAIT */ + setsockopt(sks_serv[sks_serv_num], SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)); + ++ /* Allow binding to a listen address that doesn't exist yet */ ++ setsockopt(sks_serv[sks_serv_num], SOL_IP, IP_FREEBIND, &on, sizeof(on)); ++ + /* Now we've got a socket - we need to bind it. */ + if (bind(sks_serv[sks_serv_num], resp->ai_addr, resp->ai_addrlen) < 0) { + /* Nope, try another */ +-- +1.8.3.1 + diff --git a/0001-Try-attribute-190-if-194-doesn-t-exist.patch b/0001-Try-attribute-190-if-194-doesn-t-exist.patch new file mode 100644 index 0000000000000000000000000000000000000000..402da94a903757bcc7f17e1323466899c600c797 --- /dev/null +++ b/0001-Try-attribute-190-if-194-doesn-t-exist.patch @@ -0,0 +1,104 @@ +From d3c162af0ca0110ce715c1e364194475f2eee3ae Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Skytt=C3=A4?= +Date: Sat, 18 Jan 2014 13:59:27 +0200 +Subject: [PATCH] Try attribute 190 if 194 doesn't exist + +--- + src/ata.c | 2 ++ + src/db.c | 1 + + src/db.h | 1 + + src/hddtemp.c | 1 + + src/hddtemp.h | 1 + + src/sata.c | 2 ++ + src/scsi.c | 1 + + 7 files changed, 9 insertions(+) + +diff --git a/src/ata.c b/src/ata.c +index 1d908ac..742129a 100644 +--- a/src/ata.c ++++ b/src/ata.c +@@ -141,6 +141,8 @@ static enum e_gettemp ata_get_temperature(struct disk *dsk) { + + /* temperature */ + field = ata_search_temperature(values, dsk->db_entry->attribute_id); ++ if(!field && dsk->db_entry->attribute_id2 != 0) ++ field = ata_search_temperature(values, dsk->db_entry->attribute_id2); + + if(field) + dsk->value = *(field+3); +diff --git a/src/db.c b/src/db.c +index 5aed8e8..f8a1822 100644 +--- a/src/db.c ++++ b/src/db.c +@@ -196,6 +196,7 @@ static int parse_db_line(char *line) { + new_entry->regexp = strdup(regexp); + new_entry->description = strdup(description); + new_entry->attribute_id = value; ++ new_entry->attribute_id2 = 0; + new_entry->unit = unit; + new_entry->next = NULL; + *last_entry = new_entry; +diff --git a/src/db.h b/src/db.h +index 6c08e87..dccb21c 100644 +--- a/src/db.h ++++ b/src/db.h +@@ -26,6 +26,7 @@ + struct harddrive_entry { + char *regexp; + short int attribute_id; ++ short int attribute_id2; + char *description; + unsigned char unit; + struct harddrive_entry *next; +diff --git a/src/hddtemp.c b/src/hddtemp.c +index 300cb0e..bce5e91 100644 +--- a/src/hddtemp.c ++++ b/src/hddtemp.c +@@ -528,6 +528,7 @@ int main(int argc, char* argv[]) { + dsk->db_entry->regexp = ""; + dsk->db_entry->description = ""; + dsk->db_entry->attribute_id = DEFAULT_ATTRIBUTE_ID; ++ dsk->db_entry->attribute_id2 = DEFAULT_ATTRIBUTE_ID2; + dsk->db_entry->unit = 'C'; + dsk->db_entry->next = NULL; + } +diff --git a/src/hddtemp.h b/src/hddtemp.h +index ed4ed5d..2460639 100644 +--- a/src/hddtemp.h ++++ b/src/hddtemp.h +@@ -30,6 +30,7 @@ typedef __u16 u16; + + #define MAX_ERRORMSG_SIZE 128 + #define DEFAULT_ATTRIBUTE_ID 194 ++#define DEFAULT_ATTRIBUTE_ID2 190 + + #define F_to_C(val) (int)(((double)(val)-32.0)/1.8) + #define C_to_F(val) (int)(((double)(val)*(double)1.8) + (double)32.0) +diff --git a/src/sata.c b/src/sata.c +index d67621f..0afe13c 100644 +--- a/src/sata.c ++++ b/src/sata.c +@@ -166,6 +166,8 @@ static enum e_gettemp sata_get_temperature(struct disk *dsk) { + + /* temperature */ + field = sata_search_temperature(values, dsk->db_entry->attribute_id); ++ if(!field && dsk->db_entry->attribute_id2 != 0) ++ field = sata_search_temperature(values, dsk->db_entry->attribute_id2); + + if(field) + dsk->value = *(field+3); +diff --git a/src/scsi.c b/src/scsi.c +index 71c9b82..b92b235 100644 +--- a/src/scsi.c ++++ b/src/scsi.c +@@ -84,6 +84,7 @@ static enum e_gettemp scsi_get_temperature(struct disk *dsk) { + dsk->db_entry->regexp = ""; + dsk->db_entry->description = ""; + dsk->db_entry->attribute_id = 0; ++ dsk->db_entry->attribute_id2 = 0; + dsk->db_entry->unit = 'C'; + dsk->db_entry->next = NULL; + +-- +1.8.3.1 + diff --git a/fix-model-length.patch b/fix-model-length.patch new file mode 100644 index 0000000000000000000000000000000000000000..469ebd82a3f4ed2e427963f468d996984e4807f6 --- /dev/null +++ b/fix-model-length.patch @@ -0,0 +1,12 @@ +diff -Naur hddtemp-0.3-beta15.orig/src/sata.c hddtemp-0.3-beta15/src/sata.c +--- hddtemp-0.3-beta15.orig/src/sata.c 2014-03-07 19:09:31.000000000 +0100 ++++ hddtemp-0.3-beta15/src/sata.c 2014-03-07 19:29:07.738284373 +0100 +@@ -88,7 +88,7 @@ + return strdup(_("unknown")); + else + { +- sata_fixstring(identify + 54, 24); ++ sata_fixstring(identify + 54, 40); + return strdup(identify + 54); + } + } diff --git a/hddtemp-0.3-beta15-autodetect-717479.patch b/hddtemp-0.3-beta15-autodetect-717479.patch new file mode 100644 index 0000000000000000000000000000000000000000..a76b545e67e03d1f3a3d4b6b24bfe6cfb54ce007 --- /dev/null +++ b/hddtemp-0.3-beta15-autodetect-717479.patch @@ -0,0 +1,85 @@ +diff -up hddtemp-0.3-beta15/doc/hddtemp.8~ hddtemp-0.3-beta15/doc/hddtemp.8 +--- hddtemp-0.3-beta15/doc/hddtemp.8~ 2011-08-18 00:36:05.689001470 +0300 ++++ hddtemp-0.3-beta15/doc/hddtemp.8 2011-08-18 00:44:46.753006253 +0300 +@@ -19,7 +19,7 @@ + hddtemp \- Utility to monitor hard drive temperature + .SH SYNOPSIS + .B hddtemp +-.RI [ options ] " [type:]disk" ... ++.RI [ options ] " [[type:]disk]" ... + .SH "DESCRIPTION" + .PP + .B hddtemp +@@ -35,7 +35,8 @@ You can specify one or more device drive + with a + .B type + like PATA, SATA or SCSI to force hddtemp too use one of these type +-(because detection can fail). ++(because detection can fail). If no paths are specified, autodetection of ++installed drives is attempted. + + + .SH "OPTIONS" +diff -up hddtemp-0.3-beta15/src/hddtemp.c~ hddtemp-0.3-beta15/src/hddtemp.c +--- hddtemp-0.3-beta15/src/hddtemp.c~ 2011-08-18 00:36:05.638996861 +0300 ++++ hddtemp-0.3-beta15/src/hddtemp.c 2011-08-18 00:35:55.485060798 +0300 +@@ -54,6 +54,7 @@ + #include + #include + #include ++#include + + // Application specific includes + #include "ata.h" +@@ -255,6 +256,7 @@ int main(int argc, char* argv[]) { + int ret = 0; + int show_db; + struct disk * ldisks; ++ glob_t diskglob; + + backtrace_sigsegv(); + backtrace_sigill(); +@@ -419,11 +421,6 @@ int main(int argc, char* argv[]) { + exit(0); + } + +- if(argc - optind <= 0) { +- fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n")); +- exit(1); +- } +- + if(debug) { + /* argc = optind + 1;*/ + quiet = 1; +@@ -434,6 +431,23 @@ int main(int argc, char* argv[]) { + exit(1); + } + ++ memset(&diskglob, 0, sizeof(glob_t)); ++ if(argc - optind <= 0) { ++ if(glob("/dev/[hs]d[a-z]", 0, NULL, &diskglob) == 0) { ++ argc = diskglob.gl_pathc; ++ argv = diskglob.gl_pathv; ++ optind = 0; ++ } else { ++ argc = 0; ++ } ++ } ++ ++ if(argc - optind <= 0) { ++ globfree(&diskglob); ++ fprintf(stderr, _("Too few arguments: you must specify one drive, at least.\n")); ++ exit(1); ++ } ++ + init_bus_types(); + + /* collect disks informations */ +@@ -527,6 +541,7 @@ int main(int argc, char* argv[]) { + else { + do_direct_mode(ldisks); + } ++ globfree(&diskglob); + + return ret; + } diff --git a/hddtemp-0.3-beta15.tar.bz2 b/hddtemp-0.3-beta15.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..c1b8f7315dd53f39453e5aeabb87ce089559d4a6 Binary files /dev/null and b/hddtemp-0.3-beta15.tar.bz2 differ diff --git a/hddtemp.consoleapp b/hddtemp.consoleapp new file mode 100644 index 0000000000000000000000000000000000000000..4faa12019fd29450afb938c33d15068df82e2007 --- /dev/null +++ b/hddtemp.consoleapp @@ -0,0 +1,3 @@ +USER=root +PROGRAM=/usr/sbin/hddtemp +GUI=no diff --git a/hddtemp.db b/hddtemp.db new file mode 100644 index 0000000000000000000000000000000000000000..47c518533303d0b7076fca1a6a710875a993440a --- /dev/null +++ b/hddtemp.db @@ -0,0 +1,55 @@ +# Minimal database for drives not covered by defaults. hddtemp will first try +# S.M.A.R.T. attribute 194. If it does not exist, it will try attribute 190. +# +# The four columns are: +# 1) Regular expression matching the drive identification, which you see as +# the Model in the output of: hddtemp --debug /dev/drive +# 2) S.M.A.R.T. attribute number to get drive temperature. A value of zero +# means that we know that the drive doesn't have a temperature sensor. +# 3) Temperature units reported (C or F). +# 4) Human readable string representing the drive model. + +"FUJITSU MHM2100AT" 0 C "Fujitsu MHM2100AT" +"HITACHI_DK228A-65" 0 C "Hitachi DK228A-65" +"IBM-DARA-212000" 0 C "IBM Travelstar 12GN" +"IBM-DHEA-(34330|36480)" 0 C "IBM Deskstar 5 serie" +"IBM-DHEA-(34331|36481|38451)" 0 C "IBM Deskstar 8 serie" +"IBM-DJNA-35.*" 231 C "IBM Deskstar 25 GP serie" +"IBM-DJNA-37.*" 231 C "IBM Deskstar 22 GXP serie" +"IBM-DPTA-35.*" 231 C "IBM Deskstar 37GP serie" +"IBM-DPTA-37.*" 231 C "IBM Deskstar 34GXP serie" +"IBM-DTTA-35*" 0 C "IBM Deskstar 16GP serie" +"MK4313MAT" 220 C "Toshiba MK4313MAT" +"Maxtor 5(1024|1369|2049|2732|3073|4098)U(2|3|4|6|8)" 0 C "Maxtor DiamondMax Plus 40" +"Maxtor 5T0[24]0H[24]" 0 C "Maxtor DiamondMax Plus 60" +"Maxtor 94098U8" 11 C "Maxtor DiamondMax 40 94098U8" +"QUANTUM FIREBALL CX10.2A" 0 C "Quantum Fireball CX10.2A" +"QUANTUM FIREBALLP AS40.0" 0 C "Quantum Fireball AS40" +"SAMSUNG SSD PM8[01]0" 0 C "Samsung SSD PM800/810" +"SAMSUNG SV0432A" 0 C "Samsung SV0432A" +"SAMSUNG SV3002H" 0 C "Samsung SpinPoint V30 serie" +"SAMSUNG SW0434A" 0 C "Samsung SW0434A" +"ST310210A" 0 C "Seagate ST310210A" +"ST310220A" 0 C "Seagate ST310220A" +"ST310240A" 0 C "Seagate Medalist 10240 Ultra ATA-3" +"ST313021A" 0 C "Seagate U8 ST313021A" +"ST320423A" 0 C "Seagate U10 20423, Ultra ATA/66" +"ST3412A" 0 C "Seagate ST3412A" +"ST38641A" 0 C "Seagate ST38641A" +"Seagate Technology 1275MB - ST31276A" 0 C "Seagate ST31276A" +"TOSHIBA MK1517GAP" 0 C "Toshiba MK1517GAP" +"TOSHIBA MK2018GAS" 226 F "Toshiba MK2018GAS" +"TOSHIBA MK3017GAP" 0 C "Toshiba MK3017GAP" +"WDC AC22000L" 0 C "Western Digital Caviar AC22000" +"WDC AC418000D" 231 C "Western Digital AC418000D" +"WDC AC420400D" 231 C "Western Digital Caviar AC420400D" +"WDC WD100EB-00BHF0" 0 C "Western Digital 100EB-00BHF0" +"WDC WD135BA" 231 C "Western Digital WD135BA" +"WDC WD200BB-00AUA1" 0 C "Western Digital Caviar WD200BB" +"WDC WD300BB-00CAA0" 0 C "Western Digital WD300BB" +"WDC WD400BB-(18CA|00DE)A0" 0 C "Western Digital Caviar WD400BB" +"WDC WD400BB-00CAA0" 0 C "Western Digital 400BB-00CAA0" +"WDC WD400EB-00CPF0" 0 C "Western Digital 400EB-00CPF0" +"WDC WD600BB-32BSA0" 0 C "Western Digital 600BB-32BSA0" +"WDC WD800BB-00CAA1" 0 C "Western Digital WD800BB-00CAA1" +"WDC WD800JB-00CRA1" 0 C "Western Digital Caviar WD800JB" diff --git a/hddtemp.pam b/hddtemp.pam new file mode 100644 index 0000000000000000000000000000000000000000..268cc92b34c7ee59405bd3313335a0baf45eea7c --- /dev/null +++ b/hddtemp.pam @@ -0,0 +1,4 @@ +#%PAM-1.0 +auth sufficient pam_rootok.so +auth required pam_localuser.so +account required pam_permit.so diff --git a/hddtemp.service b/hddtemp.service new file mode 100644 index 0000000000000000000000000000000000000000..7fa64b62e4d067a5cecb22252de5cf43dd1105e4 --- /dev/null +++ b/hddtemp.service @@ -0,0 +1,11 @@ +[Unit] +Description=Hard drive temperature monitor daemon +Documentation=man:hddtemp(8) + +[Service] +Environment=HDDTEMP_OPTIONS=--listen=127.0.0.1 +EnvironmentFile=-/etc/sysconfig/hddtemp +ExecStart=/usr/sbin/hddtemp -dF $HDDTEMP_OPTIONS + +[Install] +WantedBy=multi-user.target diff --git a/hddtemp.spec b/hddtemp.spec new file mode 100644 index 0000000000000000000000000000000000000000..79498524995a558de9b83f9a27761a9709854967 --- /dev/null +++ b/hddtemp.spec @@ -0,0 +1,92 @@ +Name: hddtemp +Version: 0.3 +Release: 1.beta15%{?dist} +Summary: Hard disk temperature tool +License: GPLv2+ +URL: http://savannah.nongnu.org/projects/hddtemp/ + +Source0: http://download.savannah.nongnu.org/releases/hddtemp/%{name}-%{version}-beta15.tar.bz2 +Source1: %{name}.db +Source2: %{name}.service +Source3: %{name}.sysconfig +Source4: %{name}.pam +Source5: %{name}.consoleapp + +Patch0: 0001-Try-attribute-190-if-194-doesn-t-exist.patch +Patch1: http://ftp.debian.org/debian/pool/main/h/hddtemp/hddtemp_0.3-beta15-53.diff.gz +Patch2: %{name}-0.3-beta15-autodetect-717479.patch +Patch3: 0001-Allow-binding-to-a-listen-address-that-doesn-t-exist.patch +Patch4: fix-model-length.patch + +BuildRequires: gcc +BuildRequires: gettext +# systemd >= 186 for scriptlet macros +BuildRequires: systemd >= 186 +Requires(post): systemd +Requires(preun): systemd +Requires(postun): systemd +Requires: %{_bindir}/consolehelper + + +%description +hddtemp is a tool that gives you the temperature of your hard drive by +reading S.M.A.R.T. information. + + +%prep +%setup -q -n %{name}-%{version}-beta15 + +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch0 -p1 +%patch4 -p1 + +sed -i -e 's|/etc/hddtemp.db|/usr/share/misc/hddtemp.db|' doc/hddtemp.8 +chmod -x contribs/analyze/* +rm COPYING ; cp -p GPL-2 COPYING +cp -p debian/changelog changelog.debian + + +%build +%configure --disable-dependency-tracking +make %{?_smp_mflags} + + +%install +make install DESTDIR=$RPM_BUILD_ROOT +install -Dpm 644 %{SOURCE1} $RPM_BUILD_ROOT/usr/share/misc/hddtemp.db +install -Dpm 644 %{SOURCE2} $RPM_BUILD_ROOT%{_unitdir}/hddtemp.service +install -Dpm 644 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/hddtemp +install -dm 755 $RPM_BUILD_ROOT%{_bindir} +ln -s consolehelper $RPM_BUILD_ROOT%{_bindir}/hddtemp +install -Dpm 644 %{SOURCE4} $RPM_BUILD_ROOT%{_sysconfdir}/pam.d/hddtemp +install -Dpm 644 %{SOURCE5} $RPM_BUILD_ROOT%{_sysconfdir}/security/console.apps/hddtemp +%find_lang %{name} + + +%post +%systemd_post hddtemp.service + +%preun +%systemd_preun hddtemp.service + +%postun +%systemd_postun_with_restart hddtemp.service + + +%files -f %{name}.lang +%doc ChangeLog changelog.debian COPYING README TODO contribs/ +%config(noreplace) %{_sysconfdir}/sysconfig/hddtemp +%config(noreplace) %{_sysconfdir}/pam.d/hddtemp +%config(noreplace) %{_sysconfdir}/security/console.apps/hddtemp +%{_unitdir}/hddtemp.service +%{_bindir}/hddtemp +%{_sbindir}/hddtemp +%config(noreplace) /usr/share/misc/hddtemp.db +%{_mandir}/man8/hddtemp.8* + +%changelog +* Tue Jul 7 2020 Dillon Chen - 0.3-1.beta15 +- package from Fedora +- Update Debian patch set to 0.3-beta15-53 diff --git a/hddtemp.sysconfig b/hddtemp.sysconfig new file mode 100644 index 0000000000000000000000000000000000000000..78ba4fcb384b9ee308288cb53f3e2a1ec34bedf1 --- /dev/null +++ b/hddtemp.sysconfig @@ -0,0 +1,5 @@ +# +# hddtemp(8) daemon options. If no disks are specified here, the service +# will try to autodetect and start monitoring all of them. +# +HDDTEMP_OPTIONS="-l 127.0.0.1" diff --git a/hddtemp_0.3-beta15-53.diff.gz b/hddtemp_0.3-beta15-53.diff.gz new file mode 100644 index 0000000000000000000000000000000000000000..380962c7fcaa9b7a34261c98edb4f2c507dbc716 Binary files /dev/null and b/hddtemp_0.3-beta15-53.diff.gz differ