ports/79049: New port net-mgmt/netdump-server:RedHat server part\

Stanislav Sedov stas at core.310.ru
Sun Mar 20 10:40:06 UTC 2005


>Number:         79049
>Category:       ports
>Synopsis:       New port net-mgmt/netdump-server:RedHat server part\
>Confidential:   no
>Severity:       non-critical
>Priority:       low
>Responsible:    freebsd-ports-bugs
>State:          open
>Quarter:        
>Keywords:       
>Date-Required:
>Class:          change-request
>Submitter-Id:   current-users
>Arrival-Date:   Sun Mar 20 10:40:05 GMT 2005
>Closed-Date:
>Last-Modified:
>Originator:     Stanislav Sedov <stas at core.310.ru>
>Release:        FreeBSD 4.11-STABLE i386
>Organization:
Moscow Engineering Physics Institute (MEPhI)
>Environment:
System: FreeBSD core.310.ru 4.11-STABLE FreeBSD 4.11-STABLE #0: Sat Mar 5 06:31:52 MSK 2005 stas at core.310.ru:/work/src/fbsd/src/sys/compile/DESKTOP i386


	
>Description:
        Netdump-server listens on the network for connections from linux
kernels using the netconsole/netdump module. When such a machine crashes
it contacts the netdump-server on the specified ip/port. The server then
proceeds to log console messages, including the oops message, and a kernel
memory dump in a specified directory, and then reboots the machine.
>How-To-Repeat:
>Fix:

	

--- netdump-server.shar begins here ---
# This is a shell archive.  Save it in a file, remove anything before
# this line, and then unpack it by entering "sh file".  Note, it may
# create directories; files and directories will be owned by you and
# have default permissions.
#
# This archive contains:
#
#	netdump-server
#	netdump-server/files
#	netdump-server/files/patch-ae
#	netdump-server/files/netdump.conf
#	netdump-server/files/patch-aa
#	netdump-server/files/patch-ab
#	netdump-server/files/patch-ac
#	netdump-server/files/patch-ad
#	netdump-server/files/patch-af
#	netdump-server/files/patch-ag
#	netdump-server/files/patch-ah
#	netdump-server/files/netdump-server.sh
#	netdump-server/Makefile
#	netdump-server/distinfo
#	netdump-server/pkg-descr
#	netdump-server/pkg-plist
#	netdump-server/pkg-message
#
echo c - netdump-server
mkdir -p netdump-server > /dev/null 2>&1
echo c - netdump-server/files
mkdir -p netdump-server/files > /dev/null 2>&1
echo x - netdump-server/files/patch-ae
sed 's/^X//' >netdump-server/files/patch-ae << 'END-of-netdump-server/files/patch-ae'
X--- Makefile.orig	Tue Mar  1 20:33:03 2005
X+++ Makefile	Sat Mar 19 16:53:49 2005
X@@ -1,7 +1,7 @@
X DEBUG_FLAGS=-Wall -g
X 
X-CFLAGS=`glib-config --cflags` $(DEBUG_FLAGS) -D_FILE_OFFSET_BITS=64
X-LDFLAGS=`glib-config --libs` -lpopt
X+CFLAGS += `pkg-config --cflags glib-2.0` $(DEBUG_FLAGS) -D_FILE_OFFSET_BITS=64 -I /usr/local/include
X+LDFLAGS += `pkg-config --libs glib-2.0` -L/usr/local/lib -lpopt
X 
X VERSION=$(shell awk '/Version:/ { print $$2 }' netdump.spec)
X # Used to append this to CVSTAG: _$(subst .,-,$(RELEASE)), but now that
END-of-netdump-server/files/patch-ae
echo x - netdump-server/files/netdump.conf
sed 's/^X//' >netdump-server/files/netdump.conf << 'END-of-netdump-server/files/netdump.conf'
Xdaemon=true
Xsecure=0
Xdumpdirprefix="/var/spool/netdump"
END-of-netdump-server/files/netdump.conf
echo x - netdump-server/files/patch-aa
sed 's/^X//' >netdump-server/files/patch-aa << 'END-of-netdump-server/files/patch-aa'
X--- configuration.c.orig	Sun Mar 20 11:17:08 2005
X+++ configuration.c	Sun Mar 20 10:06:04 2005
X@@ -2,6 +2,7 @@
X #include <string.h>
X #include <unistd.h>
X #include <stdio.h>
X+#include <stdlib.h>
X #include <syslog.h>
X #include <sys/types.h>
X #include <sys/stat.h>
X@@ -15,6 +16,8 @@
X 
X NetdumpConfiguration config;
X 
X+char *netdump_dir_prefix = NETDUMP_DIR_PREFIX;
X+
X enum ConfigType {
X   CONFIG_NONE,
X   CONFIG_BOOLEAN,
X@@ -46,6 +49,7 @@
X   { "max_concurrent_dumps", CONFIG_INT, CONFIG_OFFSET(max_concurrent_dumps), GINT_TO_POINTER (4) },
X   { "daemon", CONFIG_BOOLEAN, CONFIG_OFFSET(daemon), GINT_TO_POINTER (0) },
X   { "pidfile", CONFIG_STRING, CONFIG_OFFSET(pidfile), NULL },
X+  { "dumpdirprefix", CONFIG_STRING, CONFIG_OFFSET(dumpdirprefix), NETDUMP_DIR_PREFIX },
X   { "secure", CONFIG_INT, CONFIG_OFFSET(secure), GINT_TO_POINTER (1) },
X   { "space_check", CONFIG_INT, CONFIG_OFFSET(space_check), GINT_TO_POINTER (1) },
X };
X@@ -118,7 +122,20 @@
X       *(guint16 *)ptr = GPOINTER_TO_INT (config_data[i].default_value);
X       break;
X     case CONFIG_STRING:
X-      *(gchar **)ptr = (gchar *)config_data[i].default_value;
X+      if (config_data[i].default_value != NULL) {
X+        *(char **)ptr = (char *)malloc(strlen(config_data[i].default_value) + 1);
X+	if (*(char **)ptr != NULL) {
X+		strncpy(*(char **)ptr, config_data[i].default_value, strlen(config_data[i].default_value));
X+		(*(char **)ptr)[strlen(config_data[i].default_value)] = '\0';
X+	}
X+	else {
X+		syslog(LOG_ERR, "Cannot malloc\n");
X+		exit(1);
X+	}
X+      }
X+      else
X+	ptr = (char *)NULL;
X+
X       break;
X     case CONFIG_NONE:
X       break;
X@@ -181,7 +198,18 @@
X     if (token != G_TOKEN_STRING)
X       return G_TOKEN_STRING;
X 
X-    *(char **)ptr = scanner->value.v_string;
X+    if (*(char **)ptr != NULL)
X+	free(*(char **)ptr);
X+    *(char **)ptr = (char *)malloc(strlen(scanner->value.v_string) + 1);
X+	if (*(char **)ptr != NULL) {
X+		strncpy(*(char **)ptr, scanner->value.v_string, strlen(scanner->value.v_string));
X+		(*(char **)ptr)[strlen(scanner->value.v_string)] = '\0';
X+	}
X+	else {
X+		syslog(LOG_ERR, "Cannot malloc\n");
X+		exit(1);
X+	}
X+
X     break;
X   case CONFIG_NONE:
X     break;
X@@ -277,6 +305,8 @@
X       "run in background as a daemon", NULL },
X     { "pidfile",  'P', POPT_ARG_STRING, &config.pidfile, 0,
X       "file in which to store the pid", "path" },
X+    { "dumpdirprefix",  'D', POPT_ARG_STRING, &config.dumpdirprefix, 0,
X+      "dir in which to store dumps", "/var/spool/netdump" },
X     { "secure", 's', POPT_ARG_INT, &config.secure, 0,
X       "use ssh to send client identification", "1" },
X     { "space_check", 'S', POPT_ARG_INT, &config.space_check, 0,
X@@ -305,7 +335,7 @@
X   /* Set the default values */
X   config_set_defaults();
X 
X-  config_load ("/etc/netdump.conf");
X+  config_load ("/usr/local/etc/netdump.conf");
X   
X   optCon = poptGetContext("netdump-server", argc, (const char **)argv,
X 			  optionsTable, 0);
END-of-netdump-server/files/patch-aa
echo x - netdump-server/files/patch-ab
sed 's/^X//' >netdump-server/files/patch-ab << 'END-of-netdump-server/files/patch-ab'
X--- configuration.h.orig	Sun Mar 20 11:17:12 2005
X+++ configuration.h	Sun Mar 20 08:57:43 2005
X@@ -6,6 +6,7 @@
X   int max_concurrent_dumps;
X   gboolean daemon;
X   char *pidfile;
X+  char *dumpdirprefix;
X   int secure;
X   int space_check;
X } NetdumpConfiguration;
END-of-netdump-server/files/patch-ab
echo x - netdump-server/files/patch-ac
sed 's/^X//' >netdump-server/files/patch-ac << 'END-of-netdump-server/files/patch-ac'
X--- netdump-server.8.orig	Sat Mar 19 16:56:34 2005
X+++ netdump-server.8	Sat Mar 19 16:58:00 2005
X@@ -50,6 +50,9 @@
X Store a pidfile.  The default service uses /var/run/netdump-server.pid.
X The default is not to write a pidfile.
X .TP
X+--dumpdirprefix \fIpath\fP
X+The directory in which to save dumps. The default - /var/spool/netdump.
X+.TP
X --daemon
X netdump-server should background itself and run as a daemon.
X .TP
X@@ -76,7 +79,7 @@
X /etc/netdump.conf
X A configuration file read by netdump-server on startup. It is a
X "key=value" style file. Currently it supports the options:
X-port, max_concurrent_dumps, daemon and pidfile.
X+port, max_concurrent_dumps, daemon, pidfile and dumpdirprefix.
X .TP
X /etc/init.d/netdump-server
X An init script to start a default system installation of netdump-server.
END-of-netdump-server/files/patch-ac
echo x - netdump-server/files/patch-ad
sed 's/^X//' >netdump-server/files/patch-ad << 'END-of-netdump-server/files/patch-ad'
X--- netdumpclient.c.orig	Fri Sep  3 23:53:20 2004
X+++ netdumpclient.c	Sat Mar 19 16:53:49 2005
X@@ -5,7 +5,8 @@
X #include <syslog.h>
X #include <sys/types.h>
X #include <sys/stat.h>
X-#include <sys/vfs.h>
X+#include <sys/param.h>
X+#include <sys/mount.h>
X #include <fcntl.h>
X #include <unistd.h>
X #include <stdlib.h>
X@@ -898,7 +899,7 @@
X 	      if (tried_once)
X 		syslog (LOG_ERR, "No space for dump image, even after calling netdump-nospace");
X 	      else
X-		syslog (LOG_ERR, "No space for dump image");
X+		syslog (LOG_ERR, "No space for dump image, avail = %lld, need = %lld\n", buf.f_bavail, memdump_size);
X 	      
X 	      status_request (client, TRUE);
X 	      g_free (file);
END-of-netdump-server/files/patch-ad
echo x - netdump-server/files/patch-af
sed 's/^X//' >netdump-server/files/patch-af << 'END-of-netdump-server/files/patch-af'
X--- netdumpelf.h.orig	Fri Sep  3 23:53:20 2004
X+++ netdumpelf.h	Sun Mar 20 12:49:10 2005
X@@ -1,7 +1,21 @@
X #include <sys/time.h>
X-#include <linux/types.h>
X+#include <sys/types.h>
X #include <elf.h>
X 
X+typedef __uint32_t __u32;
X+typedef __uint64_t __u64;
X+typedef __uint16_t __u16;
X+typedef __uint8_t __u8;
X+typedef uid_t __kernel_uid_t;
X+typedef gid_t __kernel_gid_t;
X+typedef Elf_Note Elf32_Nhdr;
X+typedef Elf_Note Elf64_Nhdr;
X+
X+#if __FreeBSD_version < 500000
X+#define ELFMAG "\177ELF"
X+#define SELFMAG 4
X+#endif
X+
X #ifndef NT_TASKSTRUCT
X #define NT_TASKSTRUCT	4
X #endif
X@@ -87,9 +101,9 @@
X #define CLIENT_BYTE_ORDER(client)  \
X 	((client->machine_type == EM_386 || \
X 	 client->machine_type == EM_X86_64 || \
X-         client->machine_type == EM_IA_64) ? __LITTLE_ENDIAN : __BIG_ENDIAN)
X+         client->machine_type == EM_IA_64) ? LITTLE_ENDIAN : BIG_ENDIAN)
X 
X-#define BYTE_SWAP_REQUIRED(client) (__BYTE_ORDER != CLIENT_BYTE_ORDER(client))
X+#define BYTE_SWAP_REQUIRED(client) (BYTE_ORDER != CLIENT_BYTE_ORDER(client))
X 
X typedef unsigned short u16;
X 
END-of-netdump-server/files/patch-af
echo x - netdump-server/files/patch-ag
sed 's/^X//' >netdump-server/files/patch-ag << 'END-of-netdump-server/files/patch-ag'
X--- server.c.orig	Sun Mar 20 11:17:45 2005
X+++ server.c	Sun Mar 20 10:09:04 2005
X@@ -66,7 +66,7 @@
X       dir = g_new (CrashDir, 1);
X       dir->time = now;
X       dir->path = g_strdup_printf ("%s/%d.%d.%d.%d-%s",
X-				   NETDUMP_DIR_PREFIX,
X+				   config.dumpdirprefix,
X 				   (ip >> 24) & 0xff,
X 				   (ip >> 16) & 0xff,
X 				   (ip >> 8) & 0xff,
X@@ -100,7 +100,7 @@
X   char *cmdline;
X   int res = -1;
X 
X-  filename = g_strconcat (NETDUMP_DIR_PREFIX "/scripts/",
X+  filename = g_strconcat (config.dumpdirprefix, "/scripts/",
X 			  script,
X 			  NULL);
X   
X@@ -147,7 +147,7 @@
X     }
X 
X   path = g_strdup_printf ("%s/magic/%d.%d.%d.%d",
X-			 NETDUMP_DIR_PREFIX,
X+			 config.dumpdirprefix,
X 			 (ip >> 24) & 0xff,
X 			 (ip >> 16) & 0xff,
X 			 (ip >> 8) & 0xff,
X@@ -373,10 +373,10 @@
X 
X   openlog("netdump", LOG_PID, LOG_DAEMON);
X 
X-  if (chdir (NETDUMP_DIR_PREFIX) == -1)
X+  if (chdir (config.dumpdirprefix) == -1)
X     {
X-      syslog (LOG_ERR, "can't cd to %s", NETDUMP_DIR_PREFIX);
X-      fprintf (stderr, "can't cd to %s", NETDUMP_DIR_PREFIX);
X+      syslog (LOG_ERR, "can't cd to %s", config.dumpdirprefix);
X+      fprintf (stderr, "can't cd to %s\n", config.dumpdirprefix);
X       exit (1);
X     }
X   
X@@ -429,6 +429,11 @@
X 
X   loop = g_main_new (TRUE);
X   g_main_run (loop);
X+
X+  if (config.pidfile != NULL)
X+    free(config.pidfile);
X+  if (config.dumpdirprefix != NULL)
X+    free(config.dumpdirprefix);
X 
X   return 0;
X }
END-of-netdump-server/files/patch-ag
echo x - netdump-server/files/patch-ah
sed 's/^X//' >netdump-server/files/patch-ah << 'END-of-netdump-server/files/patch-ah'
X--- server.h.orig	Fri Sep  3 23:53:20 2004
X+++ server.h	Sat Mar 19 16:53:49 2005
X@@ -7,7 +7,7 @@
X 
X #define NETDUMP_PORT 6666
X 
X-#define NETDUMP_DIR_PREFIX "/var/crash"
X+#define NETDUMP_DIR_PREFIX "/var/spool/netdump"
X 
X extern int master_socket;
X 
END-of-netdump-server/files/patch-ah
echo x - netdump-server/files/netdump-server.sh
sed 's/^X//' >netdump-server/files/netdump-server.sh << 'END-of-netdump-server/files/netdump-server.sh'
X#!/bin/sh
X#
X
X# PROVIDE: netdump_server
X# REQUIRE:
X# BEFORE:
X# KEYWORD: FreeBSD shutdown
X
X# Add the following line to /etc/rc.conf to enable mpd:
X#
X#netdump_server_enable="YES"
X
X. %%RC_SUBR%%
X
Xload_rc_config netdump_server
X
Xnetdump_server_enable=${netdump_server_enable-"NO"}
Xnetdump_server_flags=${netdump_server_flags-"--daemon --secure 0"}
X
Xname=netdump_server
Xrcvar=`set_rcvar`
Xcommand=%%PREFIX%%/bin/netdump-server
Xpidfile=/var/run/netdump-server.pid
Xstart_cmd=start_cmd
Xstop_cmd=stop_cmd
X
Xstart_cmd()
X{
X	if [ -r ${pidfile} ]; then
X		echo "netdump_server already runned"
X		exit 1
X	fi
X
X	touch $pidfile
X	chown netdump $pidfile
X
X	su -m netdump -c "${command} --pidfile ${pidfile} ${netdump_server_flags}"
X}
X
Xstop_cmd()
X{
X	if [ -r ${pidfile} ]; then
X		pid=`cat ${pidfile}`
X		kill -TERM ${pid}
X		wait_for_pids ${pid}
X		
X		rm -rf ${pidfile}
X	else
X		echo "netdump-server not runned"
X	fi
X}
X
Xload_rc_config $name
Xrun_rc_command "$1"
END-of-netdump-server/files/netdump-server.sh
echo x - netdump-server/Makefile
sed 's/^X//' >netdump-server/Makefile << 'END-of-netdump-server/Makefile'
X# New ports collection makefile for:    netdump-server
X# Date created:         20 Mar 2005
X# Whom:                 Stanislav Sedov
X#
X
XPORTNAME=	netdump-server
XPORTVERSION=	0.7.7
XCATEGORIES=	net-mgmt
XMASTER_SITES=	http://mbsd.msk.ru/dist/
XDISTNAME=	netdump-${PORTVERSION}
X
XMAINTAINER=	stas at core.310.ru
XCOMMENT=	RedHat server part of netdump/netconsole package for linux
X
XLIB_DEPENDS=	popt:${PORTSDIR}/devel/popt \
X		glib:${PORTSDIR}/devel/glib20
XBUILD_DEPENDS=	pkg-config:${PORTSDIR}/devel/pkgconfig
X
XPKGMESSAGE=	${WRKDIR}/pkg-message
X
XDOCSFILES=	README README.client
XCONFIGFILE=	netdump.conf
XMAN8=		netdump.8 netdump-server.8
X
XUSE_RC_SUBR=	yes
XRC_SCRIPT=	netdump-server.sh
X
XSED_SCRIPT+=	-e 's,%%PREFIX%%,${PREFIX},g'	\
X		-e 's,%%RC_SUBR%%,${RC_SUBR},g'	\
X		-e 's,%%CONFIGFILE%%,${CONFIGFILE},g'
X
Xpost-patch:
X	${SED} ${SED_SCRIPT} < ${FILESDIR}/${RC_SCRIPT} >	\
X		${WRKDIR}/${RC_SCRIPT}
X	${SED} ${SED_SCRIPT} < ${FILESDIR}/${CONFIGFILE} >	\
X		${WRKDIR}/${CONFIGFILE}.sample
X	${SED} ${SED_SCRIPT} < ${PKGDIR}/pkg-message >		\
X		${PKGMESSAGE}
X
Xdo-install:
X	${INSTALL_MAN} ${WRKSRC}/netdump-server.8 ${MANPREFIX}/man/man8
X	${INSTALL_MAN} ${WRKSRC}/netdump.8 ${MANPREFIX}/man/man8
X	${INSTALL_PROGRAM} ${WRKSRC}/netdump-server ${PREFIX}/bin
X
X.if exists(${PREFIX}/etc/netdump.conf)
X		@echo "====> Preserving your previous configuration."
X.else
X		${INSTALL_DATA} ${WRKDIR}/${CONFIGFILE}.sample ${PREFIX}/etc
X.endif
X
X	${INSTALL_SCRIPT} ${WRKDIR}/netdump-server.sh ${PREFIX}/etc/rc.d
X
X	${MKDIR} ${EXAMPLESDIR}
X
X	for filename in ${WRKSRC}/example_scripts/*; do		\
X		${INSTALL_SCRIPT} $${filename} ${EXAMPLESDIR};	\
X	done
X
Xpost-install:
X
X.if !defined(NOPORTDOCS)
X	@${MKDIR} ${DOCSDIR}
X.for FILE in ${DOCSFILES}
X	@${INSTALL_DATA} ${WRKSRC}/${FILE} ${DOCSDIR}
X.endfor
X.endif
X
X	if ! pw usershow "netdump" 2>/dev/null 1>&2; then		\
X		if pw useradd -n netdump -g operator -h -		\
X			-s "/sbin/nologin" -d "/nonexistent"		\
X			-c "Netdump-server pseudo user";		\
X		then							\
X			echo "Added user \"netdump\"";			\
X		else							\
X			echo "Adding user \"netdump\" failed!";		\
X			exit 1;						\
X		fi							\
X	fi
X
X	if [ ! -d /var/spool/netdump ]; then			\
X		${MKDIR} /var/spool/netdump;			\
X		${CHOWN} netdump:operator /var/spool/netdump;	\
X		${CHMOD} 700 /var/spool/netdump;		\
X	fi
X
X	@${CAT} ${PKGMESSAGE}
X
X.include <bsd.port.mk>
END-of-netdump-server/Makefile
echo x - netdump-server/distinfo
sed 's/^X//' >netdump-server/distinfo << 'END-of-netdump-server/distinfo'
XMD5 (netdump-0.7.7.tar.gz) = 0b2b15cd95d2e64bac4ae5e05f49e82f
END-of-netdump-server/distinfo
echo x - netdump-server/pkg-descr
sed 's/^X//' >netdump-server/pkg-descr << 'END-of-netdump-server/pkg-descr'
X	Netdump-server listens on the network for connections from linux
Xkernels using the netconsole/netdump module. When such a machine crashes
Xit contacts the netdump-server on the specified ip/port. The server then
Xproceeds to log console messages, including the oops message, and a kernel
Xmemory dump in a specified directory, and then reboots the machine.
X
XWWW: http://www.redhat.com
END-of-netdump-server/pkg-descr
echo x - netdump-server/pkg-plist
sed 's/^X//' >netdump-server/pkg-plist << 'END-of-netdump-server/pkg-plist'
Xbin/netdump-server
Xetc/rc.d/netdump-server.sh
X%%EXAMPLESDIR%%/netdump-crash
X%%EXAMPLESDIR%%/netdump-nospace
X%%EXAMPLESDIR%%/netdump-reboot
X%%EXAMPLESDIR%%/netdump-start
X%%PORTDOCS%%%%DOCSDIR%%/README
X%%PORTDOCS%%%%DOCSDIR%%/README.client
X%%PORTDOCS%%@dirrm %%DOCSDIR%%
X at dirrm %%EXAMPLESDIR%%
END-of-netdump-server/pkg-plist
echo x - netdump-server/pkg-message
sed 's/^X//' >netdump-server/pkg-message << 'END-of-netdump-server/pkg-message'
X=============================================================================
X
XThis port installed sample config script '%%PREFIX%%/etc/%%CONFIGFILE%%.sample'.
XRename it to '%%PREFIX%%/etc/%%CONFIGFILE%%' and edit to suit your needs.
X
XDumps will be stored in /var/spool/netdump. You can change it in config or
Xusing runtime options.
X
XIn order to enable logging add '!netdump' part to syslog.conf.
X
XIf you want to use netdump-server in secure way set password for netdump
Xaccount and change 'secure' config option to 1.
X
XTo run netdump-server from startup, add netdump_server_enable="YES"
Xin your /etc/rc.conf.
X
X=============================================================================
END-of-netdump-server/pkg-message
exit
--- netdump-server.shar ends here ---


>Release-Note:
>Audit-Trail:
>Unformatted:
 		of netdump/netconsole package for linux



More information about the freebsd-ports-bugs mailing list