all messages for Guix-related lists mirrored at yhetil.org
 help / color / mirror / code / Atom feed
* [bug#30196] [PATCH 0/2] Add wesnothd service
@ 2018-01-21 18:33 Arun Isaac
  2018-01-21 18:37 ` [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server Arun Isaac
  2018-01-22 12:11 ` [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service Arun Isaac
  0 siblings, 2 replies; 8+ messages in thread
From: Arun Isaac @ 2018-01-21 18:33 UTC (permalink / raw)
  To: 30196

This patchset creates a service to run the Battle for Wesnoth multiplayer game
server. I have created a minimal wesnoth-server package that only has the
server and doesn't have the actual game or any of the game assets. One might
have to run the wesnothd service on an headless server. This minimal package
makes that convenient by greatly reducing the size and the dependencies pulled
in.

This is my first Guix service. I have probably not gotten everything right. Do
feel free to criticize.

Arun Isaac (2):
  gnu: Add wesnoth-server.
  gnu: services: Add wesnothd service.

 doc/guix.texi          | 35 +++++++++++++++++++++-
 gnu/local.mk           |  1 +
 gnu/packages/games.scm | 24 ++++++++++++++-
 gnu/services/games.scm | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++
 4 files changed, 139 insertions(+), 2 deletions(-)
 create mode 100644 gnu/services/games.scm

-- 
2.15.1

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server.
  2018-01-21 18:33 [bug#30196] [PATCH 0/2] Add wesnothd service Arun Isaac
@ 2018-01-21 18:37 ` Arun Isaac
  2018-02-06 15:18   ` Ludovic Courtès
  2018-01-22 12:11 ` [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service Arun Isaac
  1 sibling, 1 reply; 8+ messages in thread
From: Arun Isaac @ 2018-01-21 18:37 UTC (permalink / raw)
  To: 30196

* gnu/packages/games.scm (wesnoth-server): New variable.
---
 gnu/packages/games.scm | 24 +++++++++++++++++++++++-
 1 file changed, 23 insertions(+), 1 deletion(-)

diff --git a/gnu/packages/games.scm b/gnu/packages/games.scm
index 1213d87a5..5fb4be8e3 100644
--- a/gnu/packages/games.scm
+++ b/gnu/packages/games.scm
@@ -25,7 +25,7 @@
 ;;; Copyright © 2016 Jan Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2016 Steve Webber <webber.sl@gmail.com>
 ;;; Copyright © 2017 Adonay "adfeno" Felipe Nogueira <https://libreplanet.org/wiki/User:Adfeno> <adfeno@hyperbola.info>
-;;; Copyright © 2017 Arun Isaac <arunisaac@systemreboot.net>
+;;; Copyright © 2017, 2018 Arun Isaac <arunisaac@systemreboot.net>
 ;;; Copyright © 2017 Tobias Geerinckx-Rice <me@tobias.gr>
 ;;; Copyright © 2017 nee <nee-git@hidamari.blue>
 ;;; Copyright © 2017 Clément Lassieur <clement@lassieur.org>
@@ -1801,6 +1801,28 @@ experience and advance levels, and are carried over from one scenario to the
 next campaign.")
     (license license:gpl2+)))
 
+(define-public wesnoth-server
+  (package
+    (inherit wesnoth)
+    (name "wesnoth-server")
+    (inputs
+     `(("boost" ,boost)
+       ("sdl-net" ,sdl-net)))
+    (arguments
+     (append
+      (substitute-keyword-arguments (package-arguments wesnoth)
+        ((#:configure-flags configure-flags)
+         `(append ,configure-flags (list "-DENABLE_GAME=OFF"))))
+      `(#:phases
+        (modify-phases %standard-phases
+          (add-after 'install 'delete-data
+            (lambda* (#:key outputs #:allow-other-keys)
+              (delete-file-recursively (string-append (assoc-ref outputs "out")
+                                                      "/share/wesnoth"))))))))
+    (synopsis "Dedicated Battle for Wesnoth server")
+    (description "This package contains a dedicated server for The Battle for
+Wesnoth.")))
+
 (define-public dosbox
   (package
     (name "dosbox")
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service.
  2018-01-21 18:33 [bug#30196] [PATCH 0/2] Add wesnothd service Arun Isaac
  2018-01-21 18:37 ` [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server Arun Isaac
@ 2018-01-22 12:11 ` Arun Isaac
  2018-02-06 15:20   ` Ludovic Courtès
  1 sibling, 1 reply; 8+ messages in thread
From: Arun Isaac @ 2018-01-22 12:11 UTC (permalink / raw)
  To: 30196

* gnu/services/games.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
* doc/guix.texi (Game Services): Document the service.
---
 doc/guix.texi          | 35 +++++++++++++++++++++-
 gnu/local.mk           |  1 +
 gnu/services/games.scm | 81 ++++++++++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 116 insertions(+), 1 deletion(-)
 create mode 100644 gnu/services/games.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 983e00ab3..d96de977c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -43,7 +43,7 @@ Copyright @copyright{} 2017 Maxim Cournoyer@*
 Copyright @copyright{} 2017, 2018 Tobias Geerinckx-Rice@*
 Copyright @copyright{} 2017 George Clemmer@*
 Copyright @copyright{} 2017 Andy Wingo@*
-Copyright @copyright{} 2017 Arun Isaac@*
+Copyright @copyright{} 2017, 2018 Arun Isaac@*
 Copyright @copyright{} 2017 nee@*
 Copyright @copyright{} 2018 Rutger Helling
 
@@ -248,6 +248,7 @@ Services
 * Audio Services::              The MPD.
 * Virtualization Services::     Virtualization services.
 * Version Control Services::    Providing remote access to Git repositories.
+* Game Services::                Game servers.
 * Miscellaneous Services::      Other services.
 
 Defining Services
@@ -9469,6 +9470,7 @@ declaration.
 * Audio Services::              The MPD.
 * Virtualization Services::     Virtualization services.
 * Version Control Services::    Providing remote access to Git repositories.
+* Game Services::                Game servers.
 * Miscellaneous Services::      Other services.
 @end menu
 
@@ -18095,6 +18097,37 @@ HTTPS.  You will also need to add an @code{fcgiwrap} proxy to your
 system services.  @xref{Web Services}.
 @end deffn
 
+@node Game Services
+@subsubsection Game Services
+
+@subsubheading The Battle for Wesnoth Service
+@cindex wesnothd
+@uref{https://wesnoth.org, The Battle for Wesnoth} is a fantasy, turn
+based tactical strategy game, with several single player campaigns, and
+multiplayer games (both networked and local).
+
+@defvar {Scheme Variable} wesnothd-service-type
+Service type for the wesnothd service.  Its value must be a
+@code{wesnothd-configuration} object.  To run wesnothd in the default
+configuration, instantiate it as:
+
+@example
+(service wesnothd-service-type)
+@end example
+@end defvar
+
+@deftp {Data Type} wesnothd-configuration
+Data type representing the configuration of @command{wesnothd}.
+
+@table @asis
+@item @code{package} (default: @code{wesnoth-server})
+The wesnoth server package to use.
+
+@item @code{port} (default: @code{15000})
+The port to bind the server to.
+@end table
+@end deftp
+
 @node Miscellaneous Services
 @subsubsection Miscellaneous Services
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 240554fe4..19b92b87b 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -457,6 +457,7 @@ GNU_SYSTEM_MODULES =				\
   %D%/services/desktop.scm			\
   %D%/services/dict.scm				\
   %D%/services/dns.scm				\
+  %D%/services/games.scm			\
   %D%/services/kerberos.scm			\
   %D%/services/lirc.scm				\
   %D%/services/virtualization.scm		\
diff --git a/gnu/services/games.scm b/gnu/services/games.scm
new file mode 100644
index 000000000..b14669623
--- /dev/null
+++ b/gnu/services/games.scm
@@ -0,0 +1,81 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
+;;;
+;;; 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 games)
+  #:use-module (gnu services)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu packages admin)
+  #:use-module (gnu packages games)
+  #:use-module (gnu system shadow)
+  #:use-module (guix gexp)
+  #:use-module (guix modules)
+  #:use-module (guix records)
+  #:use-module (ice-9 match)
+  #:export (wesnothd-configuration
+            wesnoth-configuration?
+            wesnothd-service-type))
+
+;;;
+;;; The Battle for Wesnoth server
+;;;
+
+(define-record-type* <wesnothd-configuration>
+  wesnothd-configuration make-wesnothd-configuration wesnothd-configuration?
+  (package wesnothd-configuration-package
+           (default wesnoth-server))
+  (port wesnothd-configuration-port
+        (default 15000)))
+
+(define %wesnothd-accounts
+  (list (user-account
+         (name "wesnothd")
+         (group "wesnothd")
+         (system? #t)
+         (comment "Wesnoth daemon user")
+         (home-directory "/var/empty")
+         (shell (file-append shadow "/sbin/nologin")))
+        (user-group
+         (name "wesnothd")
+         (system? #t))))
+
+(define wesnothd-shepherd-service
+  (match-lambda
+    (($ <wesnothd-configuration> package port)
+     (with-imported-modules (source-module-closure
+                             '((gnu build shepherd)))
+       (shepherd-service
+        (documentation "The Battle for Wesnoth server")
+        (provision '(wesnoth-daemon))
+        (requirement '(networking))
+        (modules '((gnu build shepherd)))
+        (start #~(make-forkexec-constructor/container
+                  (list #$(file-append package "/bin/wesnothd")
+                        "-p" #$(number->string port))))
+        (stop #~(make-kill-destructor)))))))
+
+(define wesnothd-service-type
+  (service-type
+   (name 'wesnothd)
+   (description
+    "Run The Battle for Wesnoth server @command{wesnothd}.")
+   (extensions
+    (list (service-extension account-service-type
+                             (const %wesnothd-accounts))
+          (service-extension shepherd-root-service-type
+                             (compose list wesnothd-shepherd-service))))
+   (default-value (wesnothd-configuration))))
-- 
2.15.1

^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server.
  2018-01-21 18:37 ` [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server Arun Isaac
@ 2018-02-06 15:18   ` Ludovic Courtès
  0 siblings, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2018-02-06 15:18 UTC (permalink / raw)
  To: Arun Isaac; +Cc: 30196

Hi Arun,

Arun Isaac <arunisaac@systemreboot.net> skribis:

> * gnu/packages/games.scm (wesnoth-server): New variable.


[...]

> +(define-public wesnoth-server
> +  (package
> +    (inherit wesnoth)
> +    (name "wesnoth-server")
> +    (inputs
> +     `(("boost" ,boost)
> +       ("sdl-net" ,sdl-net)))
> +    (arguments
> +     (append
> +      (substitute-keyword-arguments (package-arguments wesnoth)
> +        ((#:configure-flags configure-flags)
> +         `(append ,configure-flags (list "-DENABLE_GAME=OFF"))))
> +      `(#:phases
> +        (modify-phases %standard-phases
> +          (add-after 'install 'delete-data
> +            (lambda* (#:key outputs #:allow-other-keys)
> +              (delete-file-recursively (string-append (assoc-ref outputs "out")
> +                                                      "/share/wesnoth"))))))))

I suppose this phase is because the game data isn’t actually used by the
server, right?  Perhaps worth mentioning in a comment.

> +    (synopsis "Dedicated Battle for Wesnoth server")

Maybe “Server for the @emph{Battle for Wesnoth} game”.

> +    (description "This package contains a dedicated server for The Battle for
> +Wesnoth.")))

Likewise.

OK with these changes, thanks!

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service.
  2018-01-22 12:11 ` [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service Arun Isaac
@ 2018-02-06 15:20   ` Ludovic Courtès
  2018-02-08 12:12     ` Arun Isaac
  0 siblings, 1 reply; 8+ messages in thread
From: Ludovic Courtès @ 2018-02-06 15:20 UTC (permalink / raw)
  To: Arun Isaac; +Cc: 30196

Hi,

Arun Isaac <arunisaac@systemreboot.net> skribis:

> * gnu/services/games.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
> * doc/guix.texi (Game Services): Document the service.

LGTM, thanks!

You’d get bonus points by writing a system test, but perhaps there’s not
much that could easily be tested.  So, no big deal.

Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service.
  2018-02-06 15:20   ` Ludovic Courtès
@ 2018-02-08 12:12     ` Arun Isaac
  2018-02-08 21:57       ` Ludovic Courtès
  2018-02-09  9:52       ` bug#30196: " Arun Isaac
  0 siblings, 2 replies; 8+ messages in thread
From: Arun Isaac @ 2018-02-08 12:12 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 30196


>> * gnu/services/games.scm: New file.
>> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
>> * doc/guix.texi (Game Services): Document the service.
>
> LGTM, thanks!

Thanks, I'll push with the changes you mentioned.

> You’d get bonus points by writing a system test, but perhaps there’s not
> much that could easily be tested.  So, no big deal.

I might be able to write a simple test that checks if the server has
started successfully and is listening on port 15000. But, this seems too
trivial a test to me. Is it worth it? WDYT?

^ permalink raw reply	[flat|nested] 8+ messages in thread

* [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service.
  2018-02-08 12:12     ` Arun Isaac
@ 2018-02-08 21:57       ` Ludovic Courtès
  2018-02-09  9:52       ` bug#30196: " Arun Isaac
  1 sibling, 0 replies; 8+ messages in thread
From: Ludovic Courtès @ 2018-02-08 21:57 UTC (permalink / raw)
  To: Arun Isaac; +Cc: 30196

Arun Isaac <arunisaac@systemreboot.net> skribis:

>>> * gnu/services/games.scm: New file.
>>> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
>>> * doc/guix.texi (Game Services): Document the service.
>>
>> LGTM, thanks!
>
> Thanks, I'll push with the changes you mentioned.
>
>> You’d get bonus points by writing a system test, but perhaps there’s not
>> much that could easily be tested.  So, no big deal.
>
> I might be able to write a simple test that checks if the server has
> started successfully and is listening on port 15000. But, this seems too
> trivial a test to me. Is it worth it? WDYT?

Yeah I thought about it, probably not worth it.

Thanks,
Ludo’.

^ permalink raw reply	[flat|nested] 8+ messages in thread

* bug#30196: [PATCH 2/2] gnu: services: Add wesnothd service.
  2018-02-08 12:12     ` Arun Isaac
  2018-02-08 21:57       ` Ludovic Courtès
@ 2018-02-09  9:52       ` Arun Isaac
  1 sibling, 0 replies; 8+ messages in thread
From: Arun Isaac @ 2018-02-09  9:52 UTC (permalink / raw)
  To: Ludovic Courtès; +Cc: 30196-done

Arun Isaac <arunisaac@systemreboot.net> writes:

>>> * gnu/services/games.scm: New file.
>>> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
>>> * doc/guix.texi (Game Services): Document the service.
>>
>> LGTM, thanks!

Pushed!

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2018-02-09  9:53 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-01-21 18:33 [bug#30196] [PATCH 0/2] Add wesnothd service Arun Isaac
2018-01-21 18:37 ` [bug#30196] [PATCH 1/2] gnu: Add wesnoth-server Arun Isaac
2018-02-06 15:18   ` Ludovic Courtès
2018-01-22 12:11 ` [bug#30196] [PATCH 2/2] gnu: services: Add wesnothd service Arun Isaac
2018-02-06 15:20   ` Ludovic Courtès
2018-02-08 12:12     ` Arun Isaac
2018-02-08 21:57       ` Ludovic Courtès
2018-02-09  9:52       ` bug#30196: " Arun Isaac

Code repositories for project(s) associated with this external index

	https://git.savannah.gnu.org/cgit/guix.git

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.