miércoles, 12 de octubre de 2016

Instalación de Servidor Git usando el Código Fuente




En esta oportunidad vamos a realizar la instalación del sistema controlador de versiones distribuidas y no lineal Git, sobre el sistema operativo Debian GNU/Linux Jessie. Como siempre hemos, asumido una instalación básica en el sistema operativo que incluye el meta-paquete build-essential.


Prerrequisitos

Para iniciar con el proceso de instalación necesitamos resolver e instalar las dependencias de paquetes necesarias:
  • libssl-dev: este paquete es parte de la implementación del proyecto OpenSSL que contiene bibliotecas de desarrollo, archivos de cabecera y páginas del manual para libssl y libcrypto que permiten la comunicación segura a través de Internet.
  • libcurl4-gnutls-dev: esta librería contiene los archivos que permiten construir programas del lado del cliente que nos proporciona de forma fácil un método para la transferencia vía URL soportando diversos protocolos como: DICT, FILE, FTP, FTPS, GOPHER, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMTP, SMTPS, TELNET y TFTP.
  • libexpat1-dev: este paquete contiene el archivo de cabecera y las bibliotecas de desarrollo de una librería en lenguaje C que trabaja orientada a flujos para analizar una estructura XML.
  • zlib1g-dev: es una biblioteca que proporciona los archivos de desarrollo para implementar el método de compresión usado en gzip y PKZIP.
  • gettext: es una herramienta para que las personas que realicen desarrollos o mantenimiento sobre otros paquetes puedan internacionalizarlos.
  • asciidoc: es un formato de documento de texto para escribir artículos, libros, manuales y páginas de manuales para sistemas tipo UNIX.
  • xmlto: es una interfaz de una herramienta XSL que permite describir cómo la información contenida en un documento XML cualquiera debe ser transformada o formateada para su presentación en otro medio. Soporta la conversión de XML a DVI, XSL-FO, HTML y XHTML, epub, página de manual para entornos UNIX, PDF, PostScript y texto sin formato. También soporta la conversión de XSL-FO a DVI, PDF y PostScript.
  • docbook2x: esta utilidad nos permite convertir documentos XML en el formato de documentación oficial del proyecto GNU (TeXinfo) o en páginas del manual en línea, disponible principalmente en sitemas Unix (man pages).
# apt-get  install  libssl-dev  libcurl4-gnutls-dev  libexpat1-dev  gettext zlib1g-dev  asciidoc
    xmlto  docbook2x


Crear el usuario del sistema operativo

Vamos a crear el usuario que gestionará todas las tareas del controlador de versiones. Le colocaremos como nombre 'git', le asignaremos su respectiva clave de acceso y 'bash' como su shell por defecto, su directorio base será '/home/git' y para finalizar le colocaremos como nombre completo de usuario la cadena 'Git User'.
#useradd  -m  -p  s3cur1ty  -s  /bin/bash  -c  'Git User'  git


Compilación e instalación

Comencemos bajando el código fuente desde su repositorio en github. Veremos varias versiones del programa y bajaremos el release que más nos guste en su formato .tar.gz. Copiamos la dirección del enlace y lo descargamos en la sesión del usuario git (/home/git).
$ wget  https://github.com/git/git/archive/v2.10.1.tar.gz
Ahora que hemos descargado el archivo con los archivos fuentes, vamos a descomprimirlo y a entrar en la carpeta que resulta después de la acción como se indica a continuación:
$ tar  -zxvf  git-2.10.1.tar.gz
$ cd  git-2.10.1
Podemos listar todos los archivos contenidos en esta carpeta para ver a qué nos enfrentamos, luego como root generamos el archivo de configuración y lo ejecutamos pasándole como parámetro la ruta destino (hay que mencionar que se copiarán los archivos en el directorio bin dentro de la ruta prefix).
# make  configure
# ./configure  --prefix=/usr
# make  all  doc  info
Una vez realizada la configuración procedemos a la instalación con los mismos privilegios de las instrucciones anteriores.
# make  install  install-doc  install-html  install-info
Después de esto podemos validar que la instalación haya resultado correcta mediante la siguiente instrucción:
# git  --version
git  version  2.10.1


Configuración de Git

Con la instalación hecha procedemos a realizar varias configuraciones en la sesión del usuario git. Primero comencemos creando la carpeta y el archivo que almacenarán las claves públicas de los usuarios, también procederemos a cambiarle la permisología al archivo.
$ mkdir  .ssh  &&  chmod  700  .ssh
$ touch  .ssh/authorized_keys
$ chmod  600  .ssh/authorized_keys
Otras de las modificaciones que debemos realizar es crear el directorio donde quedarán todos los repositorios de los proyectos a los cuales se les hará seguimiento en el controlador de versiones.
$ mkdir  repos
Con nuestros directorios ya creados solo resta colocar la información referente al usuario principal de git. Para realizar esta tarea utilizaremos el comando git config con el cual asignaremos el nombre del usuario, el correo electrónico y el editor de texto por defecto. Esta configuración mínima también es recomendable realizarla en los distintos clientes.
$ git  config  --global  user.name  "Git User"
$ git  config  --global  user.email  "gituser@git-server.com"
$ git  config  --global  core.editor  "vim"
Si queremos validar que la configuración del usuario se haya realizado correctamente podemos listar las opciones como se muestra a continuación:
$ git  config  --list
user.name=Git User
user.email=gituser@git-server.com
core.editor=vim
Hasta este punto el procedimiento es utilizado para la instalación tanto en máquinas servidoras como en máquinas clientes. De aquí en adelante las configuraciones señaladas serán unicamente para los servidores.


Gestión de claves públicas

Todos los usuarios (programadores) que utilicen el sistema deberán generar un archivo con su clave pública para que el administrador de git los agregue. La generación del archivo es muy sencilla, únicamente ejecutamos la siguiente instrucción en la máquina y sesión del cliente.
$ ssh-keygen  -t  rsa
Podemos escoger entre los sistemas criptográficos rsa y dsa, pero particularmente prefiero el primer formato. La ejecución del comando anterior nos pedirá ciertos valores como la ruta donde dejará el archivo resultante y una contraseña, por lo general suelo colocarle una clave pero no es un requerimiento obligatorio. Esta clave será solicitada cuando trabajemos con git (por ejemplo al realizar la clonación de algún proyecto).

El archivo que necesitamos es el que tiene como extensión '.pub' y se lo hacemos llegar al administrador de git para que lo agregue en el controlador de versiones.

Para agregar una nueva clave pública en el servidor Git simplemente anexamos el contenido del archivo '.pub' del usuario dentro de /home/git/.ssh/authorized_keys como se muestra a continuación.
$ cat  ~/id_rsa.pub  >>  ~/.ssh/authorized_keys


Configuración de GitWeb

Git trae un script CGI escrito en Perl denominado GitWeb que actúa como una interfaz gráfica para detallar la información más relevante de los distintos proyectos que llevamos en el gestor de versiones. Por sus características, esta interfaz puede ejecutarse desde cualquier servidor web con capacidad de ejecutar CGI (Apache, Lighttpd, WEBrick, Nginx entre otros).

Para configurarlo, primero debemos instalar los componentes del servidor web que ejecutará el script. Para ello debemos instalar los siguientes paquetes:
# apt-get  install  apache2  apache2-bin  apache2-data  apache2-utils  liberror-perl  ssl-cert
Creamos un enlace simbólico de la carpeta gitweb en la ruta /var/www usando la siguiente instrucción:
# ln  -s  /usr/share/gitweb  /var/www
Con el script de gitweb apuntando al directorio adecuado pasamos a crear el archivo /etc/gitweb.conf y le agregamos el siguiente contenido:
# path to git projects (.git)
$projectroot = "/home/git/repos";

# 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;

# 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 = ();

# Agregados nuevos
$feature{'blame'}{'default'} = [1];
$feature{'highlight'}{'default'} = [1];
$feature{'pickaxe'}{'default'} = [1];
$feature{'snapshot'}{'default'} = ['zip', 'tgz'];
$feature{'search'}{'default'} = [1];
$feature{'grep'}{'default'} = [1];
$feature{'show-sizes'}{'default'} = [1];
$feature{'avatar'}{'default'} = ['gravatar'];
Creamos el archivo /etc/apache2/conf-available/gitweb.conf y le insertamos las siguientes líneas:
<IfModule  mod_alias.c>
  <IfModule  mod_cgi.c>
    Define  ENABLE_GITWEB
  </IfModule>
  <IfModule  mod_cgid.c>
    Define  ENABLE_GITWEB
  </IfModule>
</IfModule>

<IfDefine  ENABLE_GITWEB>
  Alias  /gitweb  /var/www/gitweb

  <Directory  /var/www/gitweb>
    DirectoryIndex  gitweb.cgi
    Allow  from  all
    AllowOverride  all
    Order  allow,deny
    Options  +FollowSymLinks  +ExecCGI
    <Files  gitweb.cgi>
      SetHandler  cgi-script
    </Files>
    AuthType  Basic
    AuthName  "Git Access"
    Require  valid-user
    AuthUserFile  /etc/apache2/gitweb-htpasswd
    SetEnv  GITWEB_CONFIG  /etc/gitweb.conf
  </Directory>

</IfDefine>
Al configurar gitweb para que solicite usuario/clave al iniciar, es necesario configurar estas credenciales con la instrucción htpasswd (para no salirnos de lo habitual colocaremos admin/admin).
# htpasswd  -mc  /etc/apache2/gitweb-htpasswd  admin
Se ejecutan las siguientes instrucciones para habilitar el CGI, acreditar la configuración y reiniciar el servidor web.
# a2enmod  cgi
# a2enconf  gitweb
# service  apache2  restart
Para comprobar el correcto funcionamiento de GitWeb solo debemos abrir nuestro navegador web y colocar la siguiente dirección:
http://<nombre_maquina_o_direccion_ip>/gitweb


No hay comentarios.:

Publicar un comentario