From: Andreas Enge <andreas@enge.fr>
To: 70933@debbugs.gnu.org
Subject: [bug#70933] Patch
Date: Fri, 5 Jul 2024 16:24:51 +0200 [thread overview]
Message-ID: <ZogCM9xocPs12Y3p@jurong> (raw)
In-Reply-To: <67f49b23cfe3755c6802e2fc3351ef3cf0dcdfda.1715687434.git.andreas@enge.fr>
[-- Attachment #1: Type: text/plain, Size: 169 bytes --]
Here is a suggestion for a patch implementing the chroot? parameter.
I have tested it by reconfiguring a real machine and still need to
test it in containers.
Andreas
[-- Attachment #2: 0001-gnu-guix-configuration-Add-a-chroot-parameter.patch --]
[-- Type: text/plain, Size: 7551 bytes --]
From 8629decf975576447c8662355a35ec0f20e892cf Mon Sep 17 00:00:00 2001
Message-ID: <8629decf975576447c8662355a35ec0f20e892cf.1720189422.git.andreas@enge.fr>
From: Andreas Enge <andreas@enge.fr>
Date: Fri, 5 Jul 2024 15:47:13 +0200
Subject: [PATCH] gnu: guix-configuration: Add a chroot? parameter.
The parameter should take the values #t, #f or 'default.
In a container environment, 'default amounts to #f, otherwise it
amounts to #t.
* gnu/services/base.scm (guix-configuration)<chroot?>: New field.
(guix-shepherd-service): If chroot? is #f, add "--disable-chroot".
If it is #t or 'default, do nothing.
* gnu/system/linux-container.scm (containerized-operating-system):
If chroot? is 'default, replace it by #f.
* doc/guix.texi: Document the parameter.
Change-Id: I8b9c3f46ad8650fa6ed4acee947b4ae5d002d03d
---
doc/guix.texi | 7 ++++++
gnu/services/base.scm | 9 ++++++-
gnu/system/linux-container.scm | 43 ++++++++++++++++++----------------
3 files changed, 38 insertions(+), 21 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 8bfb342253..92db7ddcf5 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -19609,6 +19609,13 @@ Base Services
@item @code{build-accounts} (default: @code{10})
Number of build user accounts to create.
+@item @code{chroot?} (default: @code{'default})
+The value should be one of @code{#t} or @code{#f}, in which
+case chroot is enabled or disabled, respectively;
+or it should be @code{'default}, which amounts to @code{#f} in
+Docker containers (so that they can be run in non-privileged mode)
+or @code{#t} otherwise.
+
@item @code{authorize-key?} (default: @code{#t})
@cindex substitutes, authorization thereof
Whether to authorize the substitute keys listed in
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 4b5b103cc3..a3e23035ca 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -21,6 +21,7 @@
;;; Copyright © 2022 Justin Veilleux <terramorpha@cock.li>
;;; Copyright © 2022 ( <paren@disroot.org>
;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
+;;; Copyright © 2024 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -213,6 +214,7 @@ (define-module (gnu services base)
guix-configuration-build-group
guix-configuration-build-accounts
guix-configuration-build-machines
+ guix-configuration-chroot?
guix-configuration-authorize-key?
guix-configuration-authorized-keys
guix-configuration-use-substitutes?
@@ -1848,6 +1850,8 @@ (define-record-type* <guix-configuration>
(default "guixbuild"))
(build-accounts guix-configuration-build-accounts ;integer
(default 10))
+ (chroot? guix-configuration-chroot? ;Boolean | 'default
+ (default 'default))
(authorize-key? guix-configuration-authorize-key? ;Boolean
(default #t))
(authorized-keys guix-configuration-authorized-keys ;list of gexps
@@ -1942,7 +1946,7 @@ (define (guix-shepherd-service config)
glibc-utf8-locales)))
(match-record config <guix-configuration>
- (guix build-group build-accounts authorize-key? authorized-keys
+ (guix build-group build-accounts chroot? authorize-key? authorized-keys
use-substitutes? substitute-urls max-silent-time timeout
log-compression discover? extra-options log-file
http-proxy tmpdir chroot-directories environment)
@@ -1989,6 +1993,9 @@ (define (guix-shepherd-service config)
"--substitute-urls" #$(string-join substitute-urls)
#$@extra-options
+ #$@(if chroot?
+ '()
+ '("--disable-chroot"))
;; Add CHROOT-DIRECTORIES and all their dependencies
;; (if these are store items) to the chroot.
(append-map
diff --git a/gnu/system/linux-container.scm b/gnu/system/linux-container.scm
index c780b68fba..c1705f491c 100644
--- a/gnu/system/linux-container.scm
+++ b/gnu/system/linux-container.scm
@@ -7,6 +7,7 @@
;;; Copyright © 2022 Ricardo Wurmus <rekado@elephly.net>
;;; Copyright © 2023 Pierre Langlois <pierre.langlois@gmx.com>
;;; Copyright © 2024 Leo Nikkilä <hello@lnikki.la>
+;;; Copyright © 2024 Andreas Enge <andreas@enge.fr>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -151,26 +152,28 @@ (define* (containerized-operating-system os mappings
(swap-devices '()) ; disable swap
(services
(append services-to-add
- (filter-map (lambda (s)
- (cond ((memq (service-kind s) services-to-drop)
- #f)
- ((eq? nscd-service-type (service-kind s))
- (service nscd-service-type
- (nscd-configuration
- (inherit (service-value s))
- (caches %nscd-container-caches))))
- ((eq? guix-service-type (service-kind s))
- ;; Pass '--disable-chroot' so that
- ;; guix-daemon can build thing even in
- ;; Docker without '--privileged'.
- (service guix-service-type
- (guix-configuration
- (inherit (service-value s))
- (extra-options
- (cons "--disable-chroot"
- (guix-configuration-extra-options
- (service-value s)))))))
- (else s)))
+ (filter-map
+ (lambda (s)
+ (let ((kind (service-kind s))
+ (value (service-value s)))
+ (cond ((memq kind services-to-drop)
+ #f)
+ ((eq? nscd-service-type kind)
+ (service nscd-service-type
+ (nscd-configuration
+ (inherit value)
+ (caches %nscd-container-caches))))
+ ((and (eq? guix-service-type kind)
+ (eq? (guix-configuration-chroot? value)
+ 'default))
+ ;; If chroot? is 'default, it should become #f
+ ;; so that guix-daemon can build things even in
+ ;; Docker without '--privileged'.
+ (service guix-service-type
+ (guix-configuration
+ (inherit value)
+ (chroot? #f))))
+ (else s))))
(operating-system-user-services os))))
(file-systems (append (map mapping->fs
(if shared-network?
base-commit: b91685abdecdb42c0ac2e30e5cb5032b11b5d269
--
2.45.2
prev parent reply other threads:[~2024-07-05 14:26 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-14 11:50 [bug#70933] [PATCH] system: Do not add "--disable-chroot" to containers Andreas Enge
2024-05-31 12:01 ` Ludovic Courtès
2024-05-31 14:26 ` Andreas Enge
2024-06-25 15:30 ` Ludovic Courtès
2024-09-19 8:01 ` Andreas Enge
2024-07-05 14:24 ` Andreas Enge [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://guix.gnu.org/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZogCM9xocPs12Y3p@jurong \
--to=andreas@enge.fr \
--cc=70933@debbugs.gnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this public inbox
https://git.savannah.gnu.org/cgit/guix.git
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).