satellite/install/install.pl | 13 +
satellite/install/installPackages.py | 234 ---------------------
satellite/install/rhn_rpm.py | 364 ---------------------------------
satellite/install/satErrors.py | 380 -----------------------------------
satellite/install/satLog.py | 116 ----------
satellite/install/translate.py | 112 ----------
6 files changed, 12 insertions(+), 1207 deletions(-)
New commits:
commit 618a7b3d9f2a072ae1ce89b8308eeaa7e68fb3b9
Author: Michael Mraka <michael.mraka(a)redhat.com>
Date: Thu Dec 3 16:16:42 2009 +0100
replaced installPackages.py & company with several lines in perl
diff --git a/satellite/install/install.pl b/satellite/install/install.pl
index 74c5b6e..0ccd063 100755
--- a/satellite/install/install.pl
+++ b/satellite/install/install.pl
@@ -971,9 +971,20 @@ sub install_rhn_packages {
26,
'Could not install RHN packages. Most likely your system is not configured with
the @Base package group. See the RHN Satellite Server Installation Guide for more
information about Software Requirements.');
} else {
- system_or_exit(['python', '-u',
'install/installPackages.py'],
+ my @rpms = glob("Satellite/*.rpm EmbeddedDB/*.rpm");
+
+ # skip packages already installed or newer version already installed
+ for my $i (0..$#rpms) {
+ my $ret = system ("rpm -U --test --nodeps --quiet 2>/dev/null
$rpms[$i]");
+ if ($ret != 0) {
+ delete($rpms[$i]);
+ }
+ }
+ if (@rpms) {
+ system_or_exit(['rpm', '-Uv', @rpms],
26,
'Could not install RHN packages. Most likely your system is not configured with
the @Base package group. See the RHN Satellite Server Installation Guide for more
information about Software Requirements.');
+ }
}
return 1;
}
diff --git a/satellite/install/installPackages.py b/satellite/install/installPackages.py
deleted file mode 100755
index 178d124..0000000
--- a/satellite/install/installPackages.py
+++ /dev/null
@@ -1,234 +0,0 @@
-#!/usr/bin/python -u
-""" Install RHN product specific RPMs
-
- Copyright (c) 2002-2005, Red Hat, Inc.
- All rights reserved.
-"""
-# $Id: installPackages.py,v 1.25 2006-01-05 15:45:22 misa Exp $
-
-import os
-import sys
-import glob
-from translate import _
-
-import rhn_rpm
-import satLog
-from satErrors import *
-
-def systemExit(code, msgs=None):
- "Exit with a code and optional message(s). Saved a few lines of code."
-
- if msgs:
- if type(msgs) not in [type([]), type(())]:
- msgs = (msgs, )
- for msg in msgs:
- sys.stderr.write(str(msg)+'\n')
- sys.exit(code)
-
-
-def getInstalledPackageList():
- list = []
-
- mi = rhn_rpm.MatchIterator("name")
- while 1:
- h = mi.next()
- if not h:
- break
- epoch = h['epoch']
- if epoch is None:
- epoch = ""
- entry = (h['name'], h['version'], h['release'], epoch,
h['arch'])
- list.append(entry)
- list.sort(lambda a, b: cmp(a[0], b[0]))
- return list
-
-
-def getListOfPackagesToInstall(rpmPath):
- # or if we decide to use a manifest, do it here
- globPattern = "%s/*.rpm" % rpmPath
-
- packagesToInstall = {}
- installedPackages = getInstalledPackageList()
- # Hash them by name
- installedPackagesDict = {}
- for package in installedPackages:
- name = package[0]
- installedPackagesDict[name] = package
-
- availablePackages = {}
- filenames = glob.glob(globPattern)
- for filename in filenames:
- hdr = rhn_rpm.get_package_header(filename=filename)
- epoch = hdr['epoch']
- if epoch is None:
- epoch = ""
- name = hdr['name']
- nvre = (name, hdr['version'], hdr['release'], epoch)
- availablePackages[nvre] = filename
-
- if not installedPackagesDict.has_key(name):
- # We need to install this nevertheless
- packagesToInstall[name] = filename
- continue
-
- installedPackage = installedPackagesDict[name]
- ret = rhn_rpm.nvre_compare(installedPackage, nvre)
-
- if ret >= 0:
- # already installed or older than what we have installed
- continue
-
- packagesToInstall[name] = filename
-
- return packagesToInstall.values()
-
-
-def installPackages(filenames, rpmPath, rpmCallback):
- if not filenames:
- # Nothing to do, moving on
- return 0
-
- ts = rhn_rpm.RPMTransaction()
-
- for filename in filenames:
- hdr = rhn_rpm.get_package_header(filename=filename)
- if hdr is None:
- raise RpmError(_("Error reading header from package %s") %
- filename)
- ts.addInstall(hdr, hdr, 'u')
-
- deps = ts.check()
-
- # make this smarter, duh
- if deps:
- raise DependencyError(_(
- "Dependencies should have already been resolved, "\
- "but they are not."), deps)
-
- ts.order()
- rc = ts.run(rpmCallback, rpmPath)
-
- if rc:
- errors = "\n"
- for e in rc:
- try:
- errors = errors + e[1] + "\n"
- except:
- errors = errors + str(e) + "\n"
- raise RpmError(_("Failed installing packages: %s") % errors)
-
- return 0
-
-class RPM_Callback:
- def __init__(self, total):
- self.total = total
- self.installed = 0
- self.message_template = "%%%ds/%%s Installing %%s" %
len(str(self.total))
-
- def callback(self, what, amount, total, hdr, path):
- if what == rhn_rpm.RPMCALLBACK_INST_OPEN_FILE:
- fileName = "%s/%s-%s-%s.%s.rpm" % (path,
- hdr['name'],
- hdr['version'],
- hdr['release'],
- hdr['arch'])
- try:
- fd = os.open(fileName, os.O_RDONLY)
- except :
- print _("Error opening %s") % fileName
- raise RpmError(_("Error opening %s") % fileName)
-
- return fd
-
- if what == rhn_rpm.RPMCALLBACK_INST_START:
- fileName = "%s/%s-%s-%s.%s.rpm" % (path,
- hdr['name'],
- hdr['version'],
- hdr['release'],
- hdr['arch'])
- self.installed = self.installed + 1
- print self.message_template % (self.installed, self.total,
- fileName)
- elif what == rhn_rpm.RPMCALLBACK_INST_CLOSE_FILE:
- try:
- os.close(fd)
- except:
- pass
-
- elif what == rhn_rpm.RPMCALLBACK_INST_PROGRESS:
- pass
-
- elif what == rhn_rpm.RPMCALLBACK_UNINST_STOP:
- pass
-
- else:
- if hasattr(rhn_rpm, "RPMCALLBACK_UNPACK_ERROR") and \
- what == rhn_rpm.RPMCALLBACK_UNPACK_ERROR:
- pkg = "%s-%s-%s" % (hdr[rhn_rpm.RPMTAG_NAME],
- hdr[rhn_rpm.RPMTAG_VERSION],
- hdr[rhn_rpm.RPMTAG_RELEASE])
- raise RpmError(_("There was a rpm unpack error installing "
- "the package: %s") % pkg)
-
- if hasattr(rhn_rpm, "RPMCALLBACK_CPIO_ERROR") and \
- what == rhn_rpm.RPMCALLBACK_CPIO_ERROR:
- pkg = "%s-%s-%s" % (hdr[rhn_rpm.RPMTAG_NAME],
- hdr[rhn_rpm.RPMTAG_VERSION],
- hdr[rhn_rpm.RPMTAG_RELEASE])
- raise RpmError(_("There was a cpio error installing "
- "the package: %s") % pkg)
-
-
-def doInstallation(rpms_dir):
- pkgList = getListOfPackagesToInstall(rpms_dir)
- if not pkgList:
- print "All required packages are already installed"
- return 0
-
- #do it
- # may raise a DependencyError
- installPackages(pkgList, rpms_dir, RPM_Callback(len(pkgList)).callback)
-
- print "All required packages have been installed"
-
- return 0
-
-
-def main():
- os.chdir(os.path.dirname(sys.argv[0]))
-
- rpmdir = "../*"
- doInstallation(rpmdir)
-
- return 0
-
-
-if __name__ == "__main__":
- # 0 - all is well
- # -1 - help called
- # -2 - initLog failed
- # -3 - base directory access error
- # -4 - extra args on commandline
- # -5 - RpmError
- # -6 - rpm DependencyError
- # -100 - ^C
- try:
- satLog.initLog()
- except (OSError, IOError), e:
- systemExit(-2, "Unable to open log file. The error was: %s" % e)
-
- try:
- sys.exit(main() or 0)
- except KeyboardInterrupt, e:
- systemExit(-100, "User interrupted process")
- except (OSError, IOError), e:
- systemExit(-3, "Error accessing base directory: %s" % e)
- except ValueError, e:
- msg = "ERROR: these arguments make no sense in this context (try --help):
%s\n" % repr(e.args)
- systemExit(-4, msg)
- except RpmError, e:
- systemExit(-5, repr(e))
- except DependencyError, e:
- systemExit(-6, 'ERROR: %s\n' % repr(e))
-
-
diff --git a/satellite/install/rhn_rpm.py b/satellite/install/rhn_rpm.py
deleted file mode 100644
index 9542cb1..0000000
--- a/satellite/install/rhn_rpm.py
+++ /dev/null
@@ -1,364 +0,0 @@
-#!/usr/bin/python
-#
-# Compatibility layer for rpm
-#
-# Copyright (c) 2004-2005, Red Hat Inc.
-# All rights reserved.
-#
-# $Id: rhn_rpm.py,v 1.9 2005-07-05 17:50:13 wregglej Exp $
-
-import os
-import sys
-import rpm
-import struct
-
-import exceptions
-if not hasattr(exceptions, 'StopIteration'):
- # Presumably python 1.5.2
- class StopIteration(Exception):
- pass
-
-# Expose a bunch of useful constants from rpm
-error = rpm.error
-for sym, val in rpm.__dict__.items():
- if sym[:3] == 'RPM':
- # A constant, probably - import it into our namespace
- globals()[sym] = val
-del sym, val
-
-class InvalidPackageError(Exception):
- pass
-
-# wrapper/proxy class for rpm.Transaction so we can
-# instrument it, etc easily
-class RPMTransaction:
- read_only = 0
- def __init__(self):
- if hasattr(rpm, 'opendb'):
- db = getattr(rpm, 'opendb')(not self.read_only)
- self.ts = rpm.TransactionSet('/', db)
- else:
- self.ts = rpm.TransactionSet()
- self.tsflags = []
- # For rpm 4.0.4
- self._flags = 0
- self._prob_filter = 0
-
- def __getattr__(self, attr):
- return getattr(self.ts, attr)
-
- def getMethod(self, method):
- # in theory, we can override this with
- # profile/etc info
- return getattr(self.ts, method)
-
- # push/pop methods so we don't lose the previous
- # set value, and we can potentially debug a bit
- # easier
- def pushVSFlags(self, flags):
- self.tsflags.append(flags)
- if hasattr(self.ts, 'setVSFlags'):
- f = getattr(self.ts, 'setVSFlags')
- f(self.tsflags[-1])
-
- def popVSFlags(self):
- del self.tsflags[-1]
- if hasattr(self.ts, 'setVSFlags'):
- f = getattr(self.ts, 'setVSFlags')
- f(self.tsflags[-1])
-
- def addInstall(self, arg1, arg2, mode):
- """Install a package"""
- hdr = arg1.hdr
- if hasattr(self.ts, 'addInstall'):
- f = getattr(self.ts, 'addInstall')
- return f(hdr, arg2, mode)
- return self.ts.add(hdr, arg2, mode)
-
- def addErase(self, arg1):
- """Erase a package"""
- hdr = arg1.hdr
- if hasattr(self.ts, 'addErase'):
- f = getattr(self.ts, 'addErase')
- return f(hdr)
- return self.ts.add(hdr, hdr, "e")
-
- def check(self):
- """Check dependencies"""
- if hasattr(self.ts, 'check'):
- f = getattr(self.ts, 'check')
- else:
- f = getattr(self.ts, 'depcheck')
- return f()
-
- def setFlags(self, flag):
- """Set transaction flags"""
- if hasattr(rpm, 'headerFromPackage'):
- # Old style rpm
- old_flags = self._flags
- self._flags = flag
- return old_flags
- return self.ts.setFlags(flag)
-
- def setProbFilter(self, flag):
- """Set problem flags"""
- if hasattr(rpm, 'headerFromPackage'):
- # Old style rpm
- old_flags = self._prob_filter
- self._prob_filter = flag
- return old_flags
- return self.ts.setProbFilter(flag)
-
- def run(self, callback, user_data):
- if hasattr(rpm, 'headerFromPackage'):
- # Old style rpm
- return self.ts.run(self._flags, self._prob_filter, callback,
- user_data)
- return self.ts.run(callback, user_data)
-
-
-
-
-class SharedStateTransaction:
- _shared_state = {}
-
- def __init__(self):
- self.__dict__ = self._shared_state
-
-class RPMReadOnlyTransaction(SharedStateTransaction, RPMTransaction):
- read_only = 1
- def __init__(self):
- SharedStateTransaction.__init__(self)
- if not hasattr(self, 'ts'):
- RPMTransaction.__init__(self)
- # FIXME: replace with macro defination
- self.pushVSFlags(8)
-
-class RPM_Header:
- "Wrapper class for an rpm header - we need to store a flag is_source"
- def __init__(self, hdr, is_source=None):
- self.hdr = hdr
- self.is_source = is_source
- self.packaging = 'rpm'
- self.signatures = []
- self._extract_signatures()
-
- def __getitem__(self, name):
- return self.hdr[name]
-
- def __getattr__(self, name):
- return getattr(self.hdr, name)
-
- def is_signed(self):
- if hasattr(rpm, "RPMTAG_DSAHEADER"):
- dsaheader = self.hdr["dsaheader"]
- else:
- dsaheader = 0
- if self.hdr["siggpg"] or self.hdr["sigpgp"] or dsaheader:
- return 1
- return 0
-
- def _extract_signatures(self):
- header_tags = [
- [rpm.RPMTAG_DSAHEADER, "dsa"],
- [rpm.RPMTAG_RSAHEADER, "rsa"],
- [rpm.RPMTAG_SIGGPG, "gpg"],
- [rpm.RPMTAG_SIGPGP, 'pgp'],
- ]
- for ht, sig_type in header_tags:
- ret = self.hdr[ht]
- if not ret or len(ret) < 17:
- continue
- # Get the key id - hopefully we get it right
- key_id = ret[9:17]
- key_id_len = len(key_id)
- format = "%dB" % key_id_len
- t = struct.unpack(format, key_id)
- format = "%02x" * key_id_len
- key_id = format % t
- self.signatures.append({
- 'signature_type' : sig_type,
- 'key_id' : key_id,
- 'signature' : ret,
- })
-
-
-# Loads the package header from a file / stream / file descriptor
-# Raises rpm.error if an error is found, or InvalidPacageError if package is
-# busted
-# XXX Deal with exceptions better
-def get_package_header(filename=None, file=None, fd=None):
- if (filename is None and file is None and fd is None):
- raise ValueError, "No parameters passed"
-
- if filename is not None:
- f = open(filename)
- elif file is not None:
- f = file
- f.seek(0, 0)
- else: # fd is not None
- f = None
-
- if f is None:
- os.lseek(fd, 0, 0)
- file_desc = fd
- else:
- file_desc = f.fileno()
-
- if hasattr(rpm, 'headerFromPackage'):
- hdr, is_source = rpm.headerFromPackage(file_desc)
- if hdr is None:
- raise InvalidPackageError
- else:
- ts = RPMReadOnlyTransaction()
- nomd5 = getattr(rpm, 'RPMVSF_NOMD5')
- needpayload = getattr(rpm, 'RPMVSF_NEEDPAYLOAD')
- ts.pushVSFlags(~(nomd5 | needpayload))
- hdr = RPMReadOnlyTransaction().hdrFromFdno(file_desc)
- ts.popVSFlags()
- if hdr is None:
- raise InvalidPackageError
- is_source = hdr[getattr(rpm, 'RPMTAG_SOURCEPACKAGE')]
-
- return RPM_Header(hdr, is_source)
-
-class MatchIterator:
- def __init__(self, tag_name=None, value=None):
- # Query by name, by default
- if not tag_name:
- tag_name = "name"
-
- if hasattr(rpm, "headerFromPackage"):
- # rpm 4.0.4 or earlier
- self.db = rpm.opendb()
- method = self.db.match
- else:
- # rpm 4.1 or later
- self.ts = rpm.TransactionSet()
- self.ts.setVSFlags(8)
- method = self.ts.dbMatch
-
- if value:
- self.mi = method(tag_name, value)
- else:
- self.mi = method(tag_name)
-
- def pattern(self, tag_name, mode, pattern):
- self.mi.pattern(tag_name, mode, pattern)
-
- def next(self):
- try:
- hdr = self.mi.next()
- except StopIteration:
- hdr = None
-
- if hdr is None:
- return None
- if hasattr(rpm, "headerFromPackage"):
- is_source = not hdr[rpm.RPMTAG_SOURCERPM]
- else:
- is_source = hdr[getattr(rpm, 'RPMTAG_SOURCEPACKAGE')]
- return RPM_Header(hdr, is_source)
-
-
-def headerLoad(data):
- hdr = rpm.headerLoad(data)
- if hasattr(rpm, "headerFromPackage"):
- is_source = not hdr[rpm.RPMTAG_SOURCERPM]
- else:
- is_source = hdr[getattr(rpm, 'RPMTAG_SOURCEPACKAGE')]
- return RPM_Header(hdr, is_source)
-
-def labelCompare(t1, t2):
- return rpm.labelCompare(t1, t2)
-
-def nvre_compare(t1, t2):
- def build_evr(p):
- evr = [p[3], p[1], p[2]]
- evr = map(str, evr)
- if evr[0] == "":
- evr[0] = None
- return evr
- if t1[0] != t2[0]:
- raise ValueError("You should only compare packages with the same
name")
- evr1, evr2 = (build_evr(t1), build_evr(t2))
- return rpm.labelCompare(evr1, evr2)
-
-
-def hdrLabelCompare(hdr1, hdr2):
- """ take two RPMs or headers and compare them for order
"""
-
- if hdr1['name'] == hdr2['name']:
- hdr1 = [hdr1['epoch'] or None, hdr1['version'],
hdr1['release']]
- hdr2 = [hdr2['epoch'] or None, hdr2['version'],
hdr2['release']]
- if hdr1[0]:
- hdr1[0] = str(hdr1[0])
- if hdr2[0]:
- hdr2[0] = str(hdr2[0])
- return rpm.labelCompare(hdr1, hdr2)
- elif hdr1['name'] < hdr2['name']:
- return -1
- return 1
-
-
-def rpmLabelCompare(rpmFilename1, rpmFilename2):
- """ take two RPMs and compare them for order """
- return hdrLabelCompare(get_package_header(rpmFilename1),
- get_package_header(rpmFilename2))
-
-
-def sortHeaders(hdrs):
- """ Sorts a list of RPM headers (or RPMs).
- Assertion: they *must* exist.
- """
-
- assert isinstance(hdrs, type([]))
-
- sorted = hdrs[:]
- sorted.sort(hdrLabelCompare)
- return sorted
-
-
-def sortRPMs(rpms):
- """ Sorts a list of RPM files. They *must* exist. """
-
- assert isinstance(rpms, type([]))
-
- # We don't want to use rpmLabelCompare as a sorting mechanism, it would
- # extract the rpm header for each comparison.
- # Build a list of (header, rpm)
- helper = map(lambda x: (get_package_header(x), x), rpms)
-
- # Sort the list using the headers as a comparison
- helper.sort(lambda x, y: hdrLabelCompare(x[0], y[0]))
-
- # Extract the rpm names now
- return map(lambda x: x[1], helper)
-
-
-def getInstalledHeader(rpmName):
- """ quieries the RPM DB for a header matching rpmName.
"""
-
- mi = MatchIterator("name")
- mi.pattern("name", rpm.RPMMIRE_STRCMP, rpmName)
- return mi.next()
-
-
-if __name__ == '__main__':
- mi = MatchIterator("name")
- mi.pattern("name", rpm.RPMMIRE_GLOB, "*ker*")
- while 1:
- h = mi.next()
- if not h:
- break
- print h['name']
- sys.exit(1)
- hdr = get_package_header(filename="/tmp/python-1.5.2-42.72.i386.rpm")
- print dir(hdr)
- # Sources
- hdr = get_package_header(filename="/tmp/python-1.5.2-42.72.src.rpm")
- hdr2 = headerLoad(hdr.unload())
- print hdr2
- print len(hdr2.keys())
-
-
diff --git a/satellite/install/satErrors.py b/satellite/install/satErrors.py
deleted file mode 100644
index 6795b01..0000000
--- a/satellite/install/satErrors.py
+++ /dev/null
@@ -1,380 +0,0 @@
-""" single placeholder for the satellite installer exceptions
-
- Copyright (c) 2002-2005, Red Hat, Inc.
- All rights reserved.
-"""
-# $Id: satErrors.py,v 1.41 2005-07-05 17:50:13 wregglej Exp $
-
-PRODUCT_NAME = "RHN Satellite"
-
-import sys
-import time
-import socket
-import traceback
-
-from satLog import log_me
-from translate import _
-from cStringIO import StringIO
-
-# XXX Warning! Do not try to use this rhn_rpm for any exceptions
-# things; there is code that uses common/rhn_rpm
-# Even though the classes would have the same name, they would be different
-# objects; try/except would not work correctly
-import rhn_rpm
-
-def print_req(req, fd = sys.stderr):
- """ get some debugging information about the current exception for
sending
- out when we raise an exception
- """
-
- fd.write("Request object information:\n")
- fd.write("URI: %s\n" % req.unparsed_uri)
- fd.write("Remote Host: %s\nServer Name: %s:%d\n" % (
- req.get_remote_host(), req.server.server_hostname, req.server.port))
- fd.write("Headers passed in:\n")
- kl = req.headers_in.keys()
- kl.sort()
- for k in kl:
- fd.write("\t%s: %s\n" % (k, req.headers_in[k]))
- return 0
-
-hostname = socket.gethostname()
-
-def Traceback(method = None, req = None, mail = 1, ostream = sys.stderr,
- extra = None, severity="notification"):
- """ Reports an traceback error and optionally sends mail about it.
- NOTE: extra = extra text information.
- NOTE2: adapted from common.rhnTB.py
- (can't import from common because this module may be imported
- before common exists)
- """
-
- e_type, e_value = sys.exc_info()[:2]
- t = time.ctime(time.time())
- exc = StringIO()
-
- exc.write("Exception reported from %s\nTime: %s\n" % (hostname, t))
- exc.write("Exception type %s\n" % (e_type,))
- if method:
- exc.write("Exception while handling function %s\n" % method)
-
- # print information about the request being served
- if req:
- print_req(req, exc)
- if extra:
- exc.write("Extra information about this error:\n%s\n" % extra)
-
- # Print the traceback
- exc.write("\nException Handler Information\n")
- traceback.print_exc(None, exc)
-
- # we always log it somewhere
- if ostream:
- ostream.write("%s\n" % exc.getvalue())
-
- ret = 0 # default return value
- if mail:
- pass
- exc.close()
- return ret
-
-def fetchTraceback(method=None, req=None, extra=None):
- #""" a cheat for snagging just the string value of a Traceback
"""
- exc = StringIO()
- Traceback(method=method, req=req, mail=0, ostream=exc, extra=extra,
- severity=None)
- return exc.getvalue()
-
-
-def repr_str(e):
- """return a repr(e), str(e) string safely
-
- Will return something like:
- '''
- ...repr(e)...
- ...str(e)...'''
- """
-
- s = ''
- try:
- s = 'EXCEPTION: %s' % e.__class__.__name__
- except:
- s = 'EXCEPTION: <unable to determine>'
- try:
- if e.__repr__ == e.__str__:
- s = s + '\n%s' % repr(e)
- except:
- try:
- s = s + '\n%s' % repr(e)
- except:
- pass
- try:
- s = s + '\n%s' % str(e)
- except:
- pass
- return s
-
-
-class Error(Exception):
- "base class for errors"
- def __init__(self, errmsg):
- Exception.__init__(self)
- self.errmsg = str(errmsg)
-
- def __repr__(self):
- log_me(self.errmsg)
- return self.errmsg
-
-
-class SatelliteConfigDeploymentError(Error):
- "Indicates there was a problem deploying the satellite config files"
- def __repr__(self):
- msg = _("Error deploying %s config files. "
- "The message was:\n" % PRODUCT_NAME) + self.errmsg
- log_me(msg)
- return msg
-
-
-class InvalidUsernamePassword(Error):
- "Invalid RHN username and password were provided"
- def __repr__(self):
- msg = _("The username and password provided do not "
- "match an existing RHN account:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class SatelliteCertVerifyError(Error):
- "RHN product Entitlement Certificate failed to validate"
- def __repr__(self):
- msg = _("The %s Entitlement Certificate "
- "failed to validate:\n" % PRODUCT_NAME) + self.errmsg
- log_me(msg)
- return msg
-
-
-class RhnEntitlementError(Error):
- "System could not register to Red Hat Network"
- def __repr__(self):
- msg = _("The system was unable to register to "
- "the Red Hat Network:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class UpdateError(Error):
- "Raise when an up2date failed"
- def __repr__(self):
- msg = _("There was an error while trying to "
- "update this system:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class RpmError(Error):
- "RPM raised an error condition"
- def __repr__(self):
- msg = _("RPM error while handling The message was:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-def rpm_flags(flags):
- """a helper function to help translate the rpm flags on
- dependency issues"""
-
- flags = flags & 0xFF
- s = ""
- if flags != 0:
- if flags & rhn_rpm.RPMSENSE_LESS:
- s = s + "<"
- if flags & rhn_rpm.RPMSENSE_GREATER:
- s = s + ">"
- if flags & rhn_rpm.RPMSENSE_EQUAL:
- s = s + "="
- if flags & rhn_rpm.RPMSENSE_SERIAL:
- s = s + "S"
- return s
-
-
-def deps_as_text(deps):
- "stringifies/text-ifies rpm dependency infomation"
-
- s = _("Unresolved rpm dependencies:\n\n")
- sense_map = ["requires", "conflicts with"]
-
- for d in deps:
- ((name, version, release), (needsName, needsVersion),
- flags, suggested, sense) = d
- s = s + "Package "
- if needsVersion:
- s = s + _("%s %s %s\n") % (
- "%s-%s-%s" % (name, version, release),
- sense_map[sense],
- "%s %s %s" % (needsName, rpm_flags(flags), needsVersion))
- else:
- s = s + _("%s %s %s\n") % (
- "%s %s %s-%s" % (name, rpm_flags(flags), version, release),
- sense_map[sense],
- needsName)
- return s
-
-
-class DependencyError(Error):
-
- "RPM transaction raised a dependency error"
-
- def __init__(self, msg, deps=None):
- self.errmsg = str(msg)
- # just tag on the whole deps tuple, so we have plenty of info
- # to play with
- self.deps = deps
-
- def __repr__(self):
- msg = _("RPM dependency error. The message was:\n") + self.errmsg
- if self.deps:
- msg = "%s\n%s" % (msg, deps_as_text(self.deps))
- log_me(msg)
- return msg
-
-
-class genPublicCaCertError(Error):
-
- "Raise when we fail to properly generate a CA cert"
-
- def __repr__(self):
- msg = _("There was an error while generating a "
- "Certificate Authority Cert:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class genPrivateCaKeyError(Error):
- "Raise when we fail to properly generate a CA Key"
- def __repr__(self):
- msg = _("There was an error while generating a "
- "Certificate Authority Key:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class genServerKeyError(Error):
- "Raise when we fail to properly generate a httpd server key"
- def __repr__(self):
- msg = _("Error while generating a httpd "
- "server key:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class genServerCertReqError(Error):
- """ Raise when we fail to properly generate a httpd server
certificate
- request
- """
- def __repr__(self):
- msg = _("Error while generating a httpd server certificate "
- "request:\n") + self.errmsg
- log_me(msg)
- return msg
-
-class genServerCertError(Error):
- "Raise when we fail to properly generate a httpd server certificate"
- def __repr__(self):
- msg = _("Error while generating a httpd server "
- "certificate:\n") + self.errmsg
- log_me(msg)
- return msg
-
-#class CaCertInsertionError(Exception):
-# "raise when fail to insert CA cert into the local database"
-#XXX: now in satellite_tools.satCerts
-
-
-class InvalidDbCharsetsError(Exception):
- "databases are only allowed the UF8 charset, else raise this!"
-
-
-class dbVersionIncorrectError(Error):
- "Raise when we detect the database is not he proper version"
- def __repr__(self):
- msg = _("The database is not the proper "
- "version:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class SchemaImportError(Error):
- "Raise when we fail to import the database schema"
- def __repr__(self):
- msg = _("Database schema import failed:\n") + self.errmsg
- log_me(msg)
- return msg
-
-
-class dbIncorrectPermissionsError(Error):
- "Database user does not have the approriate permissions"
- def __init__(self, msg, missingPrivs=None):
- self.errmsg = str(msg)
- # just tag on the whole deps tuple, so we have plenty of info
- # to play with
- self.missingPrivs = missingPrivs
-
- def __repr__(self):
- msg = _("Database Permissions error: The message "
- "was:\n") + self.errmsg
- log_me(msg)
- log_me("The database reported the following "
- "permissions were incorrect:\n %s" % self.missingPrivs)
- return msg
-
-
-class dbTableSpaceError(Error):
- "Database user doesnt have the approriate permissions"
- def __init__(self, msg, errs=None):
- Error.__init__(self, msg)
- # just tag on the whole deps tuple, so we have plenty of info
- # to play with
- self.errs = errs
-
- def __repr__(self):
- msg = _("Database Permissions error: The message "
- "was:\n") + self.errmsg
- log_me(msg)
- log_me("The database reported the following "
- "permissions were incorrect:\n %s" % self.errs)
- return msg
-
-class MissingCaCertError(Exception):
- "raised if ssl ca cert is missing at that location"
-
-class DirectoryNotFoundError(Exception):
- "missing directory"
-
-class ArgumentError(Exception):
- "raised whenever there is any issues with the options in the commandline."
-
-class UnhandledXmlrpcError(Exception):
- "generic exception, but for XMLRPC failures"
-
-
-# Exception classes mainly for the activation portion of the install.
-class MissingSystemidError(Exception):
- "raised if systemid is missing/inaccessible at that location"
-
-class MissingRhnCertError(Exception):
- "raised if RHN cert is missing/inaccessible at that location"
-
-class InvalidRhnCertError(Exception):
- "raised if RHN Entitlement Certificate is invalid"
-
-class ChannelFamilyPopulationError(Error):
- "Indicates there was a problem populating the channel families"
- def __repr__(self):
- msg = _("Error populating channel families to the local DB. "
- "The message was:\n") + self.errmsg
- log_me(msg)
- return msg
-
-class RhnsdRestartError(Error):
- "Raised if rhnsd refused to restart"
-
diff --git a/satellite/install/satLog.py b/satellite/install/satLog.py
deleted file mode 100644
index 9697d7c..0000000
--- a/satellite/install/satLog.py
+++ /dev/null
@@ -1,116 +0,0 @@
-""" Log classes/functions for the installer
-
- Copyright (c) 2002-2005, Red Hat, Inc.
- All rights reserved.
-"""
-
-#-------------------------------------------------------------------------------
-# $Id: satLog.py,v 1.14 2005-07-05 17:50:13 wregglej Exp $
-
-import sys
-import time
-import string
-
-
-DEFAULT_LOG_FILE = "/var/log/rhn_satellite_install.log"
-LOG = None
-
-
-class Log:
-
- """attempt to log all interesting stuff, namely, anything that hits
- the network any error messages, package installs, etc
-
- This log class stolen from up2date (mostly)
- """
-
- def __init__(self, filename=None):
-
- self.app = "sat-install"
- self.filename = filename
-
- self.log_me("new satinstall run started");
-
- def log_me(self, *args):
- self.log_info = "[%s] %s" % (time.ctime(time.time()), self.app)
- s = ""
- for i in args:
- s = s + "%s" % i
- self.write_log(s)
-
- def log_me_clean(self, *args):
- self.log_info = ""
- s = ""
- for i in args:
- s = s + "%s" % i
- self.write_log(s)
-
- def trace_me(self):
- import traceback
- x = traceback.extract_stack()
- bar = string.join(traceback.format_list(x))
- self.write_log(bar)
-
- def write_log(self, s):
- self.fo = open(self.filename, 'a')
- msg = "%s %s\n" % (self.log_info, str(s))
- self.fo.write(msg)
- self.fo.flush()
- self.fo.close()
-
-
-def initLog(filename=DEFAULT_LOG_FILE):
- global LOG
- if LOG == None:
- LOG = Log(filename=filename)
- return LOG
-
-
-def log_me(*args):
- global LOG
- if LOG is None:
- raise SystemError("The log file has not been initialized yet")
- apply(LOG.log_me, args)
-
-
-def log_me_clean(*args):
- global LOG
- if LOG is None:
- raise SystemError("The log file has not been initialized yet")
- apply(LOG.log_me_clean, args)
-
-
-def log_me_stderr_clean(*args):
- "write to both stderr/stdout and the log file"
-
- log_me_clean(args)
- s = ''
- for a in args:
- s = s+str(a)
- sys.stderr.write(s+'\n')
-
-
-def log_me_stdout_clean(*args):
- log_me_clean(args)
- s = ''
- for a in args:
- s = s+str(a)
- sys.stdout.write(s+'\n')
-
-
-def log_me_stderr(*args):
- log_me(args)
- s = ''
- for a in args:
- s = s+str(a)
- sys.stderr.write(s+'\n')
-
-
-def log_me_stdout(*args):
- log_me(args)
- s = ''
- for a in args:
- s = s+str(a)
- sys.stdout.write(s+'\n')
-
-#===============================================================================
diff --git a/satellite/install/translate.py b/satellite/install/translate.py
deleted file mode 100644
index 50e6157..0000000
--- a/satellite/install/translate.py
+++ /dev/null
@@ -1,112 +0,0 @@
-# rhnTranslate.py - Python module to handle translations.
-#-----------------------------------------------------------------------------
-# Handles language (human) translations.
-#
-# Copyright (c) 2001-2005, Red Hat Inc.
-# All rights reserved.
-#
-#-----------------------------------------------------------------------------
-# $Id: translate.py,v 1.9 2005-07-05 17:50:13 wregglej Exp $
-
-import os
-import types
-import gettext
-import string
-
-if hasattr(gettext, 'GNUTranslations'):
- class RHN_Translations(gettext.GNUTranslations):
- # Defining our own class, since we'd like to save the language we use
- # Determining the language is not very pretty - we parse the file name
- # which is supposed to be something like
- # .../<lang>/LC_MESSAGES/<domain>.po
- def _parse(self, fp):
- gettext.GNUTranslations._parse(self, fp)
- filename = fp.name
- filename = os.path.normpath(filename)
- # Extract the language
- self.lang = string.split(filename, '/')[-3]
-
- def getlangs(self):
- # Return all languages
- if not self._fallback or not hasattr(self._fallback, 'getlangs'):
- return [ self.lang, 'C' ]
- # Recursive call
- return [ self.lang ] + self._fallback.getlangs()
-
-class i18n:
- _default_langs = ['en', 'en_US', 'C']
- # Wrapper class that allows us to change languages
- def __init__(self, domain=None, localedir="."):
- self.domain = domain
- self.localedir = localedir
- self.langs = self._default_langs[:]
- self._set_catalog()
-
- def _set_catalog(self):
- # Set the catalog object
- self.cat = gettext.Catalog(self.domain, localedir=self.localedir,
- languages=self.langs, fallback=1, class_=RHN_Translations)
-
- def getlangs(self):
- # List of languages we support
- if not hasattr(self.cat, "getlangs"):
- return [ "C" ]
- return self.cat.getlangs()
-
- def setlangs(self, langs):
- if isinstance(langs, types.StringType):
- langs = [ langs ]
- langs.extend(self._default_langs)
- self.langs = langs
- self._set_catalog()
-
- def gettext(self, string):
- return self.cat.gettext(string)
-
- # reinitialize this catalog
- def set(self, domain=None, localedir=None):
- if domain: self.domain = domain
- if localedir: self.localedir = localedir
- self._set_catalog()
-
-# Old-style gettext
-class i18n_old(i18n):
- def _set_catalog(self):
- self.cat = gettext.Catalog(self.domain, localedir=self.localedir)
-
- def getlangs(self):
- return gettext.lang
-
- def setlangs(self, langs):
- if isinstance(langs, types.StringType):
- langs = [ langs ]
- # Build the list of languages
- _added_langs = []
- for l in langs:
- _added_langs.extend(gettext._expandLang(l))
- # Adding some defaults
- _added_langs.extend(self._default_langs)
- # Remove duplicates
- h = {}
- del gettext.lang[:]
- for l in _added_langs:
- if l == 'C':
- # We'll add it back later
- continue
- if h.has_key(l):
- # Already loaded it
- continue
- gettext.lang.append(l)
- h[l] = None
- if "C" not in gettext.lang:
- gettext.lang.append("C")
- self._set_catalog()
-
-def N_(str):
- return str
-
-if hasattr(gettext, 'GNUTranslations'):
- cat = i18n()
-else:
- cat = i18n_old()
-_ = cat.gettext