mirror of
https://github.com/ostreedev/ostree.git
synced 2025-03-19 22:50:35 +03:00
switchroot: Ensure /run/ostree-booted is created even without initramfs
See https://mail.gnome.org/archives/ostree-list/2018-March/msg00012.html If ostree-prepare-root is run as pid 1 (i.e we're not using an initramfs), then anything we write outside the target sysroot (such as `/run/ostree-booted`) will be lost. Since `ostree-remount.service` runs fairly early in boot, and is triggered via `ConditionKernelCommandLine=ostree`, we can just touch the file there in addition. Closes: #1508 Approved by: akiernan
This commit is contained in:
parent
246a7a5cc2
commit
38cf31f6a7
@ -104,4 +104,19 @@ read_proc_cmdline_ostree (void)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* This is an API for other projects to determine whether or not the
|
||||
* currently running system is ostree-controlled.
|
||||
*/
|
||||
static inline void
|
||||
touch_run_ostree (void)
|
||||
{
|
||||
int fd = open ("/run/ostree-booted", O_CREAT | O_WRONLY | O_NOCTTY | O_CLOEXEC, 0640);
|
||||
/* We ignore failures here in case /run isn't mounted...not much we
|
||||
* can do about that, but we don't want to fail.
|
||||
*/
|
||||
if (fd == -1)
|
||||
return;
|
||||
(void) close (fd);
|
||||
}
|
||||
|
||||
#endif /* __OSTREE_MOUNT_UTIL_H_ */
|
||||
|
@ -48,23 +48,6 @@
|
||||
|
||||
#include "ostree-mount-util.h"
|
||||
|
||||
/* This is an API for other projects to determine whether or not the
|
||||
* currently running system is ostree-controlled.
|
||||
*/
|
||||
static void
|
||||
touch_run_ostree (void)
|
||||
{
|
||||
int fd;
|
||||
|
||||
fd = open ("/run/ostree-booted", O_CREAT | O_WRONLY | O_NOCTTY | O_CLOEXEC, 0640);
|
||||
/* We ignore failures here in case /run isn't mounted...not much we
|
||||
* can do about that, but we don't want to fail.
|
||||
*/
|
||||
if (fd == -1)
|
||||
return;
|
||||
(void) close (fd);
|
||||
}
|
||||
|
||||
static char*
|
||||
resolve_deploy_path (const char * root_mountpoint)
|
||||
{
|
||||
@ -205,7 +188,13 @@ main(int argc, char *argv[])
|
||||
err (EXIT_FAILURE, "failed to bind mount (class:readonly) /usr");
|
||||
}
|
||||
|
||||
touch_run_ostree ();
|
||||
|
||||
/* We only stamp /run now if we're running in an initramfs, i.e. we're
|
||||
* not pid 1. Otherwise it's handled later via ostree-remount.service.
|
||||
* https://mail.gnome.org/archives/ostree-list/2018-March/msg00012.html
|
||||
*/
|
||||
if (getpid () != 1)
|
||||
touch_run_ostree ();
|
||||
|
||||
if (strcmp(root_mountpoint, "/") == 0)
|
||||
{
|
||||
|
@ -46,6 +46,16 @@ main(int argc, char *argv[])
|
||||
struct stat stbuf;
|
||||
int i;
|
||||
|
||||
/* See comments in ostree-prepare-root.c for this.
|
||||
*
|
||||
* This service is triggered via
|
||||
* ConditionKernelCommandLine=ostree
|
||||
* but it's a lot easier for various bits of userspace to check for
|
||||
* a file versus parsing the kernel cmdline. So let's ensure
|
||||
* the stamp file is created here too.
|
||||
*/
|
||||
touch_run_ostree ();
|
||||
|
||||
/* The /sysroot mount needs to be private to avoid having a mount for e.g. /var/cache
|
||||
* also propagate to /sysroot/ostree/deploy/$stateroot/var/cache
|
||||
*
|
||||
|
Loading…
x
Reference in New Issue
Block a user