[PATCH 0/2] tmpfs /run.

  • Open
  • quality assurance status badge
Details
2 participants
  • Hilton Chain
  • 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
?
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