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.
static MountPointSet detectMountPoints(const std::string &rootdir="/")
Get mountpoints of system below rootdir If we happen to detect snapshotting btrfs partitions,...
std::set< MountPoint > MountPointSet
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.
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.
void changeTargetTo(const Target_Ptr &newtarget_r)
Hook for actions to trigger if the Target changes (initialize/finish)
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)
zypp::callback::SendReport< zypp::KeyRingReport > _report
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.