Python rpm.TransactionSet() Examples

The following are 12 code examples of rpm.TransactionSet(). You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may also want to check out all available functions/classes of the module rpm , or try the search function .
Example #1
Source File: abichecker.py    From openSUSE-release-tools with GNU General Public License v2.0 9 votes vote down vote up
def __init__(self, *args, **kwargs):
        ReviewBot.ReviewBot.__init__(self, *args, **kwargs)

        self.no_review = False
        self.force = False

        self.ts = rpm.TransactionSet()
        self.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES)

        # reports of source submission
        self.reports = []
        # textual report summary for use in accept/decline message
        # or comments
        self.text_summary = ''

        self.session = DB.db_session()

        self.dblogger = LogToDB(self.session)

        self.logger.addFilter(self.dblogger)

        self.commentapi = CommentAPI(self.apiurl)

        self.current_request = None 
Example #2
Source File: content_upload.py    From foreman-ansible-modules with GNU General Public License v3.0 8 votes vote down vote up
def get_rpm_info(path):
    ts = rpm.TransactionSet()

    # disable signature checks, we might not have the key or the file might be unsigned
    # pre 4.15 RPM needs to use the old name of the bitmask
    try:
        vsflags = rpm.RPMVSF_MASK_NOSIGNATURES
    except AttributeError:
        vsflags = rpm._RPMVSF_NOSIGNATURES
    ts.setVSFlags(vsflags)

    with open(path) as rpmfile:
        rpmhdr = ts.hdrFromFdno(rpmfile)

    name = rpmhdr[rpm.RPMTAG_NAME].decode('ascii')
    epoch = rpmhdr[rpm.RPMTAG_EPOCHNUM]
    version = rpmhdr[rpm.RPMTAG_VERSION].decode('ascii')
    release = rpmhdr[rpm.RPMTAG_RELEASE].decode('ascii')
    arch = rpmhdr[rpm.RPMTAG_ARCH].decode('ascii')

    return (name, epoch, version, release, arch) 
Example #3
Source File: util.py    From mock with GNU General Public License v2.0 6 votes vote down vote up
def yieldSrpmHeaders(srpms, plainRpmOk=0):
    import rpm
    ts = rpm.TransactionSet('/')
    # When RPM > 4.14.90 is common we can use RPMVSF_MASK_NOSIGNATURES, RPMVSF_MASK_NODIGESTS
    # pylint: disable=protected-access
    flags = (rpm._RPMVSF_NOSIGNATURES | rpm._RPMVSF_NODIGESTS)
    ts.setVSFlags(flags)
    for srpm in srpms:
        srpm = host_file(srpm)
        try:
            fd = os.open(srpm, os.O_RDONLY)
        except OSError as e:
            raise exception.Error("Cannot find/open srpm: %s. Error: %s"
                                  % (srpm, e))
        try:
            hdr = ts.hdrFromFdno(fd)
        except rpm.error as e:
            raise exception.Error(
                "Cannot find/open srpm: %s. Error: %s" % (srpm, e))
        finally:
            os.close(fd)

        if not plainRpmOk and hdr[rpm.RPMTAG_SOURCEPACKAGE] != 1:
            raise exception.Error("File is not an srpm: %s." % srpm)

        yield hdr 
Example #4
Source File: scan.py    From openscap-daemon with GNU Lesser General Public License v2.1 6 votes vote down vote up
def _get_rpms(self):
        # TODO: External dep!
        import rpm

        chroot_os = os.path.join(self.dest, "rootfs")
        ts = rpm.TransactionSet(chroot_os)
        ts.setVSFlags((rpm._RPMVSF_NOSIGNATURES | rpm._RPMVSF_NODIGESTS))
        image_rpms = []
        for hdr in ts.dbMatch():  # No sorting
            if hdr['name'] == 'gpg-pubkey':
                continue
            else:
                foo = "{0}-{1}-{2}-{3}-{4}".format(hdr['name'],
                                                   hdr['epochnum'],
                                                   hdr['version'],
                                                   hdr['release'],
                                                   hdr['arch'])
                image_rpms.append(foo)
        return image_rpms 
Example #5
Source File: factory-package-news.py    From openSUSE-release-tools with GNU General Public License v2.0 5 votes vote down vote up
def __init__(self, *args, **kwargs):
        cmdln.Cmdln.__init__(self, args, kwargs)
        self.ts = rpm.TransactionSet()
        self.ts.setVSFlags(rpm._RPMVSF_NOSIGNATURES) 
Example #6
Source File: rpm.py    From atomic-reactor with BSD 3-Clause "New" or "Revised" License 5 votes vote down vote up
def get_rpm_list(tags=None, separator=';'):
    """
    Return a list of RPMs in the format expected by parse_rpm_output.
    """
    if tags is None:
        tags = image_component_rpm_tags
    ts = rpm.TransactionSet()
    mi = ts.dbMatch()
    rpms = []
    for h in mi:
        rpms.append(separator.join([h.sprintf("%%{%s}" % tag) for tag in tags]))
    return rpms 
Example #7
Source File: oc_obj.py    From ansible-redhat_openshift_utils with Apache License 2.0 5 votes vote down vote up
def openshift_installed():
        ''' check if openshift is installed '''
        import rpm

        transaction_set = rpm.TransactionSet()
        rpmquery = transaction_set.dbMatch("name", "atomic-openshift")

        return rpmquery.count() > 0

    # Disabling too-many-branches.  This is a yaml dictionary comparison function
    # pylint: disable=too-many-branches,too-many-return-statements,too-many-statements 
Example #8
Source File: oc_obj.py    From ansible-redhat_openshift_utils with Apache License 2.0 5 votes vote down vote up
def openshift_installed():
        ''' check if openshift is installed '''
        import rpm

        transaction_set = rpm.TransactionSet()
        rpmquery = transaction_set.dbMatch("name", "atomic-openshift")

        return rpmquery.count() > 0

    # Disabling too-many-branches.  This is a yaml dictionary comparison function
    # pylint: disable=too-many-branches,too-many-return-statements,too-many-statements 
Example #9
Source File: recipe-491277.py    From code with MIT License 5 votes vote down vote up
def newest_kernel_and_initrd():
    ts = rpm.TransactionSet()
    p = max(ts.dbMatch('name', 'kernel'))
    k = [ x for x in p['filenames']
         if fnmatch.fnmatch(x, '/boot/vmlinuz-*') ][0]
    #The initrd is not owned by the kernel rpm but generated in the %post script   
    i = '/boot/initrd-%s.img' % k[len('/boot/vmlinuz-'):]
    return (k, i) 
Example #10
Source File: osimage.py    From luna with GNU General Public License v3.0 5 votes vote down vote up
def get_package_ver(self, path, package):
        rpm.addMacro("_dbpath", path + '/var/lib/rpm')
        ts = rpm.TransactionSet()
        versions = list()

        try:
            mi = ts.dbMatch('name', package)
            for h in mi:
                version = "%s-%s.%s" % (h['VERSION'], h['RELEASE'], h['ARCH'])
                versions.append(version)
        except rpm.error:
            return []

        return versions 
Example #11
Source File: rpmcapsule.py    From conary with Apache License 2.0 5 votes vote down vote up
def getCapsuleKeysFromTarget(self):
        txnSet = rpm.TransactionSet(self.root)
        matchIter = txnSet.dbMatch()
        headersByKey = {}
        for rpmlibHeader in matchIter:
            nevra = rpmhelper.NEVRA.fromHeader(rpmlibHeader)
            if nevra.name.startswith('gpg-pubkey') and not nevra.arch:
                # Skip fake packages that RPM/yum uses to hold PGP keys
                continue
            digest = self._digest(rpmlibHeader)
            key = capsules.PartialTuple((nevra, digest))
            headersByKey[key] = rpmlibHeader
        return headersByKey 
Example #12
Source File: rpmtest.py    From conary with Apache License 2.0 5 votes vote down vote up
def testTestSuiteRpmLockOverride(self):
        import rpm
        class simpleCallback:
            def __init__(self):
                self.fdnos = {}

            def callback(self, what, amount, total, mydata, wibble):
                if what == rpm.RPMCALLBACK_INST_OPEN_FILE:
                    hdr, path = mydata
                    fd = os.open(path, os.O_RDONLY)
                    nvr = '%s-%s-%s' % (hdr['name'],
                                        hdr['version'],
                                        hdr['release'])
                    self.fdnos[nvr] = fd
                    return fd

        def go(root):
            ts = rpm.TransactionSet(root)
            ts.setVSFlags(~(rpm.RPMVSF_NORSA|rpm.RPMVSF_NODSA))
            ts.initDB()
            rpmloc = resources.get_archive() + '/epoch-1.0-1.i386.rpm'
            fdno = os.open(rpmloc, os.O_RDONLY)
            hdr = ts.hdrFromFdno(fdno)
            os.close(fdno)
            ts.addInstall(hdr, (hdr, rpmloc), 'u')
            ts.check()
            ts.order()
            cb = simpleCallback()
            ts.run(cb.callback,'')
            ts.closeDB()
        d = tempfile.mkdtemp()
        os.chmod(d, 0777)
        try:
            go(d + '/root1')
            util.rmtree(d + '/root1')
            go(d + '/root2')
            self.assertTrue(os.path.exists(d+'/root2/normal'))
        finally:
            util.rmtree(d)