libzypp  17.28.8
ZConfig.cc
Go to the documentation of this file.
1 /*---------------------------------------------------------------------\
2 | ____ _ __ __ ___ |
3 | |__ / \ / / . \ . \ |
4 | / / \ V /| _/ _/ |
5 | / /__ | | | | | | |
6 | /_____||_| |_| |_| |
7 | |
8 \---------------------------------------------------------------------*/
12 extern "C"
13 {
14 #include <features.h>
15 #include <sys/utsname.h>
16 #if __GLIBC_PREREQ (2,16)
17 #include <sys/auxv.h> // getauxval for PPC64P7 detection
18 #endif
19 #include <unistd.h>
20 #include <solv/solvversion.h>
21 }
22 #include <iostream>
23 #include <fstream>
24 #include <zypp/base/LogTools.h>
25 #include <zypp/base/IOStream.h>
26 #include <zypp/base/InputStream.h>
27 #include <zypp/base/String.h>
28 #include <zypp/base/Regex.h>
29 
30 #include <zypp/ZConfig.h>
31 #include <zypp/ZYppFactory.h>
32 #include <zypp/PathInfo.h>
33 #include <zypp/parser/IniDict.h>
34 
35 #include <zypp/sat/Pool.h>
36 #include <zypp/sat/detail/PoolImpl.h>
37 
38 using std::endl;
39 using namespace zypp::filesystem;
40 using namespace zypp::parser;
41 
42 #undef ZYPP_BASE_LOGGER_LOGGROUP
43 #define ZYPP_BASE_LOGGER_LOGGROUP "zconfig"
44 
46 namespace zypp
47 {
58  namespace
59  {
60 
63  Arch _autodetectSystemArchitecture()
64  {
65  struct ::utsname buf;
66  if ( ::uname( &buf ) < 0 )
67  {
68  ERR << "Can't determine system architecture" << endl;
69  return Arch_noarch;
70  }
71 
72  Arch architecture( buf.machine );
73  MIL << "Uname architecture is '" << buf.machine << "'" << endl;
74 
75  if ( architecture == Arch_i686 )
76  {
77  // some CPUs report i686 but dont implement cx8 and cmov
78  // check for both flags in /proc/cpuinfo and downgrade
79  // to i586 if either is missing (cf bug #18885)
80  std::ifstream cpuinfo( "/proc/cpuinfo" );
81  if ( cpuinfo )
82  {
83  for( iostr::EachLine in( cpuinfo ); in; in.next() )
84  {
85  if ( str::hasPrefix( *in, "flags" ) )
86  {
87  if ( in->find( "cx8" ) == std::string::npos
88  || in->find( "cmov" ) == std::string::npos )
89  {
90  architecture = Arch_i586;
91  WAR << "CPU lacks 'cx8' or 'cmov': architecture downgraded to '" << architecture << "'" << endl;
92  }
93  break;
94  }
95  }
96  }
97  else
98  {
99  ERR << "Cant open " << PathInfo("/proc/cpuinfo") << endl;
100  }
101  }
102  else if ( architecture == Arch_sparc || architecture == Arch_sparc64 )
103  {
104  // Check for sun4[vum] to get the real arch. (bug #566291)
105  std::ifstream cpuinfo( "/proc/cpuinfo" );
106  if ( cpuinfo )
107  {
108  for( iostr::EachLine in( cpuinfo ); in; in.next() )
109  {
110  if ( str::hasPrefix( *in, "type" ) )
111  {
112  if ( in->find( "sun4v" ) != std::string::npos )
113  {
114  architecture = ( architecture == Arch_sparc64 ? Arch_sparc64v : Arch_sparcv9v );
115  WAR << "CPU has 'sun4v': architecture upgraded to '" << architecture << "'" << endl;
116  }
117  else if ( in->find( "sun4u" ) != std::string::npos )
118  {
119  architecture = ( architecture == Arch_sparc64 ? Arch_sparc64 : Arch_sparcv9 );
120  WAR << "CPU has 'sun4u': architecture upgraded to '" << architecture << "'" << endl;
121  }
122  else if ( in->find( "sun4m" ) != std::string::npos )
123  {
124  architecture = Arch_sparcv8;
125  WAR << "CPU has 'sun4m': architecture upgraded to '" << architecture << "'" << endl;
126  }
127  break;
128  }
129  }
130  }
131  else
132  {
133  ERR << "Cant open " << PathInfo("/proc/cpuinfo") << endl;
134  }
135  }
136  else if ( architecture == Arch_armv7l || architecture == Arch_armv6l )
137  {
138  std::ifstream platform( "/etc/rpm/platform" );
139  if (platform)
140  {
141  for( iostr::EachLine in( platform ); in; in.next() )
142  {
143  if ( str::hasPrefix( *in, "armv7hl-" ) )
144  {
145  architecture = Arch_armv7hl;
146  WAR << "/etc/rpm/platform contains armv7hl-: architecture upgraded to '" << architecture << "'" << endl;
147  break;
148  }
149  if ( str::hasPrefix( *in, "armv6hl-" ) )
150  {
151  architecture = Arch_armv6hl;
152  WAR << "/etc/rpm/platform contains armv6hl-: architecture upgraded to '" << architecture << "'" << endl;
153  break;
154  }
155  }
156  }
157  }
158 #if __GLIBC_PREREQ (2,16)
159  else if ( architecture == Arch_ppc64 )
160  {
161  const char * platform = (const char *)getauxval( AT_PLATFORM );
162  int powerlvl;
163  if ( platform && sscanf( platform, "power%d", &powerlvl ) == 1 && powerlvl > 6 )
164  architecture = Arch_ppc64p7;
165  }
166 #endif
167  return architecture;
168  }
169 
187  Locale _autodetectTextLocale()
188  {
189  Locale ret( Locale::enCode );
190  const char * envlist[] = { "LC_ALL", "LC_MESSAGES", "LANG", NULL };
191  for ( const char ** envvar = envlist; *envvar; ++envvar )
192  {
193  const char * envlang = getenv( *envvar );
194  if ( envlang )
195  {
196  std::string envstr( envlang );
197  if ( envstr != "POSIX" && envstr != "C" )
198  {
199  Locale lang( envstr );
200  if ( lang )
201  {
202  MIL << "Found " << *envvar << "=" << envstr << endl;
203  ret = lang;
204  break;
205  }
206  }
207  }
208  }
209  MIL << "Default text locale is '" << ret << "'" << endl;
210 #warning HACK AROUND BOOST_TEST_CATCH_SYSTEM_ERRORS
211  setenv( "BOOST_TEST_CATCH_SYSTEM_ERRORS", "no", 1 );
212  return ret;
213  }
214 
215 
216  inline Pathname _autodetectSystemRoot()
217  {
218  Target_Ptr target( getZYpp()->getTarget() );
219  return target ? target->root() : Pathname();
220  }
221 
222  inline Pathname _autodetectZyppConfPath()
223  {
224  const char *env_confpath = getenv( "ZYPP_CONF" );
225  return env_confpath ? env_confpath : "/etc/zypp/zypp.conf";
226  }
227 
229  } // namespace zypp
231 
233  template<class Tp>
234  struct Option
235  {
236  typedef Tp value_type;
237 
239  Option( value_type initial_r )
240  : _val( std::move(initial_r) )
241  {}
242 
244  { set( std::move(newval_r) ); return *this; }
245 
247  const value_type & get() const
248  { return _val; }
249 
251  operator const value_type &() const
252  { return _val; }
253 
255  void set( value_type newval_r )
256  { _val = std::move(newval_r); }
257 
258  private:
260  };
261 
263  template<class Tp>
264  struct DefaultOption : public Option<Tp>
265  {
266  typedef Tp value_type;
268 
269  explicit DefaultOption( value_type initial_r )
270  : Option<Tp>( initial_r )
271  , _default( std::move(initial_r) )
272  {}
273 
275  { this->set( std::move(newval_r) ); return *this; }
276 
279  { this->set( _default.get() ); }
280 
282  void restoreToDefault( value_type newval_r )
283  { setDefault( std::move(newval_r) ); restoreToDefault(); }
284 
286  const value_type & getDefault() const
287  { return _default.get(); }
288 
290  void setDefault( value_type newval_r )
291  { _default.set( std::move(newval_r) ); }
292 
293  private:
295  };
296 
298  //
299  // CLASS NAME : ZConfig::Impl
300  //
307  {
308  typedef std::set<std::string> MultiversionSpec;
309 
310  public:
311  Impl( const Pathname & override_r = Pathname() )
312  : _parsedZyppConf ( override_r )
313  , cfg_arch ( defaultSystemArchitecture() )
314  , cfg_textLocale ( defaultTextLocale() )
315  , cfg_cache_path { "/var/cache/zypp" }
316  , cfg_metadata_path { "" } // empty - follows cfg_cache_path
317  , cfg_solvfiles_path { "" } // empty - follows cfg_cache_path
318  , cfg_packages_path { "" } // empty - follows cfg_cache_path
319  , updateMessagesNotify ( "" )
320  , repo_add_probe ( false )
321  , repo_refresh_delay ( 10 )
322  , repoLabelIsAlias ( false )
323  , download_use_deltarpm ( true )
324  , download_use_deltarpm_always ( false )
325  , download_media_prefer_download( true )
326  , download_mediaMountdir ( "/var/adm/mount" )
327  , download_max_concurrent_connections( 5 )
328  , download_min_download_speed ( 0 )
329  , download_max_download_speed ( 0 )
330  , download_max_silent_tries ( 5 )
331  , download_transfer_timeout ( 180 )
332  , commit_downloadMode ( DownloadDefault )
333  , gpgCheck ( true )
334  , repoGpgCheck ( indeterminate )
335  , pkgGpgCheck ( indeterminate )
336  , solver_focus ( ResolverFocus::Default )
337  , solver_onlyRequires ( false )
338  , solver_allowVendorChange ( false )
339  , solver_dupAllowDowngrade ( true )
340  , solver_dupAllowNameChange ( true )
341  , solver_dupAllowArchChange ( true )
342  , solver_dupAllowVendorChange ( true )
343  , solver_cleandepsOnRemove ( false )
344  , solver_upgradeTestcasesToKeep ( 2 )
345  , solverUpgradeRemoveDroppedPackages( true )
346  , apply_locks_file ( true )
347  , pluginsPath ( "/usr/lib/zypp/plugins" )
348  {
349  MIL << "libzypp: " LIBZYPP_VERSION_STRING << endl;
350  // override_r has higest prio
351  // ZYPP_CONF might override /etc/zypp/zypp.conf
352  if ( _parsedZyppConf.empty() )
353  {
354  _parsedZyppConf = _autodetectZyppConfPath();
355  }
356  else
357  {
358  // Inject this into ZConfig. Be shure this is
359  // allocated via new.
360  // ma: override_r might not be needed anymore since the
361  // Vendor_test is now able to initialize VendorAttr directly.
362  INT << "Reconfigure to " << _parsedZyppConf << endl;
363  ZConfig::instance()._pimpl.reset( this );
364  }
365  if ( PathInfo(_parsedZyppConf).isExist() )
366  {
367  parser::IniDict dict( _parsedZyppConf );
369  sit != dict.sectionsEnd();
370  ++sit )
371  {
372  std::string section(*sit);
373  //MIL << section << endl;
374  for ( IniDict::entry_const_iterator it = dict.entriesBegin(*sit);
375  it != dict.entriesEnd(*sit);
376  ++it )
377  {
378  std::string entry(it->first);
379  std::string value(it->second);
380  //DBG << (*it).first << "=" << (*it).second << endl;
381  if ( section == "main" )
382  {
383  if ( entry == "arch" )
384  {
385  Arch carch( value );
386  if ( carch != cfg_arch )
387  {
388  WAR << "Overriding system architecture (" << cfg_arch << "): " << carch << endl;
389  cfg_arch = carch;
390  }
391  }
392  else if ( entry == "cachedir" )
393  {
394  cfg_cache_path.restoreToDefault( value );
395  }
396  else if ( entry == "metadatadir" )
397  {
398  cfg_metadata_path.restoreToDefault( value );
399  }
400  else if ( entry == "solvfilesdir" )
401  {
402  cfg_solvfiles_path.restoreToDefault( value );
403  }
404  else if ( entry == "packagesdir" )
405  {
406  cfg_packages_path.restoreToDefault( value );
407  }
408  else if ( entry == "configdir" )
409  {
410  cfg_config_path = Pathname(value);
411  }
412  else if ( entry == "reposdir" )
413  {
414  cfg_known_repos_path = Pathname(value);
415  }
416  else if ( entry == "servicesdir" )
417  {
418  cfg_known_services_path = Pathname(value);
419  }
420  else if ( entry == "varsdir" )
421  {
422  cfg_vars_path = Pathname(value);
423  }
424  else if ( entry == "repo.add.probe" )
425  {
426  repo_add_probe = str::strToBool( value, repo_add_probe );
427  }
428  else if ( entry == "repo.refresh.delay" )
429  {
430  str::strtonum(value, repo_refresh_delay);
431  }
432  else if ( entry == "repo.refresh.locales" )
433  {
434  std::vector<std::string> tmp;
435  str::split( value, back_inserter( tmp ), ", \t" );
436 
437  boost::function<Locale(const std::string &)> transform(
438  [](const std::string & str_r)->Locale{ return Locale(str_r); }
439  );
440  repoRefreshLocales.insert( make_transform_iterator( tmp.begin(), transform ),
441  make_transform_iterator( tmp.end(), transform ) );
442  }
443  else if ( entry == "download.use_deltarpm" )
444  {
445  download_use_deltarpm = str::strToBool( value, download_use_deltarpm );
446  }
447  else if ( entry == "download.use_deltarpm.always" )
448  {
449  download_use_deltarpm_always = str::strToBool( value, download_use_deltarpm_always );
450  }
451  else if ( entry == "download.media_preference" )
452  {
453  download_media_prefer_download.restoreToDefault( str::compareCI( value, "volatile" ) != 0 );
454  }
455 
456  else if ( entry == "download.media_mountdir" )
457  {
458  download_mediaMountdir.restoreToDefault( Pathname(value) );
459  }
460 
461  else if ( entry == "download.max_concurrent_connections" )
462  {
463  str::strtonum(value, download_max_concurrent_connections);
464  }
465  else if ( entry == "download.min_download_speed" )
466  {
467  str::strtonum(value, download_min_download_speed);
468  }
469  else if ( entry == "download.max_download_speed" )
470  {
471  str::strtonum(value, download_max_download_speed);
472  }
473  else if ( entry == "download.max_silent_tries" )
474  {
475  str::strtonum(value, download_max_silent_tries);
476  }
477  else if ( entry == "download.transfer_timeout" )
478  {
479  str::strtonum(value, download_transfer_timeout);
480  if ( download_transfer_timeout < 0 ) download_transfer_timeout = 0;
481  else if ( download_transfer_timeout > 3600 ) download_transfer_timeout = 3600;
482  }
483  else if ( entry == "commit.downloadMode" )
484  {
485  commit_downloadMode.set( deserializeDownloadMode( value ) );
486  }
487  else if ( entry == "gpgcheck" )
488  {
489  gpgCheck.restoreToDefault( str::strToBool( value, gpgCheck ) );
490  }
491  else if ( entry == "repo_gpgcheck" )
492  {
493  repoGpgCheck.restoreToDefault( str::strToTriBool( value ) );
494  }
495  else if ( entry == "pkg_gpgcheck" )
496  {
497  pkgGpgCheck.restoreToDefault( str::strToTriBool( value ) );
498  }
499  else if ( entry == "vendordir" )
500  {
501  cfg_vendor_path = Pathname(value);
502  }
503  else if ( entry == "multiversiondir" )
504  {
505  cfg_multiversion_path = Pathname(value);
506  }
507  else if ( entry == "multiversion.kernels" )
508  {
509  cfg_kernel_keep_spec = value;
510  }
511  else if ( entry == "solver.focus" )
512  {
513  fromString( value, solver_focus );
514  }
515  else if ( entry == "solver.onlyRequires" )
516  {
517  solver_onlyRequires.set( str::strToBool( value, solver_onlyRequires ) );
518  }
519  else if ( entry == "solver.allowVendorChange" )
520  {
521  solver_allowVendorChange.set( str::strToBool( value, solver_allowVendorChange ) );
522  }
523  else if ( entry == "solver.dupAllowDowngrade" )
524  {
525  solver_dupAllowDowngrade.set( str::strToBool( value, solver_dupAllowDowngrade ) );
526  }
527  else if ( entry == "solver.dupAllowNameChange" )
528  {
529  solver_dupAllowNameChange.set( str::strToBool( value, solver_dupAllowNameChange ) );
530  }
531  else if ( entry == "solver.dupAllowArchChange" )
532  {
533  solver_dupAllowArchChange.set( str::strToBool( value, solver_dupAllowArchChange ) );
534  }
535  else if ( entry == "solver.dupAllowVendorChange" )
536  {
537  solver_dupAllowVendorChange.set( str::strToBool( value, solver_dupAllowVendorChange ) );
538  }
539  else if ( entry == "solver.cleandepsOnRemove" )
540  {
541  solver_cleandepsOnRemove.set( str::strToBool( value, solver_cleandepsOnRemove ) );
542  }
543  else if ( entry == "solver.upgradeTestcasesToKeep" )
544  {
545  solver_upgradeTestcasesToKeep.set( str::strtonum<unsigned>( value ) );
546  }
547  else if ( entry == "solver.upgradeRemoveDroppedPackages" )
548  {
549  solverUpgradeRemoveDroppedPackages.restoreToDefault( str::strToBool( value, solverUpgradeRemoveDroppedPackages.getDefault() ) );
550  }
551  else if ( entry == "solver.checkSystemFile" )
552  {
553  solver_checkSystemFile = Pathname(value);
554  }
555  else if ( entry == "solver.checkSystemFileDir" )
556  {
557  solver_checkSystemFileDir = Pathname(value);
558  }
559  else if ( entry == "multiversion" )
560  {
561  MultiversionSpec & defSpec( _multiversionMap.getDefaultSpec() );
562  str::splitEscaped( value, std::inserter( defSpec, defSpec.end() ), ", \t" );
563  }
564  else if ( entry == "locksfile.path" )
565  {
566  locks_file = Pathname(value);
567  }
568  else if ( entry == "locksfile.apply" )
569  {
570  apply_locks_file = str::strToBool( value, apply_locks_file );
571  }
572  else if ( entry == "update.datadir" )
573  {
574  update_data_path = Pathname(value);
575  }
576  else if ( entry == "update.scriptsdir" )
577  {
578  update_scripts_path = Pathname(value);
579  }
580  else if ( entry == "update.messagessdir" )
581  {
582  update_messages_path = Pathname(value);
583  }
584  else if ( entry == "update.messages.notify" )
585  {
586  updateMessagesNotify.set( value );
587  }
588  else if ( entry == "rpm.install.excludedocs" )
589  {
590  rpmInstallFlags.setFlag( target::rpm::RPMINST_EXCLUDEDOCS,
591  str::strToBool( value, false ) );
592  }
593  else if ( entry == "history.logfile" )
594  {
595  history_log_path = Pathname(value);
596  }
597  else if ( entry == "credentials.global.dir" )
598  {
599  credentials_global_dir_path = Pathname(value);
600  }
601  else if ( entry == "credentials.global.file" )
602  {
603  credentials_global_file_path = Pathname(value);
604  }
605  else if ( entry == "techpreview.ZYPP_SINGLE_RPMTRANS" )
606  {
607  DBG << "techpreview.ZYPP_SINGLE_RPMTRANS=" << value << endl;
608  ::setenv( "ZYPP_SINGLE_RPMTRANS", value.c_str(), 1 );
609  }
610  else if ( entry == "techpreview.ZYPP_MEDIANETWORK" )
611  {
612  DBG << "techpreview.ZYPP_MEDIANETWORK=" << value << endl;
613  ::setenv( "ZYPP_MEDIANETWORK", value.c_str(), 1 );
614  }
615  }
616  }
617  }
618  //
619 
620  }
621  else
622  {
623  MIL << _parsedZyppConf << " not found, using defaults instead." << endl;
624  _parsedZyppConf = _parsedZyppConf.extend( " (NOT FOUND)" );
625  }
626 
627  // legacy:
628  if ( getenv( "ZYPP_TESTSUITE_FAKE_ARCH" ) )
629  {
630  Arch carch( getenv( "ZYPP_TESTSUITE_FAKE_ARCH" ) );
631  if ( carch != cfg_arch )
632  {
633  WAR << "ZYPP_TESTSUITE_FAKE_ARCH: Overriding system architecture (" << cfg_arch << "): " << carch << endl;
634  cfg_arch = carch;
635  }
636  }
637  MIL << "ZConfig singleton created." << endl;
638  }
639 
641  {}
642 
643  public:
646 
649 
650  DefaultOption<Pathname> cfg_cache_path; // Settings from the config file are also remembered
651  DefaultOption<Pathname> cfg_metadata_path; // 'default'. Cleanup in RepoManager e.g needs to tell
652  DefaultOption<Pathname> cfg_solvfiles_path; // whether settings in effect are config values or
653  DefaultOption<Pathname> cfg_packages_path; // custom settings applied vie set...Path().
654 
660 
663  std::string cfg_kernel_keep_spec;
665 
670 
675 
680 
686 
688 
692 
703 
706 
707  MultiversionSpec & multiversion() { return getMultiversion(); }
708  const MultiversionSpec & multiversion() const { return getMultiversion(); }
709 
711 
712  target::rpm::RpmInstFlags rpmInstallFlags;
713 
717 
718  std::string userData;
719 
721 
722  private:
723  // HACK for bnc#906096: let pool re-evaluate multiversion spec
724  // if target root changes. ZConfig returns data sensitive to
725  // current target root.
726  // TODO Actually we'd need to scan the target systems zypp.conf and
727  // overlay all system specific values.
729  {
730  typedef std::map<Pathname,MultiversionSpec> SpecMap;
731 
732  MultiversionSpec & getSpec( Pathname root_r, const Impl & zConfImpl_r ) // from system at root
733  {
734  // _specMap[] - the plain zypp.conf value
735  // _specMap[/] - combine [] and multiversion.d scan
736  // _specMap[root] - scan root/zypp.conf and root/multiversion.d
737 
738  if ( root_r.empty() )
739  root_r = "/";
740  bool cacheHit = _specMap.count( root_r );
741  MultiversionSpec & ret( _specMap[root_r] ); // creates new entry on the fly
742 
743  if ( ! cacheHit )
744  {
745  if ( root_r == "/" )
746  ret.swap( _specMap[Pathname()] ); // original zypp.conf
747  else
748  scanConfAt( root_r, ret, zConfImpl_r ); // scan zypp.conf at root_r
749  scanDirAt( root_r, ret, zConfImpl_r ); // add multiversion.d at root_r
750  using zypp::operator<<;
751  MIL << "MultiversionSpec '" << root_r << "' = " << ret << endl;
752  }
753  return ret;
754  }
755 
756  MultiversionSpec & getDefaultSpec() // Spec from zypp.conf parsing; called before any getSpec
757  { return _specMap[Pathname()]; }
758 
759  private:
760  void scanConfAt( const Pathname root_r, MultiversionSpec & spec_r, const Impl & zConfImpl_r )
761  {
762  static const str::regex rx( "^multiversion *= *(.*)" );
763  str::smatch what;
764  iostr::simpleParseFile( InputStream( Pathname::assertprefix( root_r, _autodetectZyppConfPath() ) ),
765  [&]( int num_r, std::string line_r )->bool
766  {
767  if ( line_r[0] == 'm' && str::regex_match( line_r, what, rx ) )
768  {
769  str::splitEscaped( what[1], std::inserter( spec_r, spec_r.end() ), ", \t" );
770  return false; // stop after match
771  }
772  return true;
773  } );
774  }
775 
776  void scanDirAt( const Pathname root_r, MultiversionSpec & spec_r, const Impl & zConfImpl_r )
777  {
778  // NOTE: Actually we'd need to scan and use the root_r! zypp.conf values.
779  Pathname multiversionDir( zConfImpl_r.cfg_multiversion_path );
780  if ( multiversionDir.empty() )
781  multiversionDir = ( zConfImpl_r.cfg_config_path.empty()
782  ? Pathname("/etc/zypp")
783  : zConfImpl_r.cfg_config_path ) / "multiversion.d";
784 
785  filesystem::dirForEach( Pathname::assertprefix( root_r, multiversionDir ),
786  [&spec_r]( const Pathname & dir_r, const char *const & name_r )->bool
787  {
788  MIL << "Parsing " << dir_r/name_r << endl;
789  iostr::simpleParseFile( InputStream( dir_r/name_r ),
790  [&spec_r]( int num_r, std::string line_r )->bool
791  {
792  DBG << " found " << line_r << endl;
793  spec_r.insert( std::move(line_r) );
794  return true;
795  } );
796  return true;
797  } );
798  }
799 
800  private:
802  };
803 
805  { return _multiversionMap.getSpec( _autodetectSystemRoot(), *this ); }
806 
808  };
810 
812  //
813  // METHOD NAME : ZConfig::instance
814  // METHOD TYPE : ZConfig &
815  //
817  {
818  static ZConfig _instance; // The singleton
819  return _instance;
820  }
821 
823  //
824  // METHOD NAME : ZConfig::ZConfig
825  // METHOD TYPE : Ctor
826  //
828  : _pimpl( new Impl )
829  {
830  about( MIL );
831  }
832 
834  //
835  // METHOD NAME : ZConfig::~ZConfig
836  // METHOD TYPE : Dtor
837  //
839  {}
840 
842  { return _autodetectSystemRoot(); }
843 
844 
846  {
847  return ( _pimpl->cfg_repo_mgr_root_path.empty()
848  ? systemRoot() : _pimpl->cfg_repo_mgr_root_path );
849  }
850 
852  { _pimpl->cfg_repo_mgr_root_path = root; }
853 
855  //
856  // system architecture
857  //
859 
861  {
862  static Arch _val( _autodetectSystemArchitecture() );
863  return _val;
864  }
865 
867  { return _pimpl->cfg_arch; }
868 
869  void ZConfig::setSystemArchitecture( const Arch & arch_r )
870  {
871  if ( arch_r != _pimpl->cfg_arch )
872  {
873  WAR << "Overriding system architecture (" << _pimpl->cfg_arch << "): " << arch_r << endl;
874  _pimpl->cfg_arch = arch_r;
875  }
876  }
877 
879  //
880  // text locale
881  //
883 
885  {
886  static Locale _val( _autodetectTextLocale() );
887  return _val;
888  }
889 
891  { return _pimpl->cfg_textLocale; }
892 
893  void ZConfig::setTextLocale( const Locale & locale_r )
894  {
895  if ( locale_r != _pimpl->cfg_textLocale )
896  {
897  WAR << "Overriding text locale (" << _pimpl->cfg_textLocale << "): " << locale_r << endl;
898  _pimpl->cfg_textLocale = locale_r;
899  // Propagate changes
900  sat::Pool::instance().setTextLocale( locale_r );
901  }
902  }
903 
905  // user data
907 
908  bool ZConfig::hasUserData() const
909  { return !_pimpl->userData.empty(); }
910 
911  std::string ZConfig::userData() const
912  { return _pimpl->userData; }
913 
914  bool ZConfig::setUserData( const std::string & str_r )
915  {
916  for_( ch, str_r.begin(), str_r.end() )
917  {
918  if ( *ch < ' ' && *ch != '\t' )
919  {
920  ERR << "New user data string rejectded: char " << (int)*ch << " at position " << (ch - str_r.begin()) << endl;
921  return false;
922  }
923  }
924  MIL << "Set user data string to '" << str_r << "'" << endl;
925  _pimpl->userData = str_r;
926  return true;
927  }
928 
930 
932  {
933  return ( _pimpl->cfg_cache_path.get().empty()
934  ? Pathname("/var/cache/zypp") : _pimpl->cfg_cache_path.get() );
935  }
936 
938  {
939  return repoCachePath()/"pubkeys";
940  }
941 
943  {
944  _pimpl->cfg_cache_path = path_r;
945  }
946 
948  {
949  return ( _pimpl->cfg_metadata_path.get().empty()
950  ? (repoCachePath()/"raw") : _pimpl->cfg_metadata_path.get() );
951  }
952 
954  {
955  _pimpl->cfg_metadata_path = path_r;
956  }
957 
959  {
960  return ( _pimpl->cfg_solvfiles_path.get().empty()
961  ? (repoCachePath()/"solv") : _pimpl->cfg_solvfiles_path.get() );
962  }
963 
965  {
966  _pimpl->cfg_solvfiles_path = path_r;
967  }
968 
970  {
971  return ( _pimpl->cfg_packages_path.get().empty()
972  ? (repoCachePath()/"packages") : _pimpl->cfg_packages_path.get() );
973  }
974 
976  {
977  _pimpl->cfg_packages_path = path_r;
978  }
979 
981  { return _pimpl->cfg_cache_path.getDefault().empty() ? Pathname("/var/cache/zypp") : _pimpl->cfg_cache_path.getDefault(); }
982 
984  { return _pimpl->cfg_metadata_path.getDefault().empty() ? (builtinRepoCachePath()/"raw") : _pimpl->cfg_metadata_path.getDefault(); }
985 
987  { return _pimpl->cfg_solvfiles_path.getDefault().empty() ? (builtinRepoCachePath()/"solv") : _pimpl->cfg_solvfiles_path.getDefault(); }
988 
990  { return _pimpl->cfg_packages_path.getDefault().empty() ? (builtinRepoCachePath()/"packages") : _pimpl->cfg_packages_path.getDefault(); }
991 
993 
995  {
996  return ( _pimpl->cfg_config_path.empty()
997  ? Pathname("/etc/zypp") : _pimpl->cfg_config_path );
998  }
999 
1001  {
1002  return ( _pimpl->cfg_known_repos_path.empty()
1003  ? (configPath()/"repos.d") : _pimpl->cfg_known_repos_path );
1004  }
1005 
1007  {
1008  return ( _pimpl->cfg_known_services_path.empty()
1009  ? (configPath()/"services.d") : _pimpl->cfg_known_services_path );
1010  }
1011 
1013  { return configPath()/"needreboot"; }
1014 
1016  { return configPath()/"needreboot.d"; }
1017 
1019  {
1020  return ( _pimpl->cfg_vars_path.empty()
1021  ? (configPath()/"vars.d") : _pimpl->cfg_vars_path );
1022  }
1023 
1025  {
1026  return ( _pimpl->cfg_vendor_path.empty()
1027  ? (configPath()/"vendors.d") : _pimpl->cfg_vendor_path );
1028  }
1029 
1031  {
1032  return ( _pimpl->locks_file.empty()
1033  ? (configPath()/"locks") : _pimpl->locks_file );
1034  }
1035 
1037 
1039  { return _pimpl->repo_add_probe; }
1040 
1042  { return _pimpl->repo_refresh_delay; }
1043 
1045  { return _pimpl->repoRefreshLocales.empty() ? Target::requestedLocales("") :_pimpl->repoRefreshLocales; }
1046 
1048  { return _pimpl->repoLabelIsAlias; }
1049 
1050  void ZConfig::repoLabelIsAlias( bool yesno_r )
1051  { _pimpl->repoLabelIsAlias = yesno_r; }
1052 
1054  { return _pimpl->download_use_deltarpm; }
1055 
1057  { return download_use_deltarpm() && _pimpl->download_use_deltarpm_always; }
1058 
1060  { return _pimpl->download_media_prefer_download; }
1061 
1063  { _pimpl->download_media_prefer_download.set( yesno_r ); }
1064 
1066  { _pimpl->download_media_prefer_download.restoreToDefault(); }
1067 
1069  { return _pimpl->download_max_concurrent_connections; }
1070 
1072  { return _pimpl->download_min_download_speed; }
1073 
1075  { return _pimpl->download_max_download_speed; }
1076 
1078  { return _pimpl->download_max_silent_tries; }
1079 
1081  { return _pimpl->download_transfer_timeout; }
1082 
1083  Pathname ZConfig::download_mediaMountdir() const { return _pimpl->download_mediaMountdir; }
1084  void ZConfig::set_download_mediaMountdir( Pathname newval_r ) { _pimpl->download_mediaMountdir.set( std::move(newval_r) ); }
1085  void ZConfig::set_default_download_mediaMountdir() { _pimpl->download_mediaMountdir.restoreToDefault(); }
1086 
1088  { return _pimpl->commit_downloadMode; }
1089 
1090 
1091  bool ZConfig::gpgCheck() const { return _pimpl->gpgCheck; }
1092  TriBool ZConfig::repoGpgCheck() const { return _pimpl->repoGpgCheck; }
1093  TriBool ZConfig::pkgGpgCheck() const { return _pimpl->pkgGpgCheck; }
1094 
1095  void ZConfig::setGpgCheck( bool val_r ) { _pimpl->gpgCheck.set( val_r ); }
1096  void ZConfig::setRepoGpgCheck( TriBool val_r ) { _pimpl->repoGpgCheck.set( val_r ); }
1097  void ZConfig::setPkgGpgCheck( TriBool val_r ) { _pimpl->pkgGpgCheck.set( val_r ); }
1098 
1099  void ZConfig::resetGpgCheck() { _pimpl->gpgCheck.restoreToDefault(); }
1100  void ZConfig::resetRepoGpgCheck() { _pimpl->repoGpgCheck.restoreToDefault(); }
1101  void ZConfig::resetPkgGpgCheck() { _pimpl->pkgGpgCheck.restoreToDefault(); }
1102 
1103  ResolverFocus ZConfig::solver_focus() const { return _pimpl->solver_focus; }
1104 
1106  { return _pimpl->solver_onlyRequires; }
1107 
1109  { return _pimpl->solver_allowVendorChange; }
1110 
1111  bool ZConfig::solver_dupAllowDowngrade() const { return _pimpl->solver_dupAllowDowngrade; }
1112  bool ZConfig::solver_dupAllowNameChange() const { return _pimpl->solver_dupAllowNameChange; }
1113  bool ZConfig::solver_dupAllowArchChange() const { return _pimpl->solver_dupAllowArchChange; }
1114  bool ZConfig::solver_dupAllowVendorChange() const { return _pimpl->solver_dupAllowVendorChange; }
1115 
1117  { return _pimpl->solver_cleandepsOnRemove; }
1118 
1120  { return ( _pimpl->solver_checkSystemFile.empty()
1121  ? (configPath()/"systemCheck") : _pimpl->solver_checkSystemFile ); }
1122 
1124  { return ( _pimpl->solver_checkSystemFileDir.empty()
1125  ? (configPath()/"systemCheck.d") : _pimpl->solver_checkSystemFileDir ); }
1126 
1128  { return _pimpl->solver_upgradeTestcasesToKeep; }
1129 
1130  bool ZConfig::solverUpgradeRemoveDroppedPackages() const { return _pimpl->solverUpgradeRemoveDroppedPackages; }
1131  void ZConfig::setSolverUpgradeRemoveDroppedPackages( bool val_r ) { _pimpl->solverUpgradeRemoveDroppedPackages.set( val_r ); }
1132  void ZConfig::resetSolverUpgradeRemoveDroppedPackages() { _pimpl->solverUpgradeRemoveDroppedPackages.restoreToDefault(); }
1133 
1134  namespace
1135  {
1136  inline void sigMultiversionSpecChanged()
1137  {
1139  }
1140  }
1141 
1142  const std::set<std::string> & ZConfig::multiversionSpec() const { return _pimpl->multiversion(); }
1143  void ZConfig::multiversionSpec( std::set<std::string> new_r ) { _pimpl->multiversion().swap( new_r ); sigMultiversionSpecChanged(); }
1144  void ZConfig::clearMultiversionSpec() { _pimpl->multiversion().clear(); sigMultiversionSpecChanged(); }
1145  void ZConfig::addMultiversionSpec( const std::string & name_r ) { _pimpl->multiversion().insert( name_r ); sigMultiversionSpecChanged(); }
1146  void ZConfig::removeMultiversionSpec( const std::string & name_r ) { _pimpl->multiversion().erase( name_r ); sigMultiversionSpecChanged(); }
1147 
1149  { return _pimpl->apply_locks_file; }
1150 
1152  {
1153  return ( _pimpl->update_data_path.empty()
1154  ? Pathname("/var/adm") : _pimpl->update_data_path );
1155  }
1156 
1158  {
1159  return ( _pimpl->update_messages_path.empty()
1160  ? Pathname(update_dataPath()/"update-messages") : _pimpl->update_messages_path );
1161  }
1162 
1164  {
1165  return ( _pimpl->update_scripts_path.empty()
1166  ? Pathname(update_dataPath()/"update-scripts") : _pimpl->update_scripts_path );
1167  }
1168 
1169  std::string ZConfig::updateMessagesNotify() const
1170  { return _pimpl->updateMessagesNotify; }
1171 
1172  void ZConfig::setUpdateMessagesNotify( const std::string & val_r )
1173  { _pimpl->updateMessagesNotify.set( val_r ); }
1174 
1176  { _pimpl->updateMessagesNotify.restoreToDefault(); }
1177 
1179 
1180  target::rpm::RpmInstFlags ZConfig::rpmInstallFlags() const
1181  { return _pimpl->rpmInstallFlags; }
1182 
1183 
1185  {
1186  return ( _pimpl->history_log_path.empty() ?
1187  Pathname("/var/log/zypp/history") : _pimpl->history_log_path );
1188  }
1189 
1191  {
1192  return ( _pimpl->credentials_global_dir_path.empty() ?
1193  Pathname("/etc/zypp/credentials.d") : _pimpl->credentials_global_dir_path );
1194  }
1195 
1197  {
1198  return ( _pimpl->credentials_global_file_path.empty() ?
1199  Pathname("/etc/zypp/credentials.cat") : _pimpl->credentials_global_file_path );
1200  }
1201 
1203 
1204  std::string ZConfig::distroverpkg() const
1205  { return "system-release"; }
1206 
1208 
1210  { return _pimpl->pluginsPath.get(); }
1211 
1212  std::string ZConfig::multiversionKernels() const
1213  {
1214  return _pimpl->cfg_kernel_keep_spec;
1215  }
1216 
1218 
1219  std::ostream & ZConfig::about( std::ostream & str ) const
1220  {
1221  str << "libzypp: " LIBZYPP_VERSION_STRING << endl;
1222 
1223  str << "libsolv: " << solv_version;
1224  if ( ::strcmp( solv_version, LIBSOLV_VERSION_STRING ) )
1225  str << " (built against " << LIBSOLV_VERSION_STRING << ")";
1226  str << endl;
1227 
1228  str << "zypp.conf: '" << _pimpl->_parsedZyppConf << "'" << endl;
1229  str << "TextLocale: '" << textLocale() << "' (" << defaultTextLocale() << ")" << endl;
1230  str << "SystemArchitecture: '" << systemArchitecture() << "' (" << defaultSystemArchitecture() << ")" << endl;
1231  return str;
1232  }
1233 
1235 } // namespace zypp
Architecture.
Definition: Arch.h:37
Helper to create and pass std::istream.
Definition: InputStream.h:57
'Language[_Country]' codes.
Definition: Locale.h:50
static const Locale enCode
Last resort "en".
Definition: Locale.h:77
LocaleSet requestedLocales() const
Languages to be supported by the system.
Definition: Target.cc:94
ZConfig implementation.
Definition: ZConfig.cc:307
Pathname cfg_multiversion_path
Definition: ZConfig.cc:662
DefaultOption< Pathname > download_mediaMountdir
Definition: ZConfig.cc:679
int download_max_silent_tries
Definition: ZConfig.cc:684
std::set< std::string > MultiversionSpec
Definition: ZConfig.cc:308
DefaultOption< Pathname > cfg_metadata_path
Definition: ZConfig.cc:651
Pathname cfg_known_repos_path
Definition: ZConfig.cc:656
Pathname cfg_known_services_path
Definition: ZConfig.cc:657
Pathname cfg_vars_path
Definition: ZConfig.cc:658
Pathname credentials_global_file_path
Definition: ZConfig.cc:716
Option< bool > solver_allowVendorChange
Definition: ZConfig.cc:695
int download_min_download_speed
Definition: ZConfig.cc:682
int download_max_download_speed
Definition: ZConfig.cc:683
DefaultOption< Pathname > cfg_packages_path
Definition: ZConfig.cc:653
bool download_use_deltarpm_always
Definition: ZConfig.cc:677
Pathname _parsedZyppConf
Remember any parsed zypp.conf.
Definition: ZConfig.cc:645
Pathname solver_checkSystemFile
Definition: ZConfig.cc:704
MultiversionMap _multiversionMap
Definition: ZConfig.cc:807
Option< bool > solver_dupAllowNameChange
Definition: ZConfig.cc:697
Pathname update_data_path
Definition: ZConfig.cc:666
Pathname history_log_path
Definition: ZConfig.cc:714
Pathname locks_file
Definition: ZConfig.cc:664
Option< unsigned > solver_upgradeTestcasesToKeep
Definition: ZConfig.cc:701
LocaleSet repoRefreshLocales
Definition: ZConfig.cc:673
DefaultOption< Pathname > cfg_cache_path
Definition: ZConfig.cc:650
Impl(const Pathname &override_r=Pathname())
Definition: ZConfig.cc:311
Option< bool > solver_dupAllowArchChange
Definition: ZConfig.cc:698
ResolverFocus solver_focus
Definition: ZConfig.cc:693
Pathname update_scripts_path
Definition: ZConfig.cc:667
Option< Pathname > pluginsPath
Definition: ZConfig.cc:720
std::string userData
Definition: ZConfig.cc:718
Pathname credentials_global_dir_path
Definition: ZConfig.cc:715
std::string cfg_kernel_keep_spec
Definition: ZConfig.cc:663
DefaultOption< TriBool > repoGpgCheck
Definition: ZConfig.cc:690
Option< bool > solver_dupAllowVendorChange
Definition: ZConfig.cc:699
unsigned repo_refresh_delay
Definition: ZConfig.cc:672
Option< DownloadMode > commit_downloadMode
Definition: ZConfig.cc:687
Option< bool > solver_dupAllowDowngrade
Definition: ZConfig.cc:696
Locale cfg_textLocale
Definition: ZConfig.cc:648
MultiversionSpec & getMultiversion() const
Definition: ZConfig.cc:804
DefaultOption< bool > download_media_prefer_download
Definition: ZConfig.cc:678
bool download_use_deltarpm
Definition: ZConfig.cc:676
Pathname solver_checkSystemFileDir
Definition: ZConfig.cc:705
Pathname cfg_config_path
Definition: ZConfig.cc:655
target::rpm::RpmInstFlags rpmInstallFlags
Definition: ZConfig.cc:712
Pathname update_messages_path
Definition: ZConfig.cc:668
DefaultOption< bool > solverUpgradeRemoveDroppedPackages
Definition: ZConfig.cc:702
int download_transfer_timeout
Definition: ZConfig.cc:685
Pathname cfg_repo_mgr_root_path
Definition: ZConfig.cc:659
const MultiversionSpec & multiversion() const
Definition: ZConfig.cc:708
DefaultOption< TriBool > pkgGpgCheck
Definition: ZConfig.cc:691
MultiversionSpec & multiversion()
Definition: ZConfig.cc:707
DefaultOption< std::string > updateMessagesNotify
Definition: ZConfig.cc:669
Pathname cfg_vendor_path
Definition: ZConfig.cc:661
Option< bool > solver_cleandepsOnRemove
Definition: ZConfig.cc:700
int download_max_concurrent_connections
Definition: ZConfig.cc:681
DefaultOption< Pathname > cfg_solvfiles_path
Definition: ZConfig.cc:652
Option< bool > solver_onlyRequires
Definition: ZConfig.cc:694
DefaultOption< bool > gpgCheck
Definition: ZConfig.cc:689
Interim helper class to collect global options and settings.
Definition: ZConfig.h:62
bool hasUserData() const
Whether a (non empty) user data sting is defined.
Definition: ZConfig.cc:908
bool solver_cleandepsOnRemove() const
Whether removing a package should also remove no longer needed requirements.
Definition: ZConfig.cc:1116
std::string userData() const
User defined string value to be passed to log, history, plugins...
Definition: ZConfig.cc:911
Pathname knownServicesPath() const
Path where the known services .service files are kept (configPath()/services.d).
Definition: ZConfig.cc:1006
void removeMultiversionSpec(const std::string &name_r)
Definition: ZConfig.cc:1146
Pathname repoPackagesPath() const
Path where the repo packages are downloaded and kept (repoCachePath()/packages).
Definition: ZConfig.cc:969
unsigned repo_refresh_delay() const
Amount of time in minutes that must pass before another refresh.
Definition: ZConfig.cc:1041
Arch systemArchitecture() const
The system architecture zypp uses.
Definition: ZConfig.cc:866
Locale textLocale() const
The locale for translated texts zypp uses.
Definition: ZConfig.cc:890
Pathname update_dataPath() const
Path where the update items are kept (/var/adm)
Definition: ZConfig.cc:1151
ResolverFocus solver_focus() const
The resolvers general attitude when resolving jobs.
Definition: ZConfig.cc:1103
Pathname update_messagesPath() const
Path where the repo solv files are created and kept (update_dataPath()/solv).
Definition: ZConfig.cc:1157
Pathname builtinRepoSolvfilesPath() const
The builtin config file value.
Definition: ZConfig.cc:986
Pathname pluginsPath() const
Defaults to /usr/lib/zypp/plugins.
Definition: ZConfig.cc:1209
Pathname repoManagerRoot() const
The RepoManager root directory.
Definition: ZConfig.cc:845
void resetRepoGpgCheck()
Reset to the zconfig default.
Definition: ZConfig.cc:1100
bool gpgCheck() const
Turn signature checking on/off (on)
Definition: ZConfig.cc:1091
Pathname knownReposPath() const
Path where the known repositories .repo files are kept (configPath()/repos.d).
Definition: ZConfig.cc:1000
Pathname update_scriptsPath() const
Path where the repo metadata is downloaded and kept (update_dataPath()/).
Definition: ZConfig.cc:1163
long download_transfer_timeout() const
Maximum time in seconds that you allow a transfer operation to take.
Definition: ZConfig.cc:1080
void setRepoManagerRoot(const Pathname &root)
Sets the RepoManager root directory.
Definition: ZConfig.cc:851
bool solver_dupAllowArchChange() const
DUP tune: Whether to allow package arch changes upon DUP.
Definition: ZConfig.cc:1113
void setTextLocale(const Locale &locale_r)
Set the preferred locale for translated texts.
Definition: ZConfig.cc:893
bool solverUpgradeRemoveDroppedPackages() const
Whether dist upgrade should remove a products dropped packages (true).
Definition: ZConfig.cc:1130
static Locale defaultTextLocale()
The autodetected preferred locale for translated texts.
Definition: ZConfig.cc:884
Pathname download_mediaMountdir() const
Path where media are preferably mounted or downloaded.
Definition: ZConfig.cc:1083
void resetSolverUpgradeRemoveDroppedPackages()
Reset solverUpgradeRemoveDroppedPackages to the zypp.conf default.
Definition: ZConfig.cc:1132
bool apply_locks_file() const
Whether locks file should be read and applied after start (true)
Definition: ZConfig.cc:1148
bool solver_allowVendorChange() const
Whether vendor check is by default enabled.
Definition: ZConfig.cc:1108
void set_default_download_mediaMountdir()
Reset to zypp.cong default.
Definition: ZConfig.cc:1085
Pathname repoCachePath() const
Path where the caches are kept (/var/cache/zypp)
Definition: ZConfig.cc:931
void setPkgGpgCheck(TriBool val_r)
Change the value.
Definition: ZConfig.cc:1097
Pathname needrebootPath() const
Path where the custom needreboot config files are kept (configPath()/needreboot.d).
Definition: ZConfig.cc:1015
bool setUserData(const std::string &str_r)
Set a new userData string.
Definition: ZConfig.cc:914
Pathname systemRoot() const
The target root directory.
Definition: ZConfig.cc:841
long download_max_silent_tries() const
Maximum silent tries.
Definition: ZConfig.cc:1077
bool repo_add_probe() const
Whether repository urls should be probed.
Definition: ZConfig.cc:1038
target::rpm::RpmInstFlags rpmInstallFlags() const
The default target::rpm::RpmInstFlags for ZYppCommitPolicy.
Definition: ZConfig.cc:1180
void setUpdateMessagesNotify(const std::string &val_r)
Set a new command definition (see update.messages.notify in zypp.conf).
Definition: ZConfig.cc:1172
unsigned solver_upgradeTestcasesToKeep() const
When committing a dist upgrade (e.g.
Definition: ZConfig.cc:1127
Pathname repoMetadataPath() const
Path where the repo metadata is downloaded and kept (repoCachePath()/raw).
Definition: ZConfig.cc:947
Pathname vendorPath() const
Directory for equivalent vendor definitions (configPath()/vendors.d)
Definition: ZConfig.cc:1024
long download_min_download_speed() const
Minimum download speed (bytes per second) until the connection is dropped.
Definition: ZConfig.cc:1071
DownloadMode commit_downloadMode() const
Commit download policy to use as default.
Definition: ZConfig.cc:1087
Pathname needrebootFile() const
Path of the default needreboot config file (configPath()/needreboot).
Definition: ZConfig.cc:1012
void setGpgCheck(bool val_r)
Change the value.
Definition: ZConfig.cc:1095
bool solver_dupAllowVendorChange() const
DUP tune: Whether to allow package vendor changes upon DUP.
Definition: ZConfig.cc:1114
~ZConfig()
Dtor.
Definition: ZConfig.cc:838
Pathname locksFile() const
Path where zypp can find or create lock file (configPath()/locks)
Definition: ZConfig.cc:1030
RW_pointer< Impl, rw_pointer::Scoped< Impl > > _pimpl
Pointer to implementation.
Definition: ZConfig.h:567
Pathname repoSolvfilesPath() const
Path where the repo solv files are created and kept (repoCachePath()/solv).
Definition: ZConfig.cc:958
Pathname historyLogFile() const
Path where ZYpp install history is logged.
Definition: ZConfig.cc:1184
void setSystemArchitecture(const Arch &arch_r)
Override the zypp system architecture.
Definition: ZConfig.cc:869
TriBool pkgGpgCheck() const
Check rpm package signatures (indeterminate - according to gpgcheck)
Definition: ZConfig.cc:1093
static ZConfig & instance()
Singleton ctor.
Definition: Resolver.cc:126
void setRepoPackagesPath(const Pathname &path_r)
Set a new path as the default repo cache path.
Definition: ZConfig.cc:975
void setRepoSolvfilesPath(const Pathname &path_r)
Set a new path as the default repo cache path.
Definition: ZConfig.cc:964
void resetUpdateMessagesNotify()
Reset to the zypp.conf default.
Definition: ZConfig.cc:1175
std::ostream & about(std::ostream &str) const
Print some detail about the current libzypp version.
Definition: ZConfig.cc:1219
const std::set< std::string > & multiversionSpec() const
Definition: ZConfig.cc:1142
void set_download_mediaMountdir(Pathname newval_r)
Set alternate value.
Definition: ZConfig.cc:1084
bool download_use_deltarpm() const
Whether to consider using a deltarpm when downloading a package.
Definition: ZConfig.cc:1053
TriBool repoGpgCheck() const
Check repo matadata signatures (indeterminate - according to gpgcheck)
Definition: ZConfig.cc:1092
void set_download_media_prefer_download(bool yesno_r)
Set download_media_prefer_download to a specific value.
Definition: ZConfig.cc:1062
std::string updateMessagesNotify() const
Command definition for sending update messages.
Definition: ZConfig.cc:1169
void addMultiversionSpec(const std::string &name_r)
Definition: ZConfig.cc:1145
Pathname builtinRepoCachePath() const
The builtin config file value.
Definition: ZConfig.cc:980
Pathname builtinRepoPackagesPath() const
The builtin config file value.
Definition: ZConfig.cc:989
Pathname solver_checkSystemFile() const
File in which dependencies described which has to be fulfilled for a running system.
Definition: ZConfig.cc:1119
Pathname builtinRepoMetadataPath() const
The builtin config file value.
Definition: ZConfig.cc:983
void set_default_download_media_prefer_download()
Set download_media_prefer_download to the configfiles default.
Definition: ZConfig.cc:1065
Pathname solver_checkSystemFileDir() const
Directory, which may or may not contain files in which dependencies described which has to be fulfill...
Definition: ZConfig.cc:1123
void resetGpgCheck()
Reset to the zconfig default.
Definition: ZConfig.cc:1099
void setSolverUpgradeRemoveDroppedPackages(bool val_r)
Set solverUpgradeRemoveDroppedPackages to val_r.
Definition: ZConfig.cc:1131
Pathname configPath() const
Path where the configfiles are kept (/etc/zypp).
Definition: ZConfig.cc:994
static Arch defaultSystemArchitecture()
The autodetected system architecture.
Definition: ZConfig.cc:860
ZConfig()
Default ctor.
Definition: ZConfig.cc:827
Pathname pubkeyCachePath() const
Path where the pubkey caches.
Definition: ZConfig.cc:937
long download_max_concurrent_connections() const
Maximum number of concurrent connections for a single transfer.
Definition: ZConfig.cc:1068
void resetPkgGpgCheck()
Reset to the zconfig default.
Definition: ZConfig.cc:1101
bool solver_onlyRequires() const
Solver regards required packages,patterns,...
Definition: ZConfig.cc:1105
Pathname varsPath() const
Path containing custom repo variable definitions (configPath()/vars.d).
Definition: ZConfig.cc:1018
bool solver_dupAllowNameChange() const
DUP tune: Whether to follow package renames upon DUP.
Definition: ZConfig.cc:1112
bool repoLabelIsAlias() const
Whether to use repository alias or name in user messages (progress, exceptions, .....
Definition: ZConfig.cc:1047
void clearMultiversionSpec()
Definition: ZConfig.cc:1144
LocaleSet repoRefreshLocales() const
List of locales for which translated package descriptions should be downloaded.
Definition: ZConfig.cc:1044
long download_max_download_speed() const
Maximum download speed (bytes per second)
Definition: ZConfig.cc:1074
void setRepoMetadataPath(const Pathname &path_r)
Set a new path as the default repo cache path.
Definition: ZConfig.cc:953
bool solver_dupAllowDowngrade() const
DUP tune: Whether to allow version downgrades upon DUP.
Definition: ZConfig.cc:1111
std::string multiversionKernels() const
Definition: ZConfig.cc:1212
std::string distroverpkg() const
Package telling the "product version" on systems not using /etc/product.d/baseproduct.
Definition: ZConfig.cc:1204
bool download_use_deltarpm_always() const
Whether to consider using a deltarpm even when rpm is local.
Definition: ZConfig.cc:1056
void setRepoCachePath(const Pathname &path_r)
Set a new path as the default repo cache path.
Definition: ZConfig.cc:942
void setRepoGpgCheck(TriBool val_r)
Change the value.
Definition: ZConfig.cc:1096
Pathname credentialsGlobalDir() const
Defaults to /etc/zypp/credentials.d.
Definition: ZConfig.cc:1190
bool download_media_prefer_download() const
Hint which media to prefer when installing packages (download vs.
Definition: ZConfig.cc:1059
Pathname credentialsGlobalFile() const
Defaults to /etc/zypp/credentials.cat.
Definition: ZConfig.cc:1196
Wrapper class for ::stat/::lstat.
Definition: PathInfo.h:221
bool empty() const
Test for an empty path.
Definition: Pathname.h:114
static Pathname assertprefix(const Pathname &root_r, const Pathname &path_r)
Return path_r prefixed with root_r, unless it is already prefixed.
Definition: Pathname.cc:235
Parses a INI file and offers its structure as a dictionary.
Definition: IniDict.h:42
section_const_iterator sectionsEnd() const
Definition: IniDict.cc:110
EntrySet::const_iterator entry_const_iterator
Definition: IniDict.h:48
MapKVIteratorTraits< SectionSet >::Key_const_iterator section_const_iterator
Definition: IniDict.h:47
entry_const_iterator entriesBegin(const std::string &section) const
Definition: IniDict.cc:72
section_const_iterator sectionsBegin() const
Definition: IniDict.cc:105
entry_const_iterator entriesEnd(const std::string &section) const
Definition: IniDict.cc:83
void setTextLocale(const Locale &locale_r)
Set the default language for retrieving translated texts.
Definition: Pool.cc:233
static Pool instance()
Singleton ctor.
Definition: Pool.h:55
Regular expression.
Definition: Regex.h:95
Regular expression match result.
Definition: Regex.h:168
boost::logic::tribool TriBool
3-state boolean logic (true, false and indeterminate).
Definition: String.h:30
Definition: Arch.h:348
String related utilities and Regular expression matching.
Types and functions for filesystem operations.
Definition: Glob.cc:24
int dirForEach(const Pathname &dir_r, const StrMatcher &matcher_r, function< bool(const Pathname &, const char *const)> fnc_r)
Definition: PathInfo.cc:32
int simpleParseFile(std::istream &str_r, ParseFlags flags_r, function< bool(int, std::string)> consume_r)
Simple lineparser optionally trimming and skipping comments.
Definition: IOStream.cc:124
bool hasPrefix(const C_Str &str_r, const C_Str &prefix_r)
Return whether str_r has prefix prefix_r.
Definition: String.h:1027
TriBool strToTriBool(const C_Str &str)
Parse str into a bool if it's a legal true or false string; else indterminate.
Definition: String.cc:93
bool regex_match(const std::string &s, smatch &matches, const regex &regex)
\relates regex \ingroup ZYPP_STR_REGEX \relates regex \ingroup ZYPP_STR_REGEX
Definition: Regex.h:70
bool strToBool(const C_Str &str, bool default_r)
Parse str into a bool depending on the default value.
Definition: String.h:429
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.
Definition: String.h:531
TInt strtonum(const C_Str &str)
Parsing numbers from string.
Definition: String.h:388
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.
Definition: String.h:595
int compareCI(const C_Str &lhs, const C_Str &rhs)
Definition: String.h:984
Easy-to use interface to the ZYPP dependency resolver.
Definition: CodePitfalls.doc:2
bool fromString(const std::string &val_r, ResolverFocus &ret_r)
ResolverFocus
The resolvers general attitude.
Definition: ResolverFocus.h:22
@ Default
Request the standard behavior (as defined in zypp.conf or 'Job')
std::unordered_set< Locale > LocaleSet
Definition: Locale.h:27
DownloadMode
Supported commit download policies.
Definition: DownloadMode.h:23
@ DownloadDefault
libzypp will decide what to do.
Definition: DownloadMode.h:24
Mutable option with initial value also remembering a config value.
Definition: ZConfig.cc:265
DefaultOption(value_type initial_r)
Definition: ZConfig.cc:269
DefaultOption & operator=(value_type newval_r)
Definition: ZConfig.cc:274
option_type _default
Definition: ZConfig.cc:294
void setDefault(value_type newval_r)
Set a new default value.
Definition: ZConfig.cc:290
void restoreToDefault(value_type newval_r)
Reset value to a new default.
Definition: ZConfig.cc:282
const value_type & getDefault() const
Get the current default value.
Definition: ZConfig.cc:286
Option< Tp > option_type
Definition: ZConfig.cc:267
void restoreToDefault()
Reset value to the current default.
Definition: ZConfig.cc:278
Mutable option.
Definition: ZConfig.cc:235
void set(value_type newval_r)
Set a new value.
Definition: ZConfig.cc:255
Option(value_type initial_r)
No default ctor, explicit initialisation!
Definition: ZConfig.cc:239
value_type _val
Definition: ZConfig.cc:259
Option & operator=(value_type newval_r)
Definition: ZConfig.cc:243
const value_type & get() const
Get the value.
Definition: ZConfig.cc:247
MultiversionSpec & getDefaultSpec()
Definition: ZConfig.cc:756
void scanDirAt(const Pathname root_r, MultiversionSpec &spec_r, const Impl &zConfImpl_r)
Definition: ZConfig.cc:776
std::map< Pathname, MultiversionSpec > SpecMap
Definition: ZConfig.cc:730
MultiversionSpec & getSpec(Pathname root_r, const Impl &zConfImpl_r)
Definition: ZConfig.cc:732
void scanConfAt(const Pathname root_r, MultiversionSpec &spec_r, const Impl &zConfImpl_r)
Definition: ZConfig.cc:760
static PoolImpl & myPool()
Definition: PoolImpl.cc:178
#define for_(IT, BEG, END)
Convenient for-loops using iterator.
Definition: Easy.h:28
#define DBG
Definition: Logger.h:95
#define MIL
Definition: Logger.h:96
#define ERR
Definition: Logger.h:98
#define WAR
Definition: Logger.h:97
#define INT
Definition: Logger.h:100