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 <n...@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 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 <n...@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)))) -- 2.9.0 testvm.scm: (use-modules (gnu) (gnu system nss)) 1(use-service-modules networking ssh version-control dbus avahi xorg) (use-package-modules certs) (use-package-modules tor emacs xorg version-control avahi xorg ssh) (operating-system (host-name "testvm") (timezone "UTC") (locale "en_US.UTF-8") (bootloader (grub-configuration (device "/dev/sda"))) (file-systems (list (file-system (mount-point "/") (device "dummy") (type "dummy")) %binary-format-file-system)) (users (list (user-account (name "bobthecrashtestdummy") (comment "") (group "users") (supplementary-groups '("wheel" "netdev" "audio" "video")) (home-directory "/home/bobthecrashtestdummy") (password "")))) (services (cons* (slim-service #:auto-login? #t #:default-user "bobthecrashtestdummy") (console-keymap-service "de-latin1") (static-networking-service "eth0" "10.0.2.10" #:name-servers '("10.0.2.3") #:gateway "10.0.2.2") ;;(avahi-service) ;;(dbus-service (list avahi)) (git-service) %base-services)) ;;%desktop-services)) (pam-services (base-pam-services #:allow-empty-passwords? #t)) (packages (cons* emacs openssh git xterm avahi findutils grep which xmodmap %base-packages))) ng0@shadowwalker ~/src/guix/guix-git-service$ ./pre-inst-env guix system vm ~/src/guix/testvm.scm Backtrace: In ice-9/boot-9.scm: 1724: 19 [%start-stack load-stack #<procedure fc0b60 at ice-9/boot-9.scm:4041:10 ()>] 1729: 18 [#<procedure fc5ea0 ()>] In unknown file: ?: 17 [primitive-load "/home/ng0/src/guix/guix-git-service/scripts/guix"] In guix/ui.scm: 1209: 16 [run-guix-command system "vm" "/home/ng0/src/guix/testvm.scm"] In ice-9/boot-9.scm: 157: 15 [catch srfi-34 #<procedure 3b761a0 at guix/ui.scm:425:2 ()> ...] 157: 14 [catch system-error ...] In guix/scripts/system.scm: 882: 13 [#<procedure 3b78cf0 at guix/scripts/system.scm:874:2 ()>] 788: 12 [process-action vm ("/home/ng0/src/guix/testvm.scm") ...] In guix/store.scm: 1182: 11 [run-with-store # ...] In guix/scripts/system.scm: 800: 10 [#<procedure 3cc3a20 at guix/scripts/system.scm:792:8 (state)> #] 564: 9 [perform-action vm # # ...] In gnu/system/vm.scm: 496: 8 [system-qemu-image/shared-store-script # # # ...] In gnu/system.scm: 601: 7 [operating-system-derivation # # #f] In gnu/services.scm: 601: 6 [loop #] In srfi/srfi-1.scm: 578: 5 [map #<procedure 4b413c0 at gnu/services.scm:590:4 (service)> (# # #)] In gnu/services.scm: 463: 4 [packages->profile-entry (# # # # ...)] In guix/profiles.scm: 187: 3 [packages->manifest (# # # # ...)] In srfi/srfi-1.scm: 576: 2 [map #<procedure 1867a60 at guix/profiles.scm:188:8 (expr)> (# # # # ...)] In guix/profiles.scm: 174: 1 [package->manifest-entry # #f] In guix/packages.scm: 638: 0 [package-transitive-propagated-inputs #] guix/packages.scm:638:21: In procedure package-transitive-propagated-inputs: guix/packages.scm:638:21: In procedure %package-propagated-inputs-real: Wrong type argument: #<<git-configuration> git: #<package git@2.9.0 gnu/packages/version-control.scm:113 2f229c0> base-path: "/var/git/repositories" port: 9418> -- ♥Ⓐ ng0 For non-prism friendly talk find me on http://www.psyced.org SecuShare – http://secushare.org