Initial import.
This commit is contained in:
parent
88e1752466
commit
04ff91ae13
@ -0,0 +1 @@
|
||||
watchdog-5.5.tar.gz
|
34
README.Fedora
Normal file
34
README.Fedora
Normal file
@ -0,0 +1,34 @@
|
||||
This is the watchdog package for Fedora. It implements a userspace
|
||||
daemon which periodically pings (usually hardware) to tell the
|
||||
hardware that the machine is alive. If the hardware times out without
|
||||
receiving a ping, it assumes userspace is dead and reboots the
|
||||
machine.
|
||||
|
||||
There are several major classes of watchdog available:
|
||||
|
||||
- watchdog hardware implementing the Linux /dev/watchdog API
|
||||
|
||||
* drivers in /lib/modules/$(uname -r)/kernel/drivers/watchdog/
|
||||
* http://lxr.linux.no/linux/Documentation/watchdog/watchdog-api.txt
|
||||
|
||||
- softdog
|
||||
|
||||
* software watchdog (just runs inside the kernel)
|
||||
* implements the Linux /dev/watchdog API
|
||||
* won't help you if the kernel fails (obvious, right?)
|
||||
|
||||
- IPMI
|
||||
|
||||
* a heavyweight standard for all things server-management
|
||||
* separate Linux driver
|
||||
* ipmitool to control it
|
||||
* see README.watchdog.ipmi for how to use this daemon together
|
||||
with IPMI
|
||||
|
||||
You can also use watchdogs inside recent QEMU/KVM virtual machines.
|
||||
When running qemu, specify "-watchdog i6300esb" on the qemu command
|
||||
line (or use libvirt). Inside the guest, the i6300esb watchdog driver
|
||||
should automatically load and provide you with a Linux /dev/watchdog-
|
||||
compatible API.
|
||||
|
||||
- Richard W.M. Jones (rjones@redhat.com) 2009-02-26
|
107
README.watchdog.ipmi
Normal file
107
README.watchdog.ipmi
Normal file
@ -0,0 +1,107 @@
|
||||
|
||||
Instructions for how to set up the watchdog daemon to work with IPMI's hardware watchdog
|
||||
----------------------------------------------------------------------------------------
|
||||
|
||||
First, verify that the ipmitool utility is present on the system to allow
|
||||
the watchdog timer to be turned off via the command line (which ipmitool).
|
||||
This will allow the hardware watchdog timer to be turned off gracefully
|
||||
should it ever become necessary. If ipmitool is not present, install
|
||||
it or download the latest version from http://ipmitool.sourceforge.net and
|
||||
build and install it on your system.
|
||||
|
||||
Next, prior to starting up the watchdog daemon, the BMC BIOS should be set
|
||||
to enable the IPMI/BMC hardware watchdog timer, the OpenIPMI watchdog driver
|
||||
module should be inserted with the desired configuration/startup settings,
|
||||
and the watchdog daemon's configuration file should be modified to use /dev/watchdog:
|
||||
|
||||
1. To setup the IPMI/BMC BIOS to enable the hardware watchdog
|
||||
timer, see BMC documentation. The main settings in the BMC BIOS
|
||||
requiring modification to turn on the IPMI watchdog timer are:
|
||||
|
||||
- Set the BMC POST Watchdog to "ENABLED".
|
||||
- Set the BMC POST Watchdog Timeout to "5 Minutes".
|
||||
|
||||
2. To insert the OpenIPMI watchdog driver module with the
|
||||
desired configuration settings, two steps are necessary:
|
||||
|
||||
i.) Configure the OpenIPMI watchdog driver by editing the
|
||||
/etc/sysconfig/ipmi configuration file:
|
||||
|
||||
- Set "IPMI_WATCHDOG=yes".
|
||||
- Set desired options via the IPMI_WATCHDOG_OPTIONS
|
||||
config entry.
|
||||
|
||||
EXAMPLE: 'IPMI_WATCHDOG_OPTIONS="timeout=60 start_now=1 \
|
||||
preop=preop_give_data action=power_cycle pretimeout=1" '
|
||||
|
||||
Execute "modinfo ipmi_watchdog" for more detailed information
|
||||
on the available ipmi watchdog timer options.
|
||||
|
||||
- Execute "service ipmi start" (the watchdog driver starts
|
||||
automatically along with the other ipmi drivers).
|
||||
|
||||
IMPORTANT: If "start_now=1" has been set as one of the
|
||||
configuration options, be sure to start up the watchdog
|
||||
daemon before the BMC timer expires!
|
||||
|
||||
ii.) Set the OpenIPMI daemon and watchdog to start during bootup:
|
||||
|
||||
- chkconfig ipmi on
|
||||
- chkconfig watchdog on
|
||||
|
||||
|
||||
3. Configure the watchdog daemon by editing the
|
||||
/etc/watchdog.conf configuration file:
|
||||
|
||||
- Uncomment the "watchdog-device = /dev/watchdog" line.
|
||||
- Ensure that "realtime = yes" and "priority = 1" are set and not
|
||||
commented-out.
|
||||
- Uncomment the "interval" line, and set the interval to be less
|
||||
than what you set the timeout option to be in the /etc/sysconfig/ipmi
|
||||
file (ex "timeout=60" so you might set interval to 50).
|
||||
|
||||
So in the example described herein, the BMC BIOS setting is in
|
||||
minutes (5), and the "interval" and ipmi_watchdog "timeout" settings
|
||||
are both in seconds (50 and 60 respectively). Therefore, the BMC
|
||||
hardware watchdog timer is set to expire and trigger a system power
|
||||
cycle unless reset by the watchdog daemon within 5 minutes, and the
|
||||
watchdog daemon will reset the timer every 60 seconds.
|
||||
|
||||
|
||||
4. Start the Watchdog daemon:
|
||||
|
||||
- execute "service watchdog start"
|
||||
|
||||
|
||||
IMPORTANT: To gracefully stop/kill the watchdog daemon, be sure
|
||||
to use "service watchdog stop" (which executes "kill -s SIGTERM <pid>")
|
||||
and do *not* use "kill -9 <pid>". Using "kill -9 <pid>" will cause the
|
||||
daemon to be shut off without stopping the BMC's watchdog timer, thus
|
||||
a system reboot will be triggered when the BMC's watchdog timer expires.
|
||||
|
||||
Alternately, or in case the watchdog daemon is killed "ungracefully",
|
||||
you can stop the BMC timer by executing the following ipmitool utility
|
||||
command before the watchdog timer expires:
|
||||
|
||||
# ipmitool -v raw 0x06 0x24 0x04 0x01 0x00 0x10 0x00 0x0a
|
||||
|
||||
----------------------------------------------------------------------
|
||||
|
||||
To test the watchdog after system configuration and setup:
|
||||
|
||||
. Use kill -9 on the watchdog daemon so it doesn't shut down the watchdog daemon
|
||||
gracefully. Verify that the system gets reset after the BMC timer expires.
|
||||
|
||||
. Use "service watchdog stop" and verify that the watchdog daemon shuts off
|
||||
the BMC watchdog timer gracefully (the system doesn't get reset).
|
||||
|
||||
. Set the timer on the watchdog daemon to be greater than the time set in
|
||||
the BMC BIOS for system reset and verify that the system is reset.
|
||||
|
||||
. Set the timer on the daemon to be less than the time set in the
|
||||
BMC timer and verify that the BMC watchdog is poked regularly and the
|
||||
system is not reset.
|
||||
|
||||
. Test some of the other actions the BMC can take when the watchdog timer
|
||||
goes off (see modinfo ipmi_watchdog for some other settings to try).
|
||||
|
1
import.log
Normal file
1
import.log
Normal file
@ -0,0 +1 @@
|
||||
watchdog-5_5-2_fc11:HEAD:watchdog-5.5-2.fc11.src.rpm:1236936935
|
20
watchdog-5.5-cleanup-nfs.patch
Normal file
20
watchdog-5.5-cleanup-nfs.patch
Normal file
@ -0,0 +1,20 @@
|
||||
diff -uNrp watchdog-5.3.1.orig/src/nfsmount_xdr.c watchdog-5.3.1/src/nfsmount_xdr.c
|
||||
--- watchdog-5.3.1.orig/src/nfsmount_xdr.c 2007-05-30 13:00:37.000000000 -0400
|
||||
+++ watchdog-5.3.1/src/nfsmount_xdr.c 2007-05-30 13:02:04.000000000 -0400
|
||||
@@ -204,14 +204,14 @@ xdr_ppathcnf (XDR *xdrs, ppathcnf *objp)
|
||||
if (!xdr_short (xdrs, &objp->pc_pipe_buf))
|
||||
return FALSE;
|
||||
|
||||
- } else {
|
||||
+ } /*else {
|
||||
IXDR_PUT_LONG(buf, objp->pc_link_max);
|
||||
IXDR_PUT_SHORT(buf, objp->pc_max_canon);
|
||||
IXDR_PUT_SHORT(buf, objp->pc_max_input);
|
||||
IXDR_PUT_SHORT(buf, objp->pc_name_max);
|
||||
IXDR_PUT_SHORT(buf, objp->pc_path_max);
|
||||
IXDR_PUT_SHORT(buf, objp->pc_pipe_buf);
|
||||
- }
|
||||
+ } */
|
||||
if (!xdr_u_char (xdrs, &objp->pc_vdisable))
|
||||
return FALSE;
|
||||
if (!xdr_char (xdrs, &objp->pc_xxx))
|
416
watchdog-5.5-cleanup.patch
Normal file
416
watchdog-5.5-cleanup.patch
Normal file
@ -0,0 +1,416 @@
|
||||
diff -ur watchdog-5.5/src/iface.c watchdog-5.5.cleanup/src/iface.c
|
||||
--- watchdog-5.5/src/iface.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/iface.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -66,7 +66,7 @@
|
||||
#if USE_SYSLOG
|
||||
/* do verbose logging */
|
||||
if (verbose && logtick && ticker == 1)
|
||||
- syslog(LOG_INFO, "device %s received %u bytes", dev->name, bytes);
|
||||
+ syslog(LOG_INFO, "device %s received %lu bytes", dev->name, bytes);
|
||||
#endif
|
||||
|
||||
if (dev->parameter.iface.bytes == bytes) {
|
||||
diff -ur watchdog-5.5/src/keep_alive.c watchdog-5.5.cleanup/src/keep_alive.c
|
||||
--- watchdog-5.5/src/keep_alive.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/keep_alive.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -20,7 +20,6 @@
|
||||
struct tm *tm;
|
||||
char tbuf[TS_SIZE + 1];
|
||||
char tbufw[TS_SIZE + 1];
|
||||
- int i;
|
||||
|
||||
if (hb == NULL)
|
||||
return (ENOERR);
|
||||
diff -ur watchdog-5.5/src/lomount.c watchdog-5.5.cleanup/src/lomount.c
|
||||
--- watchdog-5.5/src/lomount.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/lomount.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -195,13 +195,13 @@
|
||||
break;
|
||||
case LO_CRYPT_XOR:
|
||||
pass = getpass ("Password: ");
|
||||
- strncpy (loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
|
||||
+ strncpy ((char *)loopinfo.lo_encrypt_key, pass, LO_KEY_SIZE);
|
||||
loopinfo.lo_encrypt_key[LO_KEY_SIZE - 1] = 0;
|
||||
- loopinfo.lo_encrypt_key_size = strlen (loopinfo.lo_encrypt_key);
|
||||
+ loopinfo.lo_encrypt_key_size = (int) strlen ((char *)loopinfo.lo_encrypt_key);
|
||||
break;
|
||||
case LO_CRYPT_DES:
|
||||
pass = getpass ("Password: ");
|
||||
- strncpy (loopinfo.lo_encrypt_key, pass, 8);
|
||||
+ strncpy ((char *)loopinfo.lo_encrypt_key, pass, 8);
|
||||
loopinfo.lo_encrypt_key[8] = 0;
|
||||
loopinfo.lo_encrypt_key_size = 8;
|
||||
pass = getpass ("Init (up to 16 hex digits): ");
|
||||
diff -ur watchdog-5.5/src/mntent.c watchdog-5.5.cleanup/src/mntent.c
|
||||
--- watchdog-5.5/src/mntent.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/mntent.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -21,9 +21,9 @@
|
||||
static char need_escaping[] = { ' ', '\t', '\n', '\\' };
|
||||
|
||||
static char *
|
||||
-mangle(unsigned char *s) {
|
||||
+mangle(const char *s) {
|
||||
char *ss, *sp;
|
||||
- int n;
|
||||
+ size_t n;
|
||||
|
||||
n = strlen(s);
|
||||
ss = sp = xmalloc(4*n+1);
|
||||
diff -ur watchdog-5.5/src/net.c watchdog-5.5.cleanup/src/net.c
|
||||
--- watchdog-5.5/src/net.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/net.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -57,7 +57,9 @@
|
||||
for (i = 0; i < count; i++) {
|
||||
|
||||
struct sockaddr_in from;
|
||||
- int fromlen, fdmask, j;
|
||||
+ int fdmask, j;
|
||||
+ int *fdmask_p;
|
||||
+ socklen_t fromlen;
|
||||
struct timeval timeout, dtimeout;
|
||||
struct icmphdr *icp = (struct icmphdr *) outpack;
|
||||
|
||||
@@ -119,11 +121,11 @@
|
||||
break;
|
||||
#if USE_SYSLOG
|
||||
if (verbose && logtick && ticker == 1)
|
||||
- syslog(LOG_ERR, "ping select timeout = %d seconds and %d useconds\n", dtimeout.tv_sec, dtimeout.tv_usec);
|
||||
+ syslog(LOG_ERR, "ping select timeout = %ld seconds and %ld useconds\n", dtimeout.tv_sec, dtimeout.tv_usec);
|
||||
#endif /* USE_SYSLOG */
|
||||
+ fdmask_p = &fdmask;
|
||||
|
||||
- if (select(sock_fp + 1, (fd_set *) & fdmask, (fd_set *) NULL,
|
||||
- (fd_set *) NULL, &dtimeout) >= 1) {
|
||||
+ if (select(sock_fp + 1, (fd_set *) fdmask_p, (fd_set *) NULL, (fd_set *) NULL, &dtimeout) >= 1) {
|
||||
|
||||
/* read reply */
|
||||
fromlen = sizeof(from);
|
||||
diff -ur watchdog-5.5/src/nfsmount.c watchdog-5.5.cleanup/src/nfsmount.c
|
||||
--- watchdog-5.5/src/nfsmount.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/nfsmount.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -55,6 +55,7 @@
|
||||
#include <linux/nfs.h>
|
||||
#include "mount_constants.h"
|
||||
#include "nfs_mount4.h"
|
||||
+#include <time.h>
|
||||
|
||||
#define HAVE_inet_aton
|
||||
|
||||
diff -ur watchdog-5.5/src/nfsmount_xdr.c watchdog-5.5.cleanup/src/nfsmount_xdr.c
|
||||
--- watchdog-5.5/src/nfsmount_xdr.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/nfsmount_xdr.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -43,8 +43,6 @@
|
||||
bool_t
|
||||
xdr_fhandle (XDR *xdrs, fhandle objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_opaque (xdrs, objp, FHSIZE))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -53,8 +51,6 @@
|
||||
bool_t
|
||||
xdr_fhandle3 (XDR *xdrs, fhandle3 *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_bytes (xdrs, (char **)&objp->fhandle3_val, (u_int *) &objp->fhandle3_len, FHSIZE3))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -63,8 +59,6 @@
|
||||
bool_t
|
||||
xdr_mountstat3 (XDR *xdrs, mountstat3 *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_enum (xdrs, (enum_t *) objp))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -73,8 +67,6 @@
|
||||
bool_t
|
||||
xdr_fhstatus (XDR *xdrs, fhstatus *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_u_int (xdrs, &objp->fhs_status))
|
||||
return FALSE;
|
||||
switch (objp->fhs_status) {
|
||||
@@ -91,8 +83,6 @@
|
||||
bool_t
|
||||
xdr_mountres3_ok (XDR *xdrs, mountres3_ok *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_fhandle3 (xdrs, &objp->fhandle))
|
||||
return FALSE;
|
||||
if (!xdr_array (xdrs, (char **)&objp->auth_flavours.auth_flavours_val, (u_int *) &objp->auth_flavours.auth_flavours_len, ~0,
|
||||
@@ -104,8 +94,6 @@
|
||||
bool_t
|
||||
xdr_mountres3 (XDR *xdrs, mountres3 *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_mountstat3 (xdrs, &objp->fhs_status))
|
||||
return FALSE;
|
||||
switch (objp->fhs_status) {
|
||||
@@ -122,8 +110,6 @@
|
||||
bool_t
|
||||
xdr_dirpath (XDR *xdrs, dirpath *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_string (xdrs, objp, MNTPATHLEN))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -132,8 +118,6 @@
|
||||
bool_t
|
||||
xdr_name (XDR *xdrs, name *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_string (xdrs, objp, MNTNAMLEN))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -142,8 +126,6 @@
|
||||
bool_t
|
||||
xdr_mountlist (XDR *xdrs, mountlist *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct mountbody), (xdrproc_t) xdr_mountbody))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -152,8 +134,6 @@
|
||||
bool_t
|
||||
xdr_mountbody (XDR *xdrs, mountbody *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_name (xdrs, &objp->ml_hostname))
|
||||
return FALSE;
|
||||
if (!xdr_dirpath (xdrs, &objp->ml_directory))
|
||||
@@ -166,8 +146,6 @@
|
||||
bool_t
|
||||
xdr_groups (XDR *xdrs, groups *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct groupnode), (xdrproc_t) xdr_groupnode))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -176,8 +154,6 @@
|
||||
bool_t
|
||||
xdr_groupnode (XDR *xdrs, groupnode *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_name (xdrs, &objp->gr_name))
|
||||
return FALSE;
|
||||
if (!xdr_groups (xdrs, &objp->gr_next))
|
||||
@@ -188,8 +164,6 @@
|
||||
bool_t
|
||||
xdr_exports (XDR *xdrs, exports *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_pointer (xdrs, (char **)objp, sizeof (struct exportnode), (xdrproc_t) xdr_exportnode))
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
@@ -198,8 +172,6 @@
|
||||
bool_t
|
||||
xdr_exportnode (XDR *xdrs, exportnode *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
if (!xdr_dirpath (xdrs, &objp->ex_dir))
|
||||
return FALSE;
|
||||
if (!xdr_groups (xdrs, &objp->ex_groups))
|
||||
@@ -212,8 +184,7 @@
|
||||
bool_t
|
||||
xdr_ppathcnf (XDR *xdrs, ppathcnf *objp)
|
||||
{
|
||||
- register int32_t *buf;
|
||||
-
|
||||
+ register int32_t *buf;
|
||||
int i;
|
||||
|
||||
if (xdrs->x_op == XDR_ENCODE) {
|
||||
diff -ur watchdog-5.5/src/pidfile.c watchdog-5.5.cleanup/src/pidfile.c
|
||||
--- watchdog-5.5/src/pidfile.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/pidfile.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -8,7 +8,9 @@
|
||||
#include <fcntl.h>
|
||||
#include "extern.h"
|
||||
#include "watch_err.h"
|
||||
-
|
||||
+#include <unistd.h>
|
||||
+#include <stdlib.h>
|
||||
+#include <wait.h>
|
||||
#if USE_SYSLOG
|
||||
#include <syslog.h>
|
||||
#endif
|
||||
diff -ur watchdog-5.5/src/shutdown.c watchdog-5.5.cleanup/src/shutdown.c
|
||||
--- watchdog-5.5/src/shutdown.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/shutdown.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -22,6 +22,10 @@
|
||||
#include "watch_err.h"
|
||||
#include "extern.h"
|
||||
|
||||
+#include <sys/types.h>
|
||||
+#include <unistd.h>
|
||||
+#include <time.h>
|
||||
+
|
||||
#if defined __GLIBC__
|
||||
#include "ext2_mnt.h"
|
||||
#include <sys/quota.h>
|
||||
@@ -66,7 +70,7 @@
|
||||
{
|
||||
#if USE_SYSLOG
|
||||
/* Log the closing message */
|
||||
- syslog(LOG_INFO, "stopping daemon (%d.%d)", MAJOR_VERSION, MINOR_VERSION);
|
||||
+ syslog(LOG_INFO, "stopping daemon (%d.%.1f)", MAJOR_VERSION, MINOR_VERSION);
|
||||
closelog();
|
||||
|
||||
sleep(5); /* make sure log is written */
|
||||
@@ -320,6 +324,7 @@
|
||||
void do_shutdown(int errorcode)
|
||||
{
|
||||
int i = 0, fd;
|
||||
+ size_t write_len;
|
||||
char *seedbck = RANDOM_SEED;
|
||||
|
||||
/* soft-boot the system */
|
||||
@@ -438,7 +443,7 @@
|
||||
wtmp.ut_pid = 0;
|
||||
wtmp.ut_type = RUN_LVL;
|
||||
wtmp.ut_time = t;
|
||||
- write(fd, (char *) &wtmp, sizeof(wtmp));
|
||||
+ write_len = write(fd, (char *) &wtmp, sizeof(wtmp));
|
||||
close(fd);
|
||||
}
|
||||
|
||||
@@ -453,8 +458,9 @@
|
||||
if ((fd_bck = creat(seedbck, S_IRUSR | S_IWUSR)) >= 0) {
|
||||
char buf[512];
|
||||
|
||||
- if (read(fd_seed, buf, 512) == 512)
|
||||
- write(fd_bck, buf, 512);
|
||||
+ if (read(fd_seed, buf, 512) == 512) {
|
||||
+ write_len= write(fd_bck, buf, 512);
|
||||
+ }
|
||||
close(fd_bck);
|
||||
}
|
||||
close(fd_seed);
|
||||
diff -ur watchdog-5.5/src/temp.c watchdog-5.5.cleanup/src/temp.c
|
||||
--- watchdog-5.5/src/temp.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/temp.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -31,7 +31,7 @@
|
||||
int err = errno;
|
||||
|
||||
#if USE_SYSLOG
|
||||
- syslog(LOG_ERR, "read %s gave errno = %d = '%m'", err, tempname);
|
||||
+ syslog(LOG_ERR, "read %s gave errno = %d = '%m'", tempname, err);
|
||||
#else /* USE_SYSLOG */
|
||||
perror(progname);
|
||||
#endif /* USE_SYSLOG */
|
||||
diff -ur watchdog-5.5/src/test_binary.c watchdog-5.5.cleanup/src/test_binary.c
|
||||
--- watchdog-5.5/src/test_binary.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/test_binary.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <sys/wait.h>
|
||||
#include "extern.h"
|
||||
#include "watch_err.h"
|
||||
+#include <time.h>
|
||||
|
||||
#if USE_SYSLOG
|
||||
#include <syslog.h>
|
||||
@@ -76,7 +77,7 @@
|
||||
res = check_processes(timeout);
|
||||
if (res == ETOOLONG) {
|
||||
#if USE_SYSLOG
|
||||
- syslog(LOG_ERR, "test-binary %s exceeded time limit %d", tbinary, timeout);
|
||||
+ syslog(LOG_ERR, "test-binary %s exceeded time limit %ld", tbinary, timeout);
|
||||
#endif /* USE_SYSLOG */
|
||||
return res;
|
||||
}
|
||||
diff -ur watchdog-5.5/src/watchdog.c watchdog-5.5.cleanup/src/watchdog.c
|
||||
--- watchdog-5.5/src/watchdog.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/watchdog.c 2009-02-26 15:28:24.000000000 +0000
|
||||
@@ -23,6 +23,10 @@
|
||||
#include <arpa/inet.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/wait.h>
|
||||
+#include <sys/stat.h>
|
||||
+#include <sys/types.h>
|
||||
+
|
||||
+
|
||||
#define __USE_GNU
|
||||
#include <string.h>
|
||||
|
||||
@@ -72,7 +76,7 @@
|
||||
int softboot = FALSE, watchdog = -1, load = -1, mem = -1, temp = -1;
|
||||
int tint = 10, logtick = 1, ticker = 1, schedprio = 1;
|
||||
int maxload1 = 0, maxload5 = 0, maxload15 = 0, minpages = 0;
|
||||
-int maxtemp = 120, hbstamps = 300, lastts, nrts;
|
||||
+int maxtemp = 120, hbstamps = 300, lastts=0, nrts;
|
||||
int pingcount = 3;
|
||||
char *tempname = NULL, *devname = NULL, *admin = "root", *progname;
|
||||
char *timestamps, *heartbeat;
|
||||
@@ -85,7 +89,7 @@
|
||||
|
||||
static void usage(void)
|
||||
{
|
||||
- fprintf(stderr, "%s version %d.%d, usage:\n", progname, MAJOR_VERSION, MINOR_VERSION);
|
||||
+ fprintf(stderr, "%s version %d.%.1f, usage:\n", progname, MAJOR_VERSION, MINOR_VERSION);
|
||||
#if USE_SYSLOG
|
||||
fprintf(stderr, "%s [-i <interval> [-f]] [-l <max load avg>] [-v] [-s] [-b] [-m <max temperature>]\n", progname);
|
||||
#else /* USE_SYSLOG */
|
||||
@@ -618,8 +622,8 @@
|
||||
|
||||
/* Log the starting message */
|
||||
openlog(progname, LOG_PID, LOG_DAEMON);
|
||||
- syslog(LOG_INFO, "starting daemon (%d.%d):", MAJOR_VERSION, MINOR_VERSION);
|
||||
- syslog(LOG_INFO, "int=%ds realtime=%s sync=%s soft=%s mla=%d mem=%ld",
|
||||
+ syslog(LOG_INFO, "starting daemon (%d.%.1f):", MAJOR_VERSION, MINOR_VERSION);
|
||||
+ syslog(LOG_INFO, "int=%ds realtime=%s sync=%s soft=%s mla=%d mem=%d",
|
||||
tint,
|
||||
realtime ? "yes" : "no",
|
||||
sync_it ? "yes" : "no",
|
||||
@@ -650,7 +654,7 @@
|
||||
for (act = iface; act != NULL; act = act->next)
|
||||
syslog(LOG_INFO, "interface: %s", act->name);
|
||||
|
||||
- syslog(LOG_INFO, "test=%s(%d) repair=%s alive=%s heartbeat=%s temp=%s to=%s no_act=%s",
|
||||
+ syslog(LOG_INFO, "test=%s(%ld) repair=%s alive=%s heartbeat=%s temp=%s to=%s no_act=%s",
|
||||
(tbinary == NULL) ? "none" : tbinary, timeout,
|
||||
(rbinary == NULL) ? "none" : rbinary,
|
||||
(devname == NULL) ? "none" : devname,
|
||||
@@ -692,7 +696,7 @@
|
||||
/* Allocate memory for keeping the timestamps in */
|
||||
nrts = 0;
|
||||
lastts = 0;
|
||||
- timestamps = (unsigned char *) calloc(hbstamps, TS_SIZE);
|
||||
+ timestamps = (char *) calloc(hbstamps, TS_SIZE);
|
||||
if ( timestamps == NULL ) {
|
||||
#if USE_SYSLOG
|
||||
syslog(LOG_ERR, "cannot allocate memory for timestamps (errno = %d = '%m')", errno);
|
||||
diff -ur watchdog-5.5/src/wd_keepalive.c watchdog-5.5.cleanup/src/wd_keepalive.c
|
||||
--- watchdog-5.5/src/wd_keepalive.c 2009-02-25 11:12:59.000000000 +0000
|
||||
+++ watchdog-5.5.cleanup/src/wd_keepalive.c 2009-02-26 15:29:18.000000000 +0000
|
||||
@@ -24,6 +24,7 @@
|
||||
#include <stdlib.h>
|
||||
#include <sys/mman.h>
|
||||
#include <sys/wait.h>
|
||||
+
|
||||
#define __USE_GNU
|
||||
#include <string.h>
|
||||
#include <syslog.h>
|
||||
@@ -271,7 +272,7 @@
|
||||
|
||||
/* Log the starting message */
|
||||
openlog(progname, LOG_PID, LOG_DAEMON);
|
||||
- sprintf(log, "starting watchdog keepalive daemon (%d.%d):", MAJOR_VERSION, MINOR_VERSION);
|
||||
+ sprintf(log, "starting watchdog keepalive daemon (%d.%.1f):", MAJOR_VERSION, MINOR_VERSION);
|
||||
sprintf(log + strlen(log), " int=%d alive=%s realtime=%s", tint, devname, realtime ? "yes" : "no");
|
||||
syslog(LOG_INFO, log);
|
||||
#endif /* USE_SYSLOG */
|
86
watchdog.init
Normal file
86
watchdog.init
Normal file
@ -0,0 +1,86 @@
|
||||
#! /bin/sh
|
||||
#
|
||||
# chkconfig: - 27 46
|
||||
# description: A software watchdog
|
||||
#
|
||||
# rc file author: Marc Merlin <marcsoft@merlins.org>
|
||||
# Henning P. Schmiedehausen <hps@tanstaafl.de>
|
||||
|
||||
# Source function library.
|
||||
. /etc/rc.d/init.d/functions
|
||||
|
||||
[ -x /usr/sbin/watchdog -a -e /etc/watchdog.conf ] || exit 0
|
||||
|
||||
VERBOSE="no"
|
||||
if [ -f /etc/sysconfig/watchdog ]; then
|
||||
. /etc/sysconfig/watchdog
|
||||
fi
|
||||
|
||||
RETVAL=0
|
||||
prog=watchdog
|
||||
pidfile=/var/run/watchdog.pid
|
||||
lockfile=/var/lock/subsys/watchdog
|
||||
|
||||
start() {
|
||||
|
||||
echo -n $"Starting $prog: "
|
||||
if [ -n "$(pidofproc $prog)" ]; then
|
||||
echo -n $"$prog: already running"
|
||||
echo_failure
|
||||
echo
|
||||
return 1
|
||||
fi
|
||||
if [ "$VERBOSE" = "yes" ]; then
|
||||
daemon /usr/sbin/${prog} -v
|
||||
else
|
||||
daemon /usr/sbin/${prog}
|
||||
fi
|
||||
RETVAL=$?
|
||||
[ $RETVAL -eq 0 ] && touch $lockfile
|
||||
[ $RETVAL -eq 0 ] && echo_success
|
||||
[ $RETVAL -ne 0 ] && echo_failure
|
||||
echo
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
stop() {
|
||||
echo -n "Stopping $prog: "
|
||||
# We are forcing it to _only_ use -TERM as killproc could use
|
||||
# -KILL which would result in BMC timer not being set properly
|
||||
# and reboot the box.
|
||||
killproc $prog -TERM
|
||||
RETVAL=$?
|
||||
echo
|
||||
[ $RETVAL -eq 0 ] && rm -f $lockfile $pidfile
|
||||
return $RETVAL
|
||||
}
|
||||
|
||||
restart() {
|
||||
stop
|
||||
sleep 6
|
||||
start
|
||||
}
|
||||
|
||||
case "$1" in
|
||||
start)
|
||||
start
|
||||
;;
|
||||
stop)
|
||||
stop
|
||||
;;
|
||||
reload|restart)
|
||||
restart
|
||||
;;
|
||||
condrestart)
|
||||
if [ -f $lockfile ]; then
|
||||
restart
|
||||
fi
|
||||
;;
|
||||
status)
|
||||
status $prog
|
||||
RETVAL=$?
|
||||
;;
|
||||
*)
|
||||
echo $"Usage: $0 {start|stop|restart|status|condrestart}"
|
||||
exit 1
|
||||
esac
|
130
watchdog.spec
Normal file
130
watchdog.spec
Normal file
@ -0,0 +1,130 @@
|
||||
Summary: Software and/or Hardware watchdog daemon
|
||||
Name: watchdog
|
||||
Version: 5.5
|
||||
Release: 2%{?dist}
|
||||
License: GPL+
|
||||
Group: System Environment/Daemons
|
||||
|
||||
URL: http://sourceforge.net/projects/watchdog/
|
||||
Source0: http://dl.sf.net/watchdog/watchdog-%{version}.tar.gz
|
||||
Source1: watchdog.init
|
||||
Source2: README.watchdog.ipmi
|
||||
Source3: README.Fedora
|
||||
|
||||
Patch0: %{name}-%{version}-cleanup.patch
|
||||
Patch1: %{name}-%{version}-cleanup-nfs.patch
|
||||
|
||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||
|
||||
Requires(post): /sbin/chkconfig
|
||||
Requires(postun): /sbin/chkconfig
|
||||
Requires(post): /sbin/service
|
||||
Requires(postun): /sbin/service
|
||||
|
||||
|
||||
%description
|
||||
The watchdog program can be used as a powerful software watchdog daemon
|
||||
or may be alternately used with a hardware watchdog device such as the
|
||||
IPMI hardware watchdog driver interface to a resident Baseboard
|
||||
Management Controller (BMC). watchdog periodically writes to /dev/watchdog;
|
||||
the interval between writes to /dev/watchdog is configurable through settings
|
||||
in the watchdog sysconfig file. This configuration file is also used to
|
||||
set the watchdog to be used as a hardware watchdog instead of its default
|
||||
software watchdog operation. In either case, if the device is open but not
|
||||
written to within the configured time period, the watchdog timer expiration
|
||||
will trigger a machine reboot. When operating as a software watchdog, the
|
||||
ability to reboot will depend on the state of the machine and interrupts.
|
||||
When operating as a hardware watchdog, the machine will experience a hard
|
||||
reset (or whatever action was configured to be taken upon watchdog timer
|
||||
expiration) initiated by the BMC.
|
||||
|
||||
|
||||
%prep
|
||||
%setup -q -n %{name}-%{version}
|
||||
|
||||
cp %{SOURCE2} .
|
||||
cp %{SOURCE3} .
|
||||
|
||||
%patch0 -p1 -b .cleanup
|
||||
%patch1 -p1 -b .cleanup-nfs
|
||||
|
||||
mv README README.orig
|
||||
iconv -f ISO-8859-1 -t UTF-8 < README.orig > README
|
||||
|
||||
|
||||
%build
|
||||
%configure
|
||||
make %{?_smp_mflags}
|
||||
|
||||
|
||||
%install
|
||||
rm -Rf ${RPM_BUILD_ROOT}
|
||||
install -d -m0755 ${RPM_BUILD_ROOT}%{_sysconfdir}
|
||||
make DESTDIR=${RPM_BUILD_ROOT} install
|
||||
install -Dp -m0644 %{name}.sysconfig ${RPM_BUILD_ROOT}%{_sysconfdir}/sysconfig/watchdog
|
||||
install -Dp -m0755 %{SOURCE1} ${RPM_BUILD_ROOT}%{_initrddir}/watchdog
|
||||
|
||||
%clean
|
||||
rm -Rf ${RPM_BUILD_ROOT}
|
||||
|
||||
|
||||
%post
|
||||
if [ $1 -eq 1 ]; then
|
||||
/sbin/chkconfig --add %{name}
|
||||
fi
|
||||
|
||||
|
||||
%preun
|
||||
if [ $1 -eq 0 ]; then
|
||||
/sbin/service %{name} stop >/dev/null 2>&1
|
||||
/sbin/chkconfig --del %{name}
|
||||
fi
|
||||
|
||||
|
||||
%postun
|
||||
if [ $1 -ge 1 ]; then
|
||||
/sbin/service %{name} condrestart >/dev/null 2>&1
|
||||
fi
|
||||
|
||||
|
||||
%files
|
||||
%defattr(-, root, root, -)
|
||||
%doc AUTHORS ChangeLog COPYING examples/ IAFA-PACKAGE NEWS README TODO README.watchdog.ipmi README.Fedora
|
||||
%config(noreplace) %{_sysconfdir}/watchdog.conf
|
||||
%config(noreplace) %{_sysconfdir}/sysconfig/watchdog
|
||||
%{_sysconfdir}/rc.d/init.d/watchdog
|
||||
%{_sbindir}/watchdog
|
||||
%{_sbindir}/wd_keepalive
|
||||
%{_mandir}/man5/watchdog.conf.5*
|
||||
%{_mandir}/man8/watchdog.8*
|
||||
%{_mandir}/man8/wd_keepalive.8*
|
||||
|
||||
|
||||
%changelog
|
||||
* Thu Mar 5 2009 Richard W.M. Jones <rjones@redhat.com> - 5.5-2
|
||||
- Use '-' in defattr line instead of explicit file mode.
|
||||
|
||||
* Thu Feb 26 2009 Richard W.M. Jones <rjones@redhat.com> - 5.5-1
|
||||
- New upstream version 5.5.
|
||||
- Prepared the package for Fedora review.
|
||||
|
||||
* Mon Jun 11 2007 Lon Hohberger <lhh@redhat.com> - 5.3.1-7
|
||||
- Rebuild for RHEL5 Update 1 - Resolves: 227401
|
||||
|
||||
* Wed May 30 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-6
|
||||
- Fixed the init script file.
|
||||
|
||||
* Tue May 29 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-5
|
||||
- Fixed a compile warning in nfsmount_xdr file.
|
||||
|
||||
* Wed May 23 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-4
|
||||
- Fixed rpmlint warnings.
|
||||
|
||||
* Wed May 16 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-3
|
||||
- Changes to spec, init script and README file per Carol Hebert recommendation.
|
||||
|
||||
* Thu Apr 19 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-2
|
||||
- Added README.watchdog.ipmi
|
||||
|
||||
* Mon Apr 16 2007 Konrad Rzeszutek <konradr@redhat.com> - 5.3.1-1
|
||||
- Initial copy.
|
Loading…
Reference in New Issue
Block a user