#include <RpmDb.h>
Inheritance diagram for zypp::target::rpm::RpmDb:
Public Types | |
typedef InstTargetError | Error |
Default error class. | |
typedef std::set< std::string > | FileList |
enum | RpmInstFlag { RPMINST_NONE = 0x0000, RPMINST_NODOCS = 0x0001, RPMINST_NOSCRIPTS = 0x0002, RPMINST_FORCE = 0x0004, RPMINST_NODEPS = 0x0008, RPMINST_IGNORESIZE = 0x0010, RPMINST_JUSTDB = 0x0020, RPMINST_NODIGEST = 0x0040, RPMINST_NOSIGNATURE = 0x0080, RPMINST_NOUPGRADE = 0x0100, RPMINST_TEST = 0x0200 } |
Bits representing rpm installation options, useable as or combination. More... | |
enum | checkPackageResult { CHK_OK = 0x00, CHK_INCORRECT_VERSION = 0x01, CHK_INCORRECT_FILEMD5 = 0x02, CHK_GPGSIG_MISSING = 0x04, CHK_MD5SUM_MISSING = 0x08, CHK_INCORRECT_GPGSIG = 0x10, CHK_INCORRECT_PKGMD5 = 0x20, CHK_OTHER_FAILURE = 0x40 } |
Bits of possible package corruptions. More... | |
Public Member Functions | |
RpmDb () | |
Constructor. | |
~RpmDb () | |
Destructor. | |
const Pathname & | root () const |
const Pathname & | dbPath () const |
bool | initialized () const |
void | initDatabase (Pathname root_r=Pathname(), Pathname dbPath_r=Pathname()) |
Prepare access to the rpm database. | |
void | closeDatabase () |
Block further access to the rpm database and go back to uninitialized state. | |
void | rebuildDatabase () |
Rebuild the rpm database (rpm --rebuilddb). | |
void | importPubkey (const Pathname &pubkey_r) |
Import ascii armored public key in file pubkey_r. | |
std::list< PublicKey > | pubkeys () const |
Return the long ids of all installed public keys. | |
std::set< Edition > | pubkeyEditions () const |
Return the edition of all installed public keys. | |
bool | packagesValid () const |
const std::list< Package::Ptr > & | getPackages () |
If necessary build, and return the list of all installed packages. | |
std::list< FileInfo > | fileList (const std::string &name_r, const Edition &edition_r) const |
return complete file list for installed package name_r (in FileInfo.filename) if edition_r != Edition::noedition, check for exact edition if full==true, fill all attributes of FileInfo | |
bool | hasFile (const std::string &file_r, const std::string &name_r="") const |
Return true if at least one package owns a certain file (name_r empty) Return true if package name_r owns file file_r (name_r nonempty). | |
std::string | whoOwnsFile (const std::string &file_r) const |
Return name of package owning file or empty string if no installed package owns file. | |
bool | hasProvides (const std::string &tag_r) const |
Return true if at least one package provides a certain tag. | |
bool | hasRequiredBy (const std::string &tag_r) const |
Return true if at least one package requires a certain tag. | |
bool | hasConflicts (const std::string &tag_r) const |
Return true if at least one package conflicts with a certain tag. | |
bool | hasPackage (const std::string &name_r) const |
Return true if package is installed. | |
void | getData (const std::string &name_r, RpmHeader::constPtr &result_r) const |
Get an installed packages data from rpmdb. | |
void | getData (const std::string &name_r, const Edition &ed_r, RpmHeader::constPtr &result_r) const |
Get an installed packages data from rpmdb. | |
void | importZyppKeyRingTrustedKeys () |
iterates through zypp keyring and import all non existant keys into rpm keyring | |
void | exportTrustedKeysInZyppKeyRing () |
insert all rpm trusted keys into zypp trusted keyring | |
unsigned | checkPackage (const Pathname &filename, std::string version="", std::string md5="") |
Check rpm with rpm --checksig. | |
void | installPackage (const Pathname &filename, unsigned flags=0) |
install rpm package | |
void | removePackage (const std::string &name_r, unsigned flags=0) |
remove rpm package | |
void | removePackage (Package::constPtr package, unsigned flags=0) |
Pathname | getBackupPath (void) |
get backup dir for rpm config files | |
bool | backupPackage (const std::string &packageName) |
create tar.gz of all changed files in a Package | |
bool | backupPackage (const Pathname &filename) |
queries file for name and then calls above backupPackage function. | |
void | setBackupPath (const Pathname &path) |
set path where package backups are stored | |
void | createPackageBackups (bool yes) |
whether to create package backups during install or removal | |
bool | queryChangedFiles (FileList &fileList, const std::string &packageName) |
determine which files of an installed package have been modified. | |
virtual std::ostream & | dumpOn (std::ostream &str) const |
Dump debug info. | |
Static Public Member Functions | |
static Package::Ptr | makePackageFromHeader (const RpmHeader::constPtr header, std::set< std::string > *filerequires, const Pathname &location, Source_Ref source) |
Create a package from RpmHeader return NULL on error. | |
static std::string | checkPackageResult2string (unsigned code) |
create error description of bits set according to checkPackageResult | |
static bool | setInstallationLogfile (const Pathname &filename) |
Set logfile for progress log. | |
Protected Member Functions | |
void | doRemovePackage (const std::string &name_r, unsigned flags, callback::SendReport< RpmRemoveReport > &report) |
void | doInstallPackage (const Pathname &filename, unsigned flags, callback::SendReport< RpmInstallReport > &report) |
const std::list< Package::Ptr > & | doGetPackages (callback::SendReport< ScanDBReport > &report) |
void | doRebuildDatabase (callback::SendReport< RebuildDBReport > &report) |
Private Types | |
typedef std::vector< const char * > | RpmArgVec |
enum | DbStateInfoBits { DbSI_NO_INIT = 0x0000, DbSI_HAVE_V4 = 0x0001, DbSI_MADE_V4 = 0x0002, DbSI_MODIFIED_V4 = 0x0004, DbSI_HAVE_V3 = 0x0008, DbSI_HAVE_V3TOV4 = 0x0010, DbSI_MADE_V3TOV4 = 0x0020 } |
Private Member Functions | |
void | dbsi_set (DbStateInfoBits &val_r, const unsigned &bits_r) const |
void | dbsi_clr (DbStateInfoBits &val_r, const unsigned &bits_r) const |
bool | dbsi_has (const DbStateInfoBits &val_r, const unsigned &bits_r) const |
void | internal_initDatabase (const Pathname &root_r, const Pathname &dbPath_r, DbStateInfoBits &info_r) |
Internal helper for initDatabase. | |
void | modifyDatabase () |
Called before the database is modified by installPackage/removePackage. | |
void | run_rpm (const RpmArgVec &options, ExternalProgram::Stderr_Disposition stderr_disp=ExternalProgram::Stderr_To_Stdout) |
Run rpm with the specified arguments and handle stderr. | |
bool | systemReadLine (std::string &line) |
Read a line from the general rpm query. | |
int | systemStatus () |
Return the exit status of the general rpm process, closing the connection if not already done. | |
void | systemKill () |
Forcably kill the system process. | |
void | processConfigFiles (const std::string &line, const std::string &name, const char *typemsg, const char *difffailmsg, const char *diffgenmsg) |
handle rpm messages like "/etc/testrc saved as /etc/testrc.rpmorig" | |
Static Private Member Functions | |
static void | removeV4 (const Pathname &dbdir_r, bool v3backup_r) |
Remove the rpm4 database in dbdir_r and optionally any backup created on conversion. | |
static void | removeV3 (const Pathname &dbdir_r, bool v3backup_r) |
Remove the rpm3 database in dbdir_r. | |
Private Attributes | |
DbStateInfoBits | _dbStateInfo |
Internal state info. | |
Pathname | _root |
Root directory for all operations. | |
Pathname | _dbPath |
Directory that contains the rpmdb. | |
Packages & | _packages |
std::set< std::string > | _filerequires |
ExternalProgram * | process |
The connection to the rpm process. | |
int | exit_code |
The exit code of the rpm process, or -1 if not yet known. | |
Pathname | _backuppath |
/var/adm/backup | |
bool | _packagebackups |
create package backups? | |
bool | _warndirexists |
whether <_root>/<WARNINGMAILPATH> was already created | |
Friends | |
std::ostream & | operator<< (std::ostream &str, const DbStateInfoBits &obj) |
Classes | |
class | Logfile |
Simple wrapper for progress log. More... | |
class | Packages |
Helper class for RpmDb::getPackages() to build the list<Package::Ptr> returned. More... |
Definition at line 44 of file RpmDb.h.
|
Default error class.
|
|
|
|
|
|
|
|
Bits representing rpm installation options, useable as or combination.
|
|
Bits of possible package corruptions.
|
|
Constructor. There's no rpmdb access until initDatabase was called. Definition at line 328 of file RpmDb.cc. References exit_code, process, and zypp::target::rpm::sKeyRingReceiver. |
|
Destructor.
Definition at line 351 of file RpmDb.cc. References _packages, closeDatabase(), MIL, process, and zypp::target::rpm::sKeyRingReceiver. |
|
Definition at line 72 of file RpmDb.h. Referenced by modifyDatabase(). |
|
Definition at line 75 of file RpmDb.h. Referenced by initDatabase(), and modifyDatabase(). |
|
Definition at line 78 of file RpmDb.h. Referenced by closeDatabase(), initDatabase(), and modifyDatabase(). |
|
Internal helper for initDatabase.
Definition at line 494 of file RpmDb.cc. References DbSI_NO_INIT, zypp::target::rpm::librpmDb::DbDirInfo::illegalArgs(), and ZYPP_THROW. Referenced by initDatabase(). |
|
Remove the rpm4 database in dbdir_r and optionally any backup created on conversion.
Definition at line 605 of file RpmDb.cc. References ERR, and zypp::filesystem::PathInfo::isDir(). Referenced by closeDatabase(), and initDatabase(). |
|
Remove the rpm3 database in dbdir_r. Create a backup copy named packages.rpm3 if it does not already exist. Definition at line 664 of file RpmDb.cc. References ERR, and zypp::filesystem::PathInfo::isDir(). Referenced by closeDatabase(), initDatabase(), and modifyDatabase(). |
|
Called before the database is modified by installPackage/removePackage. Invalidates Packages list and moves away any old database. Definition at line 721 of file RpmDb.cc. References _dbPath, _dbStateInfo, _packages, _root, zypp::target::rpm::RpmDb::Packages::_valid, dbsi_clr(), dbsi_has(), DbSI_HAVE_V3, DbSI_MADE_V3TOV4, DbSI_MODIFIED_V4, dbsi_set(), initialized(), MIL, and removeV3(). Referenced by doInstallPackage(). |
|
Definition at line 140 of file RpmDb.h. References _root. Referenced by doRebuildDatabase(), and rebuildDatabase(). |
|
Definition at line 145 of file RpmDb.h. References _dbPath. Referenced by doRebuildDatabase(), and rebuildDatabase(). |
|
Definition at line 150 of file RpmDb.h. References _root, and zypp::filesystem::Pathname::empty(). Referenced by closeDatabase(), initDatabase(), modifyDatabase(), packagesValid(), and run_rpm(). |
|
Prepare access to the rpm database. Optional arguments may denote the root directory for all operations and the directory (below root) that contains the rpmdb (usg. you won't need to set this). On empty Pathnames the default is used: root: / dbPath: /var/lib/rpm Calling initDatabase a second time with different arguments will return an error but leave the database in it's original state. Converting an old batabase is done if necessary. On update: The converted database will be removed by closeDatabase, if it was not modified (no packages were installed or deleted). Otherwise the new database is kept, and the old one is removed.
Definition at line 396 of file RpmDb.cc. References _dbPath, _dbStateInfo, _root, zypp::filesystem::Pathname::absolute(), zypp::target::rpm::librpmDb::blockAccess(), zypp::target::rpm::librpmDb::dbRelease(), dbsi_clr(), dbsi_has(), DbSI_HAVE_V3, DbSI_HAVE_V4, DbSI_MADE_V3TOV4, DbSI_MADE_V4, DbSI_MODIFIED_V4, DbSI_NO_INIT, zypp::filesystem::Pathname::empty(), ERR, exportTrustedKeysInZyppKeyRing(), importZyppKeyRingTrustedKeys(), initialized(), internal_initDatabase(), MIL, rebuildDatabase(), removeV3(), removeV4(), zypp::target::rpm::stringPath(), zypp::target::rpm::librpmDb::unblockAccess(), ZYPP_CAUGHT, ZYPP_RETHROW, and ZYPP_THROW. Referenced by zypp::target::TargetImpl::TargetImpl(). |
|
Block further access to the rpm database and go back to uninitialized state. On update: Decides what to do with any converted database (see initDatabase).
Definition at line 746 of file RpmDb.cc. References _dbPath, _dbStateInfo, _packages, _root, zypp::target::rpm::librpmDb::blockAccess(), zypp::target::rpm::RpmDb::Packages::clear(), dbsi_has(), DbSI_HAVE_V3, DbSI_MADE_V3TOV4, DbSI_MODIFIED_V4, DbSI_NO_INIT, initialized(), MIL, removeV3(), and removeV4(). Referenced by ~RpmDb(), and zypp::target::TargetImpl::~TargetImpl(). |
|
Rebuild the rpm database (rpm --rebuilddb).
Definition at line 789 of file RpmDb.cc. References zypp::Exception::asUserString(), dbPath(), doRebuildDatabase(), zypp::target::rpm::RebuildDBReport::FAILED, zypp::target::rpm::RebuildDBReport::NO_ERROR, report, root(), and ZYPP_RETHROW. Referenced by initDatabase(). |
|
Import ascii armored public key in file pubkey_r.
Definition at line 972 of file RpmDb.cc. References _packages, zypp::target::rpm::RpmDb::Packages::_valid, zypp::filesystem::Pathname::asString(), DBG, FAILIFNOTINITIALIZED, run_rpm(), zypp::ExternalProgram::Stderr_To_Stdout, systemReadLine(), and WAR. |
|
Return the long ids of all installed public keys.
Definition at line 1011 of file RpmDb.cc. References zypp::filesystem::Pathname::asString(), ERR, zypp::target::rpm::librpmDb::db_const_iterator::findByName(), getData(), zypp::Edition::noedition, and zypp::filesystem::TmpPath::path(). Referenced by importZyppKeyRingTrustedKeys(). |
|
Return the edition of all installed public keys.
Definition at line 1049 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByName(), and zypp::Edition::noedition. Referenced by exportTrustedKeysInZyppKeyRing(). |
|
Definition at line 1068 of file RpmDb.cc. References _packages, zypp::target::rpm::RpmDb::Packages::_valid, and initialized(). Referenced by doGetPackages(). |
|
If necessary build, and return the list of all installed packages.
Definition at line 1081 of file RpmDb.cc. References zypp::Exception::asUserString(), doGetPackages(), zypp::target::rpm::ScanDBReport::FAILED, zypp::target::rpm::ScanDBReport::NO_ERROR, report, and ZYPP_RETHROW. Referenced by zypp::target::TargetImpl::resolvables(). |
|
return complete file list for installed package name_r (in FileInfo.filename) if edition_r != Edition::noedition, check for exact edition if full==true, fill all attributes of FileInfo
Definition at line 1336 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findPackage(), and zypp::Edition::noedition. |
|
Return true if at least one package owns a certain file (name_r empty) Return true if package name_r owns file file_r (name_r nonempty).
Definition at line 1363 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByFile(). Referenced by zypp::target::TargetImpl::providesFile(). |
|
Return name of package owning file or empty string if no installed package owns file.
Definition at line 1386 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByFile(). Referenced by zypp::target::TargetImpl::whoOwnsFile(). |
|
Return true if at least one package provides a certain tag.
Definition at line 1403 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByProvides(). |
|
Return true if at least one package requires a certain tag.
Definition at line 1417 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByRequiredBy(). |
|
Return true if at least one package conflicts with a certain tag.
Definition at line 1431 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::findByConflicts(). |
|
Return true if package is installed.
|
|
Get an installed packages data from rpmdb. Package is identified by name. Data returned via result are NULL, if packge is not installed (PMError is not set), or RPM database could not be read (PMError is set).
Referenced by pubkeys(). |
|
Get an installed packages data from rpmdb. Package is identified by name and edition. Data returned via result are NULL, if packge is not installed (PMError is not set), or RPM database could not be read (PMError is set).
Definition at line 1477 of file RpmDb.cc. References zypp::target::rpm::librpmDb::db_const_iterator::dbError(), zypp::target::rpm::librpmDb::db_const_iterator::findPackage(), and ZYPP_THROW. |
|
Create a package from RpmHeader return NULL on error.
Definition at line 1108 of file RpmDb.cc. References zypp::filesystem::Pathname::empty(), name, zypp::CapFactory::parse(), zypp::Dep::PROVIDES, WAR, and ZYPP_CAUGHT. |
|
iterates through zypp keyring and import all non existant keys into rpm keyring
Definition at line 914 of file RpmDb.cc. References MIL, and pubkeys(). Referenced by initDatabase(), and zypp::target::rpm::KeyRingSignalReceiver::trustedKeyAdded(). |
|
insert all rpm trusted keys into zypp trusted keyring
Definition at line 858 of file RpmDb.cc. References MIL, pubkeyEditions(), and zypp::str::toUpper(). Referenced by initDatabase(), and zypp::target::rpm::KeyRingSignalReceiver::trustedKeyAdded(). |
|
Run rpm with the specified arguments and handle stderr.
Definition at line 1681 of file RpmDb.cc. References _dbPath, _root, zypp::filesystem::Pathname::asString(), zypp::filesystem::copy(), zypp::target::rpm::librpmDb::dbRelease(), exit_code, initialized(), process, and ZYPP_THROW. Referenced by doInstallPackage(), doRebuildDatabase(), and importPubkey(). |
|
Read a line from the general rpm query.
Referenced by doInstallPackage(), doRebuildDatabase(), and importPubkey(). |
|
Return the exit status of the general rpm process, closing the connection if not already done.
Definition at line 1746 of file RpmDb.cc. References zypp::ExternalProgram::close(), exit_code, zypp::ExternalProgram::kill(), and process. |
|
Forcably kill the system process.
Definition at line 1765 of file RpmDb.cc. References zypp::ExternalProgram::kill(), and process. |
|
handle rpm messages like "/etc/testrc saved as /etc/testrc.rpmorig"
|
|
Check rpm with rpm --checksig.
|
|
install rpm package
Definition at line 1869 of file RpmDb.cc. References zypp::target::rpm::RpmInstallReport::ABORT, doInstallPackage(), zypp::target::rpm::RpmInstallReport::IGNORE, report, and ZYPP_RETHROW. Referenced by zypp::target::TargetImpl::commit(). |
|
remove rpm package
Referenced by removePackage(). |
|
Definition at line 2007 of file RpmDb.cc. References removePackage(). |
|
get backup dir for rpm config files
Definition at line 492 of file RpmDb.h. References _backuppath. |
|
create tar.gz of all changed files in a Package
Referenced by backupPackage(), and doInstallPackage(). |
|
queries file for name and then calls above backupPackage function. For convenience.
Definition at line 2175 of file RpmDb.cc. References backupPackage(), zypp::target::rpm::RpmHeader::NOSIGNATURE, and zypp::target::rpm::RpmHeader::readPackage(). |
|
set path where package backups are stored
Definition at line 2315 of file RpmDb.cc. References _backuppath. |
|
whether to create package backups during install or removal
Definition at line 524 of file RpmDb.h. References _packagebackups. |
|
determine which files of an installed package have been modified.
|
|
create error description of bits set according to checkPackageResult
Definition at line 2109 of file RpmDb.cc. References _, CHK_GPGSIG_MISSING, CHK_INCORRECT_FILEMD5, CHK_INCORRECT_GPGSIG, CHK_INCORRECT_PKGMD5, CHK_INCORRECT_VERSION, CHK_MD5SUM_MISSING, and CHK_OTHER_FAILURE. |
|
Dump debug info.
Reimplemented from zypp::base::ReferenceCounted. Definition at line 368 of file RpmDb.cc. References _dbPath, _dbStateInfo, _root, DbSI_HAVE_V3, DbSI_HAVE_V3TOV4, DbSI_HAVE_V4, DbSI_MADE_V3TOV4, DbSI_MADE_V4, DbSI_MODIFIED_V4, DbSI_NO_INIT, ENUM_OUT, and zypp::target::rpm::stringPath(). |
|
Set logfile for progress log. Empty filename to disable logging. Definition at line 242 of file RpmDb.cc. References zypp::target::rpm::RpmDb::Logfile::setFname(). Referenced by zypp::target::TargetImpl::setInstallationLogfile(). |
|
|
|
Definition at line 1895 of file RpmDb.cc. References _packagebackups, zypp::filesystem::Pathname::asString(), backupPackage(), ERR, FAILIFNOTINITIALIZED, MIL, modifyDatabase(), report, RPMINST_FORCE, RPMINST_IGNORESIZE, RPMINST_JUSTDB, RPMINST_NODEPS, RPMINST_NODIGEST, RPMINST_NODOCS, RPMINST_NOSCRIPTS, RPMINST_NOSIGNATURE, RPMINST_NOUPGRADE, RPMINST_TEST, run_rpm(), zypp::ExternalProgram::Stderr_To_Stdout, and systemReadLine(). Referenced by installPackage(). |
|
Definition at line 1200 of file RpmDb.cc. References zypp::target::rpm::RpmDb::Packages::_list, _packages, zypp::target::rpm::RpmDb::Packages::clear(), zypp::target::rpm::librpmDb::db_const_iterator::dbError(), ERR, packagesValid(), and ZYPP_THROW. Referenced by getPackages(). |
|
Definition at line 806 of file RpmDb.cc. References _packages, zypp::target::rpm::RpmDb::Packages::_valid, dbPath(), zypp::filesystem::Pathname::extend(), FAILIFNOTINITIALIZED, zypp::str::form(), zypp::ExternalProgram::getpid(), MIL, zypp::filesystem::PathInfo::path(), process, report, root(), run_rpm(), zypp::filesystem::PathInfo::size(), zypp::ExternalProgram::Stderr_To_Stdout, systemReadLine(), and WAR. Referenced by rebuildDatabase(). |
|
|
|
Internal state info.
Definition at line 85 of file RpmDb.h. Referenced by closeDatabase(), dumpOn(), initDatabase(), and modifyDatabase(). |
|
Root directory for all operations.
Definition at line 90 of file RpmDb.h. Referenced by closeDatabase(), dumpOn(), initDatabase(), initialized(), modifyDatabase(), root(), and run_rpm(). |
|
Directory that contains the rpmdb.
Definition at line 95 of file RpmDb.h. Referenced by closeDatabase(), dbPath(), dumpOn(), initDatabase(), modifyDatabase(), and run_rpm(). |
|
Definition at line 220 of file RpmDb.h. Referenced by closeDatabase(), doGetPackages(), doRebuildDatabase(), importPubkey(), modifyDatabase(), packagesValid(), and ~RpmDb(). |
|
|
|
The connection to the rpm process.
Definition at line 345 of file RpmDb.h. Referenced by doRebuildDatabase(), RpmDb(), run_rpm(), systemKill(), systemStatus(), and ~RpmDb(). |
|
The exit code of the rpm process, or -1 if not yet known.
Definition at line 382 of file RpmDb.h. Referenced by RpmDb(), run_rpm(), and systemStatus(). |
|
/var/adm/backup
Definition at line 385 of file RpmDb.h. Referenced by getBackupPath(), and setBackupPath(). |
|
create package backups?
Definition at line 388 of file RpmDb.h. Referenced by createPackageBackups(), and doInstallPackage(). |
|
whether <_root>/<WARNINGMAILPATH> was already created
|