~$ arvados-git-httpd -h
-Usage of arvados-git-httpd:
- -address="0.0.0.0:80": Address to listen on, "host:port".
- -git-command="/usr/bin/git": Path to git executable. Each authenticated request will execute this program with a single argument, "http-backend".
- -repo-root="/path/to/cwd": Path to git repositories.
+[...]
+Usage: arvados-git-httpd [-config path/to/arvados/git-httpd.yml]
+[...]
~$ git http-backend
Status: 500 Internal Server Error
Expires: Fri, 01 Jan 1980 00:00:00 GMT
@@ -259,35 +265,36 @@ fatal: No REQUEST_METHOD from server
h3. Enable arvados-git-httpd
-On Debian-based systems, install runit:
+{% include 'notebox_begin' %}
+
+The arvados-git-httpd package includes configuration files for systemd. If you're using a different init system, you'll need to configure a service to start and stop an @arvados-git-httpd@ process as desired.
+
+{% include 'notebox_end' %}
+
+Edit the cluster config at @/etc/arvados/config.yml@ and set the following values. Replace @uuid_prefix@ with your cluster id.
-~$ sudo apt-get install runit
+Clusters:
+ uuid_prefix:
+ Services:
+ GitHTTP:
+ ExternalURL: https://git.uuid_prefix.your.domain/
+ InternalURLs:
+ "http://localhost:9001": {}
+ Git:
+ GitCommand: /var/lib/arvados/git/gitolite/src/gitolite-shell
+ GitoliteHome: /var/lib/arvados/git
+ Repositories: /var/lib/arvados/git/repositories
-On Red Hat-based systems, "install runit from source":http://smarden.org/runit/install.html or use an alternative daemon supervisor.
+Make sure to include the trailing slash for @Services.GitHTTP.ExternalURL@.
+
+Restart the systemd service to ensure the new configuration is used.
-Configure runit to run arvados-git-httpd, making sure to update the API host to match your site:
-~$ cd /etc/sv
-/etc/sv$ sudo mkdir arvados-git-httpd; cd arvados-git-httpd
-/etc/sv/arvados-git-httpd$ sudo mkdir log
-/etc/sv/arvados-git-httpd$ sudo sh -c 'cat >log/run' <<'EOF'
-#!/bin/sh
-mkdir -p main
-chown git:git main
-exec chpst -u git:git svlogd -tt main
-EOF
-/etc/sv/arvados-git-httpd$ sudo sh -c 'cat >run' <<'EOF'
-#!/bin/sh
-export ARVADOS_API_HOST=uuid_prefix.your.domain
-export GITOLITE_HTTP_HOME=/var/lib/arvados/git
-export PATH="$PATH:/var/lib/arvados/git/bin"
-exec chpst -u git:git arvados-git-httpd -address=:9001 -git-command="$(which git)" -repo-root=/var/lib/arvados/git/repositories 2>&1
-EOF
-/etc/sv/arvados-git-httpd$ sudo chmod +x run log/run
+~$ sudo systemctl restart arvados-git-httpd
@@ -297,6 +304,8 @@ The arvados-git-httpd service will be accessible from anywhere on the internet,
This is best achieved by putting a reverse proxy with SSL support in front of arvados-git-httpd, running on port 443 and passing requests to @arvados-git-httpd@ on port 9001 (or whichever port you used in your run script).
+Add the following configuration to the @http@ section of your Nginx configuration:
+
upstream arvados-git-httpd {
@@ -305,43 +314,72 @@ upstream arvados-git-httpd {
server {
listen [your public IP address]:443 ssl;
server_name git.uuid_prefix.your.domain;
+ proxy_connect_timeout 90s;
+ proxy_read_timeout 300s;
ssl on;
ssl_certificate /YOUR/PATH/TO/cert.pem;
ssl_certificate_key /YOUR/PATH/TO/cert.key;
+ # The server needs to accept potentially large refpacks from push clients.
+ client_max_body_size 50m;
+
location / {
proxy_pass http://arvados-git-httpd;
- proxy_redirect off;
- proxy_connect_timeout 90s;
- proxy_read_timeout 300s;
-
- proxy_set_header X-Forwarded-Proto https;
- proxy_set_header Host $http_host;
- proxy_set_header X-External-Client $external_client;
- proxy_set_header X-Real-IP $remote_addr;
- proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
-h3. Configure the API server to advertise the correct HTTPS URLs
+h2. Restart Nginx
-In your API server's @config/application.yml@ file, add the following entry:
+Restart Nginx to make the Nginx and API server configuration changes take effect.
-git_repo_http_base: https://git.uuid_prefix.your.domain/
+gitserver:~$ sudo nginx -s reload
-Make sure to include the trailing slash.
+h2. Clone Arvados repository
+
+Here we create a repository object which will be used to set up a hosted clone of the arvados repository on this cluster.
-h2. Restart nginx
+
+~$ uuid_prefix=`arv --format=uuid user current | cut -d- -f1`
+~$ echo "Site prefix is '$uuid_prefix'"
+~$ all_users_group_uuid="$uuid_prefix-j7d0g-fffffffffffffff"
+~$ repo_uuid=`arv --format=uuid repository create --repository "{\"owner_uuid\":\"$uuid_prefix-tpzed-000000000000000\", \"name\":\"arvados\"}"`
+~$ echo "Arvados repository uuid is '$repo_uuid'"
+
-Restart nginx to make the nginx and API server configuration changes take effect.
+Create a link object to make the repository object readable by the "All users" group, and therefore by every active user. This makes it possible for users to run the bundled Crunch scripts by specifying @"script_version":"master","repository":"arvados"@ rather than pulling the Arvados source tree into their own repositories.
-gitserver:~$ sudo nginx -s reload
+~$ read -rd $'\000' newlink <<EOF; arv link create --link "$newlink"
+{
+ "tail_uuid":"$all_users_group_uuid",
+ "head_uuid":"$repo_uuid",
+ "link_class":"permission",
+ "name":"can_read"
+}
+EOF
+
+
+In a couple of minutes, your arvados-git-sync cron job will create an empty repository on your git server. Seed it with the real arvados repository. If your git credential helpers were configured correctly when you "set up your shell server":install-shell-server.html, the "git push" command will use your API token instead of prompting you for a username and password.
+
+
+~$ cd /tmp
+/tmp$ git clone --bare https://github.com/curoverse/arvados.git
+/tmp git --git-dir arvados.git push https://git.uuid_prefix.your.domain/arvados.git '*:*'
+
+
+
+If you did not set up a HTTPS service, you can push to git@git.uuid_prefix.your.domain:arvados.git
using your SSH key, or by logging in to your git server and using sudo.
+
+
+gitserver:~$ sudo -u git -i bash
+git@gitserver:~$ git clone --bare https://github.com/curoverse/arvados.git /tmp/arvados.git
+git@gitserver:~$ cd /tmp/arvados.git
+git@gitserver:/tmp/arvados.git$ gitolite push /var/lib/arvados/git/repositories/your_arvados_repo_uuid.git '*:*'