From: Bruno Victal <mirai@makinata.eu>
To: 60735@debbugs.gnu.org
Cc: Bruno Victal <mirai@makinata.eu>
Subject: [bug#60735] [PATCH v3 2/3] system: Deprecate hosts-file.
Date: Fri, 27 Jan 2023 21:06:12 +0000 [thread overview]
Message-ID: <ee646918414c8ff0bc1dce1b14b7acbd65ffbad1.1674853530.git.mirai@makinata.eu> (raw)
In-Reply-To: <23c3ca682838a1722e619148bac0aee88124d212.1674853530.git.mirai@makinata.eu>
* gnu/system.scm (operating-system-hosts-file): Deprecate procedure.
(warn-hosts-file-field-deprecation): New procedure, helper for
deprecated variable.
(operating-system)[hosts-file]: Use helper to warn deprecated field.
(operating-system-default-essential-services)
(hurd-default-essential-services): Use hosts-service-type.
(local-host-aliases): Return a list of host records.
(default-/etc/hosts): Remove procedure.
(operating-system-etc-service): Remove hosts file.
* doc/guix.texi (operating-system Reference)
(Networking Services) (Virtualization Services): Rewrite documentation
entries to use hosts-service-type.
---
doc/guix.texi | 60 +++++++++++++++++++++++---------------------
gnu/system.scm | 54 ++++++++++++++++++++++++++++-----------
gnu/tests/ganeti.scm | 26 +++++++++++--------
3 files changed, 88 insertions(+), 52 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index e38c2c4b9b..84afadafdb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -16480,13 +16480,6 @@ operating-system Reference
@item @code{host-name}
The host name.
-@item @code{hosts-file}
-@cindex hosts file
-A file-like object (@pxref{G-Expressions, file-like objects}) for use as
-@file{/etc/hosts} (@pxref{Host Names,,, libc, The GNU C Library
-Reference Manual}). The default is a file with entries for
-@code{localhost} and @var{host-name}.
-
@item @code{mapped-devices} (default: @code{'()})
A list of mapped devices. @xref{Mapped Devices}.
@@ -21011,22 +21004,33 @@ Networking Services
on-line service---e.g., @code{www.facebook.com}---to the local
host---@code{127.0.0.1} or its IPv6 equivalent, @code{::1}.
-This variable is typically used in the @code{hosts-file} field of an
-@code{operating-system} declaration (@pxref{operating-system Reference,
-@file{/etc/hosts}}):
+This variable is typically used as a @code{hosts-service-type}
+service extension (@pxref{Service Reference, @code{hosts-service-type}}):
@lisp
-(use-modules (gnu) (guix))
+(use-modules (gnu) (gnu services) (guix) (srfi srfi-1) (ice-9 match))
+(use-service-modules networking)
(operating-system
- (host-name "mymachine")
- ;; ...
- (hosts-file
- ;; Create a /etc/hosts file with aliases for "localhost"
- ;; and "mymachine", as well as for Facebook servers.
- (plain-file "hosts"
- (string-append (local-host-aliases host-name)
- %facebook-host-aliases))))
+ ;; @dots{}
+
+ (service
+ (simple-service 'block-facebook-hosts hosts-service-type
+ (let ((host-pairs
+ (filter-map
+ (lambda (x)
+ (and (not (or (string-null? x)
+ (string-prefix? "#" x)))
+ (remove string-null?
+ (string-split
+ x
+ char-set:whitespace))))
+ (string-split %facebook-host-aliases #\newline))))
+ (map (match-lambda
+ ((addr name)
+ (host addr name)))
+ host-pairs)))
+ ;; @dots{}
@end lisp
This mechanism can prevent programs running locally, such as Web
@@ -34312,7 +34316,7 @@ Virtualization Services
services which are described later in this section. In addition to the Ganeti
service, you will need the OpenSSH service (@pxref{Networking Services,
@code{openssh-service-type}}), and update the @file{/etc/hosts} file
-(@pxref{operating-system Reference, @code{hosts-file}}) with the cluster name
+(@pxref{Service Reference, @code{hosts-service-type}}) with the cluster name
and address (or use a DNS server).
All nodes participating in a Ganeti cluster should have the same Ganeti and
@@ -34326,14 +34330,6 @@ Virtualization Services
(operating-system
;; @dots{}
(host-name "node1")
- (hosts-file (plain-file "hosts" (format #f "
-127.0.0.1 localhost
-::1 localhost
-
-192.168.1.200 ganeti.example.com
-192.168.1.201 node1.example.com node1
-192.168.1.202 node2.example.com node2
-")))
;; Install QEMU so we can use KVM-based instances, and LVM, DRBD and Ceph
;; in order to use the "plain", "drbd" and "rbd" storage backends.
@@ -34361,6 +34357,14 @@ Virtualization Services
(openssh-configuration
(permit-root-login 'prohibit-password)))
+ (simple-service 'ganeti-hosts-entries hosts-service-type
+ (list
+ (host "192.168.1.200" "ganeti.example.com")
+ (host "192.168.1.201" "node1.example.com"
+ '("node1"))
+ (host "192.168.1.202" "node2.example.com"
+ '("node2"))))
+
(service ganeti-service-type
(ganeti-configuration
;; This list specifies allowed file system paths
diff --git a/gnu/system.scm b/gnu/system.scm
index d67f9a615b..e8904cfab7 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -14,6 +14,7 @@
;;; Copyright © 2020, 2022 Efraim Flashner <efraim@flashner.co.il>
;;; Copyright © 2021 Maxime Devos <maximedevos@telenet.be>
;;; Copyright © 2021 raid5atemyhomework <raid5atemyhomework@protonmail.com>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -97,7 +98,7 @@ (define-module (gnu system)
operating-system-user-services
operating-system-packages
operating-system-host-name
- operating-system-hosts-file
+ operating-system-hosts-file ;deprecated
operating-system-hurd
operating-system-kernel
operating-system-kernel-file
@@ -208,6 +209,15 @@ (define* (bootable-kernel-arguments system root-device version)
#$system "/boot")))
;; System-wide configuration.
+
+(define-with-syntax-properties (warn-hosts-file-field-deprecation
+ (value properties))
+ (when value
+ (warning (source-properties->location properties)
+ (G_ "the 'hosts-file' field is deprecated, please use \
+'hosts-service-type' instead~%")))
+ value)
+
;; TODO: Add per-field docstrings/stexi.
(define-record-type* <operating-system> operating-system
make-operating-system
@@ -239,8 +249,9 @@ (define-record-type* <operating-system> operating-system
(default %base-firmware))
(host-name operating-system-host-name) ; string
- (hosts-file operating-system-hosts-file ; file-like | #f
- (default #f))
+ (hosts-file %operating-system-hosts-file ; deprecated
+ (default #f)
+ (sanitize warn-hosts-file-field-deprecation))
(mapped-devices operating-system-mapped-devices ; list of <mapped-device>
(default '()))
@@ -296,6 +307,10 @@ (define-record-type* <operating-system> operating-system
source-properties->location))
(innate)))
+(define-deprecated (operating-system-hosts-file os)
+ hosts-service-type
+ (%operating-system-hosts-file os))
+
(define* (operating-system-kernel-arguments
os root-device #:key (version %boot-parameters-version))
"Return all the kernel arguments, including the ones not specified directly
@@ -733,7 +748,8 @@ (define (operating-system-default-essential-services os)
(non-boot-fs (non-boot-file-system-service os))
(swaps (swap-services os))
(procs (service user-processes-service-type))
- (host-name (host-name-service (operating-system-host-name os)))
+ (host-name (operating-system-host-name os))
+ (hosts-file (operating-system-hosts-file os))
(entries (operating-system-directory-base-entries os)))
(cons* (service system-service-type entries)
(service linux-builder-service-type
@@ -755,12 +771,19 @@ (define (operating-system-default-essential-services os)
(operating-system-groups os))
(operating-system-skeletons os))
(operating-system-etc-service os)
+ ;; XXX: hosts-file is deprecated
+ (if hosts-file
+ (simple-service 'deprecated-hosts-file etc-service-type
+ (list `("hosts" ,hosts-file)))
+ (service hosts-service-type
+ (local-host-aliases host-name)))
(service fstab-service-type
(filter file-system-needed-for-boot?
(operating-system-file-systems os)))
(session-environment-service
(operating-system-environment-variables os))
- host-name procs root-fs
+ (host-name-service host-name)
+ procs root-fs
(service setuid-program-service-type
(operating-system-setuid-programs os))
(service profile-service-type
@@ -774,7 +797,9 @@ (define (operating-system-default-essential-services os)
(operating-system-firmware os)))))))
(define (hurd-default-essential-services os)
- (let ((entries (operating-system-directory-base-entries os)))
+ (let ((host-name (operating-system-host-name os))
+ (hosts-file (operating-system-hosts-file os))
+ (entries (operating-system-directory-base-entries os)))
(list (service system-service-type entries)
%boot-service
%hurd-startup-service
@@ -794,6 +819,12 @@ (define (hurd-default-essential-services os)
(operating-system-file-systems os)))
(pam-root-service (operating-system-pam-services os))
(operating-system-etc-service os)
+ ;; XXX: hosts-file is deprecated
+ (if hosts-file
+ (simple-service 'deprecated-hosts-file etc-service-type
+ (list `("hosts" ,hosts-file)))
+ (service hosts-service-type
+ (local-host-aliases host-name)))
(service setuid-program-service-type
(operating-system-setuid-programs os))
(service profile-service-type (operating-system-packages os)))))
@@ -914,12 +945,9 @@ (define %default-issue
(define (local-host-aliases host-name)
"Return aliases for HOST-NAME, to be used in /etc/hosts."
- (string-append "127.0.0.1 localhost " host-name "\n"
- "::1 localhost " host-name "\n"))
-
-(define (default-/etc/hosts host-name)
- "Return the default /etc/hosts file."
- (plain-file "hosts" (local-host-aliases host-name)))
+ (map (lambda (address)
+ (host address "localhost" (list host-name)))
+ '("127.0.0.1" "::1")))
(define (validated-sudoers-file file)
"Return a copy of FILE, a sudoers file, after checking that it is
@@ -1068,8 +1096,6 @@ (define* (operating-system-etc-service os)
,@(if nsswitch `(("nsswitch.conf" ,#~#$nsswitch)) '())
("profile" ,#~#$profile)
("bashrc" ,#~#$bashrc)
- ("hosts" ,#~#$(or (operating-system-hosts-file os)
- (default-/etc/hosts (operating-system-host-name os))))
;; Write the operating-system-host-name to /etc/hostname to prevent
;; NetworkManager from changing the system's hostname when connecting
;; to certain networks. Some discussion at
diff --git a/gnu/tests/ganeti.scm b/gnu/tests/ganeti.scm
index f647e9554c..b5624b7598 100644
--- a/gnu/tests/ganeti.scm
+++ b/gnu/tests/ganeti.scm
@@ -1,6 +1,7 @@
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2020, 2021 Marius Bakke <marius@gnu.org>
;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re>
+;;; Copyright © 2023 Bruno Victal <mirai@makinata.eu>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -22,6 +23,7 @@ (define-module (gnu tests ganeti)
#:use-module (gnu tests)
#:use-module (gnu system vm)
#:use-module (gnu services)
+ #:use-module (gnu services base)
#:use-module (gnu services ganeti)
#:use-module (gnu services networking)
#:use-module (gnu services ssh)
@@ -46,18 +48,15 @@ (define %ganeti-os
%base-file-systems))
(firmware '())
- ;; The hosts file must contain a nonlocal IP for host-name.
- ;; In addition, the cluster name must resolve to an IP address that
- ;; is not currently provisioned.
- (hosts-file (plain-file "hosts" (format #f "
-127.0.0.1 localhost
-::1 localhost
-10.0.2.15 gnt1.example.com gnt1
-192.168.254.254 ganeti.example.com
-")))
-
(packages (append (list ganeti-instance-debootstrap ganeti-instance-guix)
%base-packages))
+
+ ;; The hosts file must contain a nonlocal IP for host-name.
+ (essential-services
+ (modify-services (operating-system-default-essential-services this-operating-system)
+ (hosts-service-type config => (list
+ (host "127.0.0.1" "localhost")
+ (host "::1" "localhost")))))
(services
(append (list (service static-networking-service-type
(list %qemu-static-networking))
@@ -65,6 +64,13 @@ (define %ganeti-os
(openssh-configuration
(permit-root-login 'prohibit-password)))
+ ;; In addition, the cluster name must resolve to an IP address that
+ ;; is not currently provisioned.
+ (simple-service 'ganeti-host-entries hosts-service-type
+ (list
+ (host "10.0.2.15" "gnt1.example.com" '("gnt1"))
+ (host "192.168.254.254" "ganeti.example.com")))
+
(service ganeti-service-type
(ganeti-configuration
(file-storage-paths '("/srv/ganeti/file-storage"))
--
2.38.1
next prev parent reply other threads:[~2023-01-27 21:08 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-01-11 17:26 [bug#60735] [PATCH 0/2] Implement etc-hosts-service-type Bruno Victal
2023-01-11 17:28 ` [bug#60735] [PATCH 1/2] services: Add etc-hosts-service-type Bruno Victal
2023-01-14 17:30 ` [bug#60735] [PATCH 0/2] Implement etc-hosts-service-type Ludovic Courtès
2023-01-11 17:28 ` [bug#60735] [PATCH 2/2] services: Add block-facebook-hosts-service-type Bruno Victal
2023-01-18 16:54 ` [bug#60735] [PATCH v2 1/3] services: Add etc-hosts-service-type Bruno Victal
2023-01-18 16:54 ` [bug#60735] [PATCH v2 2/3] system: Deprecate hosts-file Bruno Victal
2023-01-23 22:37 ` Ludovic Courtès
2023-01-23 23:19 ` Bruno Victal
2023-01-24 8:53 ` Ludovic Courtès
2023-01-18 16:54 ` [bug#60735] [PATCH v2 3/3] services: Add block-facebook-hosts-service-type Bruno Victal
2023-01-23 22:40 ` Ludovic Courtès
2023-01-25 20:34 ` Bruno Victal
2023-01-23 22:30 ` [bug#60735] [PATCH v2 1/3] services: Add etc-hosts-service-type Ludovic Courtès
2023-01-23 22:47 ` Ludovic Courtès
2023-01-25 20:29 ` Bruno Victal
2023-01-27 21:06 ` [bug#60735] [PATCH v3 1/3] services: Add hosts-service-type Bruno Victal
2023-01-27 21:06 ` Bruno Victal [this message]
2023-01-27 21:06 ` [bug#60735] [PATCH v3 3/3] services: Add block-facebook-hosts-service-type Bruno Victal
2023-02-08 23:57 ` bug#60735: [PATCH 0/2] Implement etc-hosts-service-type Ludovic Courtès
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
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ee646918414c8ff0bc1dce1b14b7acbd65ffbad1.1674853530.git.mirai@makinata.eu \
--to=mirai@makinata.eu \
--cc=60735@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 external index
https://git.savannah.gnu.org/cgit/guix.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.