From 4281704a25bb385ba61abbce428026475501771b Mon Sep 17 00:00:00 2001 From: Hugo Buddelmeijer Date: Fri, 12 Dec 2025 18:52:09 +0100 Subject: [PATCH] build: Make /etc/hosts a regular file again. Commit 7c70a1080a0823fd3dd0f7ee83e5d7654ab6a872 ("gnu/system: Simplify the creation of /etc (was: Turn /etc/localtime into a symlink)") made all of the files under /etc other than sudoers symlinks to their store target. This causes a problem at least for the vpn-slice service, which expects to be able to write to said file. * gnu/build/activation.scm (activate-etc): Special-case /etc/hosts to make it a regular file. Change-Id: Ia42dacd8731edba5e72442ab0399bdc3f7101989 Signed-off-by: Maxim Cournoyer Modified-by: Maxim Cournoyer Fixes: #4800 --- gnu/build/activation.scm | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/gnu/build/activation.scm b/gnu/build/activation.scm index f8a34b021c7..e2d1734367d 100644 --- a/gnu/build/activation.scm +++ b/gnu/build/activation.scm @@ -321,13 +321,18 @@ EINVAL, ELOOP, etc." ;; convention to be followed. (source (canonicalize-path* (string-append etc "/" file)))) (rm-f target) - (if (string=? (basename target) "sudoers") - (begin - ;; /etc/sudoers must be a regular file. - (copy-file source target) - ;; XXX: dirty hack to meet sudo's expectations - (chmod target #o440)) - (symlink source target)))) ;usual case + (cond ((string=? (basename target) "sudoers") + (begin + ;; /etc/sudoers must be a regular file. + (copy-file source target) + ;; XXX: dirty hack to meet sudo's expectations + (chmod target #o440))) + ((string=? (basename target) "hosts") + ;; /etc/hosts must be a regular file, as some software + ;; like vpn-slice expect to be able to write to it. + (copy-file source target)) + (else ;usual case + (symlink source target))))) (scandir etc (negate dot-or-dot-dot?) ;; The default is 'string-locale