CVSROOT:        /cvs/cluster
Module name:    cluster
Changes by:     [EMAIL PROTECTED]       2008-01-07 05:52:29

Modified files:
        .              : configure 
        ccs/ccs_tool   : editconf.c update.c 
        ccs/daemon     : ccsd.c cluster_mgr.c cnx_mgr.c globals.h 
        ccs/lib        : libccs.c 
        cman/daemon    : cmanccs.c 
        cman/init.d    : Makefile 
        fence/agents/xvm: options.c simple_auth.h 
        fence/fenced   : main.c 
        make           : defines.mk.input 
        rgmanager/init.d: Makefile 
        rgmanager/src/daemons: rg_locks.c 
        rgmanager/src/resources: Makefile 
Added files:
        cman/init.d    : cman.in 
        rgmanager/init.d: rgmanager.in 
        rgmanager/src/resources/utils: config-utils.sh.in 
Removed files:
        cman/init.d    : cman 
        rgmanager/init.d: rgmanager 
        rgmanager/src/resources/utils: config-utils.sh 

Log message:
        makes it possible to change the default configuration file by setting
        --confdir (default to /etc/cluster) and --conffile (cluster.conf).
        
        NOTE: manpages with hardencoded /etc/cluster/cluster.conf are not 
updated.
        If you dare to change these defaults you know what you are doing.
        
        NOTE to developers: you will need to re-run ./configure to set the new 
vars.

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/configure.diff?cvsroot=cluster&r1=1.45&r2=1.46
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/ccs_tool/editconf.c.diff?cvsroot=cluster&r1=1.12&r2=1.13
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/ccs_tool/update.c.diff?cvsroot=cluster&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/ccsd.c.diff?cvsroot=cluster&r1=1.29&r2=1.30
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/cluster_mgr.c.diff?cvsroot=cluster&r1=1.26&r2=1.27
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/cnx_mgr.c.diff?cvsroot=cluster&r1=1.44&r2=1.45
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/daemon/globals.h.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/ccs/lib/libccs.c.diff?cvsroot=cluster&r1=1.13&r2=1.14
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/daemon/cmanccs.c.diff?cvsroot=cluster&r1=1.39&r2=1.40
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.in.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/Makefile.diff?cvsroot=cluster&r1=1.8&r2=1.9
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/cman/init.d/cman.diff?cvsroot=cluster&r1=1.34&r2=NONE
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/options.c.diff?cvsroot=cluster&r1=1.5&r2=1.6
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/agents/xvm/simple_auth.h.diff?cvsroot=cluster&r1=1.1&r2=1.2
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/fence/fenced/main.c.diff?cvsroot=cluster&r1=1.45&r2=1.46
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/make/defines.mk.input.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/rgmanager.in.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/Makefile.diff?cvsroot=cluster&r1=1.7&r2=1.8
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/init.d/rgmanager.diff?cvsroot=cluster&r1=1.7&r2=NONE
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/daemons/rg_locks.c.diff?cvsroot=cluster&r1=1.9&r2=1.10
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/Makefile.diff?cvsroot=cluster&r1=1.25&r2=1.26
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/utils/config-utils.sh.in.diff?cvsroot=cluster&r1=NONE&r2=1.1
http://sourceware.org/cgi-bin/cvsweb.cgi/cluster/rgmanager/src/resources/utils/config-utils.sh.diff?cvsroot=cluster&r1=1.6&r2=NONE

--- cluster/configure   2007/12/21 07:28:37     1.45
+++ cluster/configure   2008/01/07 05:52:26     1.46
@@ -75,6 +75,8 @@
        prefix => \$prefix,
        sbindir => \$sbindir,
        sharedir => \$sharedir,
+       confdir => \$confdir,
+       conffile => \$conffile,
        fence_agents => \$fence_agents,
        enable_xen => \$enable_xen,
        release_major => \$release_major,
@@ -137,6 +139,8 @@
                    'prefix=s',
                    'sbindir=s',
                    'sharedir=s',
+                   'confdir=s',
+                   'conffile=s',
                    'release_major=s',
                    'release_minor=s',
                    'fence_agents=s',
@@ -169,6 +173,8 @@
   print "--libdir=\tthe base directory for libraries.  (Default: 
{prefix}/lib)\n";
   print "--libexecdir=\tthe base directory for executable components.  
(Default: {prefix}/libexec)\n";
   print "--sharedir=\tthe base directory for misc cluster files.  (Default: 
{prefix}/share/cluster)\n";
+  print "--confdir=\tthe cluster config directory.  (Default: /etc/cluster)\n";
+  print "--conffile=\tthe cluster config file.  (Default: cluster.conf)\n";
   print "--mandir=\tthe base directory for man pages.  (Default: 
{prefix}/share/man)\n";
   print "--module_dir=\tthe base directory for kernel modules.  (Default:  
/lib/modules/`uname -r`/kernel\n";
   print "\nbuild flags:\n";
@@ -473,6 +479,12 @@
 if (!$sharedir) {
   $sharedir="${prefix}/share/cluster";
 }
+if (!$confdir) {
+  $confdir="/etc/cluster";
+}
+if (!$conffile) {
+  $conffile="cluster.conf";
+}
 if (!$fence_agents) {
   $fence_agents="all";
 }
@@ -584,6 +596,8 @@
   $_ =~ s/[EMAIL PROTECTED]@/$mandir/;
   $_ =~ s/[EMAIL PROTECTED]@/$sbindir/;
   $_ =~ s/[EMAIL PROTECTED]@/$sharedir/;
+  $_ =~ s/[EMAIL PROTECTED]@/$confdir/;
+  $_ =~ s/[EMAIL PROTECTED]@/$conffile/;
   $_ =~ s/[EMAIL PROTECTED]@/$fence_agents/;
   $_ =~ s/[EMAIL PROTECTED]@/$enable_xen/;
   $_ =~ s/[EMAIL PROTECTED]@/$without_ccs/;
--- cluster/ccs/ccs_tool/editconf.c     2007/12/13 10:38:42     1.12
+++ cluster/ccs/ccs_tool/editconf.c     2008/01/07 05:52:27     1.13
@@ -26,7 +26,7 @@
 #include "update.h"
 
 #define MAX_NODES 256
-#define DEFAULT_CONFIG_FILE "/etc/cluster/cluster.conf"
+
 char *prog_name = "ccs_tool";
 
 #define die(fmt, args...) \
@@ -54,7 +54,7 @@
 
 static void config_usage(int rw)
 {
-       fprintf(stderr, " -c --configfile    Name of configuration file 
(/etc/cluster/cluster.conf)\n");
+       fprintf(stderr, " -c --configfile    Name of configuration file (" 
DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE ")\n");
        if (rw)
        {
                fprintf(stderr, " -o --outputfile    Name of output file 
(defaults to same as --configfile)\n");
@@ -543,14 +543,14 @@
        LIBXML_TEST_VERSION;
 
        if (!ninfo->configfile)
-               ninfo->configfile = DEFAULT_CONFIG_FILE;
+               ninfo->configfile = DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE;
        if (!ninfo->outputfile)
                ninfo->outputfile = ninfo->configfile;
 
        /* Load XML document */
        doc = xmlParseFile(ninfo->configfile);
        if (doc == NULL)
-               die("Error: unable to parse cluster.conf file\n");
+               die("Error: unable to parse requested configuration file\n");
 
        return doc;
 
@@ -1036,7 +1036,7 @@
                }
        }
        if (!ninfo.outputfile)
-               ninfo.outputfile = DEFAULT_CONFIG_FILE;
+               ninfo.outputfile = DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE;
        ninfo.configfile = "-";
 
        if (argc - optind < 1)
--- cluster/ccs/ccs_tool/update.c       2007/06/19 18:08:01     1.13
+++ cluster/ccs/ccs_tool/update.c       2008/01/07 05:52:27     1.14
@@ -379,7 +379,7 @@
            "  Old config version :: %d\n"
            "  Proposed config version :: %d\n"
            "  Winning config version  :: %d\n\n"
-           "Check /etc/cluster/cluster.conf to ensure it contains the desired 
contents.\n", v1, v2, v3);
+           "Check " DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE " to ensure it 
contains the desired contents.\n", v1, v2, v3);
     return -EAGAIN;
   }
 
--- cluster/ccs/daemon/ccsd.c   2007/08/30 21:31:41     1.29
+++ cluster/ccs/daemon/ccsd.c   2008/01/07 05:52:27     1.30
@@ -271,7 +271,7 @@
          " -t <ttl>      Multicast threshold (aka Time to Live) value.\n"
          " -P [bcf]:#    Specify various port numbers.\n"
          " -V            Print version information.\n"
-         " -X            No cluster manager, just read local cluster.conf.\n"
+         " -X            No cluster manager, just read local " 
DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE ".\n"
          );
   EXIT("print_usage");
 }
@@ -319,7 +319,7 @@
 
   ENTER("parse_cli_args");
 
-  config_file_location = strdup(DEFAULT_CONFIG_LOCATION);
+  config_file_location = strdup(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE);
   lockfile_location = strdup(DEFAULT_CCSD_LOCKFILE);
 
   if(!config_file_location || !lockfile_location){
@@ -530,7 +530,7 @@
   } else {
     /* no cluster.conf file.  This is fine, just need to get it from the 
network */
     if(no_manager_opt){
-      log_err("\nNo local cluster.conf found: %s\n", config_file_location);
+      log_err("\nNo local config file found: %s\n", config_file_location);
       return -1;
     }
   }
--- cluster/ccs/daemon/cluster_mgr.c    2007/05/02 12:42:43     1.26
+++ cluster/ccs/daemon/cluster_mgr.c    2008/01/07 05:52:27     1.27
@@ -194,18 +194,18 @@
 
     old_mode = umask(026);
 
-    fp = fopen("/etc/cluster/cluster.conf-update", "w");
+    fp = fopen(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE "-update", "w");
 
     umask(old_mode);
 
     if (!fp) {
-      log_sys_err("Unable to open /etc/cluster/cluster.conf-update");
+      log_sys_err("Unable to open " DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE 
"-update");
       error = -errno;
       goto fail;
     }
 
     if (xmlDocDump(fp, tmp_doc) < 0) {
-      log_sys_err("Unable to write /etc/cluster/cluster.conf-update");
+      log_sys_err("Unable to write " DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE "-update");
       goto fail;
     }
 
@@ -248,7 +248,7 @@
 
     log_dbg("Got lock 1\n");
 
-    tmp_doc = xmlParseFile("/etc/cluster/cluster.conf-update");
+    tmp_doc = xmlParseFile(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE 
"-update");
 
     if (!tmp_doc) {
       log_err("Unable to parse updated config file.\n");
@@ -263,22 +263,22 @@
 
     old_mode = umask(026);
 
-    fp = fopen("/etc/cluster/.cluster.conf", "w");
+    fp = fopen(DEFAULT_CONFIG_DIR "/." DEFAULT_CONFIG_FILE, "w");
 
     umask(old_mode);
 
     if (!fp) {
-      log_sys_err("Unable to open /etc/cluster/.cluster.conf");
+      log_sys_err("Unable to open " DEFAULT_CONFIG_DIR "/." 
DEFAULT_CONFIG_FILE);
       error = -errno;
       goto fail;
     }
 
     if (xmlDocDump(fp, tmp_doc) < 0) {
-      log_sys_err("Unable to write /etc/cluster/.cluster.conf");
+      log_sys_err("Unable to write " DEFAULT_CONFIG_DIR "/." 
DEFAULT_CONFIG_FILE);
       goto fail;
     }
 
-    rename("/etc/cluster/cluster.conf-update", "/etc/cluster/cluster.conf");
+    rename(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE "-update", 
DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE);
 
     update_required = 1;
     ch.comm_flags = COMM_UPDATE_COMMIT_ACK;
--- cluster/ccs/daemon/cnx_mgr.c        2007/12/11 20:58:00     1.44
+++ cluster/ccs/daemon/cnx_mgr.c        2008/01/07 05:52:27     1.45
@@ -83,13 +83,13 @@
     error = -EINVAL;
     goto fail;
   } else if((v2 = get_doc_version(tmp_doc)) < 0){
-    log_err("Unable to get config_version from cluster.conf.\n");
+    log_err("Unable to get config_version from %s.\n", location);
     error = v2;
     goto fail;
   } else if(master_doc && master_doc->od_doc){
     v1 = get_doc_version(master_doc->od_doc);
     if(v1 >= v2){
-      log_err("cluster.conf on-disk version is <= to in-memory version.\n");
+      log_err("%s on-disk version is <= to in-memory version.\n", location);
       log_err(" On-disk version   : %d\n", v2);
       log_err(" In-memory version : %d\n", v1);
       error = -EPERM;
@@ -118,7 +118,7 @@
     master_doc = tmp_odoc;
   }
 
-  log_msg("Update of cluster.conf complete (version %d -> %d).\n", v1, v2);
+  log_msg("Update of "DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE " complete 
(version %d -> %d).\n", v1, v2);
  fail:
   if(tmp_odoc != master_doc){
     free(tmp_odoc);
@@ -140,7 +140,7 @@
   /* If update_required is set, it means that there is still a pending **
   ** update.  We need to pull this one in before doing anything else.  */
   if(update_required){
-    error = _update_config("/etc/cluster/.cluster.conf");
+    error = _update_config(DEFAULT_CONFIG_DIR "/." DEFAULT_CONFIG_FILE);
     update_required = 0;
     if(error){
       log_err("Previous update could not be completed.\n");
@@ -348,7 +348,7 @@
        tmp_doc = xmlParseMemory(bdoc+sizeof(comm_header_t),
                                 ch->comm_payload_size);
        if(!tmp_doc){
-         log_err("Unable to parse remote cluster.conf.\n");
+         log_err("Unable to parse remote configuration.\n");
          free(bdoc); bdoc = NULL;
          goto reset_timer;
        }
@@ -357,12 +357,12 @@
        log_dbg("  Given cluster name = %s\n", cluster_name);
        log_dbg("  Remote cluster name= %s\n", tmp_name);
        if(!tmp_name){
-         log_err("Unable to find cluster name in remote cluster.conf.\n");
+         log_err("Unable to find cluster name in remote configuration.\n");
          free(bdoc); bdoc = NULL;
          xmlFreeDoc(tmp_doc); tmp_doc = NULL;
          goto reset_timer;
        } else if(cluster_name && strcmp(cluster_name, tmp_name)){
-         log_dbg("Remote and local cluster.conf have different cluster 
names.\n");
+         log_dbg("Remote and local configuration have different cluster 
names.\n");
          log_dbg("Skipping...\n");
          free(tmp_name); tmp_name = NULL;
          free(bdoc); bdoc = NULL;
@@ -372,7 +372,7 @@
        free(tmp_name); tmp_name = NULL;
        if(!master_doc->od_doc){
          if((v2 = get_doc_version(tmp_doc)) >= 0){
-           log_msg("Remote copy of cluster.conf (version = %d) found.\n", v2);
+           log_msg("Remote configuration copy (version = %d) found.\n", v2);
            master_doc->od_doc = tmp_doc;
            tmp_doc = NULL;
            write_to_disk = 1;
@@ -381,7 +381,7 @@
          if(((v1 = get_doc_version(master_doc->od_doc)) >= 0) &&
             ((v2 = get_doc_version(tmp_doc)) >= 0)){
            if(ch->comm_flags & COMM_BROADCAST_FROM_QUORATE){
-             log_msg("Remote copy of cluster.conf is from quorate node.\n");
+             log_msg("Remote configuration copy is from quorate node.\n");
              log_msg(" Local version # : %d\n", v1);
              log_msg(" Remote version #: %d\n", v2);
              if(v1 != v2){
@@ -404,7 +404,7 @@
              write_to_disk = 1;
              goto out;
            } else if(v2 > v1){
-             log_msg("Remote copy of cluster.conf is newer than local 
copy.\n");
+             log_msg("Remote configuration copy is newer than local copy.\n");
              log_msg(" Local version # : %d\n", v1);
              log_msg(" Remote version #: %d\n", v2);
              if(master_doc->od_refs){
@@ -451,23 +451,23 @@
 
     /* ATTENTION -- its bad if we fail here, because we have an in-memory 
version **
     ** but it has not been written to 
disk....................................... */
-    if(stat("/etc/cluster", &stat_buf)){
-      if(mkdir("/etc/cluster", S_IRWXU | S_IRWXG)){
-       log_sys_err("Unable to create directory /etc/cluster");
+    if(stat(DEFAULT_CONFIG_DIR, &stat_buf)){
+      if(mkdir(DEFAULT_CONFIG_DIR, S_IRWXU | S_IRWXG)){
+       log_sys_err("Unable to create directory " DEFAULT_CONFIG_DIR);
        error = -errno;
        goto fail;
       }
     } else if(!S_ISDIR(stat_buf.st_mode)){
-      log_err("/etc/cluster is not a directory.\n");
+      log_err(DEFAULT_CONFIG_DIR " is not a directory.\n");
       error = -ENOTDIR;
       goto fail;
     }
 
     old_mode = umask(026);
-    f = fopen("/etc/cluster/cluster.conf", "w");
+    f = fopen(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE, "w");
     umask(old_mode);
     if(!f){
-      log_sys_err("Unable to open /etc/cluster/cluster.conf");
+      log_sys_err("Unable to open " DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE);
       error = -errno;
       goto fail;
     }
@@ -535,28 +535,28 @@
   }
 
   if(!master_doc->od_doc){
-    master_doc->od_doc = xmlParseFile("/etc/cluster/cluster.conf");
+    master_doc->od_doc = xmlParseFile(DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE);
     if(!master_doc->od_doc){
-      log_msg("Unable to parse %s\n", "/etc/cluster/cluster.conf");
+      log_msg("Unable to parse " DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE 
"\n");
       log_msg("Searching cluster for valid copy.\n");
     } else if((error = get_doc_version(master_doc->od_doc)) < 0){
-      log_err("Unable to get config_version from cluster.conf.\n");
+      log_err("Unable to get config_version from " DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE ".\n");
       log_err("Discarding data and searching for valid copy.\n");
       xmlFreeDoc(master_doc->od_doc);
       master_doc->od_doc = NULL;
     } else if(!(tmp_name = get_cluster_name(master_doc->od_doc))){
-      log_err("Unable to get cluster name from cluster.conf.\n");
+      log_err("Unable to get cluster name from " DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE ".\n");
       log_err("Discarding data and searching for valid copy.\n");
       xmlFreeDoc(master_doc->od_doc);
       master_doc->od_doc = NULL;
     } else if(cluster_name && strcmp(cluster_name, tmp_name)){
-      log_err("Given cluster name does not match local cluster.conf.\n");
+      log_err("Given cluster name does not match local " DEFAULT_CONFIG_DIR 
"/" DEFAULT_CONFIG_FILE ".\n");
       log_err("Discarding data and searching for matching copy.\n");
       xmlFreeDoc(master_doc->od_doc);
       master_doc->od_doc = NULL;
       free(tmp_name); tmp_name = NULL;
     } else {  /* Either the names match, or a name wasn't specified. */
-      log_msg("cluster.conf (cluster name = %s, version = %d) found.\n",
+      log_msg(DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE " (cluster name = %s, 
version = %d) found.\n",
              tmp_name, error);
       /* We must check with the others to make sure this is valid. */
     }
@@ -570,8 +570,8 @@
     ** for the config of the name specified............................... */
 
     if(cluster_name && strcmp(cluster_name, tmp_name)){
-      log_err("Request for cluster.conf with cluster name, %s\n", 
cluster_name);
-      log_err(" However, a cluster.conf with cluster name, %s, is already 
loaded.\n",
+      log_err("Request for configuration with cluster name, %s\n", 
cluster_name);
+      log_err(" However, a configuration with cluster name, %s, is already 
loaded.\n",
              tmp_name);
       error = -EINVAL;
       goto fail;
@@ -1326,11 +1326,11 @@
       goto fail;
     }
     memset(master_doc, 0, sizeof(open_doc_t));
-    master_doc->od_doc = xmlParseFile("/etc/cluster/cluster.conf");
+    master_doc->od_doc = xmlParseFile(DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE);
     if(!master_doc->od_doc){
       free(master_doc);
       master_doc = NULL;
-      log_err("Unable to parse %s.\n", "/etc/cluster/cluster.conf");
+      log_err("Unable to parse " DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE 
".\n");
       error = -ENODATA;
       goto fail;
     }
@@ -1370,7 +1370,7 @@
   swab_header(ch); /* Swab back to dip into ch for payload_size */
   memcpy(buffer+sizeof(comm_header_t), payload, ch->comm_payload_size);
 
-  log_dbg("Sending cluster.conf (version %d)...\n", 
get_doc_version(master_doc->od_doc));
+  log_dbg("Sending configuration (version %d)...\n", 
get_doc_version(master_doc->od_doc));
   sendlen = ch->comm_payload_size + sizeof(comm_header_t);
   if(sendto(sfd, buffer, sendlen, 0,
            (struct sockaddr *)&addr, (socklen_t)len) < 0){
--- cluster/ccs/daemon/globals.h        2006/01/11 16:00:55     1.5
+++ cluster/ccs/daemon/globals.h        2008/01/07 05:52:28     1.6
@@ -12,7 +12,6 @@
 #ifndef __GLOBALS_H__
 #define __GLOBALS_H__
 
-#define DEFAULT_CONFIG_LOCATION "/etc/cluster/cluster.conf"
 #define DEFAULT_CCSD_LOCKFILE "/var/run/cluster/ccsd.pid"
 
 #define EXIT_MAGMA_PLUGINS 2  /* Magma plugins are not available */
--- cluster/ccs/lib/libccs.c    2007/10/26 19:18:10     1.13
+++ cluster/ccs/lib/libccs.c    2008/01/07 05:52:28     1.14
@@ -376,10 +376,11 @@
  *
  * This function will only allow a connection even if the node is not
  * part of a quorate cluster.  It will use the configuration file
- * located in /etc/cluster/cluster.conf.  If that file does not exist,
- * a copy of the file will be broadcasted for.  If blocking is specified,
- * the broadcasts will be retried until a config file is located.  Otherwise,
- * the fuction will return an error if the initial broadcast is not successful.
+ * as specified at build time (default: /etc/cluster/cluster.conf).  If that
+ * file does not exist, a copy of the file will be broadcasted for.  If
+ * blocking is specified, the broadcasts will be retried until a config file
+ * is located.  Otherwise, the fuction will return an error if the initial
+ * broadcast is not successful.
  *
  * Returns: ccs_desc on success, < 0 on failure
  */
--- cluster/cman/daemon/cmanccs.c       2008/01/02 16:35:44     1.39
+++ cluster/cman/daemon/cmanccs.c       2008/01/07 05:52:28     1.40
@@ -35,7 +35,7 @@
 
 #define DEFAULT_PORT            5405
 #define DEFAULT_CLUSTER_NAME    "RHCluster"
-#define NOCCS_KEY_FILENAME      "/etc/cluster/cman_authkey"
+#define NOCCS_KEY_FILENAME      DEFAULT_CONFIG_DIR "/cman_authkey"
 
 #define CONFIG_VERSION_PATH    "/cluster/@config_version"
 #define CLUSTER_NAME_PATH      "/cluster/@name"
@@ -588,9 +588,9 @@
        /* Find our nodename in cluster.conf */
        error = verify_nodename(cd, nodename);
        if (error) {
-               log_printf(LOG_ERR, "local node name \"%s\" not found in 
cluster.conf",
+               log_printf(LOG_ERR, "local node name \"%s\" not found in the 
configuration",
                        nodename);
-               write_cman_pipe("Can't find local node name in cluster.conf");
+               write_cman_pipe("Can't find local node name in the 
configuration");
                error = -ENOENT;
                goto out;
        }
@@ -707,7 +707,7 @@
        }
 
        if (!nodeid) {
-               log_printf(LOG_ERR, "No nodeid specified in cluster.conf");
+               log_printf(LOG_ERR, "No nodeid specified in configuration 
file");
                write_cman_pipe("CCS does not have a nodeid for this node, run 
'ccs_tool addnodeids' to fix");
                return -EINVAL;
        }
/cvs/cluster/cluster/cman/init.d/cman.in,v  -->  standard output
revision 1.1
--- cluster/cman/init.d/cman.in
+++ -   2008-01-07 05:52:30.853759000 +0000
@@ -0,0 +1,554 @@
+#!/bin/bash
+#
+# chkconfig: 345 21 79
+# description: Starts and stops cman
+#
+#
+### BEGIN INIT INFO
+# Provides:
+### END INIT INFO
+. /etc/init.d/functions
+
+[ -f /etc/sysconfig/cman ] && . /etc/sysconfig/cman
+[ -z "$CCSD_OPTS" ] && CCSD_OPTS=
+
+# CMAN_CLUSTER_TIMEOUT -- amount of time to wait for joinging a cluster
+#     before giving up.  If CMAN_CLUSTER_TIMEOUT is positive, then we will
+#     wait CMAN_CLUSTER_TIMEOUT seconds before giving up and failing when
+#     a cluster is not joined.  If CMAN_CLUSTER_TIMEOUT is zero, then
+#     wait indefinately for a cluster join.  If CMAN_CLUSTER_TIMEOUT is
+#     negative, do not check to see that the cluster has been joined
+[ -z "$CMAN_CLUSTER_TIMEOUT" ] && CMAN_CLUSTER_TIMEOUT=120
+
+# CMAN_QUORUM_TIMEOUT -- amount of time to wait for a quorate cluster on 
+#     startup quorum is needed by many other applications, so we may as 
+#     well wait here.  If CMAN_QUORUM_TIMEOUT is less than 1, quorum will 
+#     be ignored.
+#CMAN_QUORUM_TIMEOUT=300
+[ -z "$CMAN_QUORUM_TIMEOUT" ] && CMAN_QUORUM_TIMEOUT=0
+
+# CMAN_SHUTDOWN_TIMEOUT -- amount of time to wait for cman to become a 
+#     cluster member before calling cman_tool leave during shutdown.  
+#     default is 60 seconds
+[ -z "$CMAN_SHUTDOWN_TIMEOUT" ] && CMAN_SHUTDOWN_TIMEOUT=60
+
+# FENCED_START_TIMEOUT -- amount of time to wait for starting fenced
+#     before giving up.  If FENCED_START_TIMEOUT is positive, then we will
+#     wait FENCED_START_TIMEOUT seconds before giving up and failing when
+#     fenced does not start.  If FENCED_START_TIMEOUT is zero, then
+#     wait indefinately for fenced to start.
+[ -z "$FENCED_START_TIMEOUT" ] && FENCED_START_TIMEOUT=300
+
+# NET_RMEM_DEFAULT -- minimum value for rmem_default. If this is set
+# higher elsewhere it will not be reduced here.
+# These two values are only really needed for the DLM when using sctp
+# but do no harm.
+[ -z "$NET_RMEM_DEFAULT" ] && NET_RMEM_DEFAULT=4194304
+
+# NET_RMEM_MAX -- minimum value for rmem_max. If this is set
+# higher elsewhere it will not be reduced here.
+[ -z "$NET_RMEM_MAX" ] && NET_RMEM_MAX=4194304
+
+[ -z "$LOCK_FILE" ] && LOCK_FILE="/var/lock/subsys/cman"
+
+[ -n "$CLUSTERNAME" ] && cman_join_opts="-c $CLUSTERNAME"
+
+load_modules()
+{
+    errmsg=$( /sbin/modprobe configfs 2>&1 ) || return 1
+    errmsg=$( /sbin/modprobe dlm 2>&1 ) || return 1
+    errmsg=$( /sbin/modprobe lock_dlm 2>&1 ) || return 1
+    return 0
+}
+
+start_configfs()
+{
+    # configfs
+    awk '{ print $2 }' /etc/mtab | grep "/sys/kernel/config" &> /dev/null \
+    && awk '{ print $3 }' /etc/mtab | grep "configfs" &> /dev/null
+    if [ $? -ne 0 ]
+    then
+       errmsg=$( /bin/mount -t configfs none /sys/kernel/config 2>&1 )
+       return $?
+    fi
+    return 0
+}
+
+start_ccsd()
+{
+    # ccsd
+    status ccsd &> /dev/null
+    if [ $? -ne 0 ]
+    then
+       errmsg=$(/sbin/ccsd $CCSD_OPTS 2>&1)
+       rtrn=$?
+       return $rtrn
+    fi
+    return 0
+}
+
+start_cman()
+{
+    # cman
+    /usr/sbin/cman_tool status &> /dev/null
+    if [ $? -ne 0 ]
+    then
+       errmsg=$( /usr/sbin/cman_tool -t $CMAN_CLUSTER_TIMEOUT -w join \
+           $cman_join_opts 2>&1 ) || return 1
+
+       if [ $CMAN_QUORUM_TIMEOUT -gt 0 ]
+       then
+           errmsg=$( /usr/sbin/cman_tool -t $CMAN_QUORUM_TIMEOUT \
+                   -q wait 2>&1 ) || return 1
+       fi
+    fi
+    return 0
+}
+
+start_daemons()
+{
+    status groupd &> /dev/null
+    if [ $? -ne 0 ]; then
+       errmsg=$( /sbin/groupd 2>&1 ) || return 1
+    fi
+    status fenced &> /dev/null
+    if [ $? -ne 0 ]; then
+       errmsg=$( /sbin/fenced 2>&1 ) || return 1
+    fi
+    status dlm_controld &> /dev/null
+    if [ $? -ne 0 ]; then
+       errmsg=$( /sbin/dlm_controld 2>&1 ) || return 1
+    fi
+    status gfs_controld &> /dev/null
+    if [ $? -ne 0 ]; then
+       errmsg=$( /sbin/gfs_controld 2>&1 ) || return 1
+    fi
+    return 0
+}
+
+start_fence()
+{
+    errmsg=$( /sbin/fence_tool -w -t $FENCED_START_TIMEOUT join \
+            > /dev/null 2>&1 ) || return 1
+    return 0
+}
+
+start_fence_xvmd()
+{
+    status fence_xvmd &> /dev/null
+    if [ $? -ne 0 ]; then
+       errmsg=$( /sbin/fence_xvmd $FENCE_XVMD_OPTS 2>&1 ) || return 1
+    fi
+    return 0
+}
+
+xend_bridged_net_enabled() {
+       # Not a xen kernel
+       test -d /proc/xen || return 1
+
+    current_runlevel=$(/sbin/runlevel 2>/dev/null | awk '{ print $2 }' 
2>/dev/null)
+    if [ -z "$current_runlevel" ]; then
+        errmsg='Unable to determine the current runlevel'
+        return 1
+    fi
+
+    /sbin/chkconfig --levels "$current_runlevel" xend 2>/dev/null
+    if [ $? -ne 0 ]; then
+        # xend doesn't start at this runlevel.
+        return 1
+    fi
+
+    if [ ! -f /etc/xen/xend-config.sxp ]; then
+        # xend isn't configured to use bridged networking.
+        return 1
+    fi
+
+    egrep 
"^[[:blank:]]*\([[:blank:]]*network-script[[:blank:]]+(')*[[:blank:]]*network-bridge([[:blank:]]*\)|[[:blank:]]+)"
 /etc/xen/xend-config.sxp >&/dev/null
+    if [ $? -ne 0 ]; then
+        # xend isn't configured to use bridged networking.
+        return 1
+    fi
+    return 0
+}
+
+xend_bridged_net_start() {
+    if [ ! -x /etc/xen/scripts/network-bridge ]; then
+        if [ -f /etc/xen/scripts/network-bridge ]; then
+            errmsg='The xend bridged network script cannot be run'
+        else
+            errmsg='The xend bridged network script is missing'
+        fi
+        return 1
+    fi
+
+    /sbin/modprobe netbk >& /dev/null
+    /sbin/modprobe netloop >& /dev/null
+    errmsg=$(/etc/xen/scripts/network-bridge start 2>&1) || return 1
+    return 0
+}
+
+fence_xvmd_enabled()
+{
+    #
+    # Check for the 'xm' binary.  If it's not here, we are not
+    # running on a machine capable of running xvmd.
+    #
+    which xm &> /dev/null || return 1
+       
+    #
+    # Check for presence of Domain-0; if it's not there, we can't
+    # run xvmd.
+    #
+    xm list --long 2> /dev/null | grep -q "Domain-0" || return 1
+       
+    #
+    # Check for presence of /cluster/fence_xvmd in cluster.conf
+    # (If -X is specified, it doesn't matter if it's in cluster.conf;
+    #  we'll start it anyway since ccsd is not required)
+    #
+    if [ "$FENCE_XVMD_OPTS" = "${FENCE_XVMD_OPTS/-X/}" ]; then
+        xmllint --shell @CONFDIR@/@CONFFILE@ 2> /dev/null \
+            < <(echo ls cluster) | grep -q fence_xvmd || return 1
+    fi   
+    
+    return 0
+}
+
+set_networking_params()
+{
+    if [ ! -f  /proc/sys/net/core/rmem_default ]
+    then
+       return 0;
+    fi
+   
+    value="$(cat /proc/sys/net/core/rmem_default)"
+    if [ $value -le $NET_RMEM_DEFAULT ]
+    then
+       echo $NET_RMEM_DEFAULT > /proc/sys/net/core/rmem_default
+    fi
+    
+    value="$(cat /proc/sys/net/core/rmem_max)"
+    if [ $value -le $NET_RMEM_MAX ]
+        then
+        echo $NET_RMEM_MAX > /proc/sys/net/core/rmem_max
+    fi
+}
+
+start()
+{
+    echo "Starting cluster: "
+
+    xend_bridged_net_enabled
+    if [ $? -eq 0 ]
+    then
+        echo -n "   Enabling workaround for Xend bridged networking... "
+        xend_bridged_net_start
+        if [ $? -eq 0 ] 
+        then
+            echo "done"
+        else
+            echo "failed: $errmsg"
+                       return 1
+        fi
+    fi
+    echo -n "   Loading modules... "
+    ulimit -c unlimited
+    load_modules
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Mounting configfs... "
+    start_configfs
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi 
+    echo -n "   Setting network parameters... "
+    set_networking_params
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Starting ccsd... "
+    start_ccsd
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Starting cman... "
+    start_cman
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Starting daemons... "
+    start_daemons
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Starting fencing... "
+    start_fence
+    if [ $? -eq 0 ] 
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    
+    if fence_xvmd_enabled; then
+       echo -n "   Starting virtual machine fencing host... "
+       start_fence_xvmd
+       if [ $? -eq 0 ]
+       then
+           echo "done"
+       else
+           echo "failed"
+       return 1
+       fi
+    fi
+    
+    return 0
+}
+
+stop_configfs()
+{
+    awk '{ print $2 }' /etc/mtab | grep "/sys/kernel/config" &> /dev/null\
+    && awk '{ print $3 }' /etc/mtab | grep "configfs" &> /dev/null
+    if [ $? -eq 0 ]
+    then
+       errmsg=$( /bin/umount /sys/kernel/config 2>&1 )
+       if [ $? -ne 0 ]
+       then
+           echo -n $errmsg " "
+       fi
+    fi
+    return 0
+}
+
+stop_ccsd()
+{
+    for sec in $(seq 1 10)
+    do
+       if /sbin/pidof ccsd &> /dev/null
+       then
+           # get the pid of ccsd from /var/run/cluster/ccsd.pid
+           # and break if the file is not there
+           [ -r /var/run/cluster/ccsd.pid ] || break
+
+           pid=$(cat /var/run/cluster/ccsd.pid)
+           /usr/bin/kill $pid &> /dev/null || break
+           
+           sleep 1
+       else
+           return 0
+       fi
+    done
+    return 1
+}
+
+stop_cman()
+{
+    /usr/sbin/cman_tool status &> /dev/null
+    if [ $? -eq 0 ]
+    then
+    errmsg=$( /usr/sbin/cman_tool -t $CMAN_SHUTDOWN_TIMEOUT \
+           -w leave $1 2>&1 ) || return 1
+    fi
+    return 0 # all ok
+}
+
+stop_daemons()
+{
+    if pid=$(/sbin/pidof gfs_controld 2>&1); then
+       errmsg=$(/usr/bin/kill $pid 2>&1) || return 1
+    fi
+    if pid=$(/sbin/pidof dlm_controld 2>&1); then
+       errmsg=$(/usr/bin/kill $pid 2>&1) || return 1
+    fi
+    if pid=$(/sbin/pidof fenced 2>&1); then
+       errmsg=$(/usr/bin/kill $pid 2>&1) || return 1
+    fi
+    if pid=$(/sbin/pidof groupd 2>&1); then
+       errmsg=$(/usr/bin/kill $pid 2>&1) || return 1
+    fi
+    return 0 # all ok
+}
+
+stop_fence()
+{
+    if /sbin/pidof fenced &> /dev/null
+    then
+       /sbin/fence_tool -w leave > /dev/null 2>&1
+       rtrn=$?
+       sleep 1 # A bit of time for fenced to exit
+       return $rtrn
+    fi
+    return 0 # all ok
+}
+
+stop_fence_xvmd()
+{
+    if /sbin/pidof fence_xvmd &> /dev/null
+    then
+       pkill -TERM fence_xvmd
+       sleep 1 # A bit of time for fenced to exit
+    fi
+    
+    [ -z "`pidof fence_xvmd`" ]
+    return $?
+}
+
+stop()
+{
+    echo "Stopping cluster: "
+    if fence_xvmd_enabled; then
+       echo -n "   Stopping virtual machine fencing host... "
+       stop_fence_xvmd
+       if [ $? -eq 0 ]
+       then
+           echo "done"
+       else
+           echo "failed"
+           return 1
+       fi
+    fi        
+    echo -n "   Stopping fencing... "
+    stop_fence
+    if [ $? -eq 0 ]
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Stopping cman... "
+    if [ $1 ]; then
+       stop_cman $1
+    else
+       stop_cman
+    fi
+    if [ $? -eq 0 ]
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+#    stop_daemons
+#    [ $? -ne 0 ] && return 1
+    echo -n "   Stopping ccsd... "
+    stop_ccsd
+    if [ $? -eq 0 ]
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+    echo -n "   Unmounting configfs... "
+    stop_configfs
+    if [ $? -eq 0 ]
+    then
+       echo "done"
+    else
+       echo "failed"
+       return 1
+    fi
+
+    return 0
+}
+
+cmanstatus()
+{
+       errmsg=$( status ccsd 2>&1) || return 1
+       errmsg=$( status groupd 2>&1) || return 1
+       errmsg=$( status fenced 2>&1) || return 1
+       errmsg=$( status dlm_controld 2>&1) || return 1
+       errmsg=$( status gfs_controld 2>&1) || return 1
+       
+       fence_xvmd_enabled || return 0
+       errmsg=$( status fence_xvmd 2>&1) || return 1
+
+       return 0
+}
+
+rtrn=1
+
+# See how we were called.
+case "$1" in
+    start)
+       start
+       rtrn=$?
+       [ $rtrn = 0 ] && touch $LOCK_FILE
+       if [ $rtrn -ne 0 ] 
+       then
+           echo $errmsg
+           failure "failed to start cman"
+           echo
+       else
+           success "start"
+           echo
+       fi
+       ;;
+    stop)
+       if [ $2 ]; then
+           stop
+       else
+           stop remove
+       fi
+       rtrn=$?
+       [ $rtrn = 0 ] && rm -f $LOCK_FILE
+       if [ $rtrn -ne 0 ] 
+       then
+           echo $errmsg
+           failure "failed to stop cman"
+           echo
+       else
+           success "shutdown"
+           echo
+       fi
+       ;;
+
+    restart)
+       $0 stop restart
+       $0 start
+       rtrn=$?
+       ;;
+
+    status)
+       cmanstatus
+       rtrn=$?
+       if [ $rtrn -ne 0 ] ; then
+           echo $errmsg
+       else
+           echo "cman is running."
+       fi
+       ;;
+
+    *)
+           echo $"Usage: $0 {start|stop|restart|status}"
+           ;;
+esac
+
+exit $rtrn
--- cluster/cman/init.d/Makefile        2007/12/22 13:36:50     1.8
+++ cluster/cman/init.d/Makefile        2008/01/07 05:52:28     1.9
@@ -10,15 +10,22 @@
 ###############################################################################
 ###############################################################################
 
-TARGETS= cman qdiskd
+TARGET=cman
 
-INITDT=$(TARGETS)
+INITDT=$(TARGET1) qdiskd
 
-all:
+all: $(TARGET)
 
 include ../../make/defines.mk
+include $(OBJDIR)/make/clean.mk
 include $(OBJDIR)/make/install.mk
 include $(OBJDIR)/make/uninstall.mk
 
+$(TARGET):
+       cat $(TARGET).in | sed \
+               -e '[EMAIL PROTECTED]@#${CONFDIR}#g' \
+               -e '[EMAIL PROTECTED]@#${CONFFILE}#g' \
+       > $(TARGET)
+       chmod 755 $(TARGET)
 
-clean:
+clean: generalclean
--- cluster/fence/agents/xvm/options.c  2007/06/26 17:23:41     1.5
+++ cluster/fence/agents/xvm/options.c  2008/01/07 05:52:28     1.6
@@ -303,7 +303,7 @@
          assign_auth },
 
        { 'k', "-k <file>", "key_file",
-         "Shared key file (default=/etc/cluster/fence_xvm.key)",
+         "Shared key file (default=" DEFAULT_CONFIG_DIR "/fence_xvm.key)",
          assign_key },
 
        { 'o', "-o <operation>", "option",
--- cluster/fence/agents/xvm/simple_auth.h      2006/10/05 16:11:36     1.1
+++ cluster/fence/agents/xvm/simple_auth.h      2008/01/07 05:52:28     1.2
@@ -22,7 +22,7 @@
 #include <sys/types.h>
 
 /* 2-way challenge/response simple auth */
-#define DEFAULT_KEY_FILE "/etc/cluster/fence_xvm.key"
+#define DEFAULT_KEY_FILE DEFAULT_CONFIG_DIR "/fence_xvm.key"
 
 int read_key_file(char *, char *, size_t);
 int tcp_challenge(int, fence_auth_type_t, void *, size_t, int);
--- cluster/fence/fenced/main.c 2007/10/26 19:33:47     1.45
+++ cluster/fence/fenced/main.c 2008/01/07 05:52:28     1.46
@@ -97,7 +97,7 @@
 
        error = ccs_get(cd, path, &str);
        if (error)
-               die1("local cman node name \"%s\" not found in cluster.conf",
+               die1("local cman node name \"%s\" not found in the 
configuration",
                     our_name);
 
 
@@ -528,7 +528,7 @@
        printf("  -h           Print this help, then exit\n");
        printf("  -V           Print program version information, then exit\n");
        printf("\n");
-       printf("Command line values override those in cluster.conf.\n");
+       printf("Command line values override those in " DEFAULT_CONFIG_DIR "/" 
DEFAULT_CONFIG_FILE ".\n");
        printf("For an unbounded delay use <secs> value of -1.\n");
        printf("\n");
 }
--- cluster/make/defines.mk.input       2007/12/20 22:10:04     1.9
+++ cluster/make/defines.mk.input       2008/01/07 05:52:28     1.10
@@ -27,7 +27,8 @@
 AR = ar
 RANLIB = ranlib
 
-CFLAGS += @CFLAGS@ [EMAIL PROTECTED]@/config
+CFLAGS += @CFLAGS@ [EMAIL PROTECTED]@/config 
+CFLAGS += -DDEFAULT_CONFIG_DIR=\"@[EMAIL PROTECTED]" 
-DDEFAULT_CONFIG_FILE=\"@[EMAIL PROTECTED]"
 LDFLAGS += @LDFLAGS@
 
 SRCDIR = @SRCDIR@
@@ -80,6 +81,9 @@
 THISDIR = $(shell echo $(CURDIR) | sed -e 's|$(OBJDIR)/||g')
 S=$(SRCDIR)/$(THISDIR)
 
[EMAIL PROTECTED]@
[EMAIL PROTECTED]@
+
 UNINSTALL = @SRCDIR@/scripts/uninstall.pl
 DEF2VAR = @SRCDIR@/scripts/define2var
 
/cvs/cluster/cluster/rgmanager/init.d/rgmanager.in,v  -->  standard output
revision 1.1
--- cluster/rgmanager/init.d/rgmanager.in
+++ -   2008-01-07 05:52:31.808705000 +0000
@@ -0,0 +1,151 @@
+#!/bin/sh
+#
+# Copyright (C) 2003 Red Hat, Inc.
+#
+# This program is Free Software.  You may modify and/or redistribute it under
+# the terms of the GNU General Public License version 2, or (at your option)
+# any later version.
+#
+# description:  Starts and stops Red Hat Service (resource group) Manager
+# chkconfig: 2345 99 01
+#
+
+# Source function library
+. /etc/init.d/functions
+
+# Grab the network config file
+. /etc/sysconfig/network
+
+# Grab cluster start config if it exists
+[ -f /etc/sysconfig/cluster ] && . /etc/sysconfig/cluster
+
+PATH=/sbin:/bin:/usr/sbin:/usr/bin
+
+export PATH
+
+ID="Cluster Service Manager"
+RGMGRD="clurgmgrd"
+CFG_FILE="@CONFDIR@/@CONFFILE@"
+
+LOG_ERR=3
+LOG_WARNING=4
+LOG_NOTICE=5
+LOG_INFO=6
+
+
+#
+# log_and_print <level> <message>
+#
+log_and_print()
+{
+       if [ -z "$1" -o -z "$2" ]; then
+               return 1;
+       fi
+
+       clulog -p $$ -n "rgmanager" -s $1 "$2"
+       echo $2
+
+       return 0;
+}
+
+
+#
+# Bring down the cluster on a node.
+#
+stop_cluster()
+{
+       kill -TERM `pidof $RGMGRD`
+
+       while [ 0 ]; do
+
+               if [ -n "`pidof $RGMGRD`" ]; then
+                       echo -n $"Waiting for services to stop: " 
+                       while [ -n "`pidof $RGMGRD`" ]; do
+                               sleep 1
+                       done
+                       echo_success
+                       echo
+               else
+                       echo $"Services are stopped."
+               fi
+
+               # Ensure all NFS rmtab daemons are dead.
+               killall $RMTABD &> /dev/null
+               
+               rm -f /var/run/$RGMGRD.pid
+
+               return 0
+       done
+}
+
+
+case $1 in
+       start)
+               #
+               # If we're not configured, then don't start anything.
+               #
+               if [ "${NETWORKING}" != "yes" ]; then
+                       echo "Cannot start $ID: Networking not configured"
+                       exit 1
+               fi
+               [ -f "$CFG_FILE" ] || exit 0
+
+               echo -n $"Starting $ID: "
+               daemon $RGMGRD $RGMGR_OPTS
+               ret=$?
+               echo
+
+               # To be consistent...
+               if [ $ret -eq 0 ]; then
+                       touch /var/lock/subsys/rgmanager
+               fi
+               exit $ret
+               ;;
+
+       restart)
+               $0 status &> /dev/null
+               if [ $? -ne 1 ]; then
+                       $0 stop
+               fi
+               $0 start
+               ;;
+               
+       condrestart)
+               $0 status $> /dev/null
+               if [ $? -eq 0 ]; then
+                       $0 stop
+                       $0 start
+               fi
+               ;;
+
+       reload)
+               clulog -p $LOG_NOTICE "Reloading Resource Configuration."
+               echo -n $"Reloading Resource Configuration: "
+               killproc $RGMGRD -HUP
+               rv=$?
+               echo
+
+               exit $rv
+               ;;
+
+       status)
+               status $RGMGRD
+               exit $?
+               ;;
+
+       stop)
+               if [ -n "`pidof $RGMGRD`" ]; then
+                       log_and_print $LOG_NOTICE "Shutting down $ID..."
+                       stop_cluster
+               fi
+
+               rm -f /var/lock/subsys/rgmanager
+               log_and_print $LOG_NOTICE "$ID is stopped."
+               ;;
+       *)
+               echo "usage: $0 {start|restart|condrestart|reload|status|stop}"
+               exit 1
+               ;;
+esac
+
+exit 0
--- cluster/rgmanager/init.d/Makefile   2007/12/22 13:36:58     1.7
+++ cluster/rgmanager/init.d/Makefile   2008/01/07 05:52:29     1.8
@@ -14,13 +14,20 @@
 
 INITDT=$(TARGET)
 
-all:
+all: $(TARGET)
 
 include ../../make/defines.mk
+include $(OBJDIR)/make/clean.mk
 include $(OBJDIR)/make/install.mk
 include $(OBJDIR)/make/uninstall.mk
 
+$(TARGET):
+       cat $(TARGET).in | sed \
+               -e '[EMAIL PROTECTED]@#${CONFDIR}#g' \
+               -e '[EMAIL PROTECTED]@#${CONFFILE}#g' \
+       > $(TARGET)
+       chmod 755 $(TARGET)
 
-clean:
+clean: generalclean
 
 check:
--- cluster/rgmanager/src/daemons/rg_locks.c    2007/03/27 19:33:20     1.9
+++ cluster/rgmanager/src/daemons/rg_locks.c    2008/01/07 05:52:29     1.10
@@ -50,7 +50,7 @@
 
 #ifdef NO_CCS
 static xmlDocPtr ccs_doc = NULL;
-static char *conffile = "/etc/cluster/cluster.conf";
+static char *conffile = DEFAULT_CONFIG_DIR "/" DEFAULT_CONFIG_FILE;
 #endif
 
 int
--- cluster/rgmanager/src/resources/Makefile    2008/01/03 21:02:53     1.25
+++ cluster/rgmanager/src/resources/Makefile    2008/01/07 05:52:29     1.26
@@ -10,9 +10,12 @@
 ###############################################################################
 ###############################################################################
 
-all:
+TARGET=        utils/config-utils.sh
+
+all: $(TARGET)
 
 include ../../../make/defines.mk
+include $(OBJDIR)/make/clean.mk
 
 RESOURCES=fs.sh service.sh ip.sh nfsclient.sh nfsexport.sh \
        script.sh netfs.sh clusterfs.sh smb.sh \
@@ -24,20 +27,25 @@
        mysql.metadata postgres-8.metadata tomcat-5.metadata \
        named.metadata lvm.metadata
 
-TARGETS=ocf-shellfuncs svclib_nfslock default_event_script.sl
+GENERAL_TARGETS=ocf-shellfuncs svclib_nfslock default_event_script.sl
 
 UTIL_TARGETS= \
        utils/config-utils.sh utils/ra-skelet.sh utils/messages.sh \
        utils/httpd-parse-config.pl utils/tomcat-parse-config.pl \
        utils/member_util.sh
 
+$(TARGET):
+       cat $(TARGET).in | sed \
+               -e '[EMAIL PROTECTED]@#${CONFDIR}#g' \
+               -e '[EMAIL PROTECTED]@#${CONFFILE}#g' \
+       > $(TARGET)
 
 install: all
        install -d ${sharedir}/utils
        for i in $(RESOURCES); do \
         install $(S)/$$i ${sharedir}; \
        done
-       for i in $(TARGETS) $(METADATA); do \
+       for i in $(GENERAL_TARGETS) $(METADATA); do \
         install -m 644 $(S)/$$i ${sharedir}; \
        done
        for i in $(UTIL_TARGETS); do \
@@ -45,9 +53,9 @@
        done
 
 uninstall:
-       ${UNINSTALL} ${RESOURCES} ${TARGETS} ${METADATA} ${UTIL_TARGETS} 
${sharedir}
+       ${UNINSTALL} ${RESOURCES} ${GENERAL_TARGETS} ${METADATA} 
${UTIL_TARGETS} ${sharedir}
 
-clean:
+clean: generalclean
 
 check: $(RESOURCES) ra-api-1-modified.dtd
        @echo Validating resource agent meta-data
/cvs/cluster/cluster/rgmanager/src/resources/utils/config-utils.sh.in,v  -->  
standard output
revision 1.1
--- cluster/rgmanager/src/resources/utils/config-utils.sh.in
+++ -   2008-01-07 05:52:32.308593000 +0000
@@ -0,0 +1,299 @@
+#!/bin/bash
+
+#
+#  Copyright Red Hat, Inc. 2006
+#
+#  This program is free software; you can redistribute it and/or modify it
+#  under the terms of the GNU General Public License as published by the
+#  Free Software Foundation; either version 2, or (at your option) any
+#  later version.
+#
+#  This program is distributed in the hope that it will be useful, but
+#  WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+#  General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; see the file COPYING.  If not, write to the
+#  Free Software Foundation, Inc.,  675 Mass Ave, Cambridge, 
+#  MA 02139, USA.
+#
+
+declare RA_COMMON_pid_dir=/var/run/cluster
+declare [EMAIL PROTECTED]@
+
+declare -i FAIL=-1
+declare -a ip_keys
+
+generate_configTemplate()
+{
+       cat > $1 << EOT
+#
+# "$1" was created from the "$2"
+#
+# This template configuration was automatically generated, and will be
+# automatically regenerated if removed. Once this file has been altered,
+# automatic re-generation will stop. Remember to copy this file to all 
+# other cluster members after making changes, or your service will not 
+# operate correctly.
+#
+EOT
+}
+
+sha1_addToFile()
+{
+        declare sha1line="# rgmanager-sha1 $(sha1sum "$1")"
+        echo $sha1line >> "$1"
+}
+
+sha1_verify()
+{
+       declare sha1_new sha1_old
+       declare oldFile=$1
+
+       ocf_log debug "Checking: SHA1 checksum of config file $oldFile"
+
+       sha1_new=`cat $oldFile | grep -v "# rgmanager-sha1" | sha1sum | sed 
's/^\([a-z0-9]\+\) .*$/\1/'`
+       sha1_old=`tail -n 1 $oldFile | sed 's/^# rgmanager-sha1 \(.*\)$/\1/' | 
sed 's/^\([a-z0-9]\+\) .*$/\1/'`
+
+       if [ $sha1_new = $sha1_old ]; then
+               ocf_log debug "Checking: SHA1 checksum > succeed"
+               return 0;
+       else
+               ocf_log debug "Checking: SHA1 checksum > failed - file changed"
+               return 1;
+       fi
+}
+
+#
+# Usage: ccs_connect
+# Returns: $FAIL on failure, or a connection descriptor on success
+#
+ccs_connect()
+{
+       declare outp
+
+       outp=$(ccs_test connect 2>&1)
+       if [ $? -ne 0 ]; then
+               ocf_log err "$outp"
+               return $FAIL
+       fi
+
+       outp=${outp/*= /}
+       if [ -n "$outp" ]; then
+               echo $outp
+               return 0
+       fi
+
+       return 1
+}
+
+#
+# Usage: ccs_disconnect descriptor
+#
+ccs_disconnect()
+{
+       declare outp
+
+       [ -n "$1" ] || return $FAIL
+       outp=$(ccs_test disconnect $1 2>&1)
+       if [ $? -ne 0 ]; then
+               ocf_log warn "Disconnect CCS desc $1 failed: $outp"
+               return 1
+       fi
+       return 0
+}
+
+#
+# Usage: ccs_get desc key
+#
+ccs_get()
+{
+       declare outp
+       declare ccsfd=$1
+       declare key
+
+       [ -n "$1" ] || return $FAIL
+       [ -n "$2" ] || return $FAIL
+
+       shift
+       key="$*"
+
+       outp=$(ccs_test get $ccsfd "$key" 2>&1)
+       if [ $? -ne 0 ]; then
+               if [ "$outp" = "${outp/No data available/}" ]; then
+                       ocf_log err "$outp ($key)"
+                       return $FAIL
+               fi
+
+               # no real error, just no data available
+               return 0
+       fi
+
+       outp=${outp/*</}
+       outp=${outp/>*/}
+
+       echo $outp
+
+       return 0
+}
+
+#
+# Build a list of service IP keys; traverse refs if necessary
+# Usage: get_service_ip_keys desc serviceName
+#
+get_service_ip_keys()
+{
+       declare ccsfd=$1
+       declare svc=$2
+       declare -i x y=0
+       declare outp
+       declare key
+
+       if [ $ccsfd -eq $FAIL ]; then
+               ocf_log err "Can not talk to ccsd: invalid descriptor $ccsfd"
+               return 1
+       fi
+
+       #
+       # Find service-local IP keys
+       #
+       x=1
+       while : ; do
+               key="/cluster/rm/[EMAIL PROTECTED]"$svc\"]/ip[$x]"
+
+               #
+               # Try direct method
+               #
+               outp=$(ccs_get $ccsfd "$key/@address")
+               if [ $? -ne 0 ]; then
+                       return 1
+               fi
+
+               #
+               # Try by reference
+               #
+               if [ -z "$outp" ]; then
+                       outp=$(ccs_get $ccsfd "$key/@ref")
+                       if [ $? -ne 0 ]; then
+                               return 1
+                       fi
+                       key="/cluster/rm/resources/[EMAIL PROTECTED]"$outp\"]"
+               fi
+
+               if [ -z "$outp" ]; then
+                       break
+               fi
+
+               #ocf_log debug "IP $outp found @ $key"
+
+               ip_keys[$y]="$key"
+
+               ((y++))
+               ((x++))
+       done
+
+       ocf_log debug "$y IP addresses found for $svc/$OCF_RESKEY_name"
+
+       return 0
+}
+
+build_ip_list()
+{
+        declare -i ccsfd=$1
+        declare ipaddrs ipaddr
+        declare -i x=0
+                        
+        while [ -n "${ip_keys[$x]}" ]; do
+              ipaddr=$(ccs_get $ccsfd "${ip_keys[$x]}/@address")
+              if [ -z "$ipaddr" ]; then
+                                   break
+              fi
+
+              ipaddrs="$ipaddrs $ipaddr"
+             ((x++))
+        done
+
+        echo $ipaddrs
+}
+
+generate_name_for_pid_file()
+{
+       declare filename=$(basename $0)
+       
+       echo "$RA_COMMON_pid_dir/$(basename $0 | sed 
's/^\(.*\)\..*/\1/')/$OCF_RESOURCE_INSTANCE.pid"
+       
+       return 0;
+}
+
+generate_name_for_pid_dir()
+{
+       declare filename=$(basename $0)
+       
+       echo "$RA_COMMON_pid_dir/$(basename $0 | sed 
's/^\(.*\)\..*/\1/')/$OCF_RESOURCE_INSTANCE"
+       
+       return 0;
+}
+
+generate_name_for_conf_dir()
+{
+       declare filename=$(basename $0)
+
+       echo "$RA_COMMON_conf_dir/$(basename $0 | sed 
's/^\(.*\)\..*/\1/')/$OCF_RESOURCE_INSTANCE"
+       
+       return 0;
+}
+
+create_pid_directory()
+{
+       declare program_name="$(basename $0 | sed 's/^\(.*\)\..*/\1/')"
+       declare dirname="$RA_COMMON_pid_dir/$program_name"
+
+       if [ -d "$dirname" ]; then
+               return 0;
+       fi
+       
+       chmod 711 "$RA_COMMON_pid_dir"
+       mkdir -p "$dirname"
+       
+       if [ "$program_name" = "mysql" ]; then
+               chown mysql.root "$dirname"
+       elif [ "$program_name" = "tomcat-5" ]; then
+               chown tomcat.root "$dirname"
+       fi
+
+       return 0;
+}
+
+create_conf_directory()
+{
+       declare dirname="$1"
+
+       if [ -d "$dirname" ]; then
+               return 0;
+       fi
+       
+       mkdir -p "$dirname"
+       
+       return 0;
+}
+
+check_pid_file() {
+       declare pid_file="$1"
+
+       if [ -z "$pid_file" ]; then
+               return 1;
+       fi
+
+       if [ ! -e "$pid_file" ]; then
+               return 0;
+       fi
+
+       if [ ! -d /proc/`cat "$pid_file"` ]; then       
+               rm "$pid_file"
+               ocf_log debug "PID File \"$pid_file\" Was Removed - PID Does 
Not Exist";
+               return 0;
+       fi
+
+       return 1;
+}

Reply via email to