//
you're reading...
System Administration, Ubuntu

Installare un server Git su Ubuntu 14.04LTS

In questo articolo descriverò come installare un server Git su una distribuzione Linux Ubuntu 14.04LTS Server, in modo che diventi un repository Git central, con autenticazione digest. Buona lettura.

Prerequisiti

Come prerequisito, do per scontato che abbiate installato la distribuzione Linux Ubuntu 14.04LTS Server e abbiate configurato uno username administrator come utente locale della macchina, nonchè abilitato all’esecuzione di comandi tramite sudo (in pratica, l’amministratore della macchina).

Dovete poi creare un utente dedicato locale alla macchina (che chiameremo git), tramite i comandi seguenti:

administrator@ubuntu:~$ sudo mkdir /srv/git/
administrator@ubuntu:~$ sudo adduser --home /srv/git/ --disabled-password git

che produrrà un output simile al seguente:

Adding user `git' ...
Adding new group `git' (1001) ...
Adding new user `git' (1001) with group `git' ...
Creating home directory `/srv/git/' ...
Copying files from `/etc/skel' ...
Changing the user information for git
Enter the new value, or press ENTER for the default
        Full Name []:
        Room Number []:
        Work Phone []:
        Home Phone []:
        Other []:
Is the information correct? [Y/n]

dove all’ultima domanda risponderemo con Y, in modo da dare l’OK alla creazione dell’utente. Nella creazione dell’utente, abbiamo specificato l’opzione –-disabled-password poiché gitolite ha necessità di usare solo una chiave SSH per gestire l’accesso a Git.

Installazione Git

Niente di più facile; eseguiamo il comando seguente:

administrator@ubuntu:~$ sudo apt-get install git apache2 gitweb

ed il software necessario per eseguire Git verrà installato.

Configurazione Git per accesso via HTTP

Per controllare gli accessi al repository, è sempre bene utilizzare un frontend che garantisca il corretto filtro sia per l’autenticazione che per le eventuali autorizzazioni. Configuriamo quindi dapprima l’Apache Web Server per l’occasione. Dobbiamo aggiungere i seguenti moduli, che non sono solitamente inclusi:

administrator@ubuntu:~$ sudo apt-get install libapache2-mod-fcgid apache2-utils

e abilitarli con il comando seguente:

administrator@ubuntu:~$ sudo a2enmod env alias fcgid auth_digest
administrator@ubuntu:~$ sudo service apache2 restart

Configuriamo ora il sito web per Git. Creiamo un nuovo file /etc/apache2/sites-available/gitweb.conf, con il seguente contenuto:


<VirtualHost *:80>

    ServerName git.example.com
    DocumentRoot /usr/share/gitweb

    ErrorLog ${APACHE_LOG_DIR}/git_error.log
    CustomLog ${APACHE_LOG_DIR}/git_access.log combined

    <Directory /usr/share/gitweb>
        Options +FollowSymLinks +ExecCGI
        AddHandler cgi-script .cgi
        DirectoryIndex gitweb.cgi
    </Directory>

    <Location />
        AuthType Digest
        AuthName "Shared Git Repository"
        AuthUserFile /srv/git/.htpasswd
        Require valid-user
    </Location>

    ScriptAliasMatch \
        "(?x)^/(.*/(HEAD | \
        info/refs | \
        objects/(info/[^/]+ | \
        [0-9a-f]{2}/[0-9a-f]{38} | \
        pack/pack-[0-9a-f]{40}\.(pack|idx)) | \
        git-(upload|receive)-pack))$" \
        /usr/lib/git-core/git-http-backend/$1

    SetEnv GIT_PROJECT_ROOT /srv/git/repositories
    SetEnv GIT_HTTP_EXPORT_ALL
    SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER

</VirtualHost>

A questo punto avremo a disposizione sia l’accesso a gitweb, che l’accesso via protocollo Smart HTTP ai repository Git. Tuttavia, avendo abilitata l’autenticazione Digest, dobbiamo creare almeno un utente che possa accedervi. Per ora, definiamo un utente di test, con il comando seguente:

administrator@ubuntu:~$ sudo htdigest -c /srv/git/.htpasswd "Shared Git Repository" administrator

Che produrrà un output simile al seguente, dove verrà chiesto l’inserimento di una password per l’utenza appena definite:

Adding user administrator in realm Shared Git Repository
New password:
Re-type new password:

Prepariamo ora un esempio di repository. Diventiamo l’utente git:

administrator@ubuntu:~$ sudo su - git

e diamo i seguenti comandi:

administrator@ubuntu:~$ mkdir -p /srv/git/repositories
administrator@ubuntu:~$ cd /srv/git/repositories
administrator@ubuntu:~$ git init --bare --shared myproject.git

Definiamo poi i diritti corretti sul filesystem, affinché l’utente con cui gira il processo Apache possa leggere e scrivere correttamente. Per farlo, diamo i seguenti comandi:

administrator@ubuntu:~$ sudo chown -R git.www-data /srv/git

Configuriamo ora gitweb. Editiamo il file /etc/gitweb.conf:

administrator@ubuntu:~$ sudo vi /etc/gitweb.conf

come segue:

# path to git projects (.git)
$projectroot = "/srv/git/repositories/";

# directory to use for temp files
$git_temp = "/tmp";

# target of the home link on top of all pages
#$home_link = $my_uri || "/";

# html text to include at home page
#$home_text = "indextext.html";

# file with project list; by default, simply scan the projectroot dir.
#$projects_list = $projectroot;
#$projects_list = "/srv/git/projects.list";

# stylesheet to use
#@stylesheets = ("static/gitweb.css");

# javascript code for gitweb
#$javascript = "static/gitweb.js";

# logo to use
#$logo = "static/git-logo.png";

# the 'favicon'
#$favicon = "static/git-favicon.png";

# git-diff-tree(1) options to use for generated patches
#@diff_opts = ("-M");
@diff_opts = ();

Abilitiamo ora il sito con il comando:

administrator@ubuntu:~$ sudo a2ensite gitweb

Che produrrà il seguente output:

Enabling site gitweb.
To activate the new configuration, you need to run:
  service apache2 reload

Facciamo ripartire Apache con il nuovo sito ora, dando il comando di reload:

administrator@ubuntu:~$ sudo service apache2 reload

Test del nuovo repository Git

Come prerequisito, ipotizzo siate su una workstation Linux sulla quale operate a riga di comando. Diciamo che esiste l’utente jhon che riesce a connettersi al servizio appena avviato. Eseguiamo un clone del repository via HTTP:

jhon@workstation:~$ git clone http://git.example.com/myproject.git
jhon@workstation:~$ Cloning into 'myproject'...
jhon@workstation:~$ Username for 'http://git.example.com': administrator
jhon@workstation:~$ Password for 'http://administrator@git.example.com':
jhon@workstation:~$ warning: You appear to have cloned an empty repository.

Creiamo un nuovo file e lo aggiungiamo al repository locale:

jhon@workstation:~$ cd myproject/
jhon@workstation:~$ echo "some text" > somefile.txt
jhon@workstation:~$ git add .

Eseguiamo poi il commit del file:

jhon@workstation:~$ git commit -m "initial commit"
 [master (root-commit) 3a0e708] initial commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 somefile.txt

Ed infine il push del file:

jhon@workstation:~$ git push origin master
 Username for 'http://git.example.com': administrator
 Password for 'http://administrator@git.example.com':
 Counting objects: 3, done.
 Writing objects: 100% (3/3), 225 bytes, done.
 Total 3 (delta 0), reused 0 (delta 0)
 To http://git.example.com/myproject.git
 * [new branch] master -> master

Installazione Gitolite (opzionale)

Per amministrare i repository git, installiamo un componente che si chiama Gitolite. Per installare gitolite, diamo il seguente commando:

administrator@ubuntu:~$ sudo apt-get install gitolite

che produrrà un output simile al seguente:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
  git-daemon-run gitweb
The following NEW packages will be installed:
  gitolite
0 upgraded, 1 newly installed, 0 to remove and 3 not upgraded.
Need to get 0 B/246 kB of archives.
After this operation, 552 kB of additional disk space will be used.
Preconfiguring packages ...
Selecting previously unselected package gitolite.
(Reading database ... 56384 files and directories currently installed.)
Preparing to unpack .../gitolite_2.3-1_all.deb ...
Unpacking gitolite (2.3-1) ...
Setting up gitolite (2.3-1) ...
No adminkey given - not setting up gitolite.

Passiamo ora alla configurazione di Gitolite. La prima cosa da fare è generare una coppia di chiavi SSH pubblica/privata. Se ce l’avete già, tanto meglio! Altrimenti, eseguite il seguente commando:

administrator@ubuntu:~$ ssh-keygen

Vi verrà chiesto dove volete che venga depositata la chiave. Suggerisco di lasciare i valori preimpostati. Ulteriore domanda è l’immissione di una password a vostra scelta per proteggere la chiave privata… suggerisco di compilare il campo… Non si sa mai! L’output, quindi, sarà qualcosa del genere:

Generating public/private rsa key pair.
Enter file in which to save the key (/home/administrator/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/administrator/.ssh/id_rsa.
Your public key has been saved in /home/administrator/.ssh/id_rsa.pub.
The key fingerprint is:
00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 administrator@git
The key's randomart image is:
+--[ RSA 2048]----+
|      .          |
|       * . . . . |
|      . O . * + .|
|       o = o = o |
|        S +   .  |
|       o o   o   |
|        .   . .  |
|             .   |
|        E....    |
+-----------------+

Appena terminata la generazione delle chiavi, avrete a disposizione due file: id_rsa (che è la vostra chiave private… non condividetela, non datela a nessuno!) e id_rsa.pub (che è la chiave pubblica). Copiate la chiave pubblica (ossia il file id_rsa.pub) nella cartella /tmp/Administrator.pub, tramite il commando:

administrator@ubuntu:~$ cp /home/administrator/.ssh/id_rsa.pub /tmp/Administrator.pub

Dobbiamo ora diventare l’utenza git e eseguire una serie di comandi:

administrator@ubuntu:~$ sudo su - git
git@ubuntu:~$ gl-setup /tmp/Administrator.pub

Durante il setup di Gitolite vi verrà chiesto di verificare il file di configurazione. Va quindi sostituita la linea:


$REPO_UMASK = 0077;

con la seguente:


$REPO_UMASK = 0022;

A conclusione della modifica, avremo un output simile al seguente:

The default settings in the rc file (/srv/git/.gitolite.rc) are fine for most
people but if you wish to make any changes, you can do so now.

hit enter...
 
Select an editor.  To change later, run 'select-editor'.
  1. /bin/ed
  2. /bin/nano        <---- easiest
  3. /usr/bin/vim.basic
  4. /usr/bin/vim.tiny
 
Choose 1-4 [2]:
creating gitolite-admin...
Initialized empty Git repository in /srv/git/repositories/gitolite-admin.git/
creating testing...
Initialized empty Git repository in /srv/git/repositories/testing.git/
[master (root-commit) c779e62] start
 2 files changed, 6 insertions(+)
 create mode 100644 conf/gitolite.conf
 create mode 100644 keydir/Administrator.pub

Possiamo ora eseguire la configurazione di un repository. Per fare questo, da utente Administrator, lanciare il seguente comando:

administrator@ubuntu:~$ mkdir git
administrator@ubuntu:~$ cd git
administrator@ubuntu:~/git$ git clone git@localhost:gitolite-admin.git

che produrrà un output simile al seguente:

Cloning into 'gitolite-admin'...
The authenticity of host 'git.example.com (192.168.0.1)' can't be established.
ECDSA key fingerprint is 00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'git.example.com,192.168.0.1' (ECDSA) to the list of known hosts.
Enter passphrase for key '/home/administrator/.ssh/id_rsa':
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
Checking connectivity... done.

A questo punto potete usare gitolite per gestire e amministrare i vostri repository Git! Vi rimando alla documentazione del sito ufficiale per le istruzioni: Hosting Git Repositories


Riferimenti

Articolo “How to setup a GIT server with gitolite and gitweb”, tratto da:
How to setup a GIT server with gitolite and gitweb

Articolo “Setting up a git server with xinetd, gitolite and cgit (the right way)”, tratto da:
Setting up a git server with xinetd, gitolite and cgit (the right way)

Thread “Install git/gitolite/gitweb on Ubuntu 14.04”, tratto da:
Install git/gitolite/gitweb on Ubuntu 14.04

Articolo “Setup Git, Gitweb with git-http-backend / smart http on ubuntu 12.04”, tratto da:
Setup Git, Gitweb with git-http-backend / smart http on ubuntu 12.04

Annunci

Discussione

Non c'è ancora nessun commento.

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

w

Connessione a %s...

Archivio

Annunci
%d blogger hanno fatto clic su Mi Piace per questo: