Nuestro repositorio Git remoto con Gitosis y Debian
Posted: November 5th, 2011 | Author: montes | Filed under: debian | Tags: git gitosis linux mac osx debian remote repository | 1 Comment »Para poder tener copias remotas de nuestros repositorios Git locales tenemos muchas opciones en internet, la más conocida de lejos github , que funciona muy bien para repositorios públicos y no excesivamente grandes, pero si necesitamos tener repositorios privados o de un tamaño considerable, las opciones tipo Github dejan de ser gratis.
Podemos pagar uno de estos servicios, pero si ya tenemos un servidor propio, ¿por qué no aprovecharlo también como repositorio remoto? Aquí es donde entra en juego “Gitosis”, que nos ayuda a mantener repositorios Git remotos en nuestro propio servidor, pudiendo configurar el acceso privado a los repositorios incluso por grupos.
Instalar Gitosis en Debian
Aunque hay varios tutoriales por internet e incluso un paquete en debian para instalar Gitosis, todos los métodos que he visto dan algún problema más o menos grave. Los siguientes pasos son producto de mezclar varios pasos de los descritos en estos tutoriales y de añadir alguno propio para lograr hacer funcionar correctamente Gitosis en un servidor debian.
-
Instalar python-setuptools y descargar Gitosis
-
Instalar Gitosis
-
Generar una llave pública en nuestro ordenador local
-
Instalar nuestra llave pública en el servidor
-
Bonus track: Redmine o cualquier gestor web de Git en el servidor
-
Ya estamos listos, nuestro primer push
En el servidor:
aptitude install python-setuptools
y descargar Gitosis (clonar con Git)
cd /data/temp git clone git://eagain.net/gitosis
(Gitosis también está disponible en github: https://github.com/res0nat0r/gitosis )
Ojo con el parámetro “–home /data/git“, aquí deberéis indicar el home del usuario git, que es donde se almacenarán los repositorios
python setup.py install adduser --system --shell /bin/sh --gecos 'git version control' --group --disabled-password --home /data/git git
Tras instalar Gitosis en el servidor, ahora necesitaremos generar una llave pública en nuestro ordenador de desarrollo (desde donde vayamos a hacer los push)
En Linux o Mac:
ssh-keygen -t rsa
Lo que generará las llaves privada/pública en nuestro directorio de usuario, la que nos interesa, la pública, en: “/home/usuario/.ssh/id_rsa.pub” en Linux o “/Users/usuario/.ssh/id_rsa.pub” en OS X.
De vuelta al servidor y habiendo subido nuestra llave pública (por ftp por ejemplo)
Lo primero instalamos sudo, que en debian no viene instalado por defecto:
aptitude install sudo
Inicializamos Gitosis con nuestro usuario como admin (pasándole la ruta de nuestra llave pública, en este ejemplo estaría en “/tmp/id_rsa.pub”
sudo -H -u git gitosis-init < /tmp/id_rsa.pub
Y para finalizar marcamos “post-update” como ejecutable para todos los usuarios:
sudo chmod 755 /data/git/repositories/gitosis-admin.git/hooks/post-update
Si vamos a usar Redmine o cualquier tipo de gestor o visualizador web de Git, necesitaremos incluir al usuario de apache “www-data” en el grupo de “git” para que sea capaz de leer los repositorios que generemos:
usermod -a -G git www-data
Ya sólo nos queda clonar el repositorio de la configuración de Gitosis para poder ir configurando los permisos para los repositorios que añadamos, desde nuestro ordenador de desarrollo (Linux o Mac) sustituyendo “miservidor.com” por el dominio o ip de vuestro servidor:
git clone git@miservidor.com:gitosis-admin.git
y ahora podemos entrar a ver la configuración de gitosis y añadir algún repositorio, por ejemplo si queremos añadir el repositorio “montes” a nuestro servidor:
cd gitosis-admin vim gitosis.conf
y en “gitosis.conf” añadiremos “montes” como writable:
[gitosis] 3 [group gitosis-admin] 4 writable = gitosis-admin montes 5 members = yo@gmail.com
grabamos y haremos nuestro primer push para actualizar la configuración de gitosis en el servidor remoto:
git commit -a -m "Dar permisos de escritura en el repositorio montes para el grupo gitosis-admin" git push
Con esto hemos dado permisos de escritura en el repositorio “montes” (que aún no existe) a nuestro usuario (yo@gmai.com al que pertenece la llave pública que configuramos en el paso anterior).
Sólo nos queda crear el repositorio en nuestro ordenador de desarrollo (Linux o Mac):
cd .. mkdir montes cd montes git init
añadir nuestro servidor remoto como repositorio remoto:
git remote add origin git@miservidor.com:montes
y hacer nuestro primer push!
git add . git commit -a -m "Primer commit!" git push miservidor master
Listo! ya hemos enviado nuestro primer push a nuestro propio servidor Git remoto!
Fuentes:
http://ymbra.com/es/blog/ramon/gestion-de-repositorios-git-con-gitosis
https://github.com/res0nat0r/gitosis
Nuestro repositorio Git remoto con Gitosis y Debian: http://t.co/4LVLO73o por @mooontes #git