Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread ng0
ng0  writes:

> Looks good to me, just the one typo which can be fixed before
> applying. I will build a vm with this later to verify that it
> works, but in theory it should just work.

I have problems testing this. Any system configuration I tried so
far silently fails, does not get build, nothing happens not even
an error message.
Even after make clean and bootstraping again etc.
./pre-inst-env guix system vm ~/configgit.scm
For vm-image it is the same.

Do you have a configuration I could test to use it with?
-- 
♥Ⓐ  ng0  | ng0.chaosnet.org



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread ng0
iyzs...@member.fsf.org (宋文武) writes:

> ng0  writes:
>
>>> [...]
>>> +
>>> +@deftp {Data Type} git-daemon-configuration
>>> +Data type representing the configuration of git-demon.
>>
>> Typo, it should be "git-daemon".
>>
>
> OK.
>>> +
>>> +@table @asis
>>> +@item @code{package} (default: @var{git})
>>> +Package object of the Git distributed version control system.
>>> +
>>> +@item @code{export-all?} (default: @var{#f})
>>> +Whether to allow access for all Git repositories, even if they do not
>>> +have the @file{git-daemon-export-ok} file.
>>> +
>>> +@item @code{base-path} (default: @file{/srv/git})
>>
>> Why /srv ? Will the other services (mail, web, etc) use /srv
>> aswell or do they use /var ? I used /var/git because of /var/www
>> and iirc this is also in the upstream documentation.
>>
>
> it's for serving files to public, our nginx-service use '/srv/http' too.

That's okay for me then.

>> [...]
>>
>> Ah, nice. So you basically ended up with what I wanted in the
>> first revision of the git-service.
>> Documentation looks good to me except this one question about
>> location, and the one typo.
>
> Cool, thanks for your work and feedback!
>
>>> [...]
>>> +(define %git-daemon-accounts
>>> +  ;; User account and group for git-daemon.
>>> +  (list (user-group
>>> + (name "git-daemon")
>>> + (system? #t))
>>> +(user-account
>>> + (name "git-daemon")
>>> + (system? #t)
>>> + (group "git-daemon")
>>> + (comment "Git daemon user")
>>> + (home-directory "/var/empty")
>>> + (shell (file-append shadow "/sbin/nologin")
>>
>> Why? I think it should have a home (/var/git (or whereever else))
>> and use the git-shell so that the ssh functionality is enabled,
>> which can be used for minimal servers, so you don't actually need
>> to add the git account.
>> It's also expected that the name is "git" for this reason and not
>> "git-daemon".
>> iirc this affects more software than just git-daemon, every scm
>> which does not ship its own git daemon uses "git-daemon" by git
>> upstream. It's reasonable not to break with expectations (and
>> keep the name short) and give it the name "git", group-name could
>> be anything though.
>>
>
> Um, the git-daemon really has nothing to do with git-shell and ssh
> access.  If I have ssh service running, I can access all the
> repositories the login user can access without git-daemon.  If I want
> annoymous ssh access, I can add a 'git' user using 'git-shell', which
> rely the exist ssh service, so I leave it..  hope it make sense.
>
>
> Thanks!
>

Okay, I can understand this. If there should be the need to
change this, we can always apply it later.

Looks good to me, just the one typo which can be fixed before
applying. I will build a vm with this later to verify that it
works, but in theory it should just work.

-- 
♥Ⓐ  ng0  | ng0.chaosnet.org



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread 宋文武
ng0  writes:

>> [...]
>> +
>> +@deftp {Data Type} git-daemon-configuration
>> +Data type representing the configuration of git-demon.
>
> Typo, it should be "git-daemon".
>

OK.
>> +
>> +@table @asis
>> +@item @code{package} (default: @var{git})
>> +Package object of the Git distributed version control system.
>> +
>> +@item @code{export-all?} (default: @var{#f})
>> +Whether to allow access for all Git repositories, even if they do not
>> +have the @file{git-daemon-export-ok} file.
>> +
>> +@item @code{base-path} (default: @file{/srv/git})
>
> Why /srv ? Will the other services (mail, web, etc) use /srv
> aswell or do they use /var ? I used /var/git because of /var/www
> and iirc this is also in the upstream documentation.
>

it's for serving files to public, our nginx-service use '/srv/http' too.

> [...]
>
> Ah, nice. So you basically ended up with what I wanted in the
> first revision of the git-service.
> Documentation looks good to me except this one question about
> location, and the one typo.

Cool, thanks for your work and feedback!

>> [...]
>> +(define %git-daemon-accounts
>> +  ;; User account and group for git-daemon.
>> +  (list (user-group
>> + (name "git-daemon")
>> + (system? #t))
>> +(user-account
>> + (name "git-daemon")
>> + (system? #t)
>> + (group "git-daemon")
>> + (comment "Git daemon user")
>> + (home-directory "/var/empty")
>> + (shell (file-append shadow "/sbin/nologin")
>
> Why? I think it should have a home (/var/git (or whereever else))
> and use the git-shell so that the ssh functionality is enabled,
> which can be used for minimal servers, so you don't actually need
> to add the git account.
> It's also expected that the name is "git" for this reason and not
> "git-daemon".
> iirc this affects more software than just git-daemon, every scm
> which does not ship its own git daemon uses "git-daemon" by git
> upstream. It's reasonable not to break with expectations (and
> keep the name short) and give it the name "git", group-name could
> be anything though.
>

Um, the git-daemon really has nothing to do with git-shell and ssh
access.  If I have ssh service running, I can access all the
repositories the login user can access without git-daemon.  If I want
annoymous ssh access, I can add a 'git' user using 'git-shell', which
rely the exist ssh service, so I leave it..  hope it make sense.


Thanks!



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread ng0
宋文武  writes:

> From: ng0 
>
> * gnu/services/version-control.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
> * doc/guix.texi (Misellaneous Services)(Version Control): New section.
>
> Co-authored-by: 宋文武 

Thanks! As reply to the mssage you've sent before this one: I'm
okay with the changes. My intention with the services I'm working
on is to learn and improve my knowledge on how service for Guix
are written and work.

> ---
>  doc/guix.texi|  61 +
>  gnu/local.mk |   1 +
>  gnu/services/version-control.scm | 141 
> +++
>  3 files changed, 203 insertions(+)
>  create mode 100644 gnu/services/version-control.scm
>
> diff --git a/doc/guix.texi b/doc/guix.texi
> index 7352ea9..9353a4c 100644
> --- a/doc/guix.texi
> +++ b/doc/guix.texi
> @@ -11673,6 +11673,67 @@ A @code{} object serving the GNU 
> Collaborative International
>  Dictonary of English using the @code{gcide} package.
>  @end defvr
>  
> +@subsubsection Version Control
> +
> +The @code{(gnu services version-control)} module provides the following 
> services:
> +
> +@subsubheading Git daemon service
> +
> +@deffn {Scheme Procedure} git-daemon-service [#:config 
> (git-daemon-configuration)]
> +
> +Return a service that runs @command{git daemon}, a simple TCP server to
> +expose repositiories over the Git protocol for annoymous access.
> +
> +The optional @var{config} argument should be a
> +@code{} object, by default it allows read-only
> +access to exported@footnote{By creating the magic file
> +"git-daemon-export-ok" in the repository directory.} repositories under
> +@file{/srv/git}.
> +
> +@end deffn
> +
> +@deftp {Data Type} git-daemon-configuration
> +Data type representing the configuration of git-demon.

Typo, it should be "git-daemon".

> +
> +@table @asis
> +@item @code{package} (default: @var{git})
> +Package object of the Git distributed version control system.
> +
> +@item @code{export-all?} (default: @var{#f})
> +Whether to allow access for all Git repositories, even if they do not
> +have the @file{git-daemon-export-ok} file.
> +
> +@item @code{base-path} (default: @file{/srv/git})

Why /srv ? Will the other services (mail, web, etc) use /srv
aswell or do they use /var ? I used /var/git because of /var/www
and iirc this is also in the upstream documentation.

> +Whether to remap all the path requests as relative to the given path.
> +If you run git daemon with @var{(base-path "/srv/git")} on example.com,
> +then if you later try to pull @code{git://example.com/hello.git}, git
> +daemon will interpret the path as @code{/srv/git/hello.git}.
> +
> +@item @code{user-path} (default: @var{#f})
> +Whether to allow @code{~user} notation to be used in requests.  When
> +specified with empty string, requests to @code{git://host/~alice/foo} is
> +taken as a request to access @code{foo} repository in the home directory
> +of user @code{alice}.  If @var{(user-path "path")} is specified, the
> +same request is taken as a request to access @code{path/foo} repository
> +in the home directory of user @code{alice}.
> +
> +@item @code{listen} (default: @var{'()})
> +Whether to listen on specific IP addresses or hostnames, defaults to
> +all.
> +
> +@item @code{port} (default: @var{#f})
> +Whether to listen on an alternative port, which defaults to 9418.
> +
> +@item @code{whitelist} (default: @var{'()})
> +If not empty, only allow access to this list of directories.
> +
> +@item @code{extra-options} (default: @var{'()})
> +Extra options will be passed to @code{git daemon}, please run
> +@command{man git-daemon} for more information.

Ah, nice. So you basically ended up with what I wanted in the
first revision of the git-service.
Documentation looks good to me except this one question about
location, and the one typo.

> +
> +@end table
> +@end deftp
> +
>  @node Setuid Programs
>  @subsection Setuid Programs
>  
> diff --git a/gnu/local.mk b/gnu/local.mk
> index 7112451..8769671 100644
> --- a/gnu/local.mk
> +++ b/gnu/local.mk
> @@ -415,6 +415,7 @@ GNU_SYSTEM_MODULES =  \
>%D%/services/sddm.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 000..65bdefb
> --- /dev/null
> +++ b/gnu/services/version-control.scm
> @@ -0,0 +1,141 @@
> +;;; GNU Guix --- Functional package management for GNU
> +;;; Copyright © 2016 ng0 
> +;;; Copyright © 2016 Sou Bunnbu 
> +;;;
> +;;; This file is part of GNU Guix.
> +;;;
> +;;; GNU Guix is free software; you can redistribute it and/or modify it
> +;;; u

Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread 宋文武
Mathieu Lirzin  writes:

> Mathieu Lirzin  writes:
>
>> 宋文武  writes:
>>
>>> From: ng0 
>>>
>>> * gnu/services/version-control.scm: New file.
>>> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
>>> * doc/guix.texi (Misellaneous Services)(Version Control): New section.
>>
>> but I find this notation confusing, since "Version Control" belongs to
>   ^^^
> Please ignore this "but" that shouldn't be here.

Thanks!  I'll change it to '[Version Control]'.



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread Mathieu Lirzin
Mathieu Lirzin  writes:

> 宋文武  writes:
>
>> From: ng0 
>>
>> * gnu/services/version-control.scm: New file.
>> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
>> * doc/guix.texi (Misellaneous Services)(Version Control): New section.
>
> but I find this notation confusing, since "Version Control" belongs to
  ^^^
Please ignore this "but" that shouldn't be here.

-- 
Mathieu Lirzin



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread Mathieu Lirzin
Hello,

宋文武  writes:

> From: ng0 
>
> * gnu/services/version-control.scm: New file.
> * gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
> * doc/guix.texi (Misellaneous Services)(Version Control): New section.

but I find this notation confusing, since "Version Control" belongs to
"Miscellaneous Services".  @node identifiers are unique, so it is
reasonable to refers to them with '()', and use '<>' for their parts as
suggested by GCS:

  
https://www.gnu.org/prep/standards/html_node/Indicating-the-Part-Changed.html#Indicating-the-Part-Changed

Thanks.

-- 
Mathieu Lirzin



Re: [PATCH] gnu: services: Add git-service.

2016-11-20 Thread 宋文武
ng0  writes:

> * gnu/services/version-control.scm: New file, create it.
> (git-service): New Procedures.
> (git-service-type): New variable.
> * doc/guix.texi (Services)(Version Control): New section.

Hi, I make and send a new patch based on yours, which rename
'git-service' to 'git-daemon-service', and put most documentation to the
'git-daemon-configuration' part.

I tested it with the default configuration and 'user-path', it works
fine!  I'd like it to deprecated yours, what do you think?

Thanks!



[PATCH] gnu: services: Add git-service.

2016-11-20 Thread 宋文武
From: ng0 

* gnu/services/version-control.scm: New file.
* gnu/local.mk (GNU_SYSTEM_MODULES): Add it.
* doc/guix.texi (Misellaneous Services)(Version Control): New section.

Co-authored-by: 宋文武 
---
 doc/guix.texi|  61 +
 gnu/local.mk |   1 +
 gnu/services/version-control.scm | 141 +++
 3 files changed, 203 insertions(+)
 create mode 100644 gnu/services/version-control.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 7352ea9..9353a4c 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -11673,6 +11673,67 @@ A @code{} object serving the GNU 
Collaborative International
 Dictonary of English using the @code{gcide} package.
 @end defvr
 
+@subsubsection Version Control
+
+The @code{(gnu services version-control)} module provides the following 
services:
+
+@subsubheading Git daemon service
+
+@deffn {Scheme Procedure} git-daemon-service [#:config 
(git-daemon-configuration)]
+
+Return a service that runs @command{git daemon}, a simple TCP server to
+expose repositiories over the Git protocol for annoymous access.
+
+The optional @var{config} argument should be a
+@code{} object, by default it allows read-only
+access to exported@footnote{By creating the magic file
+"git-daemon-export-ok" in the repository directory.} repositories under
+@file{/srv/git}.
+
+@end deffn
+
+@deftp {Data Type} git-daemon-configuration
+Data type representing the configuration of git-demon.
+
+@table @asis
+@item @code{package} (default: @var{git})
+Package object of the Git distributed version control system.
+
+@item @code{export-all?} (default: @var{#f})
+Whether to allow access for all Git repositories, even if they do not
+have the @file{git-daemon-export-ok} file.
+
+@item @code{base-path} (default: @file{/srv/git})
+Whether to remap all the path requests as relative to the given path.
+If you run git daemon with @var{(base-path "/srv/git")} on example.com,
+then if you later try to pull @code{git://example.com/hello.git}, git
+daemon will interpret the path as @code{/srv/git/hello.git}.
+
+@item @code{user-path} (default: @var{#f})
+Whether to allow @code{~user} notation to be used in requests.  When
+specified with empty string, requests to @code{git://host/~alice/foo} is
+taken as a request to access @code{foo} repository in the home directory
+of user @code{alice}.  If @var{(user-path "path")} is specified, the
+same request is taken as a request to access @code{path/foo} repository
+in the home directory of user @code{alice}.
+
+@item @code{listen} (default: @var{'()})
+Whether to listen on specific IP addresses or hostnames, defaults to
+all.
+
+@item @code{port} (default: @var{#f})
+Whether to listen on an alternative port, which defaults to 9418.
+
+@item @code{whitelist} (default: @var{'()})
+If not empty, only allow access to this list of directories.
+
+@item @code{extra-options} (default: @var{'()})
+Extra options will be passed to @code{git daemon}, please run
+@command{man git-daemon} for more information.
+
+@end table
+@end deftp
+
 @node Setuid Programs
 @subsection Setuid Programs
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 7112451..8769671 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -415,6 +415,7 @@ GNU_SYSTEM_MODULES =\
   %D%/services/sddm.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 000..65bdefb
--- /dev/null
+++ b/gnu/services/version-control.scm
@@ -0,0 +1,141 @@
+;;; GNU Guix --- Functional package management for GNU
+;;; Copyright © 2016 ng0 
+;;; Copyright © 2016 Sou Bunnbu 
+;;;
+;;; 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 (

[PATCH] gnu: services: Add git-service.

2016-11-19 Thread ng0
* gnu/services/version-control.scm: New file, create it.
(git-service): New Procedures.
(git-service-type): New variable.
* doc/guix.texi (Services)(Version Control): New section.
---
 doc/guix.texi|  38 -
 gnu/local.mk |   1 +
 gnu/services/version-control.scm | 162 +++
 3 files changed, 200 insertions(+), 1 deletion(-)
 create mode 100644 gnu/services/version-control.scm

diff --git a/doc/guix.texi b/doc/guix.texi
index 7352ea9..fe53d08 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -7795,6 +7795,7 @@ declaration.
 * Web Services::Web servers.
 * Network File System:: NFS related services.
 * Miscellaneous Services::  Other services.
+* Version Control:: Git and others.
 @end menu
 
 @node Base Services
@@ -11586,7 +11587,6 @@ If it is @code{#f} then the daemon will use the host's 
fully qualified domain na
 @node Miscellaneous Services
 @subsubsection Miscellaneous Services
 
-
 @cindex lirc
 @subsubheading Lirc Service
 
@@ -11673,6 +11673,42 @@ A @code{} object serving the GNU 
Collaborative International
 Dictonary of English using the @code{gcide} package.
 @end defvr
 
+@node Version Control
+@subsubsection Version Control
+
+The @code{(gnu services version-control)} module provides the following 
services:
+
+@deffn {Scheme Procedure} git-service [#:git @var{git}] @
+   [#:base-directory "/var/git/repositories"] @
+   [#:user-directory? #f ""] [#:port 9418] @
+   [#:directory? #f ""] [#:max-connections 32] @
+   [#:pid-file? #t "/var/run/git-daemon.pid"]
+
+Return a service to run the @uref{https://git-scm.com, Git} daemon, a really 
simple
+TCP Git service which exposes local repositories for anonymous remote access.
+
+The git daemon runs as the @code{git} unprivileged user.  It is started with
+the fixed parameters @code{--syslog}, @code{--reuseaddr} and
+@code{"--no-informative-errors"}.
+You can pass the parameter @var{base-directory}, which remaps all the directory
+requests as relative to the given directory.  If you run git-service with
+@var{base-directory "/var/git/repositories"} on example.com, then if you later 
try
+to pull @code{git://example.com/hello.git}, git-service will interpret the 
directory
+as @code{/var/git/repositories/hello.git}.
+@var{max-connections} sets the maximum number of concurrent clients, it 
defaults to 32.
+Set it to 0 for no limit.
+@var{user-directory} allows allows ~user notation to be used in requests. When
+specified with no parameter, requests to @code{git://host/~alice/foo} is taken 
as a
+request to access @code{foo} repository in the home directory of user 
@code{alice}.
+If @var{user-directory "path"} is specified, the same request is taken as a 
request
+to access @code{path/foo} repository in the home directory of user 
@code{alice}.
+The parameter @var{directory "foo"} adds the directory "foo" and its 
subdirectories
+to the whitelist of allowed directories.
+Furthermore git-service takes the parameter @var{port}, which defaults to 9418.
+Run @command{man git daemon} for information about the options.
+
+@end deffn
+
 @node Setuid Programs
 @subsection Setuid Programs
 
diff --git a/gnu/local.mk b/gnu/local.mk
index 7112451..8769671 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -415,6 +415,7 @@ GNU_SYSTEM_MODULES =\
   %D%/services/sddm.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 000..8fa22a1
--- /dev/null
+++ b/gnu/services/version-control.scm
@@ -0,0 +1,162 @@
+;;; 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