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/EconfDict>
40#include <zypp-media/MediaConfig>
46#undef ZYPP_BASE_LOGGER_LOGGROUP
47#define ZYPP_BASE_LOGGER_LOGGROUP "zconfig"
56 const char *env_confpath = getenv(
"ZYPP_CONF" );
80# if defined(__linux__) && defined(__x86_64__)
81 static inline void cpuid(uint32_t op, uint32_t op2, uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
85 :
"=a" (*eax),
"=b" (*ebx),
"=c" (*ecx),
"=d" (*edx)
86 :
"a" (op),
"c" (op2));
92 #define bit_SSE3 (1 << 0)
93 #define bit_SSSE3 (1 << 9)
94 #define bit_FMA (1 << 12)
95 #define bit_CMPXCHG16B (1 << 13)
96 #define bit_SSE4_1 (1 << 19)
97 #define bit_SSE4_2 (1 << 20)
98 #define bit_MOVBE (1 << 22)
99 #define bit_POPCNT (1 << 23)
100 #define bit_OSXSAVE (1 << 27)
101 #define bit_AVX (1 << 28)
102 #define bit_F16C (1 << 29)
106 #define bit_LAHF_LM (1 << 0)
107 #define bit_LZCNT (1 << 5)
111 #define bit_BMI (1 << 3)
112 #define bit_AVX2 (1 << 5)
113 #define bit_BMI2 (1 << 8)
114 #define bit_AVX512F (1 << 16)
115 #define bit_AVX512DQ (1 << 17)
116 #define bit_AVX512CD (1 << 28)
117 #define bit_AVX512BW (1 << 30)
118 #define bit_AVX512VL (1u << 31)
120 static int get_x86_64_level(
void)
124 unsigned int op_1_ecx = 0, op_80000001_ecx = 0, op_7_ebx = 0, unused = 0;
125 cpuid(1, 0, &unused, &unused, &op_1_ecx, &unused);
126 cpuid(0x80000001, 0, &unused, &unused, &op_80000001_ecx, &unused);
127 cpuid(7, 0, &unused, &op_7_ebx, &unused, &unused);
129 const unsigned int op_1_ecx_lv2 = bit_SSE3 | bit_SSSE3 | bit_CMPXCHG16B | bit_SSE4_1 | bit_SSE4_2 | bit_POPCNT;
130 if ((op_1_ecx & op_1_ecx_lv2) == op_1_ecx_lv2 && (op_80000001_ecx & bit_LAHF_LM))
133 const unsigned int op_1_ecx_lv3 = bit_FMA | bit_MOVBE | bit_OSXSAVE | bit_AVX | bit_F16C;
134 const unsigned int op_7_ebx_lv3 = bit_BMI | bit_AVX2 | bit_BMI2;
135 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
136 && (op_80000001_ecx & bit_LZCNT))
139 const unsigned int op_7_ebx_lv4 = bit_AVX512F | bit_AVX512DQ | bit_AVX512CD | bit_AVX512BW | bit_AVX512VL;
140 if (level == 3 && (op_7_ebx & op_7_ebx_lv4) == op_7_ebx_lv4)
150 Arch _autodetectSystemArchitecture()
152 struct ::utsname buf;
153 if ( ::uname( &buf ) < 0 )
155 ERR <<
"Can't determine system architecture" << endl;
159 Arch architecture( buf.machine );
160 MIL <<
"Uname architecture is '" << buf.machine <<
"'" << endl;
162 if ( architecture == Arch_x86_64 )
164#if defined(__linux__) && defined(__x86_64__)
165 switch ( get_x86_64_level() )
168 architecture = Arch_x86_64_v2;
169 WAR <<
"CPU has 'x86_64': architecture upgraded to '" << architecture <<
"'" << endl;
172 architecture = Arch_x86_64_v3;
173 WAR <<
"CPU has 'x86_64': architecture upgraded to '" << architecture <<
"'" << endl;
176 architecture = Arch_x86_64_v4;
177 WAR <<
"CPU has 'x86_64': architecture upgraded to '" << architecture <<
"'" << endl;
182 else if ( architecture == Arch_i686 )
187 std::ifstream cpuinfo(
"/proc/cpuinfo" );
194 if ( in->find(
"cx8" ) == std::string::npos
195 || in->find(
"cmov" ) == std::string::npos )
197 architecture = Arch_i586;
198 WAR <<
"CPU lacks 'cx8' or 'cmov': architecture downgraded to '" << architecture <<
"'" << endl;
206 ERR <<
"Cant open " <<
PathInfo(
"/proc/cpuinfo") << endl;
209 else if ( architecture == Arch_sparc || architecture == Arch_sparc64 )
212 std::ifstream cpuinfo(
"/proc/cpuinfo" );
219 if ( in->find(
"sun4v" ) != std::string::npos )
221 architecture = ( architecture == Arch_sparc64 ? Arch_sparc64v : Arch_sparcv9v );
222 WAR <<
"CPU has 'sun4v': architecture upgraded to '" << architecture <<
"'" << endl;
224 else if ( in->find(
"sun4u" ) != std::string::npos )
226 architecture = ( architecture == Arch_sparc64 ? Arch_sparc64 : Arch_sparcv9 );
227 WAR <<
"CPU has 'sun4u': architecture upgraded to '" << architecture <<
"'" << endl;
229 else if ( in->find(
"sun4m" ) != std::string::npos )
231 architecture = Arch_sparcv8;
232 WAR <<
"CPU has 'sun4m': architecture upgraded to '" << architecture <<
"'" << endl;
240 ERR <<
"Cant open " <<
PathInfo(
"/proc/cpuinfo") << endl;
243 else if ( architecture == Arch_armv8l || architecture == Arch_armv7l || architecture == Arch_armv6l )
245 std::ifstream platform(
"/etc/rpm/platform" );
252 architecture = Arch_armv8hl;
253 WAR <<
"/etc/rpm/platform contains armv8hl-: architecture upgraded to '" << architecture <<
"'" << endl;
258 architecture = Arch_armv7hl;
259 WAR <<
"/etc/rpm/platform contains armv7hl-: architecture upgraded to '" << architecture <<
"'" << endl;
264 architecture = Arch_armv6hl;
265 WAR <<
"/etc/rpm/platform contains armv6hl-: architecture upgraded to '" << architecture <<
"'" << endl;
271#if __GLIBC_PREREQ (2,16)
272 else if ( architecture == Arch_ppc64 )
274 const char * platform = (
const char *)getauxval( AT_PLATFORM );
276 if ( platform && sscanf( platform,
"power%d", &powerlvl ) == 1 && powerlvl > 6 )
277 architecture = Arch_ppc64p7;
300 Locale _autodetectTextLocale()
303 const char * envlist[] = {
"LC_ALL",
"LC_MESSAGES",
"LANG", NULL };
304 for (
const char ** envvar = envlist; *envvar; ++envvar )
306 const char * envlang = getenv( *envvar );
309 std::string envstr( envlang );
310 if ( envstr !=
"POSIX" && envstr !=
"C" )
315 MIL <<
"Found " << *envvar <<
"=" << envstr << endl;
322 MIL <<
"Default text locale is '" << ret <<
"'" << endl;
323#warning HACK AROUND BOOST_TEST_CATCH_SYSTEM_ERRORS
324 setenv(
"BOOST_TEST_CATCH_SYSTEM_ERRORS",
"no", 1 );
338 struct ZyppConfIniMap :
public IniDict {
339 ZyppConfIniMap( Pathname root_r =
"/" )
340 : IniDict { iniMapReadFrom(root_r) }
348 IniDict iniMapReadFrom(
const Pathname & root_r )
350 pMIL(
"Reading zypp.conf for root", root_r );
357 pMIL(
"$ZYPP_CONF requests reading file", conf );
358 return parser::IniDict( conf.
path() );
360 pMIL(
"$ZYPP_CONF denotes no file below root. Using builtin defaults." );
361 return parser::IniDict();
365 return parser::EconfDict(
"/zypp/zypp.conf", root_r );
386 {
set( std::move(newval_r) );
return *
this; }
398 {
_val = std::move(newval_r); }
417 { this->
set( std::move(newval_r) );
return *
this; }
433 {
_default.set( std::move(newval_r) ); }
468 bool consume(
const std::string & section,
const std::string & entry,
const std::string & value )
470 if ( section !=
"main" )
473 if ( entry ==
"solver.focus" )
477 else if ( entry ==
"solver.onlyRequires" )
481 else if ( entry ==
"solver.allowVendorChange" )
485 else if ( entry ==
"solver.dupAllowDowngrade" )
489 else if ( entry ==
"solver.dupAllowNameChange" )
493 else if ( entry ==
"solver.dupAllowArchChange" )
497 else if ( entry ==
"solver.dupAllowVendorChange" )
501 else if ( entry ==
"solver.cleandepsOnRemove" )
505 else if ( entry ==
"solver.upgradeTestcasesToKeep" )
509 else if ( entry ==
"solver.upgradeRemoveDroppedPackages" )
556 MIL <<
"libzypp: " LIBZYPP_VERSION_STRING <<
" (" << LIBZYPP_CODESTREAM <<
")" << endl;
558 ZyppConfIniMap iniMap;
559 for (
const auto & section : iniMap.sections() ) {
560 for ( const auto & [entry,value] : iniMap.entries( section ) ) {
562 if ( _initialTargetDefaults.consume( section, entry, value ) )
565 if ( _mediaConf.setConfigValue( section, entry, value ) )
568 if ( section ==
"main" )
570 if ( entry ==
"lock_timeout" )
572 str::strtonum( value, cfg_lockTimeout );
574 else if ( entry ==
"arch" )
577 if ( carch != cfg_arch ) {
578 WAR <<
"Overriding system architecture (" << cfg_arch <<
"): " << carch << endl;
582 else if ( entry ==
"cachedir" )
584 cfg_cache_path.restoreToDefault( value );
586 else if ( entry ==
"metadatadir" )
588 cfg_metadata_path.restoreToDefault( value );
590 else if ( entry ==
"solvfilesdir" )
592 cfg_solvfiles_path.restoreToDefault( value );
594 else if ( entry ==
"packagesdir" )
596 cfg_packages_path.restoreToDefault( value );
598 else if ( entry ==
"configdir" )
600 cfg_config_path = Pathname(value);
602 else if ( entry ==
"reposdir" )
604 cfg_known_repos_path = Pathname(value);
606 else if ( entry ==
"servicesdir" )
608 cfg_known_services_path = Pathname(value);
610 else if ( entry ==
"varsdir" )
612 cfg_vars_path = Pathname(value);
614 else if ( entry ==
"repo.add.probe" )
616 repo_add_probe = str::strToBool( value, repo_add_probe );
618 else if ( entry ==
"repo.refresh.delay" )
620 str::strtonum(value, repo_refresh_delay);
622 else if ( entry ==
"repo.refresh.locales" )
624 std::vector<std::string> tmp;
625 str::split( value, back_inserter( tmp ),
", \t" );
627 boost::function<Locale(const std::string &)> transform(
628 [](const std::string & str_r)->Locale{ return Locale(str_r); }
630 repoRefreshLocales.insert( make_transform_iterator( tmp.begin(), transform ),
631 make_transform_iterator( tmp.end(), transform ) );
633 else if ( entry ==
"download.use_deltarpm" )
635 download_use_deltarpm = str::strToBool( value, download_use_deltarpm );
637 else if ( entry ==
"download.use_deltarpm.always" )
639 download_use_deltarpm_always = str::strToBool( value, download_use_deltarpm_always );
641 else if ( entry ==
"download.media_preference" )
643 download_media_prefer_download.restoreToDefault( str::compareCI( value,
"volatile" ) != 0 );
645 else if ( entry ==
"download.media_mountdir" )
647 download_mediaMountdir.restoreToDefault( Pathname(value) );
649 else if ( entry ==
"download.use_geoip_mirror") {
650 geoipEnabled = str::strToBool( value, geoipEnabled );
652 else if ( entry ==
"commit.downloadMode" )
654 commit_downloadMode.set( deserializeDownloadMode( value ) );
656 else if ( entry ==
"gpgcheck" )
658 gpgCheck.restoreToDefault( str::strToBool( value, gpgCheck ) );
660 else if ( entry ==
"repo_gpgcheck" )
662 repoGpgCheck.restoreToDefault( str::strToTriBool( value ) );
664 else if ( entry ==
"pkg_gpgcheck" )
666 pkgGpgCheck.restoreToDefault( str::strToTriBool( value ) );
668 else if ( entry ==
"vendordir" )
670 cfg_vendor_path = Pathname(value);
672 else if ( entry ==
"multiversiondir" )
674 cfg_multiversion_path = Pathname(value);
676 else if ( entry ==
"multiversion.kernels" )
678 cfg_kernel_keep_spec = value;
680 else if ( entry ==
"solver.checkSystemFile" )
682 solver_checkSystemFile = Pathname(value);
684 else if ( entry ==
"solver.checkSystemFileDir" )
686 solver_checkSystemFileDir = Pathname(value);
688 else if ( entry ==
"multiversion" )
690 MultiversionSpec & defSpec( _multiversionMap.getDefaultSpec() );
691 str::splitEscaped( value, std::inserter( defSpec, defSpec.end() ),
", \t" );
693 else if ( entry ==
"locksfile.path" )
695 locks_file = Pathname(value);
697 else if ( entry ==
"locksfile.apply" )
699 apply_locks_file = str::strToBool( value, apply_locks_file );
701 else if ( entry ==
"update.datadir" )
706 else if ( entry ==
"update.scriptsdir" )
711 else if ( entry ==
"update.messagessdir" )
716 else if ( entry ==
"update.messages.notify" )
718 updateMessagesNotify.set( value );
720 else if ( entry ==
"rpm.install.excludedocs" )
722 rpmInstallFlags.setFlag( target::rpm::RPMINST_EXCLUDEDOCS,
723 str::strToBool( value, false ) );
725 else if ( entry ==
"history.logfile" )
727 history_log_path = Pathname(value);
729 else if ( entry ==
"ZYPP_SINGLE_RPMTRANS" || entry ==
"techpreview.ZYPP_SINGLE_RPMTRANS" )
731 DBG <<
"ZYPP_SINGLE_RPMTRANS=" << value << endl;
732 ::setenv(
"ZYPP_SINGLE_RPMTRANS", value.c_str(), 0 );
734 else if ( entry ==
"techpreview.ZYPP_MEDIANETWORK" )
736 DBG <<
"techpreview.ZYPP_MEDIANETWORK=" << value << endl;
737 ::setenv(
"ZYPP_MEDIANETWORK", value.c_str(), 1 );
740 pWAR(
"zypp.conf: Unknown entry in [main]:", entry,
"=", value );
744 pWAR(
"zypp.conf: Unknown section:", str::sconcat(
"[",section,
"]"), entry,
"=", value );
750 if ( getenv(
"ZYPP_TESTSUITE_FAKE_ARCH" ) )
752 Arch carch( getenv(
"ZYPP_TESTSUITE_FAKE_ARCH" ) );
755 WAR <<
"ZYPP_TESTSUITE_FAKE_ARCH: Overriding system architecture (" <<
cfg_arch <<
"): " << carch << endl;
759 MIL <<
"ZConfig singleton created." << endl;
786 MIL <<
"notifyTargetChanged (" << newRoot <<
")" << endl;
793 ZyppConfIniMap iniMap { newRoot };
794 for (
const auto & section : iniMap.sections() ) {
795 for (
const auto & [entry,value] : iniMap.entries( section ) ) {
796 (*_currentTargetDefaults).consume( section, entry, value );
883 using SpecMap = std::map<Pathname, MultiversionSpec>;
891 if ( root_r.
empty() )
893 bool cacheHit =
_specMap.count( root_r );
903 if ( root_r ==
"/" || not
scanConfAt( root_r, ret, zConfImpl_r ) )
906 using zypp::operator<<;
907 MIL <<
"MultiversionSpec '" << root_r <<
"' = " << ret << endl;
918 ZyppConfIniMap iniMap { root_r };
920 for (
const auto & section : iniMap.sections() ) {
921 for (
const auto & [entry,value] : iniMap.entries( section ) ) {
922 if ( entry ==
"multiversion" ) {
935 if ( multiversionDir.
empty() )
941 [&spec_r](
const Pathname & dir_r,
const char *
const & name_r )->
bool
943 MIL <<
"Parsing " << dir_r/name_r << endl;
945 [&spec_r](
int num_r, std::string line_r )->
bool
947 DBG <<
" found " << line_r << endl;
948 spec_r.insert( std::move(line_r) );
998 const char *
env = getenv(
"ZYPP_LOCK_TIMEOUT");
1002 return _pimpl->cfg_lockTimeout;
1006 {
return _pimpl->notifyTargetChanged(); }
1009 {
return _pimpl->_autodetectSystemRoot(); }
1013 return (
_pimpl->cfg_repo_mgr_root_path.empty()
1018 {
_pimpl->cfg_repo_mgr_root_path = root; }
1021 {
_pimpl->_announced_root_path = root_r; }
1031 static Arch _val( _autodetectSystemArchitecture() );
1036 {
return _pimpl->cfg_arch; }
1040 if ( arch_r !=
_pimpl->cfg_arch )
1042 WAR <<
"Overriding system architecture (" <<
_pimpl->cfg_arch <<
"): " << arch_r << endl;
1043 _pimpl->cfg_arch = arch_r;
1055 static Locale _val( _autodetectTextLocale() );
1060 {
return _pimpl->cfg_textLocale; }
1064 if ( locale_r !=
_pimpl->cfg_textLocale )
1066 WAR <<
"Overriding text locale (" <<
_pimpl->cfg_textLocale <<
"): " << locale_r << endl;
1067 _pimpl->cfg_textLocale = locale_r;
1078 {
return !
_pimpl->userData.empty(); }
1081 {
return _pimpl->userData; }
1085 for_( ch, str_r.begin(), str_r.end() )
1087 if ( *ch <
' ' && *ch !=
'\t' )
1089 ERR <<
"New user data string rejectded: char " << (int)*ch <<
" at position " << (ch - str_r.begin()) << endl;
1093 MIL <<
"Set user data string to '" << str_r <<
"'" << endl;
1094 _pimpl->userData = str_r;
1102 return (
_pimpl->cfg_cache_path.get().empty()
1113 _pimpl->cfg_cache_path = path_r;
1118 return (
_pimpl->cfg_metadata_path.get().empty()
1124 _pimpl->cfg_metadata_path = path_r;
1129 return (
_pimpl->cfg_solvfiles_path.get().empty()
1135 _pimpl->cfg_solvfiles_path = path_r;
1140 return (
_pimpl->cfg_packages_path.get().empty()
1146 _pimpl->cfg_packages_path = path_r;
1150 {
return _pimpl->cfg_cache_path.getDefault().empty() ?
Pathname(
"/var/cache/zypp") :
_pimpl->cfg_cache_path.getDefault(); }
1165 return (
_pimpl->cfg_config_path.empty()
1171 return (
_pimpl->cfg_known_repos_path.empty()
1177 return (
_pimpl->cfg_known_services_path.empty()
1188 {
_pimpl->geoipEnabled = enable; }
1191 {
return _pimpl->geoipEnabled; }
1197 {
return _pimpl->geoipHosts; }
1201 return (
_pimpl->cfg_vars_path.empty()
1207 return (
_pimpl->cfg_vendor_path.empty()
1213 return (
_pimpl->locks_file.empty()
1220 {
return _pimpl->repo_add_probe; }
1223 {
return _pimpl->repo_refresh_delay; }
1229 {
return _pimpl->repoLabelIsAlias; }
1232 {
_pimpl->repoLabelIsAlias = yesno_r; }
1235 {
return _pimpl->download_use_deltarpm; }
1241 {
return _pimpl->download_media_prefer_download; }
1244 {
_pimpl->download_media_prefer_download.set( yesno_r ); }
1247 {
_pimpl->download_media_prefer_download.restoreToDefault(); }
1250 {
return _pimpl->_mediaConf.download_max_concurrent_connections(); }
1253 {
return _pimpl->_mediaConf.download_min_download_speed(); }
1256 {
return _pimpl->_mediaConf.download_max_download_speed(); }
1259 {
return _pimpl->_mediaConf.download_max_silent_tries(); }
1262 {
return _pimpl->_mediaConf.download_transfer_timeout(); }
1269 {
return _pimpl->commit_downloadMode; }
1301 {
return (
_pimpl->solver_checkSystemFile.empty()
1305 {
return (
_pimpl->solver_checkSystemFileDir.empty()
1311 inline void sigMultiversionSpecChanged()
1324 {
return _pimpl->apply_locks_file; }
1351 {
return _pimpl->updateMessagesNotify; }
1354 {
_pimpl->updateMessagesNotify.set( val_r ); }
1357 {
_pimpl->updateMessagesNotify.restoreToDefault(); }
1362 {
return _pimpl->rpmInstallFlags; }
1367 return (
_pimpl->history_log_path.empty() ?
1373 return _pimpl->_mediaConf.credentialsGlobalDir();
1378 return _pimpl->_mediaConf.credentialsGlobalFile();
1384 {
return "system-release"; }
1389 {
return _pimpl->pluginsPath.get(); }
1393 return _pimpl->cfg_kernel_keep_spec;
1400 str <<
"libzypp: " LIBZYPP_VERSION_STRING <<
" (" << LIBZYPP_CODESTREAM <<
")" << endl;
1402 str <<
"libsolv: " << solv_version;
1403 if ( ::strcmp( solv_version, LIBSOLV_VERSION_STRING ) )
1404 str <<
" (built against " << LIBSOLV_VERSION_STRING <<
")";
#define for_(IT, BEG, END)
Convenient for-loops using 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
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.
const Pathname & path() const
Return current Pathname.
bool emptyOrRoot() const
Test for "" or "/".
bool empty() const
Test for an empty path.
Simple lineparser: Traverse each line in a file.
bool next()
Advance to next line.
void setTextLocale(const Locale &locale_r)
Set the default language for retrieving translated texts.
static Pool instance()
Singleton ctor.
void multiversionSpecChanged()
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
String related utilities and Regular expression matching.
Namespace intended to collect all environment variables we use.
std::optional< Pathname > ZYPP_CONF()
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.
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
TInt strtonum(const C_Str &str)
Parsing numbers from string.
std::string sconcat(Args &&... args)
Concat words as 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.
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').
detail::Dump< Tp > dump(const Tp &obj_r)
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!
MultiversionSpec & getSpec(Pathname root_r, const Impl &zConfImpl_r)
MultiversionSpec & getDefaultSpec()
void scanDirAt(const Pathname &root_r, MultiversionSpec &spec_r, const Impl &zConfImpl_r)
bool scanConfAt(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
bool consume(const std::string §ion, const std::string &entry, const std::string &value)
Option< bool > solver_dupAllowArchChange
Option< bool > solver_onlyRequires
ResolverFocus solver_focus
Option< bool > solver_cleandepsOnRemove
Option< bool > solver_allowVendorChange
Option< bool > solver_dupAllowNameChange
static PoolImpl & myPool()