diff options
| author | Tom Zanussi <tom.zanussi@linux.intel.com> | 2014-08-03 18:25:52 -0500 | 
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2014-08-11 10:52:15 +0100 | 
| commit | a49b39ddf18b1b058c0a892e1a7450239eea66ce (patch) | |
| tree | 13da3563ea7bbc687fdb9f680c3035d8b02012bb /scripts | |
| parent | 041f9e2ca52681cd6f5c2fb804dd45f05358c9f9 (diff) | |
| download | openembedded-core-a49b39ddf18b1b058c0a892e1a7450239eea66ce.tar.gz openembedded-core-a49b39ddf18b1b058c0a892e1a7450239eea66ce.tar.bz2 openembedded-core-a49b39ddf18b1b058c0a892e1a7450239eea66ce.zip | |
wic: Remove rpmmisc
wic doesn't use it, so remove it.
Signed-off-by: Tom Zanussi <tom.zanussi@linux.intel.com>
Diffstat (limited to 'scripts')
| -rw-r--r-- | scripts/lib/mic/utils/rpmmisc.py | 600 | 
1 files changed, 0 insertions, 600 deletions
| diff --git a/scripts/lib/mic/utils/rpmmisc.py b/scripts/lib/mic/utils/rpmmisc.py deleted file mode 100644 index af15763e18..0000000000 --- a/scripts/lib/mic/utils/rpmmisc.py +++ /dev/null @@ -1,600 +0,0 @@ -#!/usr/bin/python -tt -# -# Copyright (c) 2008, 2009, 2010, 2011 Intel, Inc. -# -# 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; version 2 of the License -# -# 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; if not, write to the Free Software Foundation, Inc., 59 -# Temple Place - Suite 330, Boston, MA 02111-1307, USA. - -import os -import sys -import re -import rpm - -from mic import msger -from mic.utils.errors import CreatorError -from mic.utils.proxy import get_proxy_for -from mic.utils import runner - - -class RPMInstallCallback: -    """ Command line callback class for callbacks from the RPM library. -    """ - -    def __init__(self, ts, output=1): -        self.output = output -        self.callbackfilehandles = {} -        self.total_actions = 0 -        self.total_installed = 0 -        self.installed_pkg_names = [] -        self.total_removed = 0 -        self.mark = "+" -        self.marks = 40 -        self.lastmsg = None -        self.tsInfo = None # this needs to be set for anything else to work -        self.ts = ts -        self.filelog = False -        self.logString = [] -        self.headmsg = "Installing" - -    def _dopkgtup(self, hdr): -        tmpepoch = hdr['epoch'] -        if tmpepoch is None: epoch = '0' -        else: epoch = str(tmpepoch) - -        return (hdr['name'], hdr['arch'], epoch, hdr['version'], hdr['release']) - -    def _makeHandle(self, hdr): -        handle = '%s:%s.%s-%s-%s' % (hdr['epoch'], hdr['name'], hdr['version'], -          hdr['release'], hdr['arch']) - -        return handle - -    def _localprint(self, msg): -        if self.output: -            msger.info(msg) - -    def _makefmt(self, percent, progress = True): -        l = len(str(self.total_actions)) -        size = "%s.%s" % (l, l) -        fmt_done = "[%" + size + "s/%" + size + "s]" -        done = fmt_done % (self.total_installed + self.total_removed, -                           self.total_actions) -        marks = self.marks - (2 * l) -        width = "%s.%s" % (marks, marks) -        fmt_bar = "%-" + width + "s" -        if progress: -            bar = fmt_bar % (self.mark * int(marks * (percent / 100.0)), ) -            fmt = "\r  %-10.10s: %-20.20s " + bar + " " + done -        else: -            bar = fmt_bar % (self.mark * marks, ) -            fmt = "  %-10.10s: %-20.20s "  + bar + " " + done -        return fmt - -    def _logPkgString(self, hdr): -        """return nice representation of the package for the log""" -        (n,a,e,v,r) = self._dopkgtup(hdr) -        if e == '0': -            pkg = '%s.%s %s-%s' % (n, a, v, r) -        else: -            pkg = '%s.%s %s:%s-%s' % (n, a, e, v, r) - -        return pkg - -    def callback(self, what, bytes, total, h, user): -        if what == rpm.RPMCALLBACK_TRANS_START: -            if bytes == 6: -                self.total_actions = total - -        elif what == rpm.RPMCALLBACK_TRANS_PROGRESS: -            pass - -        elif what == rpm.RPMCALLBACK_TRANS_STOP: -            pass - -        elif what == rpm.RPMCALLBACK_INST_OPEN_FILE: -            self.lastmsg = None -            hdr = None -            if h is not None: -                try: -                    hdr, rpmloc = h -                except: -                    rpmloc = h -                    hdr = readRpmHeader(self.ts, h) - -                handle = self._makeHandle(hdr) -                fd = os.open(rpmloc, os.O_RDONLY) -                self.callbackfilehandles[handle]=fd -                if hdr['name'] not in self.installed_pkg_names: -                    self.installed_pkg_names.append(hdr['name']) -                    self.total_installed += 1 -                return fd -            else: -                self._localprint("No header - huh?") - -        elif what == rpm.RPMCALLBACK_INST_CLOSE_FILE: -            hdr = None -            if h is not None: -                try: -                    hdr, rpmloc = h -                except: -                    rpmloc = h -                    hdr = readRpmHeader(self.ts, h) - -                handle = self._makeHandle(hdr) -                os.close(self.callbackfilehandles[handle]) -                fd = 0 - -                # log stuff -                #pkgtup = self._dopkgtup(hdr) -                self.logString.append(self._logPkgString(hdr)) - -        elif what == rpm.RPMCALLBACK_INST_PROGRESS: -            if h is not None: -                percent = (self.total_installed*100L)/self.total_actions -                if total > 0: -                    try: -                        hdr, rpmloc = h -                    except: -                        rpmloc = h - -                    m = re.match("(.*)-(\d+.*)-(\d+\.\d+)\.(.+)\.rpm", os.path.basename(rpmloc)) -                    if m: -                        pkgname = m.group(1) -                    else: -                        pkgname = os.path.basename(rpmloc) -                if self.output: -                    fmt = self._makefmt(percent) -                    msg = fmt % (self.headmsg, pkgname) -                    if msg != self.lastmsg: -                        self.lastmsg = msg - -                        msger.info(msg) - -                        if self.total_installed == self.total_actions: -                            msger.raw('') -                            msger.verbose('\n'.join(self.logString)) - -        elif what == rpm.RPMCALLBACK_UNINST_START: -            pass - -        elif what == rpm.RPMCALLBACK_UNINST_PROGRESS: -            pass - -        elif what == rpm.RPMCALLBACK_UNINST_STOP: -            self.total_removed += 1 - -        elif what == rpm.RPMCALLBACK_REPACKAGE_START: -            pass - -        elif what == rpm.RPMCALLBACK_REPACKAGE_STOP: -            pass - -        elif what == rpm.RPMCALLBACK_REPACKAGE_PROGRESS: -            pass - -def readRpmHeader(ts, filename): -    """ Read an rpm header. """ - -    fd = os.open(filename, os.O_RDONLY) -    h = ts.hdrFromFdno(fd) -    os.close(fd) -    return h - -def splitFilename(filename): -    """ Pass in a standard style rpm fullname - -        Return a name, version, release, epoch, arch, e.g.:: -            foo-1.0-1.i386.rpm returns foo, 1.0, 1, i386 -            1:bar-9-123a.ia64.rpm returns bar, 9, 123a, 1, ia64 -    """ - -    if filename[-4:] == '.rpm': -        filename = filename[:-4] - -    archIndex = filename.rfind('.') -    arch = filename[archIndex+1:] - -    relIndex = filename[:archIndex].rfind('-') -    rel = filename[relIndex+1:archIndex] - -    verIndex = filename[:relIndex].rfind('-') -    ver = filename[verIndex+1:relIndex] - -    epochIndex = filename.find(':') -    if epochIndex == -1: -        epoch = '' -    else: -        epoch = filename[:epochIndex] - -    name = filename[epochIndex + 1:verIndex] -    return name, ver, rel, epoch, arch - -def getCanonX86Arch(arch): -    # -    if arch == "i586": -        f = open("/proc/cpuinfo", "r") -        lines = f.readlines() -        f.close() -        for line in lines: -            if line.startswith("model name") and line.find("Geode(TM)") != -1: -                return "geode" -        return arch -    # only athlon vs i686 isn't handled with uname currently -    if arch != "i686": -        return arch - -    # if we're i686 and AuthenticAMD, then we should be an athlon -    f = open("/proc/cpuinfo", "r") -    lines = f.readlines() -    f.close() -    for line in lines: -        if line.startswith("vendor") and line.find("AuthenticAMD") != -1: -            return "athlon" -        # i686 doesn't guarantee cmov, but we depend on it -        elif line.startswith("flags") and line.find("cmov") == -1: -            return "i586" - -    return arch - -def getCanonX86_64Arch(arch): -    if arch != "x86_64": -        return arch - -    vendor = None -    f = open("/proc/cpuinfo", "r") -    lines = f.readlines() -    f.close() -    for line in lines: -        if line.startswith("vendor_id"): -            vendor = line.split(':')[1] -            break -    if vendor is None: -        return arch - -    if vendor.find("Authentic AMD") != -1 or vendor.find("AuthenticAMD") != -1: -        return "amd64" -    if vendor.find("GenuineIntel") != -1: -        return "ia32e" -    return arch - -def getCanonArch(): -    arch = os.uname()[4] - -    if (len(arch) == 4 and arch[0] == "i" and arch[2:4] == "86"): -        return getCanonX86Arch(arch) - -    if arch == "x86_64": -        return getCanonX86_64Arch(arch) - -    return arch - -# Copy from libsatsolver:poolarch.c, with cleanup -archPolicies = { -    "x86_64":       "x86_64:i686:i586:i486:i386", -    "i686":         "i686:i586:i486:i386", -    "i586":         "i586:i486:i386", -    "ia64":         "ia64:i686:i586:i486:i386", -    "armv7tnhl":    "armv7tnhl:armv7thl:armv7nhl:armv7hl", -    "armv7thl":     "armv7thl:armv7hl", -    "armv7nhl":     "armv7nhl:armv7hl", -    "armv7hl":      "armv7hl", -    "armv7l":       "armv7l:armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", -    "armv6l":       "armv6l:armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", -    "armv5tejl":    "armv5tejl:armv5tel:armv5l:armv4tl:armv4l:armv3l", -    "armv5tel":     "armv5tel:armv5l:armv4tl:armv4l:armv3l", -    "armv5l":       "armv5l:armv4tl:armv4l:armv3l", -} - -# dict mapping arch -> ( multicompat, best personality, biarch personality ) -multilibArches = { -    "x86_64":  ( "athlon", "x86_64", "athlon" ), -} - -# from yumUtils.py -arches = { -    # ia32 -    "athlon": "i686", -    "i686": "i586", -    "geode": "i586", -    "i586": "i486", -    "i486": "i386", -    "i386": "noarch", - -    # amd64 -    "x86_64": "athlon", -    "amd64": "x86_64", -    "ia32e": "x86_64", - -    # arm -    "armv7tnhl": "armv7nhl", -    "armv7nhl": "armv7hl", -    "armv7hl": "noarch", -    "armv7l": "armv6l", -    "armv6l": "armv5tejl", -    "armv5tejl": "armv5tel", -    "armv5tel": "noarch", - -    #itanium -    "ia64": "noarch", -} - -def isMultiLibArch(arch=None): -    """returns true if arch is a multilib arch, false if not""" -    if arch is None: -        arch = getCanonArch() - -    if not arches.has_key(arch): # or we could check if it is noarch -        return False - -    if multilibArches.has_key(arch): -        return True - -    if multilibArches.has_key(arches[arch]): -        return True - -    return False - -def getBaseArch(): -    myarch = getCanonArch() -    if not arches.has_key(myarch): -        return myarch - -    if isMultiLibArch(arch=myarch): -        if multilibArches.has_key(myarch): -            return myarch -        else: -            return arches[myarch] - -    if arches.has_key(myarch): -        basearch = myarch -        value = arches[basearch] -        while value != 'noarch': -            basearch = value -            value = arches[basearch] - -        return basearch - -def checkRpmIntegrity(bin_rpm, package): -    return runner.quiet([bin_rpm, "-K", "--nosignature", package]) - -def checkSig(ts, package): -    """ Takes a transaction set and a package, check it's sigs, -        return 0 if they are all fine -        return 1 if the gpg key can't be found -        return 2 if the header is in someway damaged -        return 3 if the key is not trusted -        return 4 if the pkg is not gpg or pgp signed -    """ - -    value = 0 -    currentflags = ts.setVSFlags(0) -    fdno = os.open(package, os.O_RDONLY) -    try: -        hdr = ts.hdrFromFdno(fdno) - -    except rpm.error, e: -        if str(e) == "public key not availaiable": -            value = 1 -        if str(e) == "public key not available": -            value = 1 -        if str(e) == "public key not trusted": -            value = 3 -        if str(e) == "error reading package header": -            value = 2 -    else: -        error, siginfo = getSigInfo(hdr) -        if error == 101: -            os.close(fdno) -            del hdr -            value = 4 -        else: -            del hdr - -    try: -        os.close(fdno) -    except OSError: -        pass - -    ts.setVSFlags(currentflags) # put things back like they were before -    return value - -def getSigInfo(hdr): -    """ checks signature from an hdr hand back signature information and/or -        an error code -    """ - -    import locale -    locale.setlocale(locale.LC_ALL, 'C') - -    string = '%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{%|SIGGPG?{%{SIGGPG:pgpsig}}:{%|SIGPGP?{%{SIGPGP:pgpsig}}:{(none)}|}|}|}|' -    siginfo = hdr.sprintf(string) -    if siginfo != '(none)': -        error = 0 -        sigtype, sigdate, sigid = siginfo.split(',') -    else: -        error = 101 -        sigtype = 'MD5' -        sigdate = 'None' -        sigid = 'None' - -    infotuple = (sigtype, sigdate, sigid) -    return error, infotuple - -def checkRepositoryEULA(name, repo): -    """ This function is to check the EULA file if provided. -        return True: no EULA or accepted -        return False: user declined the EULA -    """ - -    import tempfile -    import shutil -    import urlparse -    import urllib2 as u2 -    import httplib -    from mic.utils.errors import CreatorError - -    def _check_and_download_url(u2opener, url, savepath): -        try: -            if u2opener: -                f = u2opener.open(url) -            else: -                f = u2.urlopen(url) -        except u2.HTTPError, httperror: -            if httperror.code in (404, 503): -                return None -            else: -                raise CreatorError(httperror) -        except OSError, oserr: -            if oserr.errno == 2: -                return None -            else: -                raise CreatorError(oserr) -        except IOError, oserr: -            if hasattr(oserr, "reason") and oserr.reason.errno == 2: -                return None -            else: -                raise CreatorError(oserr) -        except u2.URLError, err: -            raise CreatorError(err) -        except httplib.HTTPException, e: -            raise CreatorError(e) - -        # save to file -        licf = open(savepath, "w") -        licf.write(f.read()) -        licf.close() -        f.close() - -        return savepath - -    def _pager_file(savepath): - -        if os.path.splitext(savepath)[1].upper() in ('.HTM', '.HTML'): -            pagers = ('w3m', 'links', 'lynx', 'less', 'more') -        else: -            pagers = ('less', 'more') - -        file_showed = False -        for pager in pagers: -            cmd = "%s %s" % (pager, savepath) -            try: -                os.system(cmd) -            except OSError: -                continue -            else: -                file_showed = True -                break - -        if not file_showed: -            f = open(savepath) -            msger.raw(f.read()) -            f.close() -            msger.pause() - -    # when proxy needed, make urllib2 follow it -    proxy = repo.proxy -    proxy_username = repo.proxy_username -    proxy_password = repo.proxy_password - -    if not proxy: -        proxy = get_proxy_for(repo.baseurl[0]) - -    handlers = [] -    auth_handler = u2.HTTPBasicAuthHandler(u2.HTTPPasswordMgrWithDefaultRealm()) -    u2opener = None -    if proxy: -        if proxy_username: -            proxy_netloc = urlparse.urlsplit(proxy).netloc -            if proxy_password: -                proxy_url = 'http://%s:%s@%s' % (proxy_username, proxy_password, proxy_netloc) -            else: -                proxy_url = 'http://%s@%s' % (proxy_username, proxy_netloc) -        else: -            proxy_url = proxy - -        proxy_support = u2.ProxyHandler({'http': proxy_url, -                                         'https': proxy_url, -                                         'ftp': proxy_url}) -        handlers.append(proxy_support) - -    # download all remote files to one temp dir -    baseurl = None -    repo_lic_dir = tempfile.mkdtemp(prefix = 'repolic') - -    for url in repo.baseurl: -        tmphandlers = handlers[:] - -        (scheme, host, path, parm, query, frag) = urlparse.urlparse(url.rstrip('/') + '/') -        if scheme not in ("http", "https", "ftp", "ftps", "file"): -            raise CreatorError("Error: invalid url %s" % url) - -        if '@' in host: -            try: -                user_pass, host = host.split('@', 1) -                if ':' in user_pass: -                    user, password = user_pass.split(':', 1) -            except ValueError, e: -                raise CreatorError('Bad URL: %s' % url) - -            msger.verbose("adding HTTP auth: %s, XXXXXXXX" %(user)) -            auth_handler.add_password(None, host, user, password) -            tmphandlers.append(auth_handler) -            url = scheme + "://" + host + path + parm + query + frag - -        if tmphandlers: -            u2opener = u2.build_opener(*tmphandlers) - -        # try to download -        repo_eula_url = urlparse.urljoin(url, "LICENSE.txt") -        repo_eula_path = _check_and_download_url( -                                u2opener, -                                repo_eula_url, -                                os.path.join(repo_lic_dir, repo.id + '_LICENSE.txt')) -        if repo_eula_path: -            # found -            baseurl = url -            break - -    if not baseurl: -        shutil.rmtree(repo_lic_dir) #cleanup -        return True - -    # show the license file -    msger.info('For the software packages in this yum repo:') -    msger.info('    %s: %s' % (name, baseurl)) -    msger.info('There is an "End User License Agreement" file that need to be checked.') -    msger.info('Please read the terms and conditions outlined in it and answer the followed qustions.') -    msger.pause() - -    _pager_file(repo_eula_path) - -    # Asking for the "Accept/Decline" -    if not msger.ask('Would you agree to the terms and conditions outlined in the above End User License Agreement?'): -        msger.warning('Will not install pkgs from this repo.') -        shutil.rmtree(repo_lic_dir) #cleanup -        return False - -    # try to find support_info.html for extra infomation -    repo_info_url = urlparse.urljoin(baseurl, "support_info.html") -    repo_info_path = _check_and_download_url( -                            u2opener, -                            repo_info_url, -                            os.path.join(repo_lic_dir, repo.id + '_support_info.html')) -    if repo_info_path: -        msger.info('There is one more file in the repo for additional support information, please read it') -        msger.pause() -        _pager_file(repo_info_path) - -    #cleanup -    shutil.rmtree(repo_lic_dir) -    return True | 
