services: Add usb-modeswitch-service-type.
* gnu/services/networking.scm (usb-modeswitch-service-type): New variable. (usb-modeswitch-configuration): New variable. (usb-modeswitch-sh): New procedure. (usb-modeswitch-configuration->udev-rules): New procedure. * doc/guix.texi (Networking Services): Document it. Signed-off-by: Ludovic Courtès <ludo@gnu.org>
This commit is contained in:
parent
494a8cd03a
commit
f5be51040c
|
@ -12668,6 +12668,41 @@ The ModemManager package to use.
|
||||||
@end table
|
@end table
|
||||||
@end deftp
|
@end deftp
|
||||||
|
|
||||||
|
@cindex USB_ModeSwitch
|
||||||
|
@cindex Modeswitching
|
||||||
|
|
||||||
|
@defvr {Scheme Variable} usb-modeswitch-service-type
|
||||||
|
This is the service type for the
|
||||||
|
@uref{http://www.draisberghof.de/usb_modeswitch/, USB_ModeSwitch} service. The
|
||||||
|
value for this service type is a @code{usb-modeswitch-configuration} record.
|
||||||
|
|
||||||
|
When plugged in, some USB modems (and other USB devices) initially present
|
||||||
|
themselves as a read-only storage medium and not as a modem. They need to be
|
||||||
|
@dfn{modeswitched} before they are usable. The USB_ModeSwitch service type
|
||||||
|
installs udev rules to automatically modeswitch these devices when they are
|
||||||
|
plugged in.
|
||||||
|
@end defvr
|
||||||
|
|
||||||
|
@deftp {Data Type} usb-modeswitch-configuration
|
||||||
|
Data type representing the configuration of USB_ModeSwitch.
|
||||||
|
|
||||||
|
@table @asis
|
||||||
|
@item @code{usb-modeswitch} (default: @code{usb-modeswitch})
|
||||||
|
The USB_ModeSwitch package providing the binaries for modeswitching.
|
||||||
|
|
||||||
|
@item @code{usb-modeswitch-data} (default: @code{usb-modeswitch-data})
|
||||||
|
The package providing the device data and udev rules file used by
|
||||||
|
USB_ModeSwitch.
|
||||||
|
|
||||||
|
@item @code{config-file} (default: @code{#~(string-append #$usb-modeswitch:dispatcher "/etc/usb_modeswitch.conf")})
|
||||||
|
Which config file to use for the USB_ModeSwitch dispatcher. By default the
|
||||||
|
config file shipped with USB_ModeSwitch is used which disables logging to
|
||||||
|
@file{/var/log} among other default settings. If set to @code{#f}, no config
|
||||||
|
file is used.
|
||||||
|
|
||||||
|
@end table
|
||||||
|
@end deftp
|
||||||
|
|
||||||
@cindex NetworkManager
|
@cindex NetworkManager
|
||||||
|
|
||||||
@defvr {Scheme Variable} network-manager-service-type
|
@defvr {Scheme Variable} network-manager-service-type
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
;;; Copyright © 2018 Tobias Geerinckx-Rice <me@tobias.gr>
|
||||||
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
|
;;; Copyright © 2018 Chris Marusich <cmmarusich@gmail.com>
|
||||||
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
|
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
|
||||||
|
;;; Copyright © 2019 Florian Pelz <pelzflorian@pelzflorian.de>
|
||||||
;;;
|
;;;
|
||||||
;;; This file is part of GNU Guix.
|
;;; This file is part of GNU Guix.
|
||||||
;;;
|
;;;
|
||||||
|
@ -33,10 +34,13 @@
|
||||||
#:use-module (gnu system shadow)
|
#:use-module (gnu system shadow)
|
||||||
#:use-module (gnu system pam)
|
#:use-module (gnu system pam)
|
||||||
#:use-module (gnu packages admin)
|
#:use-module (gnu packages admin)
|
||||||
|
#:use-module (gnu packages base)
|
||||||
|
#:use-module (gnu packages bash)
|
||||||
#:use-module (gnu packages connman)
|
#:use-module (gnu packages connman)
|
||||||
#:use-module (gnu packages freedesktop)
|
#:use-module (gnu packages freedesktop)
|
||||||
#:use-module (gnu packages linux)
|
#:use-module (gnu packages linux)
|
||||||
#:use-module (gnu packages tor)
|
#:use-module (gnu packages tor)
|
||||||
|
#:use-module (gnu packages usb-modeswitch)
|
||||||
#:use-module (gnu packages messaging)
|
#:use-module (gnu packages messaging)
|
||||||
#:use-module (gnu packages networking)
|
#:use-module (gnu packages networking)
|
||||||
#:use-module (gnu packages ntp)
|
#:use-module (gnu packages ntp)
|
||||||
|
@ -104,6 +108,12 @@
|
||||||
modem-manager-configuration?
|
modem-manager-configuration?
|
||||||
modem-manager-service-type
|
modem-manager-service-type
|
||||||
|
|
||||||
|
usb-modeswitch-configuration
|
||||||
|
usb-modeswitch-configuration?
|
||||||
|
usb-modeswitch-configuration-usb-modeswitch
|
||||||
|
usb-modeswitch-configuration-usb-modeswitch-data
|
||||||
|
usb-modeswitch-service-type
|
||||||
|
|
||||||
<wpa-supplicant-configuration>
|
<wpa-supplicant-configuration>
|
||||||
wpa-supplicant-configuration
|
wpa-supplicant-configuration
|
||||||
wpa-supplicant-configuration?
|
wpa-supplicant-configuration?
|
||||||
|
@ -1041,6 +1051,100 @@ a network connection manager."))))
|
||||||
ModemManager}, a modem management daemon that aims to simplify dialup
|
ModemManager}, a modem management daemon that aims to simplify dialup
|
||||||
networking."))))
|
networking."))))
|
||||||
|
|
||||||
|
|
||||||
|
;;;
|
||||||
|
;;; USB_ModeSwitch
|
||||||
|
;;;
|
||||||
|
|
||||||
|
(define-record-type* <usb-modeswitch-configuration>
|
||||||
|
usb-modeswitch-configuration make-usb-modeswitch-configuration
|
||||||
|
usb-modeswitch-configuration?
|
||||||
|
(usb-modeswitch usb-modeswitch-configuration-usb-modeswitch
|
||||||
|
(default usb-modeswitch))
|
||||||
|
(usb-modeswitch-data usb-modeswitch-configuration-usb-modeswitch-data
|
||||||
|
(default usb-modeswitch-data))
|
||||||
|
(config-file usb-modeswitch-configuration-config-file
|
||||||
|
(default #~(string-append #$usb-modeswitch:dispatcher
|
||||||
|
"/etc/usb_modeswitch.conf"))))
|
||||||
|
|
||||||
|
(define (usb-modeswitch-sh usb-modeswitch config-file)
|
||||||
|
"Build a copy of usb_modeswitch.sh located in package USB-MODESWITCH,
|
||||||
|
modified to pass the CONFIG-FILE in its calls to usb_modeswitch_dispatcher,
|
||||||
|
and wrap it to actually find the dispatcher in USB-MODESWITCH. The script
|
||||||
|
will be run by USB_ModeSwitch’s udev rules file when a modeswitchable USB
|
||||||
|
device is detected."
|
||||||
|
(computed-file
|
||||||
|
"usb_modeswitch-sh"
|
||||||
|
(with-imported-modules '((guix build utils))
|
||||||
|
#~(begin
|
||||||
|
(use-modules (guix build utils))
|
||||||
|
(let ((cfg-param
|
||||||
|
#$(if config-file
|
||||||
|
#~(string-append " --config-file=" #$config-file)
|
||||||
|
"")))
|
||||||
|
(mkdir #$output)
|
||||||
|
(install-file (string-append #$usb-modeswitch:dispatcher
|
||||||
|
"/lib/udev/usb_modeswitch")
|
||||||
|
#$output)
|
||||||
|
|
||||||
|
;; insert CFG-PARAM into usb_modeswitch_dispatcher command-lines
|
||||||
|
(substitute* (string-append #$output "/usb_modeswitch")
|
||||||
|
(("(exec usb_modeswitch_dispatcher .*)( 2>>)" _ left right)
|
||||||
|
(string-append left cfg-param right))
|
||||||
|
(("(exec usb_modeswitch_dispatcher .*)( &)" _ left right)
|
||||||
|
(string-append left cfg-param right)))
|
||||||
|
|
||||||
|
;; wrap-program needs bash in PATH:
|
||||||
|
(putenv (string-append "PATH=" #$bash "/bin"))
|
||||||
|
(wrap-program (string-append #$output "/usb_modeswitch")
|
||||||
|
`("PATH" ":" = (,(string-append #$coreutils "/bin")
|
||||||
|
,(string-append
|
||||||
|
#$usb-modeswitch:dispatcher
|
||||||
|
"/bin")))))))))
|
||||||
|
|
||||||
|
(define (usb-modeswitch-configuration->udev-rules config)
|
||||||
|
"Build a rules file for extending udev-service-type from the rules in the
|
||||||
|
usb-modeswitch package specified in CONFIG. The rules file will invoke
|
||||||
|
usb_modeswitch.sh from the usb-modeswitch package, modified to pass the right
|
||||||
|
config file."
|
||||||
|
(match config
|
||||||
|
(($ <usb-modeswitch-configuration> usb-modeswitch data config-file)
|
||||||
|
(computed-file
|
||||||
|
"usb_modeswitch.rules"
|
||||||
|
(with-imported-modules '((guix build utils))
|
||||||
|
#~(begin
|
||||||
|
(use-modules (guix build utils))
|
||||||
|
(let ((in (string-append #$data "/udev/40-usb_modeswitch.rules"))
|
||||||
|
(out (string-append #$output "/lib/udev/rules.d"))
|
||||||
|
(script #$(usb-modeswitch-sh usb-modeswitch config-file)))
|
||||||
|
(mkdir-p out)
|
||||||
|
(chdir out)
|
||||||
|
(install-file in out)
|
||||||
|
(substitute* "40-usb_modeswitch.rules"
|
||||||
|
(("PROGRAM=\"usb_modeswitch")
|
||||||
|
(string-append "PROGRAM=\"" script "/usb_modeswitch"))
|
||||||
|
(("RUN\\+=\"usb_modeswitch")
|
||||||
|
(string-append "RUN+=\"" script "/usb_modeswitch"))))))))))
|
||||||
|
|
||||||
|
(define usb-modeswitch-service-type
|
||||||
|
(service-type
|
||||||
|
(name 'usb-modeswitch)
|
||||||
|
(extensions
|
||||||
|
(list
|
||||||
|
(service-extension
|
||||||
|
udev-service-type
|
||||||
|
(lambda (config)
|
||||||
|
(let ((rules (usb-modeswitch-configuration->udev-rules config)))
|
||||||
|
(list rules))))))
|
||||||
|
(default-value (usb-modeswitch-configuration))
|
||||||
|
(description "Run @uref{http://www.draisberghof.de/usb_modeswitch/,
|
||||||
|
USB_ModeSwitch}, a mode switching tool for controlling USB devices with
|
||||||
|
multiple @dfn{modes}. When plugged in for the first time many USB
|
||||||
|
devices (primarily high-speed WAN modems) act like a flash storage containing
|
||||||
|
installers for Windows drivers. USB_ModeSwitch replays the sequence the
|
||||||
|
Windows drivers would send to switch their mode from storage to modem (or
|
||||||
|
whatever the thing is supposed to do).")))
|
||||||
|
|
||||||
|
|
||||||
;;;
|
;;;
|
||||||
;;; WPA supplicant
|
;;; WPA supplicant
|
||||||
|
|
Loading…
Reference in New Issue