[PATCH 0/2] tmpfs /run.

  • Open
  • quality assurance status badge
Details
3 participants
  • Hilton Chain
  • Ludovic Courtès
  • Maxim Cournoyer
Owner
unassigned
Submitted by
Hilton Chain
Severity
normal
H
H
Hilton Chain wrote on 26 Sep 08:44 +0200
(address . guix-patches@gnu.org)(name . Hilton Chain)(address . hako@ultrarare.space)
cover.1727331040.git.hako@ultrarare.space
Hi Guix,

This series adds a tmpfs /run to %base-file-systems and symlinks /var/run to
it.

Mount options are taken from Systemd[1], OpenRC also uses the same ones[2].
(Except no-suid since we have /run/privileged/bin.)

Thanks


Hilton Chain (2):
file-systems: %base-file-systems: Add tmpfs /run.
services: cleanup: Make /var/run a symlink of /run.

doc/guix.texi | 5 +++++
gnu/services.scm | 6 +-----
gnu/services/dbus.scm | 31 -------------------------------
gnu/system/file-systems.scm | 15 ++++++++++++++-
4 files changed, 20 insertions(+), 37 deletions(-)


base-commit: 8576aaf5f90db9b385ea8cf6dc98bf3c062959dc
--
2.46.0
H
H
Hilton Chain wrote on 26 Sep 09:05 +0200
[PATCH 1/2] file-systems: %base-file-systems: Add tmpfs /run.
(address . 73494@debbugs.gnu.org)(name . Hilton Chain)(address . hako@ultrarare.space)
9769cf0f812d5e7e9fe38ed664809974101821e0.1727334105.git.hako@ultrarare.space
* gnu/system/file-systems (%runtime-variable-data): New variable.
(%base-file-systems): Add it.
* doc/guix.texi (File Systems): Document it.
* gnu/services.scm (cleanup-gexp): Adjust accordingly.

Change-Id: I3a95e49d396fbb2577026aefc247cfe996c5f267
---
doc/guix.texi | 5 +++++
gnu/services.scm | 5 +----
gnu/system/file-systems.scm | 15 ++++++++++++++-
3 files changed, 20 insertions(+), 5 deletions(-)

Toggle diff (89 lines)
diff --git a/doc/guix.texi b/doc/guix.texi
index 52e36e4354..54edd14d1b 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -17988,6 +17988,11 @@ File Systems
read-write in its own ``name space.''
@end defvar
+@defvar %runtime-variable-data
+This file system is mounted as @file{/run} and contains system
+information data describing the system since it was booted.
+@end defvar
+
@defvar %binary-format-file-system
The @code{binfmt_misc} file system, which allows handling of arbitrary
executable file types to be delegated to user space. This requires the
diff --git a/gnu/services.scm b/gnu/services.scm
index 8a4002e072..ea855ad193 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -632,7 +632,7 @@ (define (cleanup-gexp _)
#~(begin
(use-modules (guix build utils))
- ;; Clean out /tmp, /var/run, and /run.
+ ;; Clean out /tmp and /var/run.
;;
;; XXX This needs to happen before service activations, so it
;; has to be here, but this also implicitly assumes that /tmp
@@ -663,15 +663,12 @@ (define (cleanup-gexp _)
(setlocale LC_CTYPE "en_US.utf8")
(delete-file-recursively "/tmp")
(delete-file-recursively "/var/run")
- (delete-file-recursively "/run")
;; Note: The second argument to 'mkdir' is and'ed with umask,
;; hence the 'chmod' calls.
(mkdir "/tmp" #o1777)
(chmod "/tmp" #o1777)
(mkdir "/var/run" #o755)
- (chmod "/var/run" #o755)
- (mkdir "/run" #o755)
(chmod "/var/run" #o755))))))
(define cleanup-service-type
diff --git a/gnu/system/file-systems.scm b/gnu/system/file-systems.scm
index 4ea8237c70..65704d7681 100644
--- a/gnu/system/file-systems.scm
+++ b/gnu/system/file-systems.scm
@@ -82,6 +82,7 @@ (define-module (gnu system file-systems)
%pseudo-terminal-file-system
%tty-gid
%immutable-store
+ %runtime-variable-data
%control-groups
%elogind-file-systems
@@ -448,6 +449,17 @@ (define %immutable-store
(check? #f)
(flags '(read-only bind-mount no-atime))))
+(define %runtime-variable-data
+ (file-system
+ (type "tmpfs")
+ (mount-point "/run")
+ (device "tmpfs")
+ (flags '(no-dev strict-atime))
+ (options "mode=0755,nr_inodes=800k,size=20%")
+ (needed-for-boot? #t)
+ (check? #f)
+ (create-mount-point? #t)))
+
(define %control-groups
;; The cgroup2 file system.
(list (file-system
@@ -497,7 +509,8 @@ (define %base-file-systems
%debug-file-system
%shared-memory-file-system
%efivars-file-system
- %immutable-store))
+ %immutable-store
+ %runtime-variable-data))
(define %base-live-file-systems
;; This is the bare minimum to use live file-systems.

base-commit: 8576aaf5f90db9b385ea8cf6dc98bf3c062959dc
--
2.46.0
H
H
Hilton Chain wrote on 26 Sep 09:05 +0200
[PATCH 2/2] services: cleanup: Make /var/run a symlink of /run.
(address . 73494@debbugs.gnu.org)(name . Hilton Chain)(address . hako@ultrarare.space)
dcb67a0cf081d8dff06d12959acc53fb174540ad.1727334105.git.hako@ultrarare.space
* gnu/services.scm (cleanup-gexp): Make /var/run a symlink of /run.
* gnu/services/dbus.scm (dbus-activation): Adjust accordingly.

Change-Id: I7b94d3e2fe1bef66f435e84bc77f32311dddd0ce
---
gnu/services.scm | 3 +--
gnu/services/dbus.scm | 31 -------------------------------
2 files changed, 1 insertion(+), 33 deletions(-)

Toggle diff (58 lines)
diff --git a/gnu/services.scm b/gnu/services.scm
index ea855ad193..50af5f56b6 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -668,8 +668,7 @@ (define (cleanup-gexp _)
;; hence the 'chmod' calls.
(mkdir "/tmp" #o1777)
(chmod "/tmp" #o1777)
- (mkdir "/var/run" #o755)
- (chmod "/var/run" #o755))))))
+ (symlink "/run" "/var/run"))))))
(define cleanup-service-type
;; Service that cleans things up in /tmp and similar.
diff --git a/gnu/services/dbus.scm b/gnu/services/dbus.scm
index 76e04bf221..9292172e01 100644
--- a/gnu/services/dbus.scm
+++ b/gnu/services/dbus.scm
@@ -190,37 +190,6 @@ (define (dbus-activation config)
;; world-readable.
(mkdir-p/perms "/run/dbus" user #o755))
- (catch 'system-error
- (lambda ()
- (symlink "/run/dbus" "/var/run/dbus"))
- (lambda args
- (let ((errno (system-error-errno args)))
- (cond
- ((= errno EEXIST)
- (let ((existing-name
- (false-if-exception
- (readlink "/var/run/dbus"))))
- (unless (equal? existing-name "/run/dbus")
- ;; Move the content of /var/run/dbus to /run/dbus, and
- ;; retry.
- (let ((dir (opendir "/var/run/dbus")))
- (let loop ((next (readdir dir)))
- (cond
- ((eof-object? next) (closedir dir))
- ((member next '("." "..")) (loop (readdir dir)))
- (else
- (begin
- (rename-file (string-append "/var/run/dbus/" next)
- (string-append "/run/dbus/" next))
- (loop (readdir dir)))))))
- (rmdir "/var/run/dbus")
- (symlink "/run/dbus" "/var/run/dbus"))))
- (else
- (format (current-error-port)
- "Failed to symlink /run/dbus to /var/run/dbus: ~s~%"
- (strerror errno))
- (error "cannot create /var/run/dbus"))))))
-
(unless (file-exists? "/etc/machine-id")
(format #t "creating /etc/machine-id...~%")
(invoke (string-append #$(dbus-configuration-dbus config)
--
2.46.0
H
H
Hilton Chain wrote on 29 Sep 05:18 +0200
Re: [PATCH 0/2] tmpfs /run.
(address . 73494@debbugs.gnu.org)
87cyknm9ky.wl-hako@ultrarare.space
On Thu, 26 Sep 2024 14:44:52 +0800,
Hilton Chain wrote:
Toggle quote (29 lines)
>
> Hi Guix,
>
> This series adds a tmpfs /run to %base-file-systems and symlinks /var/run to
> it.
>
> Mount options are taken from Systemd[1], OpenRC also uses the same ones[2].
> (Except no-suid since we have /run/privileged/bin.)
>
> Thanks
>
> [1]: https://github.com/systemd/systemd/blob/v256.6/src/shared/mount-setup.c#L102
> [2]: https://github.com/OpenRC/openrc/blob/0.55.1/sh/init.sh.Linux.in#L74
>
> Hilton Chain (2):
> file-systems: %base-file-systems: Add tmpfs /run.
> services: cleanup: Make /var/run a symlink of /run.
>
> doc/guix.texi | 5 +++++
> gnu/services.scm | 6 +-----
> gnu/services/dbus.scm | 31 -------------------------------
> gnu/system/file-systems.scm | 15 ++++++++++++++-
> 4 files changed, 20 insertions(+), 37 deletions(-)
>
>
> base-commit: 8576aaf5f90db9b385ea8cf6dc98bf3c062959dc
> --
> 2.46.0

As adding mount point to /run requires an immediate reboot after reconfiguring
from a system without it, I'll also add a news entry for the change.

Merging /var/run and /run is the easiest part, since they are supposed to be
cleaned upon booting and nothing will break with the change. However there're
many references to both directories in our codebase. I'm not sure if these
references should be unified as well.

I won't hurry on pushing this change, please leave a comment if you want the
change or there's any concern about it.


Thanks
M
M
Maxim Cournoyer wrote on 30 Oct 07:37 +0100
Re: [bug#73494] [PATCH 0/2] tmpfs /run.
(name . Hilton Chain)(address . hako@ultrarare.space)(address . 73494@debbugs.gnu.org)
87h68ujdu4.fsf@gmail.com
Hi Hilton,

Hilton Chain <hako@ultrarare.space> writes:

Toggle quote (42 lines)
> On Thu, 26 Sep 2024 14:44:52 +0800,
> Hilton Chain wrote:
>>
>> Hi Guix,
>>
>> This series adds a tmpfs /run to %base-file-systems and symlinks /var/run to
>> it.
>>
>> Mount options are taken from Systemd[1], OpenRC also uses the same ones[2].
>> (Except no-suid since we have /run/privileged/bin.)
>>
>> Thanks
>>
>> [1]: https://github.com/systemd/systemd/blob/v256.6/src/shared/mount-setup.c#L102
>> [2]: https://github.com/OpenRC/openrc/blob/0.55.1/sh/init.sh.Linux.in#L74
>>
>> Hilton Chain (2):
>> file-systems: %base-file-systems: Add tmpfs /run.
>> services: cleanup: Make /var/run a symlink of /run.
>>
>> doc/guix.texi | 5 +++++
>> gnu/services.scm | 6 +-----
>> gnu/services/dbus.scm | 31 -------------------------------
>> gnu/system/file-systems.scm | 15 ++++++++++++++-
>> 4 files changed, 20 insertions(+), 37 deletions(-)
>>
>>
>> base-commit: 8576aaf5f90db9b385ea8cf6dc98bf3c062959dc
>> --
>> 2.46.0
>
> As adding mount point to /run requires an immediate reboot after reconfiguring
> from a system without it, I'll also add a news entry for the change.
>
> Merging /var/run and /run is the easiest part, since they are supposed to be
> cleaned upon booting and nothing will break with the change. However there're
> many references to both directories in our codebase. I'm not sure if these
> references should be unified as well.
>
> I won't hurry on pushing this change, please leave a comment if you want the
> change or there's any concern about it.

I think it's a worthwhile change. It'd be neat to unify every reference
to /var/run to /run in the doc/code too.

I'll be trying this on the build farm as there's an annoying problem
with anonip that creates FIFOs under /run/anonip, and these currently
become plain files upon reboot, breaking the anonip-service services.

--
Thanks,
Maxim
H
H
Hilton Chain wrote on 3 Nov 16:45 +0100
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)(address . 73494@debbugs.gnu.org)
87o72w1fuc.wl-hako@ultrarare.space
Hi Maxim,

On Wed, 30 Oct 2024 14:37:39 +0800,
Maxim Cournoyer wrote:
Toggle quote (3 lines)
> I think it's a worthwhile change. It'd be neat to unify every reference
> to /var/run to /run in the doc/code too.

Thank you, I'm now thinking of unifying them without the tmpfs change, since the
tmpfs is not strictly necessary.

Toggle quote (4 lines)
> I'll be trying this on the build farm as there's an annoying problem
> with anonip that creates FIFOs under /run/anonip, and these currently
> become plain files upon reboot, breaking the anonip-service services.

Won't these files be deleted (c250033aa69f: services: cleanup: Delete /run upon
boot.) at boot?
M
M
Maxim Cournoyer wrote on 4 Nov 13:12 +0100
(name . Hilton Chain)(address . hako@ultrarare.space)(address . 73494@debbugs.gnu.org)
87cyjbw63p.fsf@gmail.com
Hi Hilton,

Hilton Chain <hako@ultrarare.space> writes:

Toggle quote (17 lines)
> Hi Maxim,
>
> On Wed, 30 Oct 2024 14:37:39 +0800,
> Maxim Cournoyer wrote:
>> I think it's a worthwhile change. It'd be neat to unify every reference
>> to /var/run to /run in the doc/code too.
>
> Thank you, I'm now thinking of unifying them without the tmpfs change, since the
> tmpfs is not strictly necessary.
>
>> I'll be trying this on the build farm as there's an annoying problem
>> with anonip that creates FIFOs under /run/anonip, and these currently
>> become plain files upon reboot, breaking the anonip-service services.
>
> Won't these files be deleted (c250033aa69f: services: cleanup: Delete /run upon
> boot.) at boot?

Yes, they should, but I didn't want to take anything for granted. I've
come up with a reproducer (system tests) and a fix (already pushed) for

--
Thanks,
Maxim
M
M
Maxim Cournoyer wrote on 4 Nov 13:12 +0100
(name . Hilton Chain)(address . hako@ultrarare.space)(address . 73494@debbugs.gnu.org)
878qtzw62l.fsf@gmail.com
Hello,

Hilton Chain <hako@ultrarare.space> writes:

Toggle quote (17 lines)
> Hi Maxim,
>
> On Wed, 30 Oct 2024 14:37:39 +0800,
> Maxim Cournoyer wrote:
>> I think it's a worthwhile change. It'd be neat to unify every reference
>> to /var/run to /run in the doc/code too.
>
> Thank you, I'm now thinking of unifying them without the tmpfs change, since the
> tmpfs is not strictly necessary.
>
>> I'll be trying this on the build farm as there's an annoying problem
>> with anonip that creates FIFOs under /run/anonip, and these currently
>> become plain files upon reboot, breaking the anonip-service services.
>
> Won't these files be deleted (c250033aa69f: services: cleanup: Delete /run upon
> boot.) at boot?

Another thought; is tmpfs implemented on the Hurd?

--
Thanks,
Maxim
L
L
Ludovic Courtès wrote on 15 Dec 17:35 +0100
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
87cyhsj45n.fsf@gnu.org
Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:

Toggle quote (2 lines)
> Another thought; is tmpfs implemented on the Hurd?

Yes, perhaps it’s even older than on Linux, but our file system mounting
code won’t work there (libc does not provide the ‘mount’ function on the
Hurd).

Ludo’.
M
M
Maxim Cournoyer wrote on 16 Dec 10:13 +0100
(name . Ludovic Courtès)(address . ludo@gnu.org)
87zfkwt2gw.fsf@gmail.com
Hi,

Ludovic Courtès <ludo@gnu.org> writes:

Toggle quote (8 lines)
> Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
>
>> Another thought; is tmpfs implemented on the Hurd?
>
> Yes, perhaps it’s even older than on Linux, but our file system mounting
> code won’t work there (libc does not provide the ‘mount’ function on the
> Hurd).

I see; so it's not any more a blocker than the current situation, since
we already have some issue with our current code on Hurd.

Hilton, I think this series is fine to apply. As you previously
mentioned, a news entry will be necessary to let Guix System users to
reboot after a reconfiguration past this change.

--
Thanks,
Maxim
H
H
Hilton Chain wrote 5 days ago
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
87bjx6js3y.wl-hako@ultrarare.space
On Mon, 16 Dec 2024 17:13:35 +0800,
Maxim Cournoyer wrote:
Toggle quote (19 lines)
>
> Hi,
>
> Ludovic Courtès <ludo@gnu.org> writes:
>
> > Maxim Cournoyer <maxim.cournoyer@gmail.com> skribis:
> >
> >> Another thought; is tmpfs implemented on the Hurd?
> >
> > Yes, perhaps it’s even older than on Linux, but our file system mounting
> > code won’t work there (libc does not provide the ‘mount’ function on the
> > Hurd).
>
> I see; so it's not any more a blocker than the current situation, since
> we already have some issue with our current code on Hurd.
>
> Hilton, I think this series is fine to apply. As you previously
> mentioned, a news entry will be necessary to let Guix System users to
> reboot after a reconfiguration past this change.
Thanks! I tried this change again and now it seems the newly-added filesystem
won't be automatically mounted.
Another concern I have is, with /run and /var/run unified,
‘guix system roll-back’ and ‘guix system switch-generation’ can't finish the
activation stage because of the error handling in dbus-activation from previous
generations.
Toggle snippet (11 lines)
$ guix system describe
Generation 7 Dec 20 2024 23:10:05 (current)
[...]
$ sudo guix system roll-back
[...]
switched from generation 7 to 6
[...]
guix system: error: rmdir: Directory not empty
$ guix system describe
Generation 6 Dec 20 2024 22:57:19 (current)
Do we have a way to fix this?
H
H
Hilton Chain wrote 5 days ago
(name . Maxim Cournoyer)(address . maxim.cournoyer@gmail.com)
87a5cqjrb5.wl-hako@ultrarare.space
On Fri, 20 Dec 2024 23:23:29 +0800,
Hilton Chain wrote:
Toggle quote (4 lines)
>
> Thanks! I tried this change again and now it seems the newly-added filesystem
> won't be automatically mounted.

won't be automatically mounted so that an immediate reboot is not required*
?
Your comment

Commenting via the web interface is currently disabled.

To comment on this conversation send an email to 73494@debbugs.gnu.org

To respond to this issue using the mumi CLI, first switch to it
mumi current 73494
Then, you may apply the latest patchset in this issue (with sign off)
mumi am -- -s
Or, compose a reply to this issue
mumi compose
Or, send patches to this issue
mumi send-email *.patch