deploy: Delete .updated file from /etc and /var on new deployments
Systemd units using ConditionNeedsUpdate run if the mtime of .updated in the specified directory is newer than /usr. Since /usr has an mtime of 0, there's no way to have an older .updated file. Systemd units typically specify ConditionNeedsUpdate=/etc or ConditionNeedsUpdate=/var to support stateless systems like ostree. Remove the file from the new deployment's /etc and the OS's /var regardless of where they came from to ensure that these systemd units run when booting new deployments. This will provide a method to run services only on upgrade. Closes: #1628 https://bugzilla.gnome.org/show_bug.cgi?id=752950 Closes: #1631 Approved by: cgwalters
This commit is contained in:
1 parent
7dc3e45b3a
commit
ce58307757
3 files changed
+75
-7
No files matched your search
@@ -684,15 +684,10 @@ selinux_relabel_dir (OstreeSysroot *sysroot,
|
||||
static gboolean
|
||||
selinux_relabel_var_if_needed (OstreeSysroot *sysroot,
|
||||
OstreeSePolicy *sepolicy,
|
||||
OstreeDeployment *deployment,
|
||||
int os_deploy_dfd,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
const char *osdeploypath = glnx_strjoina ("ostree/deploy/", ostree_deployment_get_osname (deployment));
|
||||
glnx_autofd int os_deploy_dfd = -1;
|
||||
if (!glnx_opendirat (sysroot->sysroot_fd, osdeploypath, TRUE, &os_deploy_dfd, error))
|
||||
return FALSE;
|
||||
|
||||
/* This is a bit of a hack; we should change the code at some
|
||||
* point in the distant future to only create (and label) /var
|
||||
* when doing a deployment.
|
||||
@@ -2529,11 +2524,25 @@ sysroot_finalize_deployment (OstreeSysroot *self,
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
const char *osdeploypath = glnx_strjoina ("ostree/deploy/", ostree_deployment_get_osname (deployment));
|
||||
glnx_autofd int os_deploy_dfd = -1;
|
||||
if (!glnx_opendirat (self->sysroot_fd, osdeploypath, TRUE, &os_deploy_dfd, error))
|
||||
return FALSE;
|
||||
|
||||
/* Ensure that the new deployment does not have /etc/.updated or
|
||||
* /var/.updated so that systemd ConditionNeedsUpdate=/etc|/var services run
|
||||
* after rebooting.
|
||||
*/
|
||||
if (!ot_ensure_unlinked_at (deployment_dfd, "etc/.updated", error))
|
||||
return FALSE;
|
||||
if (!ot_ensure_unlinked_at (os_deploy_dfd, "var/.updated", error))
|
||||
return FALSE;
|
||||
|
||||
g_autoptr(OstreeSePolicy) sepolicy = ostree_sepolicy_new_at (deployment_dfd, cancellable, error);
|
||||
if (!sepolicy)
|
||||
return FALSE;
|
||||
|
||||
if (!selinux_relabel_var_if_needed (self, sepolicy, deployment, cancellable, error))
|
||||
if (!selinux_relabel_var_if_needed (self, sepolicy, os_deploy_dfd, cancellable, error))
|
||||
return FALSE;
|
||||
|
||||
/* Rewrite the origin using the final merged selinux config, just to be
|
||||
|
||||
Reference in new issue
Block a user