From mboxrd@z Thu Jan 1 00:00:00 1970 From: ng0 Subject: Re: pre-release [PATCH] git-service [v2] Date: Sat, 27 Aug 2016 15:39:44 +0000 Message-ID: <87mvjykypr.fsf@we.make.ritual.n0.is> References: <87zipsgm8g.fsf@we.make.ritual.n0.is> <87r3b33ls5.fsf@elephly.net> <87d1mhxzmu.fsf_-_@we.make.ritual.n0.is> <878tx4k2pb.fsf@we.make.ritual.n0.is> <87vaz7cnbs.fsf@we.make.ritual.n0.is> <87fupxcjs2.fsf@gmail.com> <87r39dgold.fsf@we.make.ritual.n0.is> <87fupsf81h.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:55611) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bdfi5-0004F7-2D for guix-devel@gnu.org; Sat, 27 Aug 2016 11:39:54 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bdfi0-0005eG-7d for guix-devel@gnu.org; Sat, 27 Aug 2016 11:39:52 -0400 Received: from mithlond.libertad.in-berlin.de ([2001:67c:1400:2490::1]:36846 helo=beleriand.n0.is) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bdfhz-0005d9-SR for guix-devel@gnu.org; Sat, 27 Aug 2016 11:39:48 -0400 In-Reply-To: <87fupsf81h.fsf@gmail.com> List-Id: "Development of GNU Guix and the GNU System distribution." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guix-devel-bounces+gcggd-guix-devel=m.gmane.org@gnu.org Sender: "Guix-devel" To: Alex Kost Cc: guix-devel --=-=-= Content-Type: text/plain Alex Kost writes: > ng0 (2016-08-25 12:55 +0300) wrote: > >> Hi, >> >> thanks for finding the errors. I applied your suggestions but the >> service still goes into respawn loop when the VM boots. Do you have any >> idea why this could happen? > > Is there any output in syslog? Difficult to capture when it is running in a VM. > How does you patch look now? Patch is attached. The mkdir-p for the default location could be more flexible, but first I want to have a service which does not respawn so many times at boot that shepherd disables it. --=-=-= Content-Type: text/x-patch; charset=utf-8 Content-Disposition: inline; filename=0001-gnu-services-Add-git-service.patch Content-Transfer-Encoding: 8bit >From accd6f983ea01743398ed2f2d6db9eaf8bb75855 Mon Sep 17 00:00:00 2001 From: ng0 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 | 122 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 123 insertions(+) create mode 100644 gnu/services/version-control.scm diff --git a/gnu/local.mk b/gnu/local.mk index b8c5378..67989ed 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -390,6 +390,7 @@ GNU_SYSTEM_MODULES = \ %D%/services/herd.scm \ %D%/services/spice.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..f5dfee4 --- /dev/null +++ b/gnu/services/version-control.scm @@ -0,0 +1,122 @@ +;;; GNU Guix --- Functional package management for GNU +;;; Copyright © 2016 ng0 +;;; +;;; 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 . + +(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 + git-configuration + git-configuration? + git-configuration-git + git-configuration-port + git-configuration-base-path)) + +;;; Commentary: +;;; +;;; Version Control related services. +;;; +;;; Code: + + +;;; +;;; git +;;; + +(define-record-type* git-configuration + make-git-configuration + git-configuration? + (git git-configuration-git ;package + (default git)) + (base-path git-configuration-base-path) ;string + (port git-configuration-port)) ;number + +(define (git-shepherd-service config) + "Return a for git with CONFIG." + (define git (git-configuration-git config)) + + (define git-command + #~(list + (string-append #$git "/bin/git") "daemon" "--syslog" + "--informative-errors" + "--port=" #$(number->string (git-configuration-port config)) + "--base-path=" #$(git-configuration-base-path config))) + + (define requires + '(networking syslogd)) + + (list (shepherd-service + (documentation "Git daemon server for git repositories") + (requirement requires) + (provision '(git)) + (start #~(make-forkexec-constructor #$git-command)) + (stop #~(make-kill-destructor))))) + +(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 "/bin/git-shell"))))) + +(define (git-activation config) + "Return the activation gexp for CONFIG." + #~(begin (use-modules (guix build utils)) + ;; Create the default base-path + (mkdir-p "/var/git/repositories"))) + +(define git-service-type + (service-type (name 'git) + (extensions + (list (service-extension shepherd-root-service-type + git-shepherd-service) + (service-extension activation-service-type + git-activation))))) + +(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.3 --=-=-= Content-Type: text/plain The updated testvm is also attached. --=-=-= Content-Type: application/octet-stream Content-Disposition: attachment; filename=testvm.scm Content-Transfer-Encoding: base64 OzsgYmFyZSBib25lcywgbm8gWDExIHNlcnZlci4KKHVzZS1tb2R1bGVzIChnbnUpIChnbnUgc3lz dGVtIG5zcykpCih1c2Utc2VydmljZS1tb2R1bGVzIG5ldHdvcmtpbmcgc3NoIHZlcnNpb24tY29u dHJvbCBkYnVzIGF2YWhpKQoodXNlLXBhY2thZ2UtbW9kdWxlcyBjZXJ0cyBzdWNrbGVzcyBhZG1p biB4b3JnKQoodXNlLXBhY2thZ2UtbW9kdWxlcyB0b3IgZW1hY3MgdmVyc2lvbi1jb250cm9sIGF2 YWhpIHNzaCkKCihvcGVyYXRpbmctc3lzdGVtCiAgKGhvc3QtbmFtZSAidGVzdHZtIikKICAodGlt ZXpvbmUgIlVUQyIpCiAgKGxvY2FsZSAiZW5fVVMuVVRGLTgiKQoKICAoYm9vdGxvYWRlciAoZ3J1 Yi1jb25maWd1cmF0aW9uIChkZXZpY2UgIi9kZXYvc2RhIikpKQogIChmaWxlLXN5c3RlbXMKICAg KGxpc3QgKGZpbGUtc3lzdGVtCiAgICAgICAgICAobW91bnQtcG9pbnQgIi8iKQogICAgICAgICAg KGRldmljZSAiZHVtbXkiKQogICAgICAgICAgKHR5cGUgImR1bW15IikpCiAgICAgICAgICViaW5h cnktZm9ybWF0LWZpbGUtc3lzdGVtKSkKCiAgKHVzZXJzIChsaXN0ICh1c2VyLWFjY291bnQKICAg ICAgICAgICAgICAgIChuYW1lICJib2J0aGVjcmFzaHRlc3RkdW1teSIpCiAgICAgICAgICAgICAg ICAoY29tbWVudCAiIikKICAgICAgICAgICAgICAgIChncm91cCAidXNlcnMiKQogICAgICAgICAg ICAgICAgKHN1cHBsZW1lbnRhcnktZ3JvdXBzICcoIndoZWVsIiAibmV0ZGV2IgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImF1ZGlvIiAidmlkZW8iKSkKICAgICAgICAg ICAgICAgIChob21lLWRpcmVjdG9yeSAiL2hvbWUvYm9idGhlY3Jhc2h0ZXN0ZHVtbXkiKQogICAg ICAgICAgICAgICAgKHBhc3N3b3JkICIiKSkpKQoKICAoc2VydmljZXMgKGNvbnMqIDs7KHNsaW0t c2VydmljZSAjOmF1dG8tbG9naW4/ICN0CiAgICAgICAgICAgICAgICAgICA7OyAgICAgICAgICAg ICAgIzpkZWZhdWx0LXVzZXIgImJvYnRoZWNyYXNodGVzdGR1bW15IikKICAgICAgICAgICAgICAg ICAgIChjb25zb2xlLWtleW1hcC1zZXJ2aWNlICJkZSIpCiAgICAgICAgICAgICAgICAgICAoc3Rh dGljLW5ldHdvcmtpbmctc2VydmljZSAiZXRoMCIgIjEwLjAuMi4xMCIKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6bmFtZS1zZXJ2ZXJzICcoIjEwLjAuMi4z IikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICM6Z2F0ZXdh eSAiMTAuMC4yLjIiKQogICAgICAgICAgICAgICAgICAgOzsoYXZhaGktc2VydmljZSkKICAgICAg ICAgICAgICAgICAgIDs7KGRidXMtc2VydmljZSAobGlzdCBhdmFoaSkpCiAgICAgICAgICAgICAg ICAgICAoZ2l0LXNlcnZpY2UpCiAgICAgICAgICAgICAgICAgICA7Oyhsc2gtc2VydmljZSkKICAg ICAgICAgICAgICAgICAgICViYXNlLXNlcnZpY2VzKSkKCiAgKHBhbS1zZXJ2aWNlcwogICAoYmFz ZS1wYW0tc2VydmljZXMgIzphbGxvdy1lbXB0eS1wYXNzd29yZHM/ICN0KSkKCiAgKHBhY2thZ2Vz IChjb25zKiBnaXQgc3Qgc3VkbwogICAgICAgICAgICAgICAgICAgYXZhaGkgZmluZHV0aWxzIGdy ZXAgd2hpY2ggeG1vZG1hcAogICAgICAgICAgICAgICAgICAgdGNwZHVtcCAlYmFzZS1wYWNrYWdl cykpKQo= --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit > What is > the exact "git daemon" command that is executing? You can find this > command by looking at "/gnu/store/…-shepherd-git.scm" file: when you > built the system, guix told you that it would build this file. If you > missed it, you can still find it by looking at > "/run/current-system/boot", there is a reference to > "/gnu/store/…-shepherd.conf", and there you can find a link to > "…-shepherd-git.scm" file. (eval-when (expand load eval) (set! %load-path (cons "/gnu/store/8s6z5k9nfp3fyfj39vq6js8sfhxkn0y6-module-import" %load-path)) (set! %load-compiled-path (cons "/gnu/store/lc0bj2nlmdgyqkkpd008hcnrpl068yr8-module-import-compiled" %load-compiled-path)))(begin (use-modules (shepherd service) (oop goops) (guix build utils) (guix build syscalls)) (make #:docstring (quote "Git daemon server for git repositories") #:provides (quote (git)) #:requires (quote (networking syslogd)) #:respawn? (quote #t) #:start (make-forkexec-constructor (list (string-append "/gnu/store/f6b2a4ic4lzjv48s1w0kn6m5mxkj0qs4-git-2.9.3" "/bin/git") "daemon" "--syslog" "--informative-errors" "--port=" "9418" "--base-path=" "/var/git/repositories")) #:stop (make-kill-destructor))) ^______^ ^_____________^ those two should be combined, same for the two afterwards? > -- > Alex -- ng0 For non-prism friendly talk find me on http://www.psyced.org --=-=-=--