15#include <sys/utsname.h> 
   16#if __GLIBC_PREREQ (2,16) 
   20#include <solv/solvversion.h> 
   25#include <zypp-core/APIConfig.h> 
   28#include <zypp-core/base/InputStream> 
   35#include <zypp-core/parser/IniDict> 
   40#include <zypp-media/MediaConfig> 
   46#undef ZYPP_BASE_LOGGER_LOGGROUP 
   47#define ZYPP_BASE_LOGGER_LOGGROUP "zconfig" 
   67#   if defined(__linux__) && defined(__x86_64__) 
   68    static inline void cpuid(uint32_t op, uint32_t op2, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
 
   72        : 
"=a" (*eax), 
"=b" (*ebx), 
"=c" (*ecx), 
"=d" (*edx)
 
   73        : 
"a" (op), 
"c" (op2));
 
   79    #define bit_SSE3        (1 << 0) 
   80    #define bit_SSSE3       (1 << 9) 
   81    #define bit_FMA         (1 << 12) 
   82    #define bit_CMPXCHG16B  (1 << 13) 
   83    #define bit_SSE4_1      (1 << 19) 
   84    #define bit_SSE4_2      (1 << 20) 
   85    #define bit_MOVBE       (1 << 22) 
   86    #define bit_POPCNT      (1 << 23) 
   87    #define bit_OSXSAVE     (1 << 27) 
   88    #define bit_AVX         (1 << 28) 
   89    #define bit_F16C        (1 << 29) 
   93    #define bit_LAHF_LM     (1 << 0) 
   94    #define bit_LZCNT       (1 << 5) 
   98    #define bit_BMI         (1 << 3) 
   99    #define bit_AVX2        (1 << 5) 
  100    #define bit_BMI2        (1 << 8) 
  101    #define bit_AVX512F     (1 << 16) 
  102    #define bit_AVX512DQ    (1 << 17) 
  103    #define bit_AVX512CD    (1 << 28) 
  104    #define bit_AVX512BW    (1 << 30) 
  105    #define bit_AVX512VL    (1u << 31) 
  107    static int get_x86_64_level(
void)
 
  111        unsigned int op_1_ecx = 0, op_80000001_ecx = 0, op_7_ebx = 0, unused = 0;
 
  112        cpuid(1, 0, &unused, &unused, &op_1_ecx, &unused);
 
  113        cpuid(0x80000001, 0, &unused, &unused, &op_80000001_ecx, &unused);
 
  114        cpuid(7, 0, &unused, &op_7_ebx, &unused, &unused);
 
  116        const unsigned int op_1_ecx_lv2 = bit_SSE3 | bit_SSSE3 | bit_CMPXCHG16B | bit_SSE4_1 | bit_SSE4_2 | bit_POPCNT;
 
  117        if ((op_1_ecx & op_1_ecx_lv2) == op_1_ecx_lv2 && (op_80000001_ecx & bit_LAHF_LM))
 
  120        const unsigned int op_1_ecx_lv3 = bit_FMA | bit_MOVBE | bit_OSXSAVE | bit_AVX | bit_F16C;
 
  121        const unsigned int op_7_ebx_lv3 = bit_BMI | bit_AVX2 | bit_BMI2;
 
  122        if (level == 2 && (op_1_ecx & op_1_ecx_lv3) == op_1_ecx_lv3 && (op_7_ebx & op_7_ebx_lv3) == op_7_ebx_lv3
 
  123            && (op_80000001_ecx & bit_LZCNT))
 
  126        const unsigned int op_7_ebx_lv4 = bit_AVX512F | bit_AVX512DQ | bit_AVX512CD | bit_AVX512BW | bit_AVX512VL;
 
  127        if (level == 3 && (op_7_ebx & op_7_ebx_lv4) == op_7_ebx_lv4)
 
  137    Arch _autodetectSystemArchitecture()
 
  139      struct ::utsname buf;
 
  140      if ( ::uname( &buf ) < 0 )
 
  142        ERR << 
"Can't determine system architecture" << endl;
 
  146      Arch architecture( buf.machine );
 
  147      MIL << 
"Uname architecture is '" << buf.machine << 
"'" << endl;
 
  149      if ( architecture == Arch_x86_64 )
 
  151#if     defined(__linux__) && defined(__x86_64__) 
  152        switch ( get_x86_64_level() )
 
  155            architecture = Arch_x86_64_v2;
 
  156            WAR << 
"CPU has 'x86_64': architecture upgraded to '" << architecture << 
"'" << endl;
 
  159            architecture = Arch_x86_64_v3;
 
  160            WAR << 
"CPU has 'x86_64': architecture upgraded to '" << architecture << 
"'" << endl;
 
  163            architecture = Arch_x86_64_v4;
 
  164            WAR << 
"CPU has 'x86_64': architecture upgraded to '" << architecture << 
"'" << endl;
 
  169      else if ( architecture == Arch_i686 )
 
  174        std::ifstream cpuinfo( 
"/proc/cpuinfo" );
 
  181              if (    in->find( 
"cx8" ) == std::string::npos
 
  182                   || in->find( 
"cmov" ) == std::string::npos )
 
  184                architecture = Arch_i586;
 
  185                WAR << 
"CPU lacks 'cx8' or 'cmov': architecture downgraded to '" << architecture << 
"'" << endl;
 
  193          ERR << 
"Cant open " << 
PathInfo(
"/proc/cpuinfo") << endl;
 
  196      else if ( architecture == Arch_sparc || architecture == Arch_sparc64 )
 
  199        std::ifstream cpuinfo( 
"/proc/cpuinfo" );
 
  206              if ( in->find( 
"sun4v" ) != std::string::npos )
 
  208                architecture = ( architecture == Arch_sparc64 ? Arch_sparc64v : Arch_sparcv9v );
 
  209                WAR << 
"CPU has 'sun4v': architecture upgraded to '" << architecture << 
"'" << endl;
 
  211              else if ( in->find( 
"sun4u" ) != std::string::npos )
 
  213                architecture = ( architecture == Arch_sparc64 ? Arch_sparc64 : Arch_sparcv9 );
 
  214                WAR << 
"CPU has 'sun4u': architecture upgraded to '" << architecture << 
"'" << endl;
 
  216              else if ( in->find( 
"sun4m" ) != std::string::npos )
 
  218                architecture = Arch_sparcv8;
 
  219                WAR << 
"CPU has 'sun4m': architecture upgraded to '" << architecture << 
"'" << endl;
 
  227          ERR << 
"Cant open " << 
PathInfo(
"/proc/cpuinfo") << endl;
 
  230      else if ( architecture == Arch_armv8l || architecture == Arch_armv7l || architecture == Arch_armv6l )
 
  232        std::ifstream platform( 
"/etc/rpm/platform" );
 
  239              architecture = Arch_armv8hl;
 
  240              WAR << 
"/etc/rpm/platform contains armv8hl-: architecture upgraded to '" << architecture << 
"'" << endl;
 
  245              architecture = Arch_armv7hl;
 
  246              WAR << 
"/etc/rpm/platform contains armv7hl-: architecture upgraded to '" << architecture << 
"'" << endl;
 
  251              architecture = Arch_armv6hl;
 
  252              WAR << 
"/etc/rpm/platform contains armv6hl-: architecture upgraded to '" << architecture << 
"'" << endl;
 
  258#if __GLIBC_PREREQ (2,16) 
  259      else if ( architecture == Arch_ppc64 )
 
  261        const char * platform = (
const char *)getauxval( AT_PLATFORM );
 
  263        if ( platform && sscanf( platform, 
"power%d", &powerlvl ) == 1 && powerlvl > 6 )
 
  264          architecture = Arch_ppc64p7;
 
  287    Locale _autodetectTextLocale()
 
  290      const char * envlist[] = { 
"LC_ALL", 
"LC_MESSAGES", 
"LANG", NULL };
 
  291      for ( 
const char ** envvar = envlist; *envvar; ++envvar )
 
  293        const char * envlang = getenv( *envvar );
 
  296          std::string envstr( envlang );
 
  297          if ( envstr != 
"POSIX" && envstr != 
"C" )
 
  302              MIL << 
"Found " << *envvar << 
"=" << envstr << endl;
 
  309      MIL << 
"Default text locale is '" << ret << 
"'" << endl;
 
  310#warning HACK AROUND BOOST_TEST_CATCH_SYSTEM_ERRORS 
  311      setenv( 
"BOOST_TEST_CATCH_SYSTEM_ERRORS", 
"no", 1 );
 
  315    inline Pathname _autodetectZyppConfPath()
 
  317      const char *env_confpath = getenv( 
"ZYPP_CONF" );
 
  318      return env_confpath ? env_confpath : 
"/etc/zypp/zypp.conf";
 
  337        { 
set( std::move(newval_r) ); 
return *
this; }
 
 
  349        { 
_val = std::move(newval_r); }
 
 
 
  368        { this->
set( std::move(newval_r) ); 
return *
this; }
 
 
  384        { 
_default.set( std::move(newval_r) ); }
 
 
 
  419      bool consume( 
const std::string & entry, 
const std::string & value )
 
  421        if ( entry == 
"solver.focus" )
 
  425        else if ( entry == 
"solver.onlyRequires" )
 
  429        else if ( entry == 
"solver.allowVendorChange" )
 
  433        else if ( entry == 
"solver.dupAllowDowngrade" )
 
  437        else if ( entry == 
"solver.dupAllowNameChange" )
 
  441        else if ( entry == 
"solver.dupAllowArchChange" )
 
  445        else if ( entry == 
"solver.dupAllowVendorChange" )
 
  449        else if ( entry == 
"solver.cleandepsOnRemove" )
 
  453        else if ( entry == 
"solver.upgradeTestcasesToKeep" )
 
  457        else if ( entry == 
"solver.upgradeRemoveDroppedPackages" )
 
 
 
  505        MIL << 
"libzypp: " LIBZYPP_VERSION_STRING << 
" (" << LIBZYPP_CODESTREAM << 
")" << endl;
 
  513            const std::string& section(*sit);
 
  519              std::string entry(it->first);
 
  520              std::string value(it->second);
 
  522              if ( 
_mediaConf.setConfigValue( section, entry, value ) )
 
  526              if ( section == 
"main" )
 
  531                if ( entry == 
"lock_timeout" ) {
 
  534                else if ( entry == 
"arch" )
 
  539                    WAR << 
"Overriding system architecture (" << 
cfg_arch << 
"): " << carch << endl;
 
  543                else if ( entry == 
"cachedir" )
 
  547                else if ( entry == 
"metadatadir" )
 
  551                else if ( entry == 
"solvfilesdir" )
 
  555                else if ( entry == 
"packagesdir" )
 
  559                else if ( entry == 
"configdir" )
 
  563                else if ( entry == 
"reposdir" )
 
  567                else if ( entry == 
"servicesdir" )
 
  571                else if ( entry == 
"varsdir" )
 
  575                else if ( entry == 
"repo.add.probe" )
 
  579                else if ( entry == 
"repo.refresh.delay" )
 
  583                else if ( entry == 
"repo.refresh.locales" )
 
  585                  std::vector<std::string> tmp;
 
  586                  str::split( value, back_inserter( tmp ), 
", \t" );
 
  588                  boost::function<
Locale(
const std::string &)> transform(
 
  589                    [](
const std::string & str_r)->
Locale{ 
return Locale(str_r); }
 
  592                                             make_transform_iterator( tmp.end(), transform ) );
 
  594                else if ( entry == 
"download.use_deltarpm" )
 
  598                else if ( entry == 
"download.use_deltarpm.always" )
 
  602                else if ( entry == 
"download.media_preference" )
 
  606                else if ( entry == 
"download.media_mountdir" )
 
  610                else if ( entry == 
"download.use_geoip_mirror") {
 
  613                else if ( entry == 
"commit.downloadMode" )
 
  617                else if ( entry == 
"gpgcheck" )
 
  621                else if ( entry == 
"repo_gpgcheck" )
 
  625                else if ( entry == 
"pkg_gpgcheck" )
 
  629                else if ( entry == 
"vendordir" )
 
  633                else if ( entry == 
"multiversiondir" )
 
  637                else if ( entry == 
"multiversion.kernels" )
 
  641                else if ( entry == 
"solver.checkSystemFile" )
 
  645                else if ( entry == 
"solver.checkSystemFileDir" )
 
  649                else if ( entry == 
"multiversion" )
 
  654                else if ( entry == 
"locksfile.path" )
 
  658                else if ( entry == 
"locksfile.apply" )
 
  662                else if ( entry == 
"update.datadir" )
 
  667                else if ( entry == 
"update.scriptsdir" )
 
  672                else if ( entry == 
"update.messagessdir" )
 
  677                else if ( entry == 
"update.messages.notify" )
 
  681                else if ( entry == 
"rpm.install.excludedocs" )
 
  686                else if ( entry == 
"history.logfile" )
 
  690                else if ( entry == 
"techpreview.ZYPP_SINGLE_RPMTRANS" )
 
  692                  DBG << 
"techpreview.ZYPP_SINGLE_RPMTRANS=" << value << endl;
 
  693                  ::setenv( 
"ZYPP_SINGLE_RPMTRANS", value.c_str(), 1 );
 
  695                else if ( entry == 
"techpreview.ZYPP_MEDIANETWORK" )
 
  697                  DBG << 
"techpreview.ZYPP_MEDIANETWORK=" << value << endl;
 
  698                  ::setenv( 
"ZYPP_MEDIANETWORK", value.c_str(), 1 );
 
  711        if ( getenv( 
"ZYPP_TESTSUITE_FAKE_ARCH" ) )
 
  713          Arch carch( getenv( 
"ZYPP_TESTSUITE_FAKE_ARCH" ) );
 
  716            WAR << 
"ZYPP_TESTSUITE_FAKE_ARCH: Overriding system architecture (" << 
cfg_arch << 
"): " << carch << endl;
 
  720        MIL << 
"ZConfig singleton created." << endl;
 
 
  747        MIL << 
"notifyTargetChanged (" << newRoot << 
")" << endl;
 
  749        if ( newRoot.emptyOrRoot() ) {
 
  755          Pathname newConf { newRoot/_autodetectZyppConfPath() };
 
  756          if ( 
PathInfo(newConf).isExist() ) {
 
  758            for ( 
const auto & [entry,value] : dict.
entries( 
"main" ) ) {
 
  759              (*_currentTargetDefaults).consume( entry, value );
 
 
  851      using SpecMap = std::map<Pathname, MultiversionSpec>;
 
  859        if ( root_r.
empty() )
 
  861        bool cacheHit = 
_specMap.count( root_r );
 
  871          if ( root_r == 
"/" || 
scanConfAt( root_r, ret, zConfImpl_r ) == 0 )
 
  874          using zypp::operator<<;
 
  875          MIL << 
"MultiversionSpec '" << root_r << 
"' = " << ret << endl;
 
 
  886        static const str::regex rx( 
"^multiversion *= *(.*)" );
 
  889                                [&]( 
int num_r, std::string line_r )->
bool 
 
  904        if ( multiversionDir.
empty() )
 
  910                                [&spec_r]( 
const Pathname & dir_r, 
const char *
const & name_r )->
bool 
  912                                  MIL << 
"Parsing " << dir_r/name_r << endl;
 
  914                                                          [&spec_r]( 
int num_r, std::string line_r )->
bool 
  916                                                            DBG << 
"  found " << line_r << endl;
 
  917                                                            spec_r.insert( std::move(line_r) );
 
 
 
 
  967    const char * 
env = getenv(
"ZYPP_LOCK_TIMEOUT");
 
  971    return _pimpl->cfg_lockTimeout;
 
 
  975  { 
return _pimpl->notifyTargetChanged(); }
 
 
  978  { 
return _pimpl->_autodetectSystemRoot(); }
 
 
  982    return ( 
_pimpl->cfg_repo_mgr_root_path.empty()
 
 
  987  { 
_pimpl->cfg_repo_mgr_root_path = root; }
 
 
  990  { 
_pimpl->_announced_root_path = root_r; }
 
 
 1000    static Arch _val( _autodetectSystemArchitecture() );
 
 
 1005  { 
return _pimpl->cfg_arch; }
 
 
 1009    if ( arch_r != 
_pimpl->cfg_arch )
 
 1011      WAR << 
"Overriding system architecture (" << 
_pimpl->cfg_arch << 
"): " << arch_r << endl;
 
 1012      _pimpl->cfg_arch = arch_r;
 
 
 1024    static Locale _val( _autodetectTextLocale() );
 
 
 1029  { 
return _pimpl->cfg_textLocale; }
 
 
 1033    if ( locale_r != 
_pimpl->cfg_textLocale )
 
 1035      WAR << 
"Overriding text locale (" << 
_pimpl->cfg_textLocale << 
"): " << locale_r << endl;
 
 1036      _pimpl->cfg_textLocale = locale_r;
 
 
 1047  { 
return !
_pimpl->userData.empty(); }
 
 
 1050  { 
return _pimpl->userData; }
 
 
 1054    for_( ch, str_r.begin(), str_r.end() )
 
 1056      if ( *ch < 
' ' && *ch != 
'\t' )
 
 1058        ERR << 
"New user data string rejectded: char " << (int)*ch << 
" at position " <<  (ch - str_r.begin()) << endl;
 
 1062    MIL << 
"Set user data string to '" << str_r << 
"'" << endl;
 
 1063    _pimpl->userData = str_r;
 
 
 1071    return ( 
_pimpl->cfg_cache_path.get().empty()
 
 
 1082    _pimpl->cfg_cache_path = path_r;
 
 
 1087    return ( 
_pimpl->cfg_metadata_path.get().empty()
 
 
 1093    _pimpl->cfg_metadata_path = path_r;
 
 
 1098    return ( 
_pimpl->cfg_solvfiles_path.get().empty()
 
 
 1104    _pimpl->cfg_solvfiles_path = path_r;
 
 
 1109    return ( 
_pimpl->cfg_packages_path.get().empty()
 
 
 1115    _pimpl->cfg_packages_path = path_r;
 
 
 1119  { 
return _pimpl->cfg_cache_path.getDefault().empty() ? 
Pathname(
"/var/cache/zypp") : 
_pimpl->cfg_cache_path.getDefault(); }
 
 
 1134    return ( 
_pimpl->cfg_config_path.empty()
 
 
 1140    return ( 
_pimpl->cfg_known_repos_path.empty()
 
 
 1146    return ( 
_pimpl->cfg_known_services_path.empty()
 
 
 1157  { 
_pimpl->geoipEnabled = enable; }
 
 
 1160  { 
return _pimpl->geoipEnabled; }
 
 
 1166  { 
return _pimpl->geoipHosts; }
 
 
 1170    return ( 
_pimpl->cfg_vars_path.empty()
 
 
 1176    return ( 
_pimpl->cfg_vendor_path.empty()
 
 
 1182    return ( 
_pimpl->locks_file.empty()
 
 
 1189  { 
return _pimpl->repo_add_probe; }
 
 
 1192  { 
return _pimpl->repo_refresh_delay; }
 
 
 1198  { 
return _pimpl->repoLabelIsAlias; }
 
 
 1201  { 
_pimpl->repoLabelIsAlias = yesno_r; }
 
 
 1204  { 
return _pimpl->download_use_deltarpm; }
 
 
 1210  { 
return _pimpl->download_media_prefer_download; }
 
 
 1213  { 
_pimpl->download_media_prefer_download.set( yesno_r ); }
 
 
 1216  { 
_pimpl->download_media_prefer_download.restoreToDefault(); }
 
 
 1219  { 
return _pimpl->_mediaConf.download_max_concurrent_connections(); }
 
 
 1222  { 
return _pimpl->_mediaConf.download_min_download_speed(); }
 
 
 1225  { 
return _pimpl->_mediaConf.download_max_download_speed(); }
 
 
 1228  { 
return _pimpl->_mediaConf.download_max_silent_tries(); }
 
 
 1231  { 
return _pimpl->_mediaConf.download_transfer_timeout(); }
 
 
 1238  { 
return _pimpl->commit_downloadMode; }
 
 
 1270  { 
return ( 
_pimpl->solver_checkSystemFile.empty()
 
 
 1274  { 
return ( 
_pimpl->solver_checkSystemFileDir.empty()
 
 
 1280    inline void sigMultiversionSpecChanged()
 
 1293  { 
return _pimpl->apply_locks_file; }
 
 
 1320  { 
return _pimpl->updateMessagesNotify; }
 
 
 1323  { 
_pimpl->updateMessagesNotify.set( val_r ); }
 
 
 1326  { 
_pimpl->updateMessagesNotify.restoreToDefault(); }
 
 
 1331  { 
return _pimpl->rpmInstallFlags; }
 
 
 1336    return ( 
_pimpl->history_log_path.empty() ?
 
 
 1342    return _pimpl->_mediaConf.credentialsGlobalDir();
 
 
 1347    return _pimpl->_mediaConf.credentialsGlobalFile();
 
 
 1353  { 
return "system-release"; }
 
 
 1358  { 
return _pimpl->pluginsPath.get(); }
 
 
 1362    return _pimpl->cfg_kernel_keep_spec;
 
 
 1369    str << 
"libzypp: " LIBZYPP_VERSION_STRING << 
" (" << LIBZYPP_CODESTREAM << 
")" << endl;
 
 1371    str << 
"libsolv: " << solv_version;
 
 1372    if ( ::strcmp( solv_version, LIBSOLV_VERSION_STRING ) )
 
 1373      str << 
" (built against " << LIBSOLV_VERSION_STRING << 
")";
 
 1376    str << 
"zypp.conf: '" << 
_pimpl->_parsedZyppConf << 
"'" << endl;
 
 
MapKVIteratorTraits< SectionSet >::Key_const_iterator section_const_iterator
EntrySet::const_iterator entry_const_iterator
'Language[_Country]' codes.
static const Locale enCode
Last resort "en".
static Pathname assertprefix(const Pathname &root_r, const Pathname &path_r)
Return path_r prefixed with root_r, unless it is already prefixed.
LocaleSet requestedLocales() const
Languages to be supported by the system.
Pathname cfg_multiversion_path
DefaultOption< Pathname > download_mediaMountdir
DefaultOption< Pathname > cfg_metadata_path
Pathname cfg_known_repos_path
Pathname cfg_known_services_path
Pathname _autodetectSystemRoot() const
bsc#1237044: Provide announceSystemRoot to allow commands using –root without launching a Target.
Impl & operator=(const Impl &)=delete
Impl & operator=(Impl &&)=delete
DefaultOption< Pathname > cfg_packages_path
bool download_use_deltarpm_always
Pathname _parsedZyppConf
Remember any parsed zypp.conf.
void notifyTargetChanged()
Pathname solver_checkSystemFile
Impl(const Impl &)=delete
MultiversionMap _multiversionMap
Pathname history_log_path
const TargetDefaults & targetDefaults() const
MultiversionSpec & getMultiversion() const
LocaleSet repoRefreshLocales
DefaultOption< Pathname > cfg_cache_path
std::vector< std::string > geoipHosts
TargetDefaults & targetDefaults()
Pathname _announced_root_path
Option< Pathname > pluginsPath
std::string cfg_kernel_keep_spec
DefaultOption< TriBool > repoGpgCheck
unsigned repo_refresh_delay
Option< DownloadMode > commit_downloadMode
std::optional< TargetDefaults > _currentTargetDefaults
TargetDefaults while –root.
MultiversionSpec & multiversion()
DefaultOption< bool > download_media_prefer_download
bool download_use_deltarpm
std::set< std::string > MultiversionSpec
Pathname solver_checkSystemFileDir
TargetDefaults _initialTargetDefaults
Initial TargetDefaults from /.
target::rpm::RpmInstFlags rpmInstallFlags
const MultiversionSpec & multiversion() const
Pathname cfg_repo_mgr_root_path
DefaultOption< TriBool > pkgGpgCheck
DefaultOption< std::string > updateMessagesNotify
DefaultOption< Pathname > cfg_solvfiles_path
DefaultOption< bool > gpgCheck
bool hasUserData() const
Whether a (non empty) user data sting is defined.
bool solver_cleandepsOnRemove() const
Whether removing a package should also remove no longer needed requirements.
std::string userData() const
User defined string value to be passed to log, history, plugins...
Pathname knownServicesPath() const
Path where the known services .service files are kept (configPath()/services.d).
void removeMultiversionSpec(const std::string &name_r)
Pathname repoPackagesPath() const
Path where the repo packages are downloaded and kept (repoCachePath()/packages).
unsigned repo_refresh_delay() const
Amount of time in minutes that must pass before another refresh.
Arch systemArchitecture() const
The system architecture zypp uses.
Locale textLocale() const
The locale for translated texts zypp uses.
const std::vector< std::string > geoipHostnames() const
All hostnames we want to rewrite using the geoip feature.
ZConfig(const ZConfig &)=delete
static Pathname update_dataPath()
Path where the update items are kept (/var/adm)
ResolverFocus solver_focus() const
The resolver's general attitude when resolving jobs.
Pathname builtinRepoSolvfilesPath() const
The builtin config file value.
Pathname pluginsPath() const
Defaults to /usr/lib/zypp/plugins.
Pathname repoManagerRoot() const
The RepoManager root directory.
void resetRepoGpgCheck()
Reset to the zconfig default.
bool gpgCheck() const
Turn signature checking on/off (on)
Pathname knownReposPath() const
Path where the known repositories .repo files are kept (configPath()/repos.d).
long download_transfer_timeout() const
Maximum time in seconds that you allow a transfer operation to take.
void setRepoManagerRoot(const Pathname &root)
Sets the RepoManager root directory.
bool solver_dupAllowArchChange() const
DUP tune: Whether to allow package arch changes upon DUP.
void setTextLocale(const Locale &locale_r)
Set the preferred locale for translated texts.
bool solverUpgradeRemoveDroppedPackages() const
Whether dist upgrade should remove a products dropped packages (true).
void notifyTargetChanged()
internal
static Locale defaultTextLocale()
The autodetected preferred locale for translated texts.
Pathname download_mediaMountdir() const
Path where media are preferably mounted or downloaded.
static Pathname update_scriptsPath()
Path where the update scripts are stored ( /var/adm/update-scripts )
void resetSolverUpgradeRemoveDroppedPackages()
Reset solverUpgradeRemoveDroppedPackages to the zypp.conf default.
bool apply_locks_file() const
Whether locks file should be read and applied after start (true)
bool solver_allowVendorChange() const
Whether vendor check is by default enabled.
void set_default_download_mediaMountdir()
Reset to zypp.cong default.
Pathname repoCachePath() const
Path where the caches are kept (/var/cache/zypp)
void setPkgGpgCheck(TriBool val_r)
Change the value.
Pathname needrebootPath() const
Path where the custom needreboot config files are kept (configPath()/needreboot.d).
bool setUserData(const std::string &str_r)
Set a new userData string.
Pathname systemRoot() const
The target root directory.
long download_max_silent_tries() const
Maximum silent tries.
bool repo_add_probe() const
Whether repository urls should be probed.
target::rpm::RpmInstFlags rpmInstallFlags() const
The default target::rpm::RpmInstFlags for ZYppCommitPolicy.
void setUpdateMessagesNotify(const std::string &val_r)
Set a new command definition (see update.messages.notify in zypp.conf).
unsigned solver_upgradeTestcasesToKeep() const
When committing a dist upgrade (e.g.
Pathname repoMetadataPath() const
Path where the repo metadata is downloaded and kept (repoCachePath()/raw).
Pathname geoipCachePath() const
Path where the geoip caches are kept (/var/cache/zypp/geoip)
Pathname vendorPath() const
Directory for equivalent vendor definitions (configPath()/vendors.d)
long download_min_download_speed() const
Minimum download speed (bytes per second) until the connection is dropped.
DownloadMode commit_downloadMode() const
Commit download policy to use as default.
Pathname needrebootFile() const
Path of the default needreboot config file (configPath()/needreboot).
void setGpgCheck(bool val_r)
Change the value.
bool solver_dupAllowVendorChange() const
DUP tune: Whether to allow package vendor changes upon DUP.
void setGeoipEnabled(bool enable=true)
Enables or disables the use of the geoip feature of download.opensuse.org.
Pathname locksFile() const
Path where zypp can find or create lock file (configPath()/locks)
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
Pointer to implementation.
Pathname repoSolvfilesPath() const
Path where the repo solv files are created and kept (repoCachePath()/solv).
bool geoipEnabled() const
Returns true if zypp should use the geoip feature of download.opensuse.org.
static Pathname update_messagesPath()
Path where the update messages are stored ( /var/adm/update-messages )
Pathname historyLogFile() const
Path where ZYpp install history is logged.
void setSystemArchitecture(const Arch &arch_r)
Override the zypp system architecture.
TriBool pkgGpgCheck() const
Check rpm package signatures (indeterminate - according to gpgcheck)
static ZConfig & instance()
Singleton ctor.
void setRepoPackagesPath(const Pathname &path_r)
Set a new path as the default repo cache path.
void setRepoSolvfilesPath(const Pathname &path_r)
Set a new path as the default repo cache path.
void resetUpdateMessagesNotify()
Reset to the zypp.conf default.
std::ostream & about(std::ostream &str) const
Print some detail about the current libzypp version.
const std::set< std::string > & multiversionSpec() const
void set_download_mediaMountdir(Pathname newval_r)
Set alternate value.
bool download_use_deltarpm() const
Whether to consider using a deltarpm when downloading a package.
TriBool repoGpgCheck() const
Check repo matadata signatures (indeterminate - according to gpgcheck)
void set_download_media_prefer_download(bool yesno_r)
Set download_media_prefer_download to a specific value.
std::string updateMessagesNotify() const
Command definition for sending update messages.
void addMultiversionSpec(const std::string &name_r)
Pathname builtinRepoCachePath() const
The builtin config file value.
Pathname builtinRepoPackagesPath() const
The builtin config file value.
Pathname solver_checkSystemFile() const
File in which dependencies described which has to be fulfilled for a running system.
Pathname builtinRepoMetadataPath() const
The builtin config file value.
void set_default_download_media_prefer_download()
Set download_media_prefer_download to the configfiles default.
long lockTimeout() const
The number of seconds to wait for the zypp lock to become available.
Pathname solver_checkSystemFileDir() const
Directory, which may or may not contain files in which dependencies described which has to be fulfill...
void resetGpgCheck()
Reset to the zconfig default.
void setSolverUpgradeRemoveDroppedPackages(bool val_r)
Set solverUpgradeRemoveDroppedPackages to val_r.
Pathname configPath() const
Path where the configfiles are kept (/etc/zypp).
static Arch defaultSystemArchitecture()
The autodetected system architecture.
Pathname pubkeyCachePath() const
Path where the pubkey caches.
long download_max_concurrent_connections() const
Maximum number of concurrent connections for a single transfer.
void resetPkgGpgCheck()
Reset to the zconfig default.
void announceSystemRoot(const Pathname &root_r)
Announce a target root directory without launching the Target.
bool solver_onlyRequires() const
Solver regards required packages,patterns,... only.
Pathname varsPath() const
Path containing custom repo variable definitions (configPath()/vars.d).
bool solver_dupAllowNameChange() const
DUP tune: Whether to follow package renames upon DUP.
bool repoLabelIsAlias() const
Whether to use repository alias or name in user messages (progress, exceptions, .....
void clearMultiversionSpec()
LocaleSet repoRefreshLocales() const
List of locales for which translated package descriptions should be downloaded.
long download_max_download_speed() const
Maximum download speed (bytes per second)
void setRepoMetadataPath(const Pathname &path_r)
Set a new path as the default repo cache path.
bool solver_dupAllowDowngrade() const
DUP tune: Whether to allow version downgrades upon DUP.
std::string multiversionKernels() const
std::string distroverpkg() const
Package telling the "product version" on systems not using /etc/product.d/baseproduct.
bool download_use_deltarpm_always() const
Whether to consider using a deltarpm even when rpm is local.
void setRepoCachePath(const Pathname &path_r)
Set a new path as the default repo cache path.
void setRepoGpgCheck(TriBool val_r)
Change the value.
Pathname credentialsGlobalDir() const
Defaults to /etc/zypp/credentials.d.
bool download_media_prefer_download() const
Hint which media to prefer when installing packages (download vs.
Pathname credentialsGlobalFile() const
Defaults to /etc/zypp/credentials.cat.
ZYpp::Ptr getZYpp()
Convenience to get the Pointer to the ZYpp instance.
Wrapper class for stat/lstat.
bool empty() const
Test for an empty path.
Simple lineparser: Traverse each line in a file.
bool next()
Advance to next line.
Parses a INI file and offers its structure as a dictionary.
section_const_iterator sectionsEnd() const
entry_const_iterator entriesBegin(const std::string §ion) const
Iterable< entry_const_iterator > entries(const std::string §ion) const
section_const_iterator sectionsBegin() const
entry_const_iterator entriesEnd(const std::string §ion) const
void setTextLocale(const Locale &locale_r)
Set the default language for retrieving translated texts.
static Pool instance()
Singleton ctor.
void multiversionSpecChanged()
Regular expression match result.
String related utilities and Regular expression matching.
Namespace intended to collect all environment variables we use.
Types and functions for filesystem operations.
int dirForEach(const Pathname &dir_r, const StrMatcher &matcher_r, function< bool(const Pathname &, const char *const)> fnc_r)
int simpleParseFile(std::istream &str_r, ParseFlags flags_r, function< bool(int, std::string)> consume_r)
Simple lineparser optionally trimming and skipping comments.
TriBool strToTriBool(const C_Str &str)
Parse str into a bool if it's a legal true or false string; else indeterminate.
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
bool regex_match(const std::string &s, smatch &matches, const regex ®ex)
\relates regex \ingroup ZYPP_STR_REGEX    \relates regex \ingroup ZYPP_STR_REGEX
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
unsigned split(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", const Trim trim_r=NO_TRIM)
Split line_r into words.
TInt strtonum(const C_Str &str)
Parsing numbers from string.
unsigned splitEscaped(const C_Str &line_r, TOutputIterator result_r, const C_Str &sepchars_r=" \t", bool withEmpty=false)
Split line_r into words with respect to escape delimeters.
int compareCI(const C_Str &lhs, const C_Str &rhs)
Easy-to use interface to the ZYPP dependency resolver.
bool fromString(const std::string &val_r, ResolverFocus &ret_r)
std::unordered_set< Locale > LocaleSet
ResolverFocus
The resolver's general attitude.
@ Default
Request the standard behavior (as defined in zypp.conf or 'Job')
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
DownloadMode
Supported commit download policies.
@ DownloadDefault
libzypp will decide what to do.
Mutable option with initial value also remembering a config value.
DefaultOption(value_type initial_r)
void setDefault(value_type newval_r)
Set a new default value.
void restoreToDefault(value_type newval_r)
Reset value to a new default.
DefaultOption & operator=(value_type newval_r)
void restoreToDefault()
Reset value to the current default.
const value_type & getDefault() const
Get the current default value.
const value_type & get() const
Get the value.
Option & operator=(value_type newval_r)
void set(value_type newval_r)
Set a new value.
Option(value_type initial_r)
No default ctor, explicit initialisation!
int scanConfAt(const Pathname &root_r, MultiversionSpec &spec_r, const Impl &zConfImpl_r)
MultiversionSpec & getSpec(Pathname root_r, const Impl &zConfImpl_r)
MultiversionSpec & getDefaultSpec()
void scanDirAt(const Pathname &root_r, MultiversionSpec &spec_r, const Impl &zConfImpl_r)
std::map< Pathname, MultiversionSpec > SpecMap
Settings that follow a changed Target.
Option< bool > solver_dupAllowVendorChange
DefaultOption< bool > solverUpgradeRemoveDroppedPackages
Option< unsigned > solver_upgradeTestcasesToKeep
Option< bool > solver_dupAllowDowngrade
Option< bool > solver_dupAllowArchChange
Option< bool > solver_onlyRequires
bool consume(const std::string &entry, const std::string &value)
ResolverFocus solver_focus
Option< bool > solver_cleandepsOnRemove
Option< bool > solver_allowVendorChange
Option< bool > solver_dupAllowNameChange
static PoolImpl & myPool()
#define for_(IT, BEG, END)
Convenient for-loops using iterator.