services: Add syncthing service.
* gnu/services/syncthing.scm: New file. * gnu/local.mk: Add this. * doc/guix.texi: Document this.
This commit is contained in:
		
							parent
							
								
									dd42c528db
								
							
						
					
					
						commit
						79ba12a1db
					
				
					 3 changed files with 140 additions and 1 deletions
				
			
		|  | @ -16507,6 +16507,55 @@ Group name or group ID that will be used when accessing the module. | |||
| @end table | ||||
| @end deftp | ||||
| 
 | ||||
| The @code{(gnu services syncthing)} module provides the following services: | ||||
| @cindex syncthing | ||||
| 
 | ||||
| You might want a syncthing daemon if you have files between two or more | ||||
| computers and want to sync them in real time, safely protected from | ||||
| prying eyes. | ||||
| 
 | ||||
| @deffn {Scheme Variable} syncthing-service-type | ||||
| This is the service type for the @uref{https://syncthing.net/, | ||||
| syncthing} daemon, The value for this service type is a | ||||
| @command{syncthing-configuration} record as in this example: | ||||
| 
 | ||||
| @lisp | ||||
| (service syncthing-service-type | ||||
|          (syncthing-configuration (user "alice"))) | ||||
| @end lisp | ||||
| 
 | ||||
| See below for details about @code{syncthing-configuration}. | ||||
| 
 | ||||
| @deftp {Data Type} syncthing-configuration | ||||
| Data type representing the configuration for @code{syncthing-service-type}. | ||||
| 
 | ||||
| @table @asis | ||||
| @item @code{syncthing} (default: @var{syncthing}) | ||||
| @code{syncthing} package to use. | ||||
| 
 | ||||
| @item @code{arguments} (default: @var{'()}) | ||||
| List of command-line arguments passing to @code{syncthing} binary. | ||||
| 
 | ||||
| @item @code{logflags} (default: @var{0}) | ||||
| Sum of loging flags, see | ||||
| @uref{https://docs.syncthing.net/users/syncthing.html#cmdoption-logflags, Syncthing documentation logflags}. | ||||
| 
 | ||||
| @item @code{user} (default: @var{#f}) | ||||
| The user as which the Syncthing service is to be run. | ||||
| This assumes that the specified user exists. | ||||
| 
 | ||||
| @item @code{group} (default: @var{"users"}) | ||||
| The group as which the Syncthing service is to be run. | ||||
| This assumes that the specified group exists. | ||||
| 
 | ||||
| @item @code{home} (default: @var{#f}) | ||||
| Common configuration and data directory.  The default configuration | ||||
| directory is @file{$HOME} of the specified Syncthing @code{user}. | ||||
| 
 | ||||
| @end table | ||||
| @end deftp | ||||
| @end deffn | ||||
| 
 | ||||
| Furthermore, @code{(gnu services ssh)} provides the following services. | ||||
| @cindex SSH | ||||
| @cindex SSH server | ||||
|  |  | |||
|  | @ -17,7 +17,7 @@ | |||
| # Copyright © 2017, 2020 Mathieu Othacehe <m.othacehe@gmail.com>
 | ||||
| # Copyright © 2017, 2018, 2019 Gábor Boskovits <boskovits@gmail.com>
 | ||||
| # Copyright © 2018 Amirouche Boubekki <amirouche@hypermove.net>
 | ||||
| # Copyright © 2018, 2019, 2020 Oleg Pykhalov <go.wigust@gmail.com>
 | ||||
| # Copyright © 2018, 2019, 2020, 2021 Oleg Pykhalov <go.wigust@gmail.com>
 | ||||
| # Copyright © 2018 Stefan Stefanović <stefanx2ovic@gmail.com>
 | ||||
| # Copyright © 2018, 2020 Maxim Cournoyer <maxim.cournoyer@gmail.com>
 | ||||
| # Copyright © 2019, 2020 Guillaume Le Vaillant <glv@posteo.net>
 | ||||
|  | @ -630,6 +630,7 @@ GNU_SYSTEM_MODULES =				\ | |||
|   %D%/services/sddm.scm				\
 | ||||
|   %D%/services/spice.scm				\
 | ||||
|   %D%/services/ssh.scm				\
 | ||||
|   %D%/services/syncthing.scm			\
 | ||||
|   %D%/services/sysctl.scm			\
 | ||||
|   %D%/services/telephony.scm			\
 | ||||
|   %D%/services/version-control.scm              \
 | ||||
|  |  | |||
							
								
								
									
										89
									
								
								gnu/services/syncthing.scm
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										89
									
								
								gnu/services/syncthing.scm
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,89 @@ | |||
| ;;; GNU Guix --- Functional package management for GNU | ||||
| ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com> | ||||
| ;;; | ||||
| ;;; 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 syncthing) | ||||
|   #:use-module (gnu packages syncthing) | ||||
|   #:use-module (gnu services) | ||||
|   #:use-module (gnu services shepherd) | ||||
|   #:use-module (guix gexp) | ||||
|   #:use-module (guix records) | ||||
|   #:use-module (ice-9 match) | ||||
|   #:use-module (srfi srfi-1) | ||||
|   #:export (syncthing-configuration | ||||
|             syncthing-configuration? | ||||
|             syncthing-service-type)) | ||||
| 
 | ||||
| ;;; Commentary: | ||||
| ;;; | ||||
| ;;; This module provides a service definition for the syncthing service. | ||||
| ;;; | ||||
| ;;; Code: | ||||
| 
 | ||||
| (define-record-type* <syncthing-configuration> | ||||
|   syncthing-configuration make-syncthing-configuration | ||||
|   syncthing-configuration? | ||||
|   (syncthing syncthing-configuration-syncthing ;<package> | ||||
|              (default syncthing)) | ||||
|   (arguments syncthing-configuration-arguments ;list of strings | ||||
|              (default '())) | ||||
|   (logflags  syncthing-configuration-logflags  ;number | ||||
|              (default 0)) | ||||
|   (user      syncthing-configuration-user      ;string | ||||
|              (default #f)) | ||||
|   (group     syncthing-configuration-group     ;string | ||||
|              (default "users")) | ||||
|   (home      syncthing-configuration-home      ;string | ||||
|              (default #f))) | ||||
| 
 | ||||
| (define syncthing-shepherd-service | ||||
|   (match-lambda | ||||
|     (($ <syncthing-configuration> syncthing arguments logflags user group home) | ||||
|      (list | ||||
|       (shepherd-service | ||||
|        (provision (list (string->symbol (string-append "syncthing-" user)))) | ||||
|        (documentation "Run syncthing.") | ||||
|        (requirement '(loopback)) | ||||
|        (start #~(make-forkexec-constructor | ||||
|                  (append (list (string-append #$syncthing "/bin/syncthing") | ||||
|                                "-no-browser" | ||||
|                                "-no-restart" | ||||
|                                (string-append "-logflags=" (number->string #$logflags))) | ||||
|                          '#$arguments) | ||||
|                  #:user #$user | ||||
|                  #:group #$group | ||||
|                  #:environment-variables | ||||
|                  (append (list (string-append "HOME=" (or #$home (passwd:dir (getpw #$user)))) | ||||
|                                "SSL_CERT_DIR=/etc/ssl/certs" | ||||
|                                "SSL_CERT_FILE=/etc/ssl/certs/ca-certificates.crt") | ||||
|                          (remove (lambda (str) | ||||
|                                    (or (string-prefix? "HOME=" str) | ||||
|                                        (string-prefix? "SSL_CERT_DIR=" str) | ||||
|                                        (string-prefix? "SSL_CERT_FILE=" str))) | ||||
|                                  (environ))))) | ||||
|        (respawn? #f) | ||||
|        (stop #~(make-kill-destructor))))))) | ||||
| 
 | ||||
| (define syncthing-service-type | ||||
|   (service-type (name 'syncthing) | ||||
|                 (extensions (list (service-extension shepherd-root-service-type | ||||
|                                                      syncthing-shepherd-service))) | ||||
|                 (description | ||||
|                  "Run @uref{https://github.com/syncthing/syncthing, Syncthing} | ||||
| decentralized continuous file system synchronization."))) | ||||
| 
 | ||||
| ;;; syncthing.scm ends here | ||||
		Reference in a new issue