14#include <zypp/TmpPath.h>
15#include <zypp/base/Logger.h>
16#include <zypp/base/String.h>
32#include <zypp-core/zyppng/base/private/linuxhelpers_p.h>
44 volatile sig_atomic_t shutdownPipeRead{-1};
45 volatile sig_atomic_t shutdownPipeWrite{-1};
47 bool makeShutdownPipe() {
48 int pipeFds[]{ -1, -1 };
50 if ( ::pipe2( pipeFds, O_CLOEXEC ) != 0 )
53 if ( ::pipe( pipeFds ) != 0 )
55 ::fcntl( pipeFds[0], F_SETFD, O_CLOEXEC );
56 ::fcntl( pipeFds[1], F_SETFD, O_CLOEXEC );
58 shutdownPipeRead = pipeFds[0];
59 shutdownPipeWrite = pipeFds[1];
63 const bool ensureShutdownPipe() {
64 static auto pipesInitialized = makeShutdownPipe();
65 return pipesInitialized;
68 const int shutdownPipeReadFd() {
69 if ( !ensureShutdownPipe() )
71 return static_cast<int>(shutdownPipeRead);
74 const int shutdownPipeWriteFd() {
75 return static_cast<int>(shutdownPipeWrite);
89 static weak_ptr<callback::TempConnect<media::MediaChangeReport> > globalguard;
90 if ( condition_r && ! (
_guard = globalguard.lock()) )
108 namespace zypp_detail
121 if ( !ensureShutdownPipe() )
122 WAR <<
"Failed to create shutdown pipe" << std::endl;
125 MIL <<
"Initializing keyring..." << std::endl;
177 INT <<
"2 active targets at the same time must not happen!" << endl;
180 resolver()->setDefaultSolverFlags(
false );
185 MIL <<
"initTarget( " << root << (doRebuild_r?
", rebuilddb":
"") <<
")" << endl;
188 MIL <<
"Repeated call to initializeTarget()" << endl;
213 if ( getenv(
"ZYPP_TESTSUITE_FAKE_ARCH") )
218 MIL <<
"Attempt to commit (" << policy_r <<
")" << endl;
245 MIL <<
"Commit (" << policy_r <<
") returned: "
254 _target->_pimpl->installSrcPackage( srcPackage_r );
261 return _target->_pimpl->provideSrcPackage( srcPackage_r );
280 int sigFd = shutdownPipeWriteFd();
285 zyppng::eintrSafeCall( write, sigFd,
"1", 1 );
292 int sigFd = shutdownPipeWriteFd();
299 while( zyppng::eintrSafeCall( read, sigFd, &buf, 1 ) > 0 )
310 return str <<
"ZYppImpl";
316 const auto shutdownFd = shutdownPipeReadFd();
317 if (shutdownFd == -1) {
328 OnScopeExit removeShutdownFd( [&](){ fds.pop_back(); } );
330 int r = zyppng::eintrSafeCall( g_poll, fds.data(), fds.size(), timeout );
333 if ( fds.back().revents )
346 return _tmpdir.
path();
Compute disk space occupied by packages across partitions/directories.
std::set< MountPoint > MountPointSet
static MountPointSet detectMountPoints(const std::string &rootdir="/")
Get mountpoints of system below rootdir If we happen to detect snapshotting btrfs partitions,...
Base class for Exception.
Dependency resolver interface.
Base for exceptions caused by explicit user request.
void notifyTargetChanged()
internal
static ZConfig & instance()
Singleton ctor.
std::ostream & about(std::ostream &str) const
Print some detail about the current libzypp version.
Options and policies for ZYpp::commit.
ZYppCommitPolicy & syncPoolAfterCommit(bool yesNo_r)
Kepp pool in sync with the Target databases after commit (default: true)
ZYppCommitPolicy & dryRun(bool yesNo_r)
Set dry run (default: false).
Result returned from ZYpp::commit.
bool empty() const
Test for an empty path.
Provide a new empty temporary directory and recursively delete it when no longer needed.
static const Pathname & defaultLocation()
static Pool instance()
Singleton ctor.
static const std::string & systemRepoAlias()
Reserved system repository alias @System .
DiskUsageCounter::MountPointSet getPartitions() const
void setPartitions(const DiskUsageCounter::MountPointSet &mp)
Target_Ptr target() const
void setHomePath(const Pathname &path)
set the home, if you need to change it
Resolver_Ptr resolver() const
Pathname tmpPath() const
Get the path where zypp related plugins store tmp data
ZYppCommitResult commit(const ZYppCommitPolicy &policy_r)
Commit changes and transactions.
void changeTargetTo(Target_Ptr newtarget_r)
Hook for actions to trigger if the Target changes (initialize/finish)
static void setShutdownSignal()
Enable the shutdown signal for zypp_poll calls.
void installSrcPackage(const SrcPackage_constPtr &srcPackage_r)
Install a source package on the Target.
shared_ptr< DiskUsageCounter > _disk_usage
defined mount points, used for disk usage counting
ManagedFile provideSrcPackage(const SrcPackage_constPtr &srcPackage_r)
Install a source package on the Target.
Pathname homePath() const
Get the path where zypp related plugins store persistent data and caches
DiskUsageCounter::MountPointSet diskUsage()
static void clearShutdownSignal()
Disable the shutdown signal for zypp_poll calls.
void initializeTarget(const Pathname &root, bool doRebuild_r)
String related utilities and Regular expression matching.
std::string numstring(char n, int w=0)
std::ostream & operator<<(std::ostream &str, const ZYppImpl &obj)
int zypp_poll(std::vector< GPollFD > &fds, int timeout)
Small wrapper around g_poll that additionally listens to the shutdown FD returned by ZYpp::shutdownSi...
Easy-to use interface to the ZYPP dependency resolver.
Pathname myTmpDir()
Global access to the zypp.TMPDIR (created on demand, deleted when libzypp is unloaded)
static callback::SendReport< JobReport > & instance()
Singleton sender instance.
Temporarily connect a ReceiveReport then restore the previous one.
Temporarily set/unset an environment variable.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.