All of lore.kernel.org
 help / color / mirror / Atom feed
From: kupcevic@sourceware.org <kupcevic@sourceware.org>
To: cluster-devel.redhat.com
Subject: [Cluster-devel] conga/ricci/modules/rpm PackageHandler.cpp Pac ...
Date: 15 Aug 2006 00:06:50 -0000	[thread overview]
Message-ID: <20060815000650.10618.qmail@sourceware.org> (raw)

CVSROOT:	/cvs/cluster
Module name:	conga
Changes by:	kupcevic at sourceware.org	2006-08-15 00:06:48

Modified files:
	ricci/modules/rpm: PackageHandler.cpp PackageHandler.h 

Log message:
	rpm module: add RHEL5 support, update rpm list to include CS5 rpms

Patches:
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.cpp.diff?cvsroot=cluster&r1=1.4&r2=1.5
http://sourceware.org/cgi-bin/cvsweb.cgi/conga/ricci/modules/rpm/PackageHandler.h.diff?cvsroot=cluster&r1=1.3&r2=1.4

--- conga/ricci/modules/rpm/PackageHandler.cpp	2006/08/10 22:53:08	1.4
+++ conga/ricci/modules/rpm/PackageHandler.cpp	2006/08/15 00:06:48	1.5
@@ -37,40 +37,20 @@
 #define UNAME_PATH     "/bin/uname"
 
 
+static bool 
+RHEL4=false, RHEL5=false, FC5=false, FC6=false;
+static void
+set_release();
+
 
 
 // class PackageInstaller
 
 
 
-PackageInstaller::PackageInstaller() :
-  RHEL4(false),
-  FC5(false)
-{
-  char* buff = 0;
-  String release;
-  try {
-    ifstream is("/etc/redhat-release");
-    is.seekg(0, ios::end);
-    unsigned int length = is.tellg();
-    is.seekg(0, ios::beg);
-    buff = new char[length];
-    is.read(buff, length);
-    
-    String rel(buff, length);
-    delete [] buff;
-    buff = 0;
-    
-    release = utils::strip(rel);
-  } catch ( ... ) {
-    delete [] buff;
-    throw;
-  }
-  
-  if (release.find("Nahant") != release.npos)
-    RHEL4 = true;
-  else if (release.find("Bordeaux") != release.npos)
-    FC5 = true;
+PackageInstaller::PackageInstaller()
+{
+  set_release();
 }
 
 PackageInstaller::~PackageInstaller()
@@ -80,7 +60,7 @@
 bool
 PackageInstaller::available()
 {
-  if (RHEL4) {
+  if (RHEL4 || RHEL5) {
     bool rhn_available = true;
     // check existance of /etc/sysconfig/rhn/systemid
     if (access("/etc/sysconfig/rhn/systemid", F_OK))
@@ -97,7 +77,7 @@
 	rhn_available = false;
     }
     return rhn_available;
-  } else if (FC5) {
+  } else if (FC5 || FC6) {
     // nothing to check for, maybe ping repository???
     return true;
   } else
@@ -116,7 +96,7 @@
   int status;
   vector<String> args;
   
-  if (RHEL4) {
+  if (RHEL4 || RHEL5) {
     out = err = "";
     args.clear();
     args.push_back("--showall");
@@ -139,7 +119,7 @@
       rpms[name] = version;
     }
     
-  } else if (FC5) {
+  } else if (FC5 || FC6) {
     out = err = "";
     args.clear();
     args.push_back("-y");
@@ -183,7 +163,7 @@
   int status;
   vector<String> args;
   
-  if (RHEL4) {
+  if (RHEL4 || RHEL5) {
     out = err = "";
     args.clear();
     for (vector<String>::size_type i=0; i<rpms.size(); i++)
@@ -194,7 +174,7 @@
       throw String(UP2DATE_PATH) + " failed";
     return true;
     
-  } else if (FC5) {
+  } else if (FC5 || FC6) {
     // install
     vector<String> rpms_to_install;
     out = err = "";
@@ -262,12 +242,14 @@
 
 
 Package::Package()
-{}
+{
+  set_release();
+}
 
 Package::Package(const String& name) :
   name(name)
 {
-  
+  set_release();
 }
 
 Package::~Package()
@@ -293,14 +275,18 @@
   installed(false),
   in_repo(false),
   upgradeable(false)
-{}
+{
+  set_release();
+}
 
 PackageSet::PackageSet(const String& name) :
   name(name),
   installed(false),
   in_repo(false),
   upgradeable(false)
-{}
+{
+  set_release();
+}
 
 PackageSet::~PackageSet()
 {}
@@ -327,6 +313,8 @@
 
 PackageHandler::PackageHandler()
 {
+  set_release();
+  
   
   // get installed packages
   
@@ -356,7 +344,7 @@
     _packages[name] = pack;
   }
   
-  // probe RHN
+  // probe repositories
   if (repo_available()) {
     map<String, String> avail_rpms = _pi.available_rpms();
     for (map<String, String>::const_iterator iter = avail_rpms.begin();
@@ -404,8 +392,10 @@
   PackageSet set = build_cluster_base_set();
   sets[set.name] = set;
   
-  set = build_cluster_base_gulm_set();
-  sets[set.name] = set;
+  if (RHEL4 || FC5) {
+    set = build_cluster_base_gulm_set();
+    sets[set.name] = set;
+  }
   
   set = build_cluster_services_set();
   sets[set.name] = set;
@@ -423,30 +413,36 @@
 PackageHandler::build_cluster_base_set()
 {
   PackageSet set("Cluster Base");
-  set.packages.push_back("ccs");
-  set.packages.push_back("cman");
-  set.packages.push_back("dlm");
-  set.packages.push_back("fence");
   
-  // find kernel type
-  String out, err;
-  int status;
-  vector<String> args;
-  args.push_back("-r");
-  if (utils::execute(UNAME_PATH, args, out, err, status, true))
-    throw String("execute failed");
-  if (status != 0)
-    throw String("uname -r failed");
-  if (out.find("smp") != out.npos) {
-    set.packages.push_back("cman-kernel-smp");
-    set.packages.push_back("dlm-kernel-smp");
-  } else if (out.find("hugemem") != out.npos) {
-    set.packages.push_back("cman-kernel-hugemen");
-    set.packages.push_back("dlm-kernel-hugemem");
-  } else {
-    set.packages.push_back("cman-kernel");
-    set.packages.push_back("dlm-kernel");
+  if (RHEL4 || FC5) {
+    set.packages.push_back("ccs");
+    set.packages.push_back("cman");
+    set.packages.push_back("dlm");
+    set.packages.push_back("fence");
+    
+    // find kernel type
+    String out, err;
+    int status;
+    vector<String> args;
+    args.push_back("-r");
+    if (utils::execute(UNAME_PATH, args, out, err, status, true))
+      throw String("execute failed");
+    if (status != 0)
+      throw String("uname -r failed");
+    if (out.find("smp") != out.npos) {
+      set.packages.push_back("cman-kernel-smp");
+      set.packages.push_back("dlm-kernel-smp");
+    } else if (out.find("hugemem") != out.npos) {
+      set.packages.push_back("cman-kernel-hugemen");
+      set.packages.push_back("dlm-kernel-hugemem");
+    } else {
+      set.packages.push_back("cman-kernel");
+      set.packages.push_back("dlm-kernel");
+    }
+  } else if (RHEL5 || FC6) {
+    set.packages.push_back("cman");
   }
+  
   return set;
 }
 
@@ -454,9 +450,14 @@
 PackageHandler::build_cluster_base_gulm_set()
 {
   PackageSet set("Cluster Base - Gulm");
-  set.packages.push_back("ccs");
-  set.packages.push_back("gulm");
-  set.packages.push_back("fence");
+  
+  if (RHEL4 || FC5) {
+    set.packages.push_back("ccs");
+    set.packages.push_back("gulm");
+    set.packages.push_back("fence");
+  } else
+    throw String("GULM not available in CS5");
+  
   return set;
 }
 
@@ -465,8 +466,10 @@
 {
   PackageSet set("Cluster Service Manager");
   set.packages.push_back("rgmanager");
-  set.packages.push_back("magma");
-  set.packages.push_back("magma-plugins");
+  if (RHEL4 || FC5) {
+    set.packages.push_back("magma");
+    set.packages.push_back("magma-plugins");
+  }
   return set;
 }
 
@@ -474,25 +477,34 @@
 PackageHandler::build_cluster_storage_set()
 {
   PackageSet set("Clustered Storage");
-  set.packages.push_back("GFS");
   set.packages.push_back("lvm2-cluster");
-  
-  // find kernel type
-  String out, err;
-  int status;
-  vector<String> args;
-  args.push_back("-r");
-  if (utils::execute(UNAME_PATH, args, out, err, status, true))
-    throw String("execute failed");
-  if (status != 0)
-    throw String("uname -r failed");
-  if (out.find("smp") != out.npos) {
-    set.packages.push_back("GFS-kernel-smp");
-  } else if (out.find("hugemem") != out.npos) {
-    set.packages.push_back("GFS-kernel-hugemem");
-  } else {
-    set.packages.push_back("GFS-kernel");
+
+  if (RHEL4 || FC5) {
+    set.packages.push_back("GFS");
+    
+    // find kernel type
+    String out, err;
+    int status;
+    vector<String> args;
+    args.push_back("-r");
+    if (utils::execute(UNAME_PATH, args, out, err, status, true))
+      throw String("execute failed");
+    if (status != 0)
+      throw String("uname -r failed");
+    if (out.find("smp") != out.npos) {
+      set.packages.push_back("GFS-kernel-smp");
+    } else if (out.find("hugemem") != out.npos) {
+      set.packages.push_back("GFS-kernel-hugemem");
+    } else {
+      set.packages.push_back("GFS-kernel");
+    }
+  } else if (RHEL5 || FC6) {
+    set.packages.push_back("gfs2-utils");
+    
+    // TODO: implement GFS1
+    
   }
+  
   return set;
 }
 
@@ -592,3 +604,46 @@
 {
   return _pi.available();
 }
+
+
+
+
+
+void
+set_release()
+{
+  static bool release_set = false;
+  if (!release_set) {
+    char* buff = 0;
+    String release;
+    try {
+      ifstream is("/etc/redhat-release");
+      is.seekg(0, ios::end);
+      unsigned int length = is.tellg();
+      is.seekg(0, ios::beg);
+      buff = new char[length];
+      is.read(buff, length);
+      
+      String rel(buff, length);
+      delete [] buff;
+      buff = 0;
+      
+      release = utils::strip(rel);
+    } catch ( ... ) {
+      delete [] buff;
+      throw;
+    }
+    
+    if (release.find("Nahant") != release.npos)
+      RHEL4 = true;
+    else if (release.find("Bordeaux") != release.npos)
+      FC5 = true;
+    else if (release.find("Fedora Core") != release.npos &&
+	     release.find("6") != release.npos)
+      // TODO: detect FC6
+      FC6 = true;
+    // TODO: detect RHEL5
+    
+    release_set = true;
+  }
+}
--- conga/ricci/modules/rpm/PackageHandler.h	2006/08/10 22:53:08	1.3
+++ conga/ricci/modules/rpm/PackageHandler.h	2006/08/15 00:06:48	1.4
@@ -83,11 +83,6 @@
   std::map<String, String> available_rpms();
   bool install(std::vector<String> rpm_names);
   
- private:
-  
-  bool RHEL4;
-  bool FC5;
-  
 };
 
 



             reply	other threads:[~2006-08-15  0:06 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2006-08-15  0:06 kupcevic [this message]
  -- strict thread matches above, loose matches on Subject: below --
2007-09-11 18:59 [Cluster-devel] conga/ricci/modules/rpm PackageHandler.cpp Pac rmccabe

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20060815000650.10618.qmail@sourceware.org \
    --to=kupcevic@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.