services: network-manager: Use record for configuration.
* gnu/services/network-manager.scm (<network-manager-configuration>): New record type. (network-manager-shpeherd-service): Change to use the network-manager-configuration record, rather than a package. Generate a simple configuration file from the network-manager-configuration record. (network-manager-service-type): Update extensions to take the network-manager-configuration rather than a package. (network-manager-service): Remove function, the network-manager-service-type can be used instead, and this avoids keeping the function signature and value coresponding to the service type in sync. * doc/guix.texi (Networking Services): Remove documentation for the removed network-manager-service procedure, and add documentation of the network-manager-service-type variable and network-manager-configuration record. Signed-off-by: 宋文武 <iyzsong@member.fsf.org>master
parent
4f98c3c553
commit
b726096bc5
|
@ -8758,11 +8758,41 @@ and @command{wicd-curses} user interfaces.
|
|||
@end deffn
|
||||
|
||||
@cindex NetworkManager
|
||||
@deffn {Scheme Procedure} network-manager-service @
|
||||
[#:network-manager @var{network-manager}]
|
||||
Return a service that runs NetworkManager, a network connection manager
|
||||
attempting to keep network connectivity active when available.
|
||||
@end deffn
|
||||
|
||||
@defvr {Scheme Variable} network-manager-service-type
|
||||
This is the service type for the
|
||||
@uref{https://wiki.gnome.org/Projects/NetworkManager, NetworkManager}
|
||||
service. The value for this service type is a
|
||||
@code{network-manager-configuration} record.
|
||||
@end defvr
|
||||
|
||||
@deftp {Data Type} network-manager-configuration
|
||||
Data type representing the configuration of NetworkManager.
|
||||
|
||||
@table @asis
|
||||
@item @code{network-manager} (default: @code{network-manager})
|
||||
The NetworkManager package to use.
|
||||
|
||||
@item @code{dns} (default: @code{"default"})
|
||||
Processing mode for DNS, which affects how NetworkManager uses the
|
||||
@code{resolv.conf} configuration file.
|
||||
|
||||
@table @samp
|
||||
@item default
|
||||
NetworkManager will update @code{resolv.conf} to reflect the nameservers
|
||||
provided by currently active connections.
|
||||
|
||||
@item dnsmasq
|
||||
NetworkManager will run @code{dnsmasq} as a local caching nameserver,
|
||||
using a "split DNS" configuration if you are connected to a VPN, and
|
||||
then update @code{resolv.conf} to point to the local nameserver.
|
||||
|
||||
@item none
|
||||
NetworkManager will not modify @code{resolv.conf}.
|
||||
@end table
|
||||
|
||||
@end table
|
||||
@end deftp
|
||||
|
||||
@cindex Connman
|
||||
@deffn {Scheme Procedure} connman-service @
|
||||
|
|
|
@ -64,7 +64,12 @@
|
|||
|
||||
wicd-service-type
|
||||
wicd-service
|
||||
network-manager-service
|
||||
|
||||
network-manager-configuration
|
||||
network-manager-configuration?
|
||||
network-manager-configuration-dns
|
||||
network-manager-service-type
|
||||
|
||||
connman-service
|
||||
wpa-supplicant-service-type))
|
||||
|
||||
|
@ -679,14 +684,29 @@ and @command{wicd-curses} user interfaces."
|
|||
;;; NetworkManager
|
||||
;;;
|
||||
|
||||
(define-record-type* <network-manager-configuration>
|
||||
network-manager-configuration make-network-manager-configuration
|
||||
network-manager-configuration?
|
||||
(network-manager network-manager-configuration-network-manager
|
||||
(default network-manager))
|
||||
(dns network-manager-configuration-dns
|
||||
(default "default")))
|
||||
|
||||
(define %network-manager-activation
|
||||
;; Activation gexp for NetworkManager.
|
||||
#~(begin
|
||||
(use-modules (guix build utils))
|
||||
(mkdir-p "/etc/NetworkManager/system-connections")))
|
||||
|
||||
(define (network-manager-shepherd-service network-manager)
|
||||
"Return a shepherd service for NETWORK-MANAGER."
|
||||
(define network-manager-shepherd-service
|
||||
(match-lambda
|
||||
(($ <network-manager-configuration> network-manager dns)
|
||||
(let
|
||||
((conf (plain-file "NetworkManager.conf"
|
||||
(string-append "
|
||||
[main]
|
||||
dns=" dns "
|
||||
"))))
|
||||
(list (shepherd-service
|
||||
(documentation "Run the NetworkManager.")
|
||||
(provision '(networking))
|
||||
|
@ -694,25 +714,28 @@ and @command{wicd-curses} user interfaces."
|
|||
(start #~(make-forkexec-constructor
|
||||
(list (string-append #$network-manager
|
||||
"/sbin/NetworkManager")
|
||||
(string-append "--config=" #$conf)
|
||||
"--no-daemon")))
|
||||
(stop #~(make-kill-destructor)))))
|
||||
(stop #~(make-kill-destructor))))))))
|
||||
|
||||
(define network-manager-service-type
|
||||
(service-type (name 'network-manager)
|
||||
(let
|
||||
((config->package
|
||||
(match-lambda
|
||||
(($ <network-manager-configuration> network-manager)
|
||||
(list network-manager)))))
|
||||
|
||||
(service-type
|
||||
(name 'network-manager)
|
||||
(extensions
|
||||
(list (service-extension shepherd-root-service-type
|
||||
network-manager-shepherd-service)
|
||||
(service-extension dbus-root-service-type list)
|
||||
(service-extension polkit-service-type list)
|
||||
(service-extension dbus-root-service-type config->package)
|
||||
(service-extension polkit-service-type config->package)
|
||||
(service-extension activation-service-type
|
||||
(const %network-manager-activation))
|
||||
;; Add network-manager to the system profile.
|
||||
(service-extension profile-service-type list)))))
|
||||
|
||||
(define* (network-manager-service #:key (network-manager network-manager))
|
||||
"Return a service that runs NetworkManager, a network connection manager
|
||||
that attempting to keep active network connectivity when available."
|
||||
(service network-manager-service-type network-manager))
|
||||
(service-extension profile-service-type config->package))))))
|
||||
|
||||
|
||||
;;;
|
||||
|
|
Reference in New Issue