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);
108 namespace zypp_detail
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;
232 if (
policy_r.syncPoolAfterCommit() )
285 zyppng::eintrSafeCall( write,
sigFd,
"1", 1 );
299 while( zyppng::eintrSafeCall( read,
sigFd, &
buf, 1 ) > 0 )
310 return str <<
"ZYppImpl";
330 int r = zyppng::eintrSafeCall(
g_poll,
fds.data(),
fds.size(), timeout );
333 if (
fds.back().revents )
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
void reset()
Reset to default Ctor values.
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.
static ZConfig & instance()
Singleton ctor.
Options and policies for ZYpp::commit.
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.
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.