From: Michael Tremer Date: Sun, 19 Mar 2023 12:57:35 +0000 (+0000) Subject: systemd: Automatically apply tmpfiles X-Git-Tag: 0.9.29~243 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f7ffbb939b38288ea3a3aa2ad8b7c1f404a9c210;p=pakfire.git systemd: Automatically apply tmpfiles Signed-off-by: Michael Tremer --- diff --git a/src/libpakfire/include/pakfire/jail.h b/src/libpakfire/include/pakfire/jail.h index 03500bb82..d691086c3 100644 --- a/src/libpakfire/include/pakfire/jail.h +++ b/src/libpakfire/include/pakfire/jail.h @@ -88,6 +88,7 @@ int pakfire_jail_exec_script(struct pakfire_jail* jail, int pakfire_jail_shell(struct pakfire_jail* jail); int pakfire_jail_ldconfig(struct pakfire* pakfire); +int pakfire_jail_run_systemd_tmpfiles(struct pakfire* pakfire); #endif /* PAKFIRE_PRIVATE */ diff --git a/src/libpakfire/jail.c b/src/libpakfire/jail.c index c00be6d3e..f9d18a83c 100644 --- a/src/libpakfire/jail.c +++ b/src/libpakfire/jail.c @@ -1919,27 +1919,39 @@ int pakfire_jail_shell(struct pakfire_jail* jail) { return pakfire_jail_exec_interactive(jail, argv); } -int pakfire_jail_ldconfig(struct pakfire* pakfire) { +static int pakfire_jail_run_if_possible(struct pakfire* pakfire, const char** argv) { char path[PATH_MAX]; + int r; - const char* ldconfig = "/sbin/ldconfig"; - - // Check if ldconfig exists before calling it to avoid overhead - int r = pakfire_path(pakfire, path, "%s", ldconfig); + r = pakfire_path(pakfire, path, "%s", *argv); if (r) return r; - // Check if ldconfig is executable + // Check if the file is executable r = access(path, X_OK); if (r) { - DEBUG(pakfire, "%s is not executable. Skipping...\n", ldconfig); + DEBUG(pakfire, "%s is not executable. Skipping...\n", *argv); return 0; } + return pakfire_jail_run(pakfire, argv, 0, NULL); +} + +int pakfire_jail_ldconfig(struct pakfire* pakfire) { const char* argv[] = { - ldconfig, NULL, + "/sbin/ldconfig", + NULL, }; - // Run ldconfig - return pakfire_jail_run(pakfire, argv, 0, NULL); + return pakfire_jail_run_if_possible(pakfire, argv); +} + +int pakfire_jail_run_systemd_tmpfiles(struct pakfire* pakfire) { + const char* argv[] = { + "/usr/bin/systemd-tmpfiles", + "--create", + NULL, + }; + + return pakfire_jail_run_if_possible(pakfire, argv); } diff --git a/src/libpakfire/packager.c b/src/libpakfire/packager.c index b379895ac..dc5038376 100644 --- a/src/libpakfire/packager.c +++ b/src/libpakfire/packager.c @@ -579,6 +579,15 @@ int pakfire_packager_add_file(struct pakfire_packager* packager, struct pakfire_ pakfire_file_set_gname(file, "root"); } + if (pakfire_file_matches(file, "/usr/lib/tmpfiles.d/*.conf")) { + pakfire_package_add_dep(packager->pkg, + PAKFIRE_PKG_REQUIRES, "pakfire(systemd-tmpfiles)"); + + // Ask to pre-install systemd + pakfire_package_add_dep(packager->pkg, + PAKFIRE_PKG_PREREQUIRES, "systemd"); + } + // Append the file to the filelist return pakfire_filelist_add(packager->filelist, file); } diff --git a/src/libpakfire/pakfire.c b/src/libpakfire/pakfire.c index 584416ced..ad1093ac9 100644 --- a/src/libpakfire/pakfire.c +++ b/src/libpakfire/pakfire.c @@ -155,6 +155,9 @@ static const struct pakfire_feature { { "Digest-SHA2-512" }, { "Digest-SHA2-256" }, + // Systemd + { "systemd-tmpfiles" }, + // The end { NULL }, }; diff --git a/src/libpakfire/transaction.c b/src/libpakfire/transaction.c index 2c97ea200..d8a39b8e8 100644 --- a/src/libpakfire/transaction.c +++ b/src/libpakfire/transaction.c @@ -814,6 +814,15 @@ static int pakfire_transaction_package_is_userinstalled( return 0; } +static int pakfire_transaction_apply_systemd_tmpfiles( + struct pakfire_transaction* transaction, struct pakfire_package* pkg) { + // Apply any tmpfiles (ignore any errors) + if (pakfire_package_matches_dep(pkg, PAKFIRE_PKG_REQUIRES, "pakfire(systemd-tmpfiles)")) + pakfire_jail_run_systemd_tmpfiles(transaction->pakfire); + + return 0; +} + static int pakfire_transaction_run_step(struct pakfire_transaction* transaction, struct pakfire_db* db, const enum pakfire_actions action, struct pakfire_package* pkg, struct pakfire_archive* archive) { if (!pkg) { @@ -917,6 +926,11 @@ static int pakfire_transaction_run_step(struct pakfire_transaction* transaction, if (r) break; + // Apply systemd tmpfiles + r = pakfire_transaction_apply_systemd_tmpfiles(transaction, pkg); + if (r) + break; + r = pakfire_transaction_run_script(transaction, db, "postin", pkg, archive); break; @@ -937,6 +951,11 @@ static int pakfire_transaction_run_step(struct pakfire_transaction* transaction, if (r) break; + // Apply systemd tmpfiles + r = pakfire_transaction_apply_systemd_tmpfiles(transaction, pkg); + if (r) + break; + r = pakfire_transaction_run_script(transaction, db, "postup", pkg, archive); break;