services: Add keepalived service.
* gnu/services/networking.scm (<keepalived-configuration>): New record. (keepalived-shepherd-service): New procedure. (keepalived-service-type): New variable. * doc/guix.texi (Networking Services): Document this.
This commit is contained in:
		
							parent
							
								
									79ba12a1db
								
							
						
					
					
						commit
						4e511fcfce
					
				
					 2 changed files with 99 additions and 2 deletions
				
			
		|  | @ -55,7 +55,7 @@ Copyright @copyright{} 2017 Andy Wingo@* | ||||||
| Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@* | Copyright @copyright{} 2017, 2018, 2019, 2020 Arun Isaac@* | ||||||
| Copyright @copyright{} 2017 nee@* | Copyright @copyright{} 2017 nee@* | ||||||
| Copyright @copyright{} 2018 Rutger Helling@* | Copyright @copyright{} 2018 Rutger Helling@* | ||||||
| Copyright @copyright{} 2018 Oleg Pykhalov@* | Copyright @copyright{} 2018, 2021 Oleg Pykhalov@* | ||||||
| Copyright @copyright{} 2018 Mike Gerwitz@* | Copyright @copyright{} 2018 Mike Gerwitz@* | ||||||
| Copyright @copyright{} 2018 Pierre-Antoine Rouby@* | Copyright @copyright{} 2018 Pierre-Antoine Rouby@* | ||||||
| Copyright @copyright{} 2018, 2019 Gábor Boskovits@* | Copyright @copyright{} 2018, 2019 Gábor Boskovits@* | ||||||
|  | @ -17207,6 +17207,58 @@ address, delete everything except these options: | ||||||
| @end table | @end table | ||||||
| @end deftp | @end deftp | ||||||
| 
 | 
 | ||||||
|  | @cindex keepalived | ||||||
|  | @deffn {Scheme Variable} keepalived-service-type | ||||||
|  | This is the type for the @uref{https://www.keepalived.org/, Keepalived} | ||||||
|  | routing software, @command{keepalived}.  Its value must be an | ||||||
|  | @code{keepalived-configuration} record as in this example for master | ||||||
|  | machine: | ||||||
|  | 
 | ||||||
|  | @lisp | ||||||
|  | (service keepalived-service-type | ||||||
|  |          (keepalived-configuration | ||||||
|  |            (config-file (local-file "keepalived-master.conf")))) | ||||||
|  | @end lisp | ||||||
|  | 
 | ||||||
|  | where @file{keepalived-master.conf}: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | vrrp_instance my-group @{ | ||||||
|  |   state MASTER | ||||||
|  |   interface enp9s0 | ||||||
|  |   virtual_router_id 100 | ||||||
|  |   priority 100 | ||||||
|  |   unicast_peer @{ 10.0.0.2 @} | ||||||
|  |   virtual_ipaddress @{ | ||||||
|  |     10.0.0.4/24 | ||||||
|  |   @} | ||||||
|  | @} | ||||||
|  | @end example | ||||||
|  | 
 | ||||||
|  | and for backup machine: | ||||||
|  | 
 | ||||||
|  | @lisp | ||||||
|  | (service keepalived-service-type | ||||||
|  |          (keepalived-configuration | ||||||
|  |           (config-file (local-file "keepalived-backup.conf")))) | ||||||
|  | @end lisp | ||||||
|  | 
 | ||||||
|  | where @file{keepalived-backup.conf}: | ||||||
|  | 
 | ||||||
|  | @example | ||||||
|  | vrrp_instance my-group @{ | ||||||
|  |   state BACKUP | ||||||
|  |   interface enp9s0 | ||||||
|  |   virtual_router_id 100 | ||||||
|  |   priority 99 | ||||||
|  |   unicast_peer @{ 10.0.0.3 @} | ||||||
|  |   virtual_ipaddress @{ | ||||||
|  |     10.0.0.4/24 | ||||||
|  |   @} | ||||||
|  | @} | ||||||
|  | @end example | ||||||
|  | @end deffn | ||||||
|  | 
 | ||||||
| @node Unattended Upgrades | @node Unattended Upgrades | ||||||
| @subsection Unattended Upgrades | @subsection Unattended Upgrades | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -14,6 +14,7 @@ | ||||||
| ;;; Copyright © 2019 Sou Bunnbu <iyzsong@member.fsf.org> | ;;; Copyright © 2019 Sou Bunnbu <iyzsong@member.fsf.org> | ||||||
| ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com> | ;;; Copyright © 2019 Alex Griffin <a@ajgrf.com> | ||||||
| ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re> | ;;; Copyright © 2020 Brice Waegeneire <brice@waegenei.re> | ||||||
|  | ;;; Copyright © 2021 Oleg Pykhalov <go.wigust@gmail.com> | ||||||
| ;;; | ;;; | ||||||
| ;;; This file is part of GNU Guix. | ;;; This file is part of GNU Guix. | ||||||
| ;;; | ;;; | ||||||
|  | @ -42,6 +43,7 @@ | ||||||
|   #:use-module (gnu packages admin) |   #:use-module (gnu packages admin) | ||||||
|   #:use-module (gnu packages base) |   #:use-module (gnu packages base) | ||||||
|   #:use-module (gnu packages bash) |   #:use-module (gnu packages bash) | ||||||
|  |   #:use-module (gnu packages cluster) | ||||||
|   #:use-module (gnu packages connman) |   #:use-module (gnu packages connman) | ||||||
|   #:use-module (gnu packages freedesktop) |   #:use-module (gnu packages freedesktop) | ||||||
|   #:use-module (gnu packages linux) |   #:use-module (gnu packages linux) | ||||||
|  | @ -192,7 +194,11 @@ | ||||||
|             yggdrasil-configuration-log-level |             yggdrasil-configuration-log-level | ||||||
|             yggdrasil-configuration-log-to |             yggdrasil-configuration-log-to | ||||||
|             yggdrasil-configuration-json-config |             yggdrasil-configuration-json-config | ||||||
|             yggdrasil-configuration-package)) |             yggdrasil-configuration-package | ||||||
|  | 
 | ||||||
|  |             keepalived-configuration | ||||||
|  |             keepalived-configuration? | ||||||
|  |             keepalived-service-type)) | ||||||
| 
 | 
 | ||||||
| ;;; Commentary: | ;;; Commentary: | ||||||
| ;;; | ;;; | ||||||
|  | @ -1865,4 +1871,43 @@ See yggdrasil -genconf for config options.") | ||||||
|           (service-extension profile-service-type |           (service-extension profile-service-type | ||||||
|                              (compose list yggdrasil-configuration-package)))))) |                              (compose list yggdrasil-configuration-package)))))) | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | ;;; | ||||||
|  | ;;; Keepalived | ||||||
|  | ;;; | ||||||
|  | 
 | ||||||
|  | (define-record-type* <keepalived-configuration> | ||||||
|  |   keepalived-configuration make-keepalived-configuration | ||||||
|  |   keepalived-configuration? | ||||||
|  |   (keepalived  keepalived-configuration-keepalived  ;<package> | ||||||
|  |                (default keepalived)) | ||||||
|  |   (config-file keepalived-configuration-config-file ;file-like | ||||||
|  |                (default #f))) | ||||||
|  | 
 | ||||||
|  | (define keepalived-shepherd-service | ||||||
|  |   (match-lambda | ||||||
|  |     (($ <keepalived-configuration> keepalived config-file) | ||||||
|  |      (list | ||||||
|  |       (shepherd-service | ||||||
|  |        (provision '(keepalived)) | ||||||
|  |        (documentation "Run keepalived.") | ||||||
|  |        (requirement '(loopback)) | ||||||
|  |        (start #~(make-forkexec-constructor | ||||||
|  |                  (list (string-append #$keepalived "/sbin/keepalived") | ||||||
|  |                        "--dont-fork" "--log-console" "--log-detail" | ||||||
|  |                        "--pid=/var/run/keepalived.pid" | ||||||
|  |                        (string-append "--use-file=" #$config-file)) | ||||||
|  |                  #:pid-file "/var/run/keepalived.pid" | ||||||
|  |                  #:log-file "/var/log/keepalived.log")) | ||||||
|  |        (respawn? #f) | ||||||
|  |        (stop #~(make-kill-destructor))))))) | ||||||
|  | 
 | ||||||
|  | (define keepalived-service-type | ||||||
|  |   (service-type (name 'keepalived) | ||||||
|  |                 (extensions (list (service-extension shepherd-root-service-type | ||||||
|  |                                                      keepalived-shepherd-service))) | ||||||
|  |                 (description | ||||||
|  |                  "Run @uref{https://www.keepalived.org/, Keepalived} | ||||||
|  | routing software."))) | ||||||
|  | 
 | ||||||
| ;;; networking.scm ends here | ;;; networking.scm ends here | ||||||
|  |  | ||||||
		Reference in a new issue