diff mbox

pre-release [PATCH] git-service [v2]

Message ID 87d1mhxzmu.fsf_-_@we.make.ritual.n0.is
State New
Headers show

Commit Message

non such July 13, 2016, 4:37 p.m. UTC
Hi,

this is an updated patch which in combination with the testvm.scm
further below produces the output which can be seen at the bottom
of this mail, not very different from where I started with.
The testvm.scm might have some issues, but I'll notice once I get
to the point where the service stops throwing errors.

From 55211aa38f0ba8cb4e458b2c145b3ef7e1d7f334 Mon Sep 17 00:00:00 2001
From: ng0 <ng0@we.make.ritual.n0.is>
Date: Fri, 8 Jul 2016 15:42:55 +0000
Subject: [PATCH] gnu: services: Add git-service.

* gnu/services/version-control.scm: New file,
create it.
(git-service): New Procedures.
(git-service-type): New variable.
---
 gnu/local.mk                     |   1 +
 gnu/services/version-control.scm | 115 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 116 insertions(+)
 create mode 100644 gnu/services/version-control.scm

Comments

non such July 14, 2016, 9:07 a.m. UTC | #1
As I wrote yesterday in freenode, disregard this patch. I
succeeded and currently am debugging the VM.
diff mbox

Patch

diff --git a/gnu/local.mk b/gnu/local.mk
index d011844..5808d14 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -384,6 +384,7 @@  GNU_SYSTEM_MODULES =				\
   %D%/services/shepherd.scm			\
   %D%/services/herd.scm				\
   %D%/services/ssh.scm				\
+  %D%/services/version-control.scm              \
   %D%/services/web.scm				\
   %D%/services/xorg.scm				\
 						\
diff --git a/gnu/services/version-control.scm b/gnu/services/version-control.scm
new file mode 100644
index 0000000..5654783
--- /dev/null
+++ b/gnu/services/version-control.scm
@@ -0,0 +1,115 @@ 
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 ng0 <ng0@we.make.ritual.n0.is>
+;;;
+;;; 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 version-control)
+  #:use-module (gnu services)
+  #:use-module (gnu services base)
+  #:use-module (gnu services shepherd)
+  #:use-module (gnu system shadow)
+  #:use-module (gnu packages version-control)
+  #:use-module (gnu packages admin)
+  #:use-module (guix records)
+  #:use-module (guix gexp)
+  #:use-module (srfi srfi-1)
+  ;; check for redundancy / necessity:
+  ;; #:use-module (srfi srfi-9)
+  ;; #:use-module (srfi srfi-26)
+  ;; #:use-module (srfi srfi-34)
+  #:use-module (ice-9 match)
+  #:export (git-service
+            git-service-type))
+
+;;; Commentary:
+;;;
+;;; Version Control related services.
+;;;
+;;; Code:
+
+
+;;;
+;;; git
+;;;
+
+(define-record-type* <git-configuration>
+  git-configuration make-git-configuration
+  git-configuration?
+  (git       git-configuration-git  ;<package>
+             (default git))
+  (base-path git-configuration-base-path
+             (default "/var/git/repositories")) ;string
+  (port      git-configuration-port
+             (default 9418))) ;number
+
+(define git-shepherd-service
+  (match-lambda
+    (($ <git-configuration> git base-path port)
+     (list (shepherd-service
+            (provision '(git))
+            (requirement '(networking loopback syslogd))
+            (documentation "Run the git-daemon server for git repositories")
+            (start #~(make-forkexec-constructor
+                      (list (string-append #$git "/bin/git")
+                            "daemon" "--syslog" "--informative-errors"
+                            (string-append "--base-path=" $#base-path)
+                            (string-append "--port=" $#port))))
+              (stop #~(make-kill-destructor)))))))
+
+;; We maybe need it to have the git-shell instead.
+(define %git-accounts
+  ;; User account and groups for git-daemon.
+  (list (user-group (name "git") (system? #t))
+        (user-account
+         (name "git")
+         (group "git")
+         (system? #t)
+         (comment "git-daemon user")
+         (home-directory "/var/git")
+         (shell #~(string-append #$shadow "/sbin/nologin")))))
+
+(define %git-activation
+  ;; Activation gexp.
+  #~(begin (use-modules (guix build utils))
+           (mkdir-p "/var/run/git-daemon")))
+
+(define git-service-type
+  (service-type
+   (name 'git)
+   (extensions
+    (list (service-extension shepherd-root-service-type
+                             git-shepherd-service)
+          (service-extension activation-service-type
+                             (const %git-activation))
+          ;; Add git-daemon to the global profile.
+          (service-extension profile-service-type list)))))
+
+(define* (git-service #:key
+                      (git git)
+                      (base-path "/var/git/repositories")
+                      (port 9418))
+  "Return a service that runs @url{https://git-scm.org,git} as a daemon,
+ etc...
+
+ The daemon will listen on the port specified in @var{port}.
+
+ In addition, @var{extra-settings} specifies a string to append to the
+ daemon parameters."
+  (service git-service-type
+           (git-configuration
+            (git git)
+            (base-path base-path)
+            (port port))))