* [bug#54561] [PATCH 3/4] doc: Add documentation for WSDD service.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
@ 2022-03-24 21:10 ` Simon Streit
2022-03-24 21:14 ` [bug#54561] [PATCH 4/4] services: Add wsdd service Simon Streit
` (5 subsequent siblings)
6 siblings, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-24 21:10 UTC (permalink / raw)
To: 54561
---
doc/guix.texi | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index 270f07d068..9770856050 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -29914,6 +29914,72 @@ Manually enable the @code{winbindd} daemon.
@end table
@end deftp
+@cindex wsdd
+@subsubheading Web Service Discovery Daemon
+
+Web Service Discovery Daemon implements the WSD protocoll. It is a
+drop-in replacement for host discovery that lack support for the SMBv1
+protocol.
+
+@defvr{Scheme Variable} wsdd-service-type
+
+Service type for the Web Service Discoery host daemon. The value for
+this service type is a @code{wsdd-configuration} record. The details
+for the @code{wsdd-configuration} record type are given below.
+@end defvr
+
+@deftp{Data Type} wsdd-configuration This data type represents the
+configuration for the wsdd service.
+
+@table @asis
+
+@item @code{package} (default: @code{wsdd})
+The wsdd package to use.
+
+@item @code{ipv4only?} (default: @code{#f})
+Only listen to ipv4 addresses.
+
+@item @code{ipv6only} (default: @code{#f})
+Only listen to ipv6 addresses. Please note: Activating both options is
+not possible, since there would be no ip versions to listen to.
+
+@item @code{chroot} (default: @code{#f})
+Chroot into a sperate directory to prevent access to other directories.
+This is to increase security in case there is a vulnerability in
+@command{wsdd}.
+
+@item @code{hoplimit} (default: @code{1})
+Limit to the level of hops for multicast packets. The default is
+@var{1} which should prevent packets from leaving the local network.
+
+@item @code{interface} (default: @code{'()})
+Limit to the given list of interfaces to listen to. By default wsdd
+will listen to all interfaces. Except the loopback interface is never
+used.
+
+@item @code{uuid-device} (default: @code{#f})
+The WSD protocol requires a device to have a UUID. Set this to manually
+assign the service a UUID.
+
+@item @code{domain} (default: @code{#f})
+Notify this host is a member of an Active Directory.
+
+@item @code{hostname} (default: @code{#f})
+Manually set the hostname rather than letting @command{wsdd} inherit
+this host's hostname.
+
+@item @code{preserve-case?} (default: @code{#f})
+By default @command{wsdd} will convert the hostname in workgroup to all
+uppercase. The opposite is true for hostnames in domains. Setting this
+parameter will preserve case.
+
+@item @code{workgroup} (default: @var{"WORKGROUP"})
+Change the name of the workgroup. By default @command{wsdd} reports
+this host being member of a workgroup.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 4/4] services: Add wsdd service.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
2022-03-24 21:10 ` [bug#54561] [PATCH 3/4] doc: Add documentation for WSDD service Simon Streit
@ 2022-03-24 21:14 ` Simon Streit
2022-03-25 9:16 ` Simon Streit
2022-03-25 9:00 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
` (4 subsequent siblings)
6 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-03-24 21:14 UTC (permalink / raw)
To: 54561
* gnu/services/samba.scm (<wsdd-configuration>): New record.
(wsdd-service-type): New variable.
(wsdd-shepherd-services): New procedure.
---
gnu/services/samba.scm | 107 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 107 insertions(+)
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
index ffbf20fdbc..3058ed9d47 100644
--- a/gnu/services/samba.scm
+++ b/gnu/services/samba.scm
@@ -171,3 +171,110 @@ (define samba-service-type
(service-extension activation-service-type
samba-activation)))
(default-value (samba-configuration))))
+
+\f
+;;;
+;;; WSDD
+;;;
+
+(define-record-type* <wsdd-configuration>
+ wsdd-configuration
+ make-wsdd-configuration
+ wsdd-configuration?
+ (package wsdd-configuration-package
+ (default wsdd))
+ (ipv4only? wsdd-configuration-ipv4only?
+ (default #f))
+ (ipv6only? wsdd-configuration-ipv6only?
+ (default #f))
+ (chroot wsdd-configuration-chroot
+ (default #f))
+ (hoplimit wsdd-configuration-hoplimit
+ (default 1))
+ (interfaces wsdd-configuration-interfaces
+ (default '()))
+ (uuid-device wsdd-configuration-uuid-device
+ (default #f))
+ (domain wsdd-configuration-domain
+ (default #f))
+ (hostname wsdd-configuration-hostname
+ (default #f))
+ (preserve-case? wsdd-configuration-preserve-case?
+ (default #f))
+ (workgroup wsdd-configuration-workgroup
+ (default "WORKGROUP")))
+
+(define wsdd-accounts
+ (list
+ (user-group (name "wsdd"))
+ (user-account (name "wsdd")
+ (group "wsdd")
+ (comment "Web Service Discovery user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define wsdd-shepherd-service
+ (match-lambda
+ (($ <wsdd-configuration> package
+ ipv4only?
+ ipv6only?
+ chroot
+ hoplimit
+ interfaces
+ uuid-device
+ domain
+ hostname
+ preserve-case?
+ workgroup
+ )
+ (list (shepherd-service
+ (documentation "Run a Web Service Discovery service")
+ (provision '(wsdd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/bin/wsdd")
+ #$@(if ipv4only?
+ #~("--ipv4only")
+ '())
+ #$@(if ipv6only?
+ #~("--ipv6only")
+ '())
+ #$@(if chroot
+ #~("--chroot" #$chroot)
+ '())
+ #$@(if hoplimit
+ #~("--hoplimit" #$(number->string hoplimit))
+ '())
+ #$@(map (lambda (interfaces)
+ (string-append "--interface=" interfaces))
+ interfaces)
+ #$@(if uuid-device
+ #~("--uuid" #$uuid-device)
+ '())
+ #$@(if domain
+ #~("--domain" #$domain)
+ '())
+ #$@(if hostname
+ #~("--hostname" #$hostname)
+ '())
+ #$@(if preserve-case?
+ #~("--preserve-case")
+ '())
+ #$@(if workgroup
+ #~("--workgroup" #$workgroup)
+ '()))
+ #:user "wsdd"
+ #:group "wsdd"
+ #:log-file "/var/log/wsdd.log"))
+ (stop #~(make-kill-destructor)))))))
+
+(define wsdd-service-type
+ (service-type
+ (name 'wsdd)
+ (description "Web Service Discovery Daemon")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ wsdd-shepherd-service)
+ (service-extension account-service-type
+ (const wsdd-accounts))))
+ (default-value (wsdd-configuration))))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
@ 2022-03-25 8:48 Simon Streit
2022-03-24 21:10 ` [bug#54561] [PATCH 3/4] doc: Add documentation for WSDD service Simon Streit
` (6 more replies)
0 siblings, 7 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-25 8:48 UTC (permalink / raw)
To: 54561
Hello!
Please find attached several patches to add Samba and wsdd as service
declaration for Guix. My Samba service declaration has been cut down in length
since I am preparing a serialiser, which has not been finalised yet.
But I'd rather still have these patch posted here to see it pushed eventually.
Or others can test it to see if there are any other improvements that should
be done and in case I've missed something. Though the service definition is
rather simple for now.
Kind regards
Simon Streit (4):
services: Add samba service.
doc: Add "Samba" chapter.
doc: Add documentation for WSDD service.
services: Add wsdd service.
doc/guix.texi | 119 ++++++++++++++++++
gnu/services/samba.scm | 280 +++++++++++++++++++++++++++++++++++++++++
2 files changed, 399 insertions(+)
create mode 100644 gnu/services/samba.scm
--
2.34.0
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
2022-03-24 21:10 ` [bug#54561] [PATCH 3/4] doc: Add documentation for WSDD service Simon Streit
2022-03-24 21:14 ` [bug#54561] [PATCH 4/4] services: Add wsdd service Simon Streit
@ 2022-03-25 9:00 ` Simon Streit
2022-03-27 1:07 ` fesoj000
2022-03-25 9:01 ` [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter Simon Streit
` (3 subsequent siblings)
6 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-03-25 9:00 UTC (permalink / raw)
To: 54561
* gnu/services/samba.scm (<samba-configuration>): New record.
(samba-service-type): New variable.
(samba-shepherd-services): New Procedure.
---
gnu/services/samba.scm | 173 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 173 insertions(+)
create mode 100644 gnu/services/samba.scm
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
new file mode 100644
index 0000000000..ffbf20fdbc
--- /dev/null
+++ b/gnu/services/samba.scm
@@ -0,0 +1,173 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services samba)
+
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages samba)
+
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services base)
+ #:use-module (gnu system shadow)
+
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix modules)
+ #:use-module (guix records)
+
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 textual-ports)
+ #:use-module (srfi srfi-1)
+
+ #:export (samba-service-type
+ samba-configuration
+ samba-smb-conf
+
+ wsdd-service-type
+ wsdd-configuration))
+
+(define %smb-conf
+ (plain-file "smb.conf" "[global]
+ workgroup = WORKGROUP
+ server string = Samba Server
+ server role = standalone server
+ log file = /var/log/samba/log.%m
+ logging = file
+"))
+
+(define-record-type* <samba-configuration>
+ samba-configuration
+ make-samba-configuration
+ samba-configuration?
+ (package samba-configuration-package
+ (default samba))
+ (config-file samba-configuration-config-file
+ (default #f))
+ (enable-samba? samba-configuration-enable-samba?
+ (default #f))
+ (enable-smbd? samba-configuration-enable-smbd?
+ (default #t))
+ (enable-nmbd? samba-configuration-enable-nmbd?
+ (default #t))
+ (enable-winbindd? samba-configuration-enable-winbindd?
+ (default #t)))
+
+(define (samba-activation config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (with-imported-modules '((guix build utils))
+ (let ((lib-directory "/var/lib/samba")
+ (log-directory "/var/log/samba")
+ (run-directory "/var/run/samba")
+ (smb.conf "/etc/samba/smb.conf"))
+ #~(begin
+ (use-modules (guix build utils))
+
+ (mkdir-p #$log-directory)
+ (mkdir-p #$run-directory)
+ (mkdir-p (string-append #$lib-directory "/private"))
+ (mkdir-p "/etc/samba")
+ (copy-file #$config-file #$smb.conf)
+ (system* (string-append #$package "/bin/testparm")
+ "--suppress-prompt" #$smb.conf))))))
+
+(define (samba-samba-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Samba")
+ (provision '(samba-samba))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/samba")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-nmbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run NMBD")
+ (provision '(samba-nmbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/nmbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-smbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run SMBD")
+ (provision '(samba-smbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/smbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-winbindd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Winnbindd for Name Service Switch")
+ (provision '(samba-winbindd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/winbindd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-shepherd-services config)
+ (append (if (samba-configuration-enable-samba? config)
+ (samba-samba-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-nmbd? config)
+ (samba-nmbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-smbd? config)
+ (samba-smbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-winbindd? config)
+ (samba-winbindd-shepherd-service config)
+ '())))
+
+(define samba-service-type
+ (service-type
+ (name 'samba)
+ (description "Samba")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ samba-shepherd-services)
+ (service-extension activation-service-type
+ samba-activation)))
+ (default-value (samba-configuration))))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
` (2 preceding siblings ...)
2022-03-25 9:00 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
@ 2022-03-25 9:01 ` Simon Streit
2022-03-27 1:07 ` fesoj000
2022-03-27 14:15 ` Maxime Devos
2022-03-25 15:14 ` [bug#54561] [PATCH] gnu: samba: Modify input list Simon Streit
` (2 subsequent siblings)
6 siblings, 2 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-25 9:01 UTC (permalink / raw)
To: 54561
---
doc/guix.texi | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 53 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index e8ef4286be..270f07d068 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -101,6 +101,7 @@ Copyright @copyright{} 2021 Andrew Tropin@*
Copyright @copyright{} 2021 Sarah Morgensen@*
Copyright @copyright{} 2021 Josselin Poiret@*
Copyright @copyright{} 2022 Remco van 't Veer@*
+Copyright @copyright{} 2022 Simon Streit@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -368,6 +369,7 @@ Services
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
+* Samba Services:: Samba services.
* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
@@ -29861,6 +29863,57 @@ The verbosity level of the daemon.
@end table
@end deftp
+@node Samba Services, Continuous Integration, Network File System, Services
+@subsection Samba Services
+
+@cindex samba
+@cindex smb
+The @code{(gnu services samba)} module provides Guix service definitions
+for Samba as well as additional helper services. Currently it provides
+the following services:
+
+@subsubheading Samba
+
+Samba provides network shares for folder and printers, it can also be an
+AD DC for other samba hosts in an heterougenious network with different
+types of Computer systems.
+
+@defvar{samba-service-type}
+
+The service type to enable the samba services @code{samba}, @code{nmbd},
+@code{smbd} and @code{winbindd}. By default this service type does not
+run as an AD DC, hence @code{samba} remains disabled. It is recommended
+that Samba's package is added to the system profile to have the tool-set
+available for modifications in Samba's runtime directories.
+
+@end defvar
+
+@deftp{Data Type} samba-service-configuration
+Configuration record for the Samba suite.
+
+@table @asis
+@item @code{package} (default: @code{samba})
+The samba package to use.
+
+@item @code{config-file} (default: @code{#f})
+The config file to use. Please note: Setting this variable will disable
+all config options that come after @code{enable-winbindd?}.
+
+@item @code{enable-samba?} (default: @code{#f})
+Manually enable the @code{samba} daemon.
+
+@item @code{enable-smbd?} (default: @code{#f})
+Manually enable the @code{smbd} daemon.
+
+@item @code{enable-nmbd?} (default: @code{#f})
+Manually enable the @code{nmbd} daemon.
+
+@item @code{enable-winbindd?} (default: @code{#f})
+Manually enable the @code{winbindd} daemon.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 4/4] services: Add wsdd service.
2022-03-24 21:14 ` [bug#54561] [PATCH 4/4] services: Add wsdd service Simon Streit
@ 2022-03-25 9:16 ` Simon Streit
2022-03-25 12:02 ` Simon Streit
0 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-03-25 9:16 UTC (permalink / raw)
To: 54561
Oh, I just realised I forgot to add a patch for wsdd's package.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 4/4] services: Add wsdd service.
2022-03-25 9:16 ` Simon Streit
@ 2022-03-25 12:02 ` Simon Streit
0 siblings, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-25 12:02 UTC (permalink / raw)
To: 54561
Done. Patch can be found here: https://issues.guix.gnu.org/54563
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH] gnu: samba: Modify input list.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
` (3 preceding siblings ...)
2022-03-25 9:01 ` [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter Simon Streit
@ 2022-03-25 15:14 ` Simon Streit
2022-03-27 19:22 ` [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64 fesoj000
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
6 siblings, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-25 15:14 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
I'd like to propose to have avahi added to the input list in samba. With it
Unix based clients will find Samba hosts in local networks. SMBv1 host
discovery in Samba has been disabled. Hence this modification.
* gnu/packages/samba.scm (samba) <inputs>: Add avahi.
---
gnu/packages/samba.scm | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index 21a5fe8617..63d7245efe 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -254,7 +254,8 @@ (define-public samba
python
popt
readline
- tdb))
+ tdb
+ avahi))
(propagated-inputs
;; In Requires or Requires.private of pkg-config files.
(list ldb talloc tevent))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-25 9:00 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
@ 2022-03-27 1:07 ` fesoj000
2022-03-27 14:13 ` Maxime Devos
2022-03-27 18:48 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
0 siblings, 2 replies; 37+ messages in thread
From: fesoj000 @ 2022-03-27 1:07 UTC (permalink / raw)
To: 54561
I have a local service definition for samba i wanted to upstream
at some point. Your service looks better then mine though.
> +(define (samba-activation config)
> + (let ((package (samba-configuration-package config))
> + (config-file (samba-configuration-config-file config)))
> + (with-imported-modules '((guix build utils))
> + (let ((lib-directory "/var/lib/samba")
> + (log-directory "/var/log/samba")
> + (run-directory "/var/run/samba")
> + (smb.conf "/etc/samba/smb.conf"))
> + #~(begin
> + (use-modules (guix build utils))
> +
> + (mkdir-p #$log-directory)
> + (mkdir-p #$run-directory)
> + (mkdir-p (string-append #$lib-directory "/private"))
> + (mkdir-p "/etc/samba")
> + (copy-file #$config-file #$smb.conf)
> + (system* (string-append #$package "/bin/testparm")
> + "--suppress-prompt" #$smb.conf))))))
Is it a good idea to create all those directories with the default
umask? I always wanted to investigate which of those directories
contains sensitive data. I never got around to.
Another thing i wanted to investigate: can samba and friends be run
as non-root users? I think it would be a good idea to do that if
possible.
fyi: I currently use samba as an AD DC.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter.
2022-03-25 9:01 ` [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter Simon Streit
@ 2022-03-27 1:07 ` fesoj000
2022-03-27 14:15 ` Maxime Devos
1 sibling, 0 replies; 37+ messages in thread
From: fesoj000 @ 2022-03-27 1:07 UTC (permalink / raw)
To: 54561
> +@defvar{samba-service-type}
> +
> +The service type to enable the samba services @code{samba}, @code{nmbd},
> +@code{smbd} and @code{winbindd}. By default this service type does not
> +run as an AD DC, hence @code{samba} remains disabled. It is recommended
> +that Samba's package is added to the system profile to have the tool-set
> +available for modifications in Samba's runtime directories.
Maybe it is a good idea to provide the samba tool-set by default. You could
add the following to your samba-service-type:
(service-extension profile-service-type
(compose list samba-configuration-samba))
Some of the samba tools are broken though. I send a patch some time ago
which tries to address this issue. Maybe you want to take a look?
https://issues.guix.gnu.org/issue/54266
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-27 1:07 ` fesoj000
@ 2022-03-27 14:13 ` Maxime Devos
2022-03-27 18:32 ` Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
2022-03-27 18:48 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
1 sibling, 2 replies; 37+ messages in thread
From: Maxime Devos @ 2022-03-27 14:13 UTC (permalink / raw)
To: fesoj000, 54561
[-- Attachment #1: Type: text/plain, Size: 1797 bytes --]
fesoj000 schreef op zo 27-03-2022 om 03:07 [+0200]:
> > +(define (samba-activation config)
> > + (let ((package (samba-configuration-package config))
> > + (config-file (samba-configuration-config-file config)))
> > + (with-imported-modules '((guix build utils))
> > + (let ((lib-directory "/var/lib/samba")
> > + (log-directory "/var/log/samba")
> > + (run-directory "/var/run/samba")
> > + (smb.conf "/etc/samba/smb.conf"))
Is it necessary to put the configuration file there?
Can be we do something like (system* "/.../testparm" #$smb.conf), where
smb.conf is the generated configuration file?
> > + #~(begin
> > + (use-modules (guix build utils))
> > +
> > + (mkdir-p #$log-directory)
> > + (mkdir-p #$run-directory)
> > + (mkdir-p (string-append #$lib-directory "/private"))
> > + (mkdir-p "/etc/samba")
> > + (copy-file #$config-file #$smb.conf)
> > + (system* (string-append #$package "/bin/testparm")
> > + "--suppress-prompt" #$smb.conf))))))
> Is it a good idea to create all those directories with the default
> umask? I always wanted to investigate which of those directories
> contains sensitive data. I never got around to.
FWIW, you can use 'mkdir-p/perms' to set the permission bits.
The (string-append ...) can be simplified to:
(system* #$(file-append package "/bin/testparm" "--suppres-prompt
#$smb.conf).
Also, would it be a good idea to use (invoke ...) instead of system, to
make sure errors are detected? What is the 'suppress-prompt' for?
Greetings,
Maxime.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter.
2022-03-25 9:01 ` [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter Simon Streit
2022-03-27 1:07 ` fesoj000
@ 2022-03-27 14:15 ` Maxime Devos
2022-03-27 18:51 ` Simon Streit
1 sibling, 1 reply; 37+ messages in thread
From: Maxime Devos @ 2022-03-27 14:15 UTC (permalink / raw)
To: Simon Streit, 54561
[-- Attachment #1: Type: text/plain, Size: 635 bytes --]
Simon Streit schreef op vr 25-03-2022 om 10:01 [+0100]:
> +@item @code{config-file} (default: @code{#f})
> +The config file to use. Please note: Setting this variable will disable
> +all config options that come after @code{enable-winbindd?}.
[...]
> +@item @code{enable-winbindd?} (default: @code{#f})
> +Manually enable the @code{winbindd} daemon.
> +
> +@end table
> +@end deftp
I don't see any configuration option after enable-winbindd?. Also,
what does ‘manually enable’ mean here? How can I determine if this
needs to be done? Can it be done automatically instead of manually?
Greetings,
Maxime.
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-27 14:13 ` Maxime Devos
@ 2022-03-27 18:32 ` Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
1 sibling, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-27 18:32 UTC (permalink / raw)
To: Maxime Devos; +Cc: 54561, fesoj000
Maxime Devos <maximedevos@telenet.be> writes:
> fesoj000 schreef op zo 27-03-2022 om 03:07 [+0200]:
>> > +(define (samba-activation config)
>> > + (let ((package (samba-configuration-package config))
>> > + (config-file (samba-configuration-config-file config)))
>> > + (with-imported-modules '((guix build utils))
>> > + (let ((lib-directory "/var/lib/samba")
>> > + (log-directory "/var/log/samba")
>> > + (run-directory "/var/run/samba")
>> > + (smb.conf "/etc/samba/smb.conf"))
>
> Is it necessary to put the configuration file there?
> Can be we do something like (system* "/.../testparm" #$smb.conf), where
> smb.conf is the generated configuration file?
No, not really. The Samba suit has a lot of tools that may want to look
into the default config directory. It seems that any relevant
configuration belonging to Samba lands in smb.conf, that is looked into
anytime when needed. That is my impression, and thus
placed it there.
>> Is it a good idea to create all those directories with the default
>> umask? I always wanted to investigate which of those directories
>> contains sensitive data. I never got around to.
I'm not so sure myself. That was the end result of what had to be
created to have the service successfully initiate itself. True that I
have not investigated this myself yet. While writing this service I was
comparing the directory structure with Debian and Arch Linux, to be sure
that it would work.
>
> FWIW, you can use 'mkdir-p/perms' to set the permission bits.
> The (string-append ...) can be simplified to:
>
> (system* #$(file-append package "/bin/testparm" "--suppres-prompt
> #$smb.conf).
>
> Also, would it be a good idea to use (invoke ...) instead of system, to
> make sure errors are detected? What is the 'suppress-prompt' for?
My understanding now would be better to write invoke. Thanks for
pointing this out.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-27 1:07 ` fesoj000
2022-03-27 14:13 ` Maxime Devos
@ 2022-03-27 18:48 ` Simon Streit
2022-03-27 18:58 ` fesoj000
1 sibling, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-03-27 18:48 UTC (permalink / raw)
To: fesoj000; +Cc: 54561
fesoj000 <fesoj000@gmail.com> writes:
> I have a local service definition for samba i wanted to upstream
> at some point. Your service looks better then mine though.
Thanks. It still counts as my first try writing a service.
> fyi: I currently use samba as an AD DC.
Impressive! It might be quite interesting to see how you managed to set
up an AD DC. I stopped after certain tools began to crash. I tried to
solve them here [1]. I just noticed that you had pushed some patches
some time ago too [2]. They're both addressing the same issues. In
this case your patches are looking better than mine.
That means these tools are working for you now?
[1] https://issues.guix.gnu.org/52976
[2] https://issues.guix.gnu.org/54266
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter.
2022-03-27 14:15 ` Maxime Devos
@ 2022-03-27 18:51 ` Simon Streit
0 siblings, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-03-27 18:51 UTC (permalink / raw)
To: Maxime Devos; +Cc: 54561
Maxime Devos <maximedevos@telenet.be> writes:
> Simon Streit schreef op vr 25-03-2022 om 10:01 [+0100]:
>> +@item @code{config-file} (default: @code{#f})
>> +The config file to use. Please note: Setting this variable will disable
>> +all config options that come after @code{enable-winbindd?}.
>
> [...]
>
>> +@item @code{enable-winbindd?} (default: @code{#f})
>> +Manually enable the @code{winbindd} daemon.
>> +
>> +@end table
>> +@end deftp
>
> I don't see any configuration option after enable-winbindd?. Also,
> what does ‘manually enable’ mean here? How can I determine if this
> needs to be done? Can it be done automatically instead of manually?
Oh, it looks like I was to quick at trimming my service definition
here. There where config options that where removed, and had simply
removed the entries in the documentation too without rephrasing the
manual properly. I should modify that patch then.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 1/4] services: Add samba service.
2022-03-27 18:48 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
@ 2022-03-27 18:58 ` fesoj000
0 siblings, 0 replies; 37+ messages in thread
From: fesoj000 @ 2022-03-27 18:58 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
On 3/27/22 8:48 PM, Simon Streit wrote:
> fesoj000 <fesoj000@gmail.com> writes:
>
>> I have a local service definition for samba i wanted to upstream
>> at some point. Your service looks better then mine though.
>
> Thanks. It still counts as my first try writing a service.
>
>> fyi: I currently use samba as an AD DC.
>
> Impressive! It might be quite interesting to see how you managed to set
> up an AD DC. I stopped after certain tools began to crash. I tried to
> solve them here [1]. I just noticed that you had pushed some patches
> some time ago too [2]. They're both addressing the same issues. In
> this case your patches are looking better than mine.
>
> That means these tools are working for you now?
>
> [1] https://issues.guix.gnu.org/52976
> [2] https://issues.guix.gnu.org/54266
I mostly followed the step by step guide in the samba wiki [0]. I use this
AD DC mostly for testing and developing (kerberos, ldap). While following
the step by step guide i found that samba-tool and friends are not working,
so i tried to fix them, and yes, they do work for me currently using my patch.
My main motivation for running samba as AD DC is that i want to port sssd to
guix. Currently i have a hack for glibc which solves the libnss module lookup
issue. But all this needs more polish and time....
[0] https://wiki.samba.org/index.php/Setting_up_Samba_as_an_Active_Directory_Domain_Controller
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
` (4 preceding siblings ...)
2022-03-25 15:14 ` [bug#54561] [PATCH] gnu: samba: Modify input list Simon Streit
@ 2022-03-27 19:22 ` fesoj000
2022-03-27 19:23 ` fesoj000
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
6 siblings, 1 reply; 37+ messages in thread
From: fesoj000 @ 2022-03-27 19:22 UTC (permalink / raw)
To: 54561
* gnu/packages/libdaemon.scm: (native-inputs): Add check for riscv64 to
include config
* gnu/packages/libdaemon.scm: (arguments): Add check for riscv64 to add
update-config.sub build step
---
gnu/packages/libdaemon.scm | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
index 9dc851e823..e91b651e5a 100644
--- a/gnu/packages/libdaemon.scm
+++ b/gnu/packages/libdaemon.scm
@@ -49,7 +49,8 @@ (define-public libdaemon
(file-name (string-append name "-" version ".tar.gz"))))
(build-system gnu-build-system)
(native-inputs
- (if (and=> (%current-target-system) target-aarch64?)
+ (if (or (target-aarch64?)
+ (target-riscv64?))
`(("config" ,config)) ; for config.sub
'()))
(arguments
@@ -66,7 +67,8 @@ (define-public libdaemon
;; Hurd's console client.
"--localstatedir=/var"))
'())
- ,@(if (and=> (%current-target-system) target-aarch64?)
+ ,@(if (or (target-aarch64?)
+ (target-riscv64?))
`(#:phases
(modify-phases %standard-phases
(add-before 'configure 'update-config.sub
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64
2022-03-27 19:22 ` [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64 fesoj000
@ 2022-03-27 19:23 ` fesoj000
0 siblings, 0 replies; 37+ messages in thread
From: fesoj000 @ 2022-03-27 19:23 UTC (permalink / raw)
To: 54561
please ignore this email, send to the wrong issue number.
On 3/27/22 9:22 PM, fesoj000 wrote:
> * gnu/packages/libdaemon.scm: (native-inputs): Add check for riscv64 to
> include config
> * gnu/packages/libdaemon.scm: (arguments): Add check for riscv64 to add
> update-config.sub build step
> ---
> gnu/packages/libdaemon.scm | 6 ++++--
> 1 file changed, 4 insertions(+), 2 deletions(-)
>
> diff --git a/gnu/packages/libdaemon.scm b/gnu/packages/libdaemon.scm
> index 9dc851e823..e91b651e5a 100644
> --- a/gnu/packages/libdaemon.scm
> +++ b/gnu/packages/libdaemon.scm
> @@ -49,7 +49,8 @@ (define-public libdaemon
> (file-name (string-append name "-" version ".tar.gz"))))
> (build-system gnu-build-system)
> (native-inputs
> - (if (and=> (%current-target-system) target-aarch64?)
> + (if (or (target-aarch64?)
> + (target-riscv64?))
> `(("config" ,config)) ; for config.sub
> '()))
> (arguments
> @@ -66,7 +67,8 @@ (define-public libdaemon
> ;; Hurd's console client.
> "--localstatedir=/var"))
> '())
> - ,@(if (and=> (%current-target-system) target-aarch64?)
> + ,@(if (or (target-aarch64?)
> + (target-riscv64?))
> `(#:phases
> (modify-phases %standard-phases
> (add-before 'configure 'update-config.sub
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba
2022-03-27 14:13 ` Maxime Devos
2022-03-27 18:32 ` Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 1/5] services: Add samba service Simon Streit
` (5 more replies)
1 sibling, 6 replies; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
Please find attached an updated patch series.
I've made slight changes as follows:
* The reference to further config options in the manual have been removed.
* Samba's (samba-activation config) procedure has been slightly modified,
* better cleaned up, regarding the mkdirs. I've done more testing and it
* appears that samba will only run when /var/{lib,log,run}/samba exist,
including /var/lib/samba/private. In this case it is chmod now to o700 to
be on the save side. Debian's directory structure is world readable though.
In Arch it is o700. If anyone objects, please make it world readable. It
appears that Samba lives and breathes in these directories, so they better
be put there.
* Regarding smb.conf -- while this service technically doesn't need it placed
at /etc/samba -- is convenient to have it placed there for other tools part
of the Samba family to read it, and so that others can quickly look into its
configuration. I'll leave this for further debate whether it can stay there
or not.
* The packages samba and wsdd are included in profile-service-type so that they
are generally available in the system profile.
I hope I didn't miss anything out.
Simon Streit (5):
services: Add samba service.
doc: Add "Samba" chapter.
doc: Add documentation for WSDD service.
services: Add wsdd service.
gnu: Add wsdd.
doc/guix.texi | 118 ++++++++++++++++++
gnu/packages/samba.scm | 26 ++++
gnu/services/samba.scm | 277 +++++++++++++++++++++++++++++++++++++++++
3 files changed, 421 insertions(+)
create mode 100644 gnu/services/samba.scm
--
2.34.0
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 1/5] services: Add samba service.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 21:26 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 2/5] doc: Add "Samba" chapter Simon Streit
` (4 subsequent siblings)
5 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
* gnu/services/samba.scm (<samba-configuration>): New record.
(samba-service-type): New variable.
(samba-shepherd-services): New Procedure.
---
gnu/services/samba.scm | 177 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 177 insertions(+)
create mode 100644 gnu/services/samba.scm
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
new file mode 100644
index 0000000000..70b07f93fb
--- /dev/null
+++ b/gnu/services/samba.scm
@@ -0,0 +1,177 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services samba)
+
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages samba)
+
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services base)
+ #:use-module (gnu system shadow)
+
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix modules)
+ #:use-module (guix records)
+
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 textual-ports)
+ #:use-module (srfi srfi-1)
+
+ #:export (samba-service-type
+ samba-configuration
+ samba-smb-conf
+
+ wsdd-service-type
+ wsdd-configuration))
+
+(define %smb-conf
+ (plain-file "smb.conf" "[global]
+ workgroup = WORKGROUP
+ server string = Samba Server
+ server role = standalone server
+ log file = /var/log/samba/log.%m
+ logging = file
+"))
+
+(define-record-type* <samba-configuration>
+ samba-configuration
+ make-samba-configuration
+ samba-configuration?
+ (package samba-configuration-package
+ (default samba))
+ (config-file samba-configuration-config-file
+ (default #f))
+ (enable-samba? samba-configuration-enable-samba?
+ (default #f))
+ (enable-smbd? samba-configuration-enable-smbd?
+ (default #t))
+ (enable-nmbd? samba-configuration-enable-nmbd?
+ (default #t))
+ (enable-winbindd? samba-configuration-enable-winbindd?
+ (default #t)))
+
+(define (samba-activation config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (with-imported-modules '((guix build utils))
+ (let ((lib-dir "/var/lib/samba")
+ (log-dir "/var/log/samba")
+ (run-dir "/var/run/samba")
+ (etc-dir "/etc/samba")
+ (smb.conf "/etc/samba/smb.conf"))
+ #~(begin
+ (use-modules (guix build utils))
+ (mkdir-p #$etc-dir)
+ (mkdir-p #$lib-dir)
+ (mkdir-p/perms (string-append #$lib-dir "/private")
+ (getpwnam "root") #o700)
+ (mkdir-p #$log-dir)
+ (mkdir-p #$run-dir)
+ (copy-file #$config-file #$smb.conf)
+ (invoke #$(file-append package "/bin/testparm")
+ "--suppress-prompt" #$smb.conf))))))
+
+(define (samba-samba-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Samba")
+ (provision '(samba-samba))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/samba")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-nmbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run NMBD")
+ (provision '(samba-nmbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/nmbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-smbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run SMBD")
+ (provision '(samba-smbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/smbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-winbindd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Winnbindd for Name Service Switch")
+ (provision '(samba-winbindd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/winbindd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-shepherd-services config)
+ (append (if (samba-configuration-enable-samba? config)
+ (samba-samba-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-nmbd? config)
+ (samba-nmbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-smbd? config)
+ (samba-smbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-winbindd? config)
+ (samba-winbindd-shepherd-service config)
+ '())))
+
+(define samba-service-type
+ (service-type
+ (name 'samba)
+ (description "Samba")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ samba-shepherd-services)
+ (service-extension activation-service-type
+ samba-activation)
+ (service-extension profile-service-type
+ (compose list samba-configuration-package))))
+ (default-value (samba-configuration))))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 2/5] doc: Add "Samba" chapter.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 1/5] services: Add samba service Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 21:35 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Simon Streit
` (3 subsequent siblings)
5 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
---
doc/guix.texi | 52 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 52 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index e8ef4286be..70f78c601a 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -101,6 +101,7 @@ Copyright @copyright{} 2021 Andrew Tropin@*
Copyright @copyright{} 2021 Sarah Morgensen@*
Copyright @copyright{} 2021 Josselin Poiret@*
Copyright @copyright{} 2022 Remco van 't Veer@*
+Copyright @copyright{} 2022 Simon Streit@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -368,6 +369,7 @@ Services
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
+* Samba Services:: Samba services.
* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
@@ -29861,6 +29863,56 @@ The verbosity level of the daemon.
@end table
@end deftp
+@node Samba Services, Continuous Integration, Network File System, Services
+@subsection Samba Services
+
+@cindex samba
+@cindex smb
+The @code{(gnu services samba)} module provides Guix service definitions
+for Samba as well as additional helper services. Currently it provides
+the following services:
+
+@subsubheading Samba
+
+Samba provides network shares for folder and printers, it can also be an
+AD DC for other samba hosts in an heterougenious network with different
+types of Computer systems.
+
+@defvar{samba-service-type}
+
+The service type to enable the samba services @code{samba}, @code{nmbd},
+@code{smbd} and @code{winbindd}. By default this service type does not
+run as an AD DC, hence @code{samba} remains disabled. It is recommended
+that Samba's package is added to the system profile to have the tool-set
+available for modifications in Samba's runtime directories.
+
+@end defvar
+
+@deftp{Data Type} samba-service-configuration
+Configuration record for the Samba suite.
+
+@table @asis
+@item @code{package} (default: @code{samba})
+The samba package to use.
+
+@item @code{config-file} (default: @code{#f})
+The config file to use.
+
+@item @code{enable-samba?} (default: @code{#f})
+Manually enable the @code{samba} daemon.
+
+@item @code{enable-smbd?} (default: @code{#f})
+Manually enable the @code{smbd} daemon.
+
+@item @code{enable-nmbd?} (default: @code{#f})
+Manually enable the @code{nmbd} daemon.
+
+@item @code{enable-winbindd?} (default: @code{#f})
+Manually enable the @code{winbindd} daemon.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 1/5] services: Add samba service Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 2/5] doc: Add "Samba" chapter Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 21:41 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-09 8:29 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Maxime Devos
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 4/5] services: Add wsdd service Simon Streit
` (2 subsequent siblings)
5 siblings, 2 replies; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
---
doc/guix.texi | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 66 insertions(+)
diff --git a/doc/guix.texi b/doc/guix.texi
index 70f78c601a..fa3c7d8b51 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -29913,6 +29913,72 @@ Manually enable the @code{winbindd} daemon.
@end table
@end deftp
+@cindex wsdd
+@subsubheading Web Service Discovery Daemon
+
+Web Service Discovery Daemon implements the WSD protocoll. It is a
+drop-in replacement for host discovery that lack support for the SMBv1
+protocol.
+
+@defvr{Scheme Variable} wsdd-service-type
+
+Service type for the Web Service Discoery host daemon. The value for
+this service type is a @code{wsdd-configuration} record. The details
+for the @code{wsdd-configuration} record type are given below.
+@end defvr
+
+@deftp{Data Type} wsdd-configuration This data type represents the
+configuration for the wsdd service.
+
+@table @asis
+
+@item @code{package} (default: @code{wsdd})
+The wsdd package to use.
+
+@item @code{ipv4only?} (default: @code{#f})
+Only listen to ipv4 addresses.
+
+@item @code{ipv6only} (default: @code{#f})
+Only listen to ipv6 addresses. Please note: Activating both options is
+not possible, since there would be no ip versions to listen to.
+
+@item @code{chroot} (default: @code{#f})
+Chroot into a sperate directory to prevent access to other directories.
+This is to increase security in case there is a vulnerability in
+@command{wsdd}.
+
+@item @code{hoplimit} (default: @code{1})
+Limit to the level of hops for multicast packets. The default is
+@var{1} which should prevent packets from leaving the local network.
+
+@item @code{interface} (default: @code{'()})
+Limit to the given list of interfaces to listen to. By default wsdd
+will listen to all interfaces. Except the loopback interface is never
+used.
+
+@item @code{uuid-device} (default: @code{#f})
+The WSD protocol requires a device to have a UUID. Set this to manually
+assign the service a UUID.
+
+@item @code{domain} (default: @code{#f})
+Notify this host is a member of an Active Directory.
+
+@item @code{hostname} (default: @code{#f})
+Manually set the hostname rather than letting @command{wsdd} inherit
+this host's hostname.
+
+@item @code{preserve-case?} (default: @code{#f})
+By default @command{wsdd} will convert the hostname in workgroup to all
+uppercase. The opposite is true for hostnames in domains. Setting this
+parameter will preserve case.
+
+@item @code{workgroup} (default: @var{"WORKGROUP"})
+Change the name of the workgroup. By default @command{wsdd} reports
+this host being member of a workgroup.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 4/5] services: Add wsdd service.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
` (2 preceding siblings ...)
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 21:43 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 5/5] gnu: Add wsdd Simon Streit
2022-04-08 21:23 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
5 siblings, 1 reply; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
* gnu/services/samba.scm (<wsdd-configuration>): New record.
(wsdd-service-type): New variable.
(wsdd-shepherd-services): New procedure.
---
gnu/services/samba.scm | 100 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 100 insertions(+)
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
index 70b07f93fb..d15d916363 100644
--- a/gnu/services/samba.scm
+++ b/gnu/services/samba.scm
@@ -175,3 +175,103 @@ (define samba-service-type
(service-extension profile-service-type
(compose list samba-configuration-package))))
(default-value (samba-configuration))))
+
+\f
+;;;
+;;; WSDD
+;;;
+
+(define-record-type* <wsdd-configuration>
+ wsdd-configuration
+ make-wsdd-configuration
+ wsdd-configuration?
+ (package wsdd-configuration-package
+ (default wsdd))
+ (ipv4only? wsdd-configuration-ipv4only?
+ (default #f))
+ (ipv6only? wsdd-configuration-ipv6only?
+ (default #f))
+ (chroot wsdd-configuration-chroot
+ (default #f))
+ (hoplimit wsdd-configuration-hoplimit
+ (default 1))
+ (interfaces wsdd-configuration-interfaces
+ (default '()))
+ (uuid-device wsdd-configuration-uuid-device
+ (default #f))
+ (domain wsdd-configuration-domain
+ (default #f))
+ (hostname wsdd-configuration-hostname
+ (default #f))
+ (preserve-case? wsdd-configuration-preserve-case?
+ (default #f))
+ (workgroup wsdd-configuration-workgroup
+ (default "WORKGROUP")))
+
+(define wsdd-accounts
+ (list
+ (user-group (name "wsdd"))
+ (user-account (name "wsdd")
+ (group "wsdd")
+ (comment "Web Service Discovery user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define wsdd-shepherd-service
+ (match-lambda
+ (($ <wsdd-configuration> package ipv4only? ipv6only? chroot hoplimit
+ interfaces uuid-device domain hostname
+ preserve-case? workgroup)
+ (list (shepherd-service
+ (documentation "Run a Web Service Discovery service")
+ (provision '(wsdd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/bin/wsdd")
+ #$@(if ipv4only?
+ #~("--ipv4only")
+ '())
+ #$@(if ipv6only?
+ #~("--ipv6only")
+ '())
+ #$@(if chroot
+ #~("--chroot" #$chroot)
+ '())
+ #$@(if hoplimit
+ #~("--hoplimit" #$(number->string hoplimit))
+ '())
+ #$@(map (lambda (interfaces)
+ (string-append "--interface=" interfaces))
+ interfaces)
+ #$@(if uuid-device
+ #~("--uuid" #$uuid-device)
+ '())
+ #$@(if domain
+ #~("--domain" #$domain)
+ '())
+ #$@(if hostname
+ #~("--hostname" #$hostname)
+ '())
+ #$@(if preserve-case?
+ #~("--preserve-case")
+ '())
+ #$@(if workgroup
+ #~("--workgroup" #$workgroup)
+ '()))
+ #:user "wsdd"
+ #:group "wsdd"
+ #:log-file "/var/log/wsdd.log"))
+ (stop #~(make-kill-destructor)))))))
+
+(define wsdd-service-type
+ (service-type
+ (name 'wsdd)
+ (description "Web Service Discovery Daemon")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ wsdd-shepherd-service)
+ (service-extension account-service-type
+ (const wsdd-accounts))
+ (service-extension profile-service-type
+ (compose list wsdd-configuration-package))))
+ (default-value (wsdd-configuration))))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 5/5] gnu: Add wsdd.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
` (3 preceding siblings ...)
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 4/5] services: Add wsdd service Simon Streit
@ 2022-04-08 18:21 ` Simon Streit
2022-04-08 21:23 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
5 siblings, 0 replies; 37+ messages in thread
From: Simon Streit @ 2022-04-08 18:21 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
* gnu/packages/samba.scm (wsdd): New variable.
---
gnu/packages/samba.scm | 26 ++++++++++++++++++++++++++
1 file changed, 26 insertions(+)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index b775ad905c..21a5fe8617 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -500,3 +500,29 @@ (define-public ppp
;; chat is public domain.
(license (list bsd-3 bsd-4 gpl2+ public-domain))))
+(define-public wsdd
+ (package
+ (name "wsdd")
+ (version "0.7.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference (url "https://github.com/christgau/wsdd")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "04an2w6hamnai668ag4vq8x0i09fsg2jrayb4a7ar0x6bn837k7m"))))
+ (build-system copy-build-system)
+ (inputs
+ `(("python" ,python)))
+ (arguments
+ '(#:install-plan
+ '(("src/wsdd.py" "bin/wsdd")
+ ("man/wsdd.1" "share/man/man1/"))))
+ (home-page "https://github.com/christgau/wsdd")
+ (synopsis "A Web Service Discovery host daemon")
+ (description "This daemon allows (Samba) hosts to be found by Web
+Service Dicovery Clients. It also implements the client side of the
+discovery protocol which allows to search for devices implementing
+WSD.")
+ (license expat)))
--
2.34.0
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
` (4 preceding siblings ...)
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 5/5] gnu: Add wsdd Simon Streit
@ 2022-04-08 21:23 ` Ludovic Courtès
5 siblings, 0 replies; 37+ messages in thread
From: Ludovic Courtès @ 2022-04-08 21:23 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
Hi Simon,
Simon Streit <simon@netpanic.org> skribis:
> Please find attached an updated patch series.
It’s a huge amount of work that you did, and that’ll certainly be useful
to many!
> I've made slight changes as follows:
>
> * The reference to further config options in the manual have been removed.
> * Samba's (samba-activation config) procedure has been slightly modified,
> * better cleaned up, regarding the mkdirs. I've done more testing and it
> * appears that samba will only run when /var/{lib,log,run}/samba exist,
> including /var/lib/samba/private. In this case it is chmod now to o700 to
> be on the save side. Debian's directory structure is world readable though.
> In Arch it is o700. If anyone objects, please make it world readable. It
> appears that Samba lives and breathes in these directories, so they better
> be put there.
> * Regarding smb.conf -- while this service technically doesn't need it placed
> at /etc/samba -- is convenient to have it placed there for other tools part
> of the Samba family to read it, and so that others can quickly look into its
> configuration. I'll leave this for further debate whether it can stay there
> or not.
> * The packages samba and wsdd are included in profile-service-type so that they
> are generally available in the system profile.
I didn’t look at everything in detail, but overall that LGTM.
There’s a couple of things that I think would be worth adjusting though:
> services: Add samba service.
> doc: Add "Samba" chapter.
> doc: Add documentation for WSDD service.
> services: Add wsdd service.
> gnu: Add wsdd.
It seems patches are in the wrong order: I’d expect the wsdd package to
come before the wsdd service.
Regarding documentation: by convention, documentation for a service is
added in the same commit that adds the service, so that it’s
self-contained. Could you squash them?
Last, it would be great if you could add a system test under
gnu/tests/samba.scm. Essentially, that test would do what you probably
did manually already: spawning a VM running an OS with
‘samba-service-type’ and/or ‘wsdd-service-type’ and running an SMB
and/or WSD client to make sure the basics work. You can get inspiration
from other system tests there, and see:
https://guix.gnu.org/manual/devel/en/html_node/Running-the-Test-Suite.html
I have minor cosmetic comments that I’ll send separately.
Could you send a v3 addressing these issues?
Thanks!
Ludo’.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 1/5] services: Add samba service Simon Streit
@ 2022-04-08 21:26 ` Ludovic Courtès
0 siblings, 0 replies; 37+ messages in thread
From: Ludovic Courtès @ 2022-04-08 21:26 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
Simon Streit <simon@netpanic.org> skribis:
> * gnu/services/samba.scm (<samba-configuration>): New record.
> (samba-service-type): New variable.
> (samba-shepherd-services): New Procedure.
Just write “New file.”, that’s enough.
Please also add it to gnu/local.mk and to po/guix/POTFILES.in.
[...]
> + #:export (samba-service-type
> + samba-configuration
> + samba-smb-conf
> +
> + wsdd-service-type
> + wsdd-configuration))
These two lines shouldn’t be here for now. :-)
> +(define samba-service-type
> + (service-type
> + (name 'samba)
> + (description "Samba")
> + (extensions
> + (list (service-extension shepherd-root-service-type
> + samba-shepherd-services)
> + (service-extension activation-service-type
> + samba-activation)
> + (service-extension profile-service-type
> + (compose list samba-configuration-package))))
> + (default-value (samba-configuration))))
Please add a ‘description’ field with Texinfo markup (it’s the
description you see when running ‘guix system search’.)
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 2/5] doc: Add "Samba" chapter Simon Streit
@ 2022-04-08 21:35 ` Ludovic Courtès
0 siblings, 0 replies; 37+ messages in thread
From: Ludovic Courtès @ 2022-04-08 21:35 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
Simon Streit <simon@netpanic.org> skribis:
> +@cindex samba
> +@cindex smb
“Samba” and “SMB”.
> +The @code{(gnu services samba)} module provides Guix service definitions
s/Guix//
> +for Samba as well as additional helper services. Currently it provides
> +the following services:
> +
> +@subsubheading Samba
Remove colon after “services” (what follows is not a bullet list).
> +Samba provides network shares for folder and printers,
How about:
@uref{https://www.samba.org, Samba} provides networks shares for
folders and printers using the SMB/CIFS protocol commonly used on
Windows.
> it can also be an
> +AD DC for other samba hosts in an heterougenious network with different
What’s an “AD DC”? In general please expand acronyms on their first
occurrence.
> +types of Computer systems.
Lowercase.
> +@defvar{samba-service-type}
Please use @defvr as is done elsewhere in the manual.
> +The service type to enable the samba services @code{samba}, @code{nmbd},
> +@code{smbd} and @code{winbindd}. By default this service type does not
> +run as an AD DC, hence @code{samba} remains disabled. It is recommended
> +that Samba's package is added to the system profile to have the tool-set
Samba is now added to the system profile, right? Should this sentence
be removed?
Ludo’.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Simon Streit
@ 2022-04-08 21:41 ` Ludovic Courtès
2022-04-09 8:29 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Maxime Devos
1 sibling, 0 replies; 37+ messages in thread
From: Ludovic Courtès @ 2022-04-08 21:41 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
Simon Streit <simon@netpanic.org> skribis:
> +@cindex wsdd
> +@subsubheading Web Service Discovery Daemon
> +
> +Web Service Discovery Daemon implements the WSD protocoll.
Please provide a bit of context, for example:
The Web Service Discovery daemon (wsdd) implements, not surprisingly,
Web Service Discovery (WSD), a protocol for …
> It is a
> +drop-in replacement for host discovery that lack support for the SMBv1
> +protocol.
That too would need a bit more context IMO.
> +@defvr{Scheme Variable} wsdd-service-type
^
Missing space (in other similar places too).
> +Service type for the Web Service Discoery host daemon. The value for
Typo; but you can write “WSD” here, since that has been introduced
above.
> +@item @code{ipv6only} (default: @code{#f})
> +Only listen to ipv6 addresses. Please note: Activating both options is
> +not possible, since there would be no ip versions to listen to.
“IPv6”, “IP”.
> +@item @code{chroot} (default: @code{#f})
> +Chroot into a sperate directory to prevent access to other directories.
“separate”
> +This is to increase security in case there is a vulnerability in
> +@command{wsdd}.
> +
> +@item @code{hoplimit} (default: @code{1})
s/hoplimit/hop-limit/ (two words), and in the code too.
> +@item @code{hostname} (default: @code{#f})
Likewise, preferably ‘host-name’.
Ludo’.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH 0/4] Add service declarations for Samba
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 4/5] services: Add wsdd service Simon Streit
@ 2022-04-08 21:43 ` Ludovic Courtès
0 siblings, 0 replies; 37+ messages in thread
From: Ludovic Courtès @ 2022-04-08 21:43 UTC (permalink / raw)
To: Simon Streit; +Cc: 54561
Simon Streit <simon@netpanic.org> skribis:
> * gnu/services/samba.scm (<wsdd-configuration>): New record.
> (wsdd-service-type): New variable.
> (wsdd-shepherd-services): New procedure.
Just “New file.” and add it to gnu/local.mk.
> +(define wsdd-shepherd-service
> + (match-lambda
> + (($ <wsdd-configuration> package ipv4only? ipv6only? chroot hoplimit
> + interfaces uuid-device domain hostname
> + preserve-case? workgroup)
Please use ‘match-record’ instead; it is less error-prone.
> +(define wsdd-service-type
> + (service-type
> + (name 'wsdd)
> + (description "Web Service Discovery Daemon")
Please write full sentences in ‘description’, possibly with Texinfo
markup.
Ludo’.
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service.
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Simon Streit
2022-04-08 21:41 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
@ 2022-04-09 8:29 ` Maxime Devos
1 sibling, 0 replies; 37+ messages in thread
From: Maxime Devos @ 2022-04-09 8:29 UTC (permalink / raw)
To: Simon Streit, 54561
[-- Attachment #1: Type: text/plain, Size: 413 bytes --]
Simon Streit schreef op vr 08-04-2022 om 20:21 [+0200]:
> +@item @code{hostname} (default: @code{#f})
> +Manually set the hostname rather than letting @command{wsdd} inherit
> +this host's hostname.
In what format does the DNS name need to be:
* with trailing dot: foo.net.
* without trailing dot: foo.net
* non-punycoded: é.net
* punycoded: <something with xn-...>
* doesn't matter
?
[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 260 bytes --]
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list.
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
` (5 preceding siblings ...)
2022-03-27 19:22 ` [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64 fesoj000
@ 2022-08-08 14:56 ` simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 1/4] gnu: samba: Add avahi to inputs simon
` (4 more replies)
6 siblings, 5 replies; 37+ messages in thread
From: simon @ 2022-08-08 14:56 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
From: Simon Streit <simon@netpanic.org>
Hello, here my third iteration preparing this patch series.
Now there are tests included too. There is a slight modification in samba's
package declaration to include avahi as a dependency. Samba uses avahi to
advertise instances to other hosts that understand mDNS through avahi.
Simon Streit (4):
gnu: samba: Add avahi to inputs.
services: Add samba service.
gnu: Add wsdd.
services: Add wsdd service.
doc/guix.texi | 122 ++++++++++++++++++
gnu/local.mk | 2 +
gnu/packages/samba.scm | 31 +++++
gnu/services/samba.scm | 285 +++++++++++++++++++++++++++++++++++++++++
gnu/tests/samba.scm | 217 +++++++++++++++++++++++++++++++
po/guix/POTFILES.in | 1 +
6 files changed, 658 insertions(+)
create mode 100644 gnu/services/samba.scm
create mode 100644 gnu/tests/samba.scm
--
2.37.1
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 1/4] gnu: samba: Add avahi to inputs.
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
@ 2022-08-08 14:56 ` simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 2/4] services: Add samba service simon
` (3 subsequent siblings)
4 siblings, 0 replies; 37+ messages in thread
From: simon @ 2022-08-08 14:56 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
From: Simon Streit <simon@netpanic.org>
* gnu/packages/samba.scm (samba) <inputs>: Add avahi.
---
gnu/packages/samba.scm | 3 +++
1 file changed, 3 insertions(+)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index f6ead57cc1..da7d9ef2d3 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -12,6 +12,7 @@
;;; Copyright © 2020, 2022 Maxim Cournoyer <maxim.cournoyer@gmail.com>
;;; Copyright © 2022 Jean-Pierre De Jesus DIAZ <me@jeandudey.tech>
;;; Copyright © 2022 Guillaume Le Vaillant <glv@posteo.net>
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
;;;
;;; This file is part of GNU Guix.
;;;
@@ -40,6 +41,7 @@ (define-module (gnu packages samba)
#:use-module (gnu packages acl)
#:use-module (gnu packages admin)
#:use-module (gnu packages autotools)
+ #:use-module (gnu packages avahi)
#:use-module (gnu packages backup)
#:use-module (gnu packages base)
#:use-module (gnu packages check)
@@ -239,6 +241,7 @@ (define-public samba
#:tests? #f))
(inputs
(list acl
+ avahi
cmocka
cups
gamin
--
2.37.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 2/4] services: Add samba service.
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 1/4] gnu: samba: Add avahi to inputs simon
@ 2022-08-08 14:56 ` simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 3/4] gnu: Add wsdd simon
` (2 subsequent siblings)
4 siblings, 0 replies; 37+ messages in thread
From: simon @ 2022-08-08 14:56 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
From: Simon Streit <simon@netpanic.org>
* doc/guix.texi: Document it.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
* gnu/local.mk (samba.scm): Add it.
* gnu/services/samba.scm: New file.
* gnu/tests/samba.scm: New file.
* po/guix/POTFILES.in Add it.
---
doc/guix.texi | 53 ++++++++++++
gnu/local.mk | 2 +
gnu/services/samba.scm | 182 +++++++++++++++++++++++++++++++++++++++++
gnu/tests/samba.scm | 158 +++++++++++++++++++++++++++++++++++
po/guix/POTFILES.in | 1 +
5 files changed, 396 insertions(+)
create mode 100644 gnu/services/samba.scm
create mode 100644 gnu/tests/samba.scm
diff --git a/doc/guix.texi b/doc/guix.texi
index 12ecc1b952..614d0a0e03 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -106,6 +106,7 @@ Copyright @copyright{} 2022 Philip M@sup{c}Grath@*
Copyright @copyright{} 2022 Karl Hallsby@*
Copyright @copyright{} 2022 Justin Veilleux@*
Copyright @copyright{} 2022 Reily Siegel@*
+Copyright @copyright{} 2022 Simon Streit@*
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
@@ -385,6 +386,7 @@ Services
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
+* Samba Services:: Samba services.
* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
@@ -17451,6 +17453,7 @@ declaration.
* DNS Services:: DNS daemons.
* VPN Services:: VPN daemons.
* Network File System:: NFS related services.
+* Samba Services:: Samba services.
* Continuous Integration:: Cuirass and Laminar services.
* Power Management Services:: Extending battery life.
* Audio Services:: The MPD.
@@ -31194,6 +31197,56 @@ The verbosity level of the daemon.
@end table
@end deftp
+@node Samba Services, Continuous Integration, Network File System, Services
+@subsection Samba Services
+
+@cindex Samba
+@cindex SMB
+The @code{(gnu services samba)} module provides service definitions for
+Samba as well as additional helper services. Currently it provides the
+following services.
+
+@subsubheading Samba
+
+@uref{https://www.samba.org, Samba} provides network shares for folders
+and printers using the SMB/CIFS protocol commonly used on Windows. It
+can also act as an Active Directory Domain Controller (AD DC) for other
+hosts in an heterougenious network with different types of Computer
+systems.
+
+@defvar {Scheme variable} samba-service-type
+
+The service type to enable the samba services @code{samba}, @code{nmbd},
+@code{smbd} and @code{winbindd}. By default this service type does not
+run as an AD DC, hence @code{samba} remains disabled.
+
+@end defvar
+
+@deftp{Data Type} samba-service-configuration
+Configuration record for the Samba suite.
+
+@table @asis
+@item @code{package} (default: @code{samba})
+The samba package to use.
+
+@item @code{config-file} (default: @code{#f})
+The config file to use.
+
+@item @code{enable-samba?} (default: @code{#f})
+Manually enable the @code{samba} daemon.
+
+@item @code{enable-smbd?} (default: @code{#f})
+Manually enable the @code{smbd} daemon.
+
+@item @code{enable-nmbd?} (default: @code{#f})
+Manually enable the @code{nmbd} daemon.
+
+@item @code{enable-winbindd?} (default: @code{#f})
+Manually enable the @code{winbindd} daemon.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
diff --git a/gnu/local.mk b/gnu/local.mk
index 72637761d5..9c1f5ff5b8 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -676,6 +676,7 @@ GNU_SYSTEM_MODULES = \
%D%/services/herd.scm \
%D%/services/pm.scm \
%D%/services/rsync.scm \
+ %D%/services/samba.scm \
%D%/services/sddm.scm \
%D%/services/spice.scm \
%D%/services/ssh.scm \
@@ -754,6 +755,7 @@ GNU_SYSTEM_MODULES = \
%D%/tests/package-management.scm \
%D%/tests/reconfigure.scm \
%D%/tests/rsync.scm \
+ %D%/tests/samba.scm \
%D%/tests/security-token.scm \
%D%/tests/singularity.scm \
%D%/tests/ssh.scm \
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
new file mode 100644
index 0000000000..2c9e52a0b0
--- /dev/null
+++ b/gnu/services/samba.scm
@@ -0,0 +1,182 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu services samba)
+
+ #:use-module (gnu packages)
+ #:use-module (gnu packages base)
+ #:use-module (gnu packages admin)
+ #:use-module (gnu packages samba)
+
+ #:use-module (gnu services)
+ #:use-module (gnu services configuration)
+ #:use-module (gnu services shepherd)
+ #:use-module (gnu services base)
+ #:use-module (gnu system shadow)
+
+ #:use-module (guix gexp)
+ #:use-module (guix packages)
+ #:use-module (guix modules)
+ #:use-module (guix records)
+
+ #:use-module (ice-9 format)
+ #:use-module (ice-9 match)
+ #:use-module (ice-9 textual-ports)
+ #:use-module (srfi srfi-1)
+
+ #:export (samba-service-type
+ samba-configuration
+ samba-smb-conf))
+
+(define %smb-conf
+ (plain-file "smb.conf" "[global]
+ workgroup = WORKGROUP
+ server string = Samba Server
+ server role = standalone server
+ log file = /var/log/samba/log.%m
+ logging = file
+"))
+
+(define-record-type* <samba-configuration>
+ samba-configuration
+ make-samba-configuration
+ samba-configuration?
+ (package samba-configuration-package
+ (default samba))
+ (config-file samba-configuration-config-file
+ (default #f))
+ (enable-samba? samba-configuration-enable-samba?
+ (default #f))
+ (enable-smbd? samba-configuration-enable-smbd?
+ (default #t))
+ (enable-nmbd? samba-configuration-enable-nmbd?
+ (default #t))
+ (enable-winbindd? samba-configuration-enable-winbindd?
+ (default #t)))
+
+(define (samba-activation config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (with-imported-modules '((guix build utils))
+ (let ((lib-dir "/var/lib/samba")
+ (log-dir "/var/log/samba")
+ (run-dir "/var/run/samba")
+ (lock-dir "/var/lock/samba")
+ (cache-dir "/var/cache/samba")
+ (etc-dir "/etc/samba")
+ (smb.conf "/etc/samba/smb.conf"))
+ #~(begin
+ (use-modules (guix build utils))
+ (mkdir-p #$etc-dir)
+ (mkdir-p #$lib-dir)
+ (mkdir-p/perms (string-append #$lib-dir "/private")
+ (getpwnam "root") #o700)
+ (mkdir-p #$log-dir)
+ (mkdir-p #$run-dir)
+ (mkdir-p #$lock-dir)
+ (mkdir-p #$cache-dir)
+ (copy-file #$config-file #$smb.conf)
+ (invoke #$(file-append package "/bin/testparm")
+ "--suppress-prompt" #$smb.conf))))))
+
+(define (samba-samba-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Samba")
+ (provision '(samba-samba))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/samba")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-nmbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run NMBD")
+ (provision '(samba-nmbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/nmbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-smbd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run SMBD")
+ (provision '(samba-smbd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/smbd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-winbindd-shepherd-service config)
+ (let ((package (samba-configuration-package config))
+ (config-file (samba-configuration-config-file config)))
+ (list (shepherd-service
+ (documentation "Run Winnbindd for Name Service Switch")
+ (provision '(samba-winbindd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/sbin/winbindd")
+ (string-append "--configfile=" #$config-file)
+ "--foreground"
+ "--no-process-group")))
+ (stop #~(make-kill-destructor))))))
+
+(define (samba-shepherd-services config)
+ (append (if (samba-configuration-enable-samba? config)
+ (samba-samba-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-nmbd? config)
+ (samba-nmbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-smbd? config)
+ (samba-smbd-shepherd-service config)
+ '())
+ (if (samba-configuration-enable-winbindd? config)
+ (samba-winbindd-shepherd-service config)
+ '())))
+
+(define samba-service-type
+ (service-type
+ (name 'samba)
+ (description "Run @uref{https://www.samba.org/, Samba}, a network file and
+print service for all clients using the SMB/CIFS protocol. Samba is an
+important component to seamlessly integrate Linux/Unix Servers and Desktops
+into Active Directory environments. It can function both as a domain
+controller or as a regular domain member.")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ samba-shepherd-services)
+ (service-extension activation-service-type
+ samba-activation)
+ (service-extension profile-service-type
+ (compose list samba-configuration-package))))
+ (default-value (samba-configuration))))
diff --git a/gnu/tests/samba.scm b/gnu/tests/samba.scm
new file mode 100644
index 0000000000..27d7ea49c3
--- /dev/null
+++ b/gnu/tests/samba.scm
@@ -0,0 +1,158 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2022 Simon Streit <simon@netpanic.org>
+;;;
+;;; This file is part of GNU Guix.
+;;;
+;;; GNU Guix is free software; you can redistribute it and/or modify it
+;;; under the terms of the GNU General Public License as published by
+;;; the Free Software Foundation; either version 3 of the License, or (at
+;;; your option) any later version.
+;;;
+;;; GNU Guix is distributed in the hope that it will be useful, but
+;;; WITHOUT ANY WARRANTY; without even the implied warranty of
+;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+;;; GNU General Public License for more details.
+;;;
+;;; You should have received a copy of the GNU General Public License
+;;; along with GNU Guix. If not, see <http://www.gnu.org/licenses/>.
+
+(define-module (gnu tests samba)
+ #:use-module (gnu tests)
+ #:use-module (gnu system)
+ #:use-module (gnu system vm)
+ #:use-module (gnu services)
+ #:use-module (gnu services networking)
+ #:use-module (gnu services samba)
+ #:use-module (gnu packages samba)
+ #:use-module (guix gexp)
+ #:use-module (guix store)
+ #:export (%test-samba))
+
+\f
+;;;
+;;; The Samba service.
+;;;
+
+(define %samba-os
+ (let ((base-os (simple-operating-system
+ (simple-service 'create-target-directory activation-service-type
+ #~(begin
+ (mkdir-p "/srv/samba/guest")
+ (chown "/srv/samba/guest"
+ (passwd:uid (getpw "nobody"))
+ (passwd:gid (getpw "nobody")))))
+ (service dhcp-client-service-type)
+ (service samba-service-type
+ (samba-configuration
+ (config-file (plain-file "smb.conf" "
+[global]
+ workgroup = WORKGROUP
+ server string = Samba Server
+ server role = standalone server
+ log file = /var/log/samba/log.%m
+ logging = file
+
+[guest]
+ path = /srv/samba/guest
+ read only = no
+ guest ok = yes
+ guest only = yes
+")))))))
+ (operating-system
+ (inherit base-os)
+ (packages (cons samba (operating-system-packages base-os))))))
+
+(define* (run-samba-test)
+ "Return a test of an OS running Samba service."
+
+ (define vm
+ (virtual-machine
+ (operating-system (marionette-operating-system
+ %samba-os
+ #:imported-modules '((gnu services herd))))
+ (port-forwardings '((8135 . 135)
+ (8137 . 137)
+ (8138 . 138)
+ (8445 . 445)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (gnu build marionette)
+ (srfi srfi-26)
+ (srfi srfi-64))
+
+ (define marionette
+ (make-marionette '(#$vm)))
+
+ (test-runner-current (system-test-runner #$output))
+ (test-begin "samba")
+
+ (test-assert "samba-smbd running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'samba-smbd))
+ marionette))
+
+ (test-assert "samba-nmbd running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'samba-nmbd))
+ marionette))
+
+ (test-assert "samba-winbindd running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'samba-winbindd))
+ marionette))
+
+ (test-assert "smbd service process id"
+ (let ((pid
+ (number->string (wait-for-file "/var/run/samba/smbd.pid"
+ marionette))))
+ (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
+ marionette)))
+
+ (test-assert "nmbd service process id"
+ (let ((pid
+ (number->string (wait-for-file "/var/run/samba/nmbd.pid"
+ marionette))))
+ (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
+ marionette)))
+
+ (test-assert "winbindd service process id"
+ (let ((pid
+ (number->string (wait-for-file "/var/run/samba/winbindd.pid"
+ marionette))))
+ (marionette-eval `(file-exists? (string-append "/proc/" ,pid))
+ marionette)))
+
+ (test-assert "samba-smbd is listening for peers"
+ (wait-for-tcp-port 445 marionette))
+
+ (test-equal "smbclient connect"
+ 0
+ (marionette-eval
+ '(system* #$(file-append samba "/bin/smbclient")
+ "--list=localhost" "--no-pass")
+ marionette))
+
+ (test-equal "smbclient connect"
+ 0
+ (marionette-eval
+ '(system* #$(file-append samba "/bin/smbclient")
+ "--list=localhost" "--no-pass")
+ marionette))
+
+ (test-end))))
+
+ (gexp->derivation "samba-test" test))
+
+(define %test-samba
+ (system-test
+ (name "samba")
+ (description "Connect to a running Samba daemon.")
+ (value (run-samba-test))))
diff --git a/po/guix/POTFILES.in b/po/guix/POTFILES.in
index f50dd00422..9088a627ff 100644
--- a/po/guix/POTFILES.in
+++ b/po/guix/POTFILES.in
@@ -6,6 +6,7 @@ gnu/services.scm
gnu/system.scm
gnu/services/configuration.scm
gnu/services/shepherd.scm
+gnu/services/samba.scm
gnu/home/services.scm
gnu/home/services/ssh.scm
gnu/home/services/symlink-manager.scm
--
2.37.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 3/4] gnu: Add wsdd.
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 1/4] gnu: samba: Add avahi to inputs simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 2/4] services: Add samba service simon
@ 2022-08-08 14:56 ` simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 4/4] services: Add wsdd service simon
2022-09-24 7:48 ` bug#54561: [PATCH v3 0/4] Add samba and wsdd to services list Lars-Dominik Braun
4 siblings, 0 replies; 37+ messages in thread
From: simon @ 2022-08-08 14:56 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
From: Simon Streit <simon@netpanic.org>
* gnu/packages/samba.scm (wsdd): New variable.
---
gnu/packages/samba.scm | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/gnu/packages/samba.scm b/gnu/packages/samba.scm
index da7d9ef2d3..4edcf9c148 100644
--- a/gnu/packages/samba.scm
+++ b/gnu/packages/samba.scm
@@ -35,6 +35,7 @@ (define-module (gnu packages samba)
#:use-module (guix download)
#:use-module (guix git-download)
#:use-module (guix build-system gnu)
+ #:use-module (guix build-system copy)
#:use-module ((guix licenses) #:prefix license:)
#:use-module (guix utils)
#:use-module (gnu packages)
@@ -505,3 +506,30 @@ (define-public ppp
license:bsd-4
license:gpl2+
license:public-domain))))
+
+(define-public wsdd
+ (package
+ (name "wsdd")
+ (version "0.7.0")
+ (source
+ (origin
+ (method git-fetch)
+ (uri (git-reference (url "https://github.com/christgau/wsdd")
+ (commit (string-append "v" version))))
+ (file-name (git-file-name name version))
+ (sha256
+ (base32 "04an2w6hamnai668ag4vq8x0i09fsg2jrayb4a7ar0x6bn837k7m"))))
+ (build-system copy-build-system)
+ (inputs
+ `(("python" ,python)))
+ (arguments
+ '(#:install-plan
+ '(("src/wsdd.py" "bin/wsdd")
+ ("man/wsdd.1" "share/man/man1/"))))
+ (home-page "https://github.com/christgau/wsdd")
+ (synopsis "A Web Service Discovery host daemon")
+ (description "This daemon allows (Samba) hosts to be found by Web
+Service Dicovery Clients. It also implements the client side of the
+discovery protocol which allows to search for devices implementing
+WSD.")
+ (license license:expat)))
--
2.37.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 4/4] services: Add wsdd service.
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
` (2 preceding siblings ...)
2022-08-08 14:56 ` [bug#54561] [PATCH v3 3/4] gnu: Add wsdd simon
@ 2022-08-08 14:56 ` simon
2022-09-24 7:48 ` bug#54561: [PATCH v3 0/4] Add samba and wsdd to services list Lars-Dominik Braun
4 siblings, 0 replies; 37+ messages in thread
From: simon @ 2022-08-08 14:56 UTC (permalink / raw)
To: 54561; +Cc: Simon Streit
From: Simon Streit <simon@netpanic.org>
* doc/guix.texi: Add documentation for wsdd service.
* gnu/services/samba.scm (<wsdd-configuration>): New record.
(wsdd-service-type): New variable.
(wsdd-shepherd-services): New procedure.
* gnu/tests/samba.scm: wsdd test.
---
doc/guix.texi | 69 +++++++++++++++++++++++++++
gnu/services/samba.scm | 105 ++++++++++++++++++++++++++++++++++++++++-
gnu/tests/samba.scm | 61 +++++++++++++++++++++++-
3 files changed, 233 insertions(+), 2 deletions(-)
diff --git a/doc/guix.texi b/doc/guix.texi
index 614d0a0e03..c168f063c3 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31247,6 +31247,75 @@ Manually enable the @code{winbindd} daemon.
@end table
@end deftp
+@cindex wsdd
+@subsubheading Web Service Discovery Daemon
+
+Web Service Discovery Daemon implements
+@uref{http://docs.oasis-open.org/ws-dd/discovery/1.1/os/wsdd-discovery-1.1-spec-os.html,
+Web Services Dynamic Discovery} protocol that enables host discovery --
+similar to Avahi -- over Multicast DNS. It is a drop-in replacement for
+SMB hosts that have had SMBv1 disabled for security reasons.
+
+@defvr {Scheme Variable} wsdd-service-type
+
+Service type for the WSD host daemon. The value for
+this service type is a @code{wsdd-configuration} record. The details
+for the @code{wsdd-configuration} record type are given below.
+@end defvr
+
+@deftp{Data Type} wsdd-configuration This data type represents the
+configuration for the wsdd service.
+
+@table @asis
+
+@item @code{package} (default: @code{wsdd})
+The wsdd package to use.
+
+@item @code{ipv4only?} (default: @code{#f})
+Only listen to IPv4 addresses.
+
+@item @code{ipv6only} (default: @code{#f})
+Only listen to IPv6 addresses. Please note: Activating both options is
+not possible, since there would be no IP versions to listen to.
+
+@item @code{chroot} (default: @code{#f})
+Chroot into a separate directory to prevent access to other directories.
+This is to increase security in case there is a vulnerability in
+@command{wsdd}.
+
+@item @code{hop-limit} (default: @code{1})
+Limit to the level of hops for multicast packets. The default is
+@var{1} which should prevent packets from leaving the local network.
+
+@item @code{interface} (default: @code{'()})
+Limit to the given list of interfaces to listen to. By default wsdd
+will listen to all interfaces. Except the loopback interface is never
+used.
+
+@item @code{uuid-device} (default: @code{#f})
+The WSD protocol requires a device to have a UUID. Set this to manually
+assign the service a UUID.
+
+@item @code{domain} (default: @code{#f})
+Notify this host is a member of an Active Directory.
+
+@item @code{host-name} (default: @code{#f})
+Manually set the hostname rather than letting @command{wsdd} inherit
+this host's hostname. Only the host name part of a possible FQDN will
+be used in the default case.
+
+@item @code{preserve-case?} (default: @code{#f})
+By default @command{wsdd} will convert the hostname in workgroup to all
+uppercase. The opposite is true for hostnames in domains. Setting this
+parameter will preserve case.
+
+@item @code{workgroup} (default: @var{"WORKGROUP"})
+Change the name of the workgroup. By default @command{wsdd} reports
+this host being member of a workgroup.
+
+@end table
+@end deftp
+
@node Continuous Integration
@subsection Continuous Integration
diff --git a/gnu/services/samba.scm b/gnu/services/samba.scm
index 2c9e52a0b0..c1f9033d63 100644
--- a/gnu/services/samba.scm
+++ b/gnu/services/samba.scm
@@ -41,7 +41,10 @@ (define-module (gnu services samba)
#:export (samba-service-type
samba-configuration
- samba-smb-conf))
+ samba-smb-conf
+
+ wsdd-service-type
+ wsdd-configuration))
(define %smb-conf
(plain-file "smb.conf" "[global]
@@ -180,3 +183,103 @@ (define samba-service-type
(service-extension profile-service-type
(compose list samba-configuration-package))))
(default-value (samba-configuration))))
+
+\f
+;;;
+;;; WSDD
+;;;
+
+(define-record-type* <wsdd-configuration>
+ wsdd-configuration
+ make-wsdd-configuration
+ wsdd-configuration?
+ (package wsdd-configuration-package
+ (default wsdd))
+ (ipv4only? wsdd-configuration-ipv4only?
+ (default #f))
+ (ipv6only? wsdd-configuration-ipv6only?
+ (default #f))
+ (chroot wsdd-configuration-chroot
+ (default #f))
+ (hoplimit wsdd-configuration-hoplimit
+ (default 1))
+ (interfaces wsdd-configuration-interfaces
+ (default '()))
+ (uuid-device wsdd-configuration-uuid-device
+ (default #f))
+ (domain wsdd-configuration-domain
+ (default #f))
+ (hostname wsdd-configuration-hostname
+ (default #f))
+ (preserve-case? wsdd-configuration-preserve-case?
+ (default #f))
+ (workgroup wsdd-configuration-workgroup
+ (default "WORKGROUP")))
+
+(define wsdd-accounts
+ (list
+ (user-group (name "wsdd"))
+ (user-account (name "wsdd")
+ (group "wsdd")
+ (comment "Web Service Discovery user")
+ (home-directory "/var/empty")
+ (shell (file-append shadow "/sbin/nologin")))))
+
+(define wsdd-shepherd-service
+ (match-lambda
+ (($ <wsdd-configuration> package ipv4only? ipv6only? chroot hoplimit
+ interfaces uuid-device domain hostname
+ preserve-case? workgroup)
+ (list (shepherd-service
+ (documentation "Run a Web Service Discovery service")
+ (provision '(wsdd))
+ (requirement '(networking))
+ (start #~(make-forkexec-constructor
+ (list #$(file-append package "/bin/wsdd")
+ #$@(if ipv4only?
+ #~("--ipv4only")
+ '())
+ #$@(if ipv6only?
+ #~("--ipv6only")
+ '())
+ #$@(if chroot
+ #~("--chroot" #$chroot)
+ '())
+ #$@(if hoplimit
+ #~("--hoplimit" #$(number->string hoplimit))
+ '())
+ #$@(map (lambda (interfaces)
+ (string-append "--interface=" interfaces))
+ interfaces)
+ #$@(if uuid-device
+ #~("--uuid" #$uuid-device)
+ '())
+ #$@(if domain
+ #~("--domain" #$domain)
+ '())
+ #$@(if hostname
+ #~("--hostname" #$hostname)
+ '())
+ #$@(if preserve-case?
+ #~("--preserve-case")
+ '())
+ #$@(if workgroup
+ #~("--workgroup" #$workgroup)
+ '()))
+ #:user "wsdd"
+ #:group "wsdd"
+ #:log-file "/var/log/wsdd.log"))
+ (stop #~(make-kill-destructor)))))))
+
+(define wsdd-service-type
+ (service-type
+ (name 'wsdd)
+ (description "Web Service Discovery Daemon")
+ (extensions
+ (list (service-extension shepherd-root-service-type
+ wsdd-shepherd-service)
+ (service-extension account-service-type
+ (const wsdd-accounts))
+ (service-extension profile-service-type
+ (compose list wsdd-configuration-package))))
+ (default-value (wsdd-configuration))))
diff --git a/gnu/tests/samba.scm b/gnu/tests/samba.scm
index 27d7ea49c3..6b065cd5de 100644
--- a/gnu/tests/samba.scm
+++ b/gnu/tests/samba.scm
@@ -26,7 +26,8 @@ (define-module (gnu tests samba)
#:use-module (gnu packages samba)
#:use-module (guix gexp)
#:use-module (guix store)
- #:export (%test-samba))
+ #:export (%test-samba
+ %test-wsdd))
\f
;;;
@@ -156,3 +157,61 @@ (define %test-samba
(name "samba")
(description "Connect to a running Samba daemon.")
(value (run-samba-test))))
+
+\f
+;;;
+;;; The wsdd service.
+;;;
+
+(define %wsdd-os
+ (let ((base-os (simple-operating-system
+ (service dhcp-client-service-type)
+ (service wsdd-service-type))))
+ (operating-system
+ (inherit base-os)
+ (packages (cons wsdd (operating-system-packages base-os))))))
+
+(define* (run-wsdd-test)
+ "Return a test of an OS running wsdd service."
+
+ (define vm
+ (virtual-machine
+ (operating-system (marionette-operating-system
+ %wsdd-os
+ #:imported-modules '((gnu services herd))))
+ (port-forwardings '((8135 . 135)
+ (8137 . 137)
+ (8138 . 138)
+ (8445 . 445)))))
+
+ (define test
+ (with-imported-modules '((gnu build marionette))
+ #~(begin
+ (use-modules (gnu build marionette)
+ (srfi srfi-26)
+ (srfi srfi-64))
+
+ (define marionette
+ (make-marionette '(#$vm)))
+
+ (test-runner-current (system-test-runner #$output))
+ (test-begin "wsdd")
+
+ ;; Here shall be more tests to begin with.
+
+ (test-assert "wsdd running"
+ (marionette-eval
+ '(begin
+ (use-modules (gnu services herd))
+ (start-service 'wsdd))
+ marionette))
+
+ (test-end))))
+
+ (gexp->derivation "samba-test" test))
+
+(define %test-wsdd
+ (system-test
+ (name "wsdd")
+ (description "Connect to a running wsdd daemon.")
+ (value (run-wsdd-test))))
--
2.37.1
^ permalink raw reply related [flat|nested] 37+ messages in thread
* bug#54561: [PATCH v3 0/4] Add samba and wsdd to services list.
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
` (3 preceding siblings ...)
2022-08-08 14:56 ` [bug#54561] [PATCH v3 4/4] services: Add wsdd service simon
@ 2022-09-24 7:48 ` Lars-Dominik Braun
2022-09-25 8:22 ` [bug#54561] " Lars-Dominik Braun
4 siblings, 1 reply; 37+ messages in thread
From: Lars-Dominik Braun @ 2022-09-24 7:48 UTC (permalink / raw)
To: simon; +Cc: 54561-done
Hi Simon,
> Hello, here my third iteration preparing this patch series.
thanks for the update. I’ve been running it on my NAS for a few days
and it works quite well. I addressed Ludo’s remaining comments,
adjusted your commit messages and pushed your contribution as commit
4cbc1622961f62f8fc3613de0c8f215e0cde6494 and following.
Thank you very much,
Lars
^ permalink raw reply [flat|nested] 37+ messages in thread
* [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list.
2022-09-24 7:48 ` bug#54561: [PATCH v3 0/4] Add samba and wsdd to services list Lars-Dominik Braun
@ 2022-09-25 8:22 ` Lars-Dominik Braun
0 siblings, 0 replies; 37+ messages in thread
From: Lars-Dominik Braun @ 2022-09-25 8:22 UTC (permalink / raw)
To: simon; +Cc: 54561
Hi,
> > Hello, here my third iteration preparing this patch series.
> thanks for the update. I’ve been running it on my NAS for a few days
> and it works quite well. I addressed Ludo’s remaining comments,
> adjusted your commit messages and pushed your contribution as commit
> 4cbc1622961f62f8fc3613de0c8f215e0cde6494 and following.
I had to revert the commit adding avahi to samba in commit
dc7191302e6d099a26673e08b78eb5f4b2a2b17b and added it to core-updates
as commit 4d0befe66ae7fa731b566090b471107bc4828018 instead, because it
caused too many rebuilds.
Lars
^ permalink raw reply [flat|nested] 37+ messages in thread
end of thread, other threads:[~2022-09-25 8:25 UTC | newest]
Thread overview: 37+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-03-25 8:48 [bug#54561] [PATCH 0/4] Add service declarations for Samba Simon Streit
2022-03-24 21:10 ` [bug#54561] [PATCH 3/4] doc: Add documentation for WSDD service Simon Streit
2022-03-24 21:14 ` [bug#54561] [PATCH 4/4] services: Add wsdd service Simon Streit
2022-03-25 9:16 ` Simon Streit
2022-03-25 12:02 ` Simon Streit
2022-03-25 9:00 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
2022-03-27 1:07 ` fesoj000
2022-03-27 14:13 ` Maxime Devos
2022-03-27 18:32 ` Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 0/5] Add service declarations for Samba Simon Streit
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 1/5] services: Add samba service Simon Streit
2022-04-08 21:26 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 2/5] doc: Add "Samba" chapter Simon Streit
2022-04-08 21:35 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Simon Streit
2022-04-08 21:41 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-09 8:29 ` [bug#54561] v2 [PATCH 3/5] doc: Add documentation for WSDD service Maxime Devos
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 4/5] services: Add wsdd service Simon Streit
2022-04-08 21:43 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-04-08 18:21 ` [bug#54561] v2 [PATCH 5/5] gnu: Add wsdd Simon Streit
2022-04-08 21:23 ` [bug#54561] [PATCH 0/4] Add service declarations for Samba Ludovic Courtès
2022-03-27 18:48 ` [bug#54561] [PATCH 1/4] services: Add samba service Simon Streit
2022-03-27 18:58 ` fesoj000
2022-03-25 9:01 ` [bug#54561] [PATCH 2/4] doc: Add "Samba" chapter Simon Streit
2022-03-27 1:07 ` fesoj000
2022-03-27 14:15 ` Maxime Devos
2022-03-27 18:51 ` Simon Streit
2022-03-25 15:14 ` [bug#54561] [PATCH] gnu: samba: Modify input list Simon Streit
2022-03-27 19:22 ` [bug#54561] [PATCH] gnu: libdaemon: fix build for riscv64 fesoj000
2022-03-27 19:23 ` fesoj000
2022-08-08 14:56 ` [bug#54561] [PATCH v3 0/4] Add samba and wsdd to services list simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 1/4] gnu: samba: Add avahi to inputs simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 2/4] services: Add samba service simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 3/4] gnu: Add wsdd simon
2022-08-08 14:56 ` [bug#54561] [PATCH v3 4/4] services: Add wsdd service simon
2022-09-24 7:48 ` bug#54561: [PATCH v3 0/4] Add samba and wsdd to services list Lars-Dominik Braun
2022-09-25 8:22 ` [bug#54561] " Lars-Dominik Braun
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).