Archivo de la categoría: leopard

Instalando gitosis en Leopard

Tras investigar sobre sitios de hosting de repositorios he llegado a la conclusión de que lo mejor será que me aloje los repositorios yo mismo porque es gratis y así no tengo limitaciones. La cuestión entonces es cómo configurar mi iMac para que me facilite la administración de los repositorios Git con Leopard.

Para ello, existe una herramienta un tanto peculiar llamada gitosis que permite alojar los repositorios bajo una cuenta especial de usuario, controlando el acceso con claves SSH y gestionándolos únicamente mediante git (Y ahí la peculiaridad del asunto)

El procedimiento de instalación se ha extraído del blog en inglés de la compañía Argument from design por dos razones. La primera, porque así habrá a partir de ahora una guía en español y segundo, porque así no tendré que recordar la URL si tengo que volver a hacer esto.

Lo cierto es que es una solución poco amigable, al más puro estilo hacker, pero para eso somos programadores! Así que a abrir el terminal!

1. Instalar gitosis en el servidor

Lo primero será descargar el código de gitosis y ejecutar el script de instalación en la máquina que usaremos como servidor

server$ git clone git://eagain.net/gitosis.git
server$ cd gitosis
server$ sudo python setup.py install

2. Crear un usuario y grupo para gitosis

Ahora creamos un usuario y un grupo para git al estilo hacker. Para ello primero buscamos un GID y un UID que no se estén usando aún en el sistema listando los que se están usando con los siguientes comandos:

server$ sudo dscl . list users uid
server$ sudo dscl . list groups gid

Con un UID y GID seleccionados (Yo elegí 401 para ambos, pero no pasa nada si son distintos o elegís otros) procedemos primero a crear el grupo git:

server$ sudo dscl . create groups/git
server$ sudo dscl . create groups/git gid 401

Y creamos el usuario git con su directorio home:

server$ sudo dscl . create users/git
server$ sudo dscl . create users/git uid 401
server$ sudo dscl . create users/git NFSHomeDirectory /Users/git
server$ sudo dscl . create users/git gid 401
server$ sudo dscl . create users/git UserShell /bin/bash
server$ sudo dscl . create users/git Password '*'
server$ sudo mkdir /Users/git
server$ sudo chown git /Users/git
server$ sudo chgrp git /Users/git

3. Creamos una clave SSH para el cliente

Creamos un par de claves pública y privada para identificar nuestro cliente ejecutando el siguiente comando:

client$ ssh-keygen -t rsa

Hecho esto, en el directorio ~/.ssh/ se habrán generado los ficheros id_rsa e id_rsa.pub y sólo quedará copiar la clave pública al servidor para que pueda identificarnos. Esto se puede hacer de cualquier forma que se desee, yo propongo como siempre la forma menos amigable posible:

client$ scp ~/.ssh/id_rsa.pub tuservidor.com:/tmp/my_key.pub

4. Configurando gitosis en el directorio home del usuario git

Ya tenemos todos los ingredientes que necesitamos y simplemente queda configurar gitosis para trabajar desde la carpeta home del usuario git. Lo inicializamos con la clave pública de nuestro ordenador cliente para poder administrarlo desde allí:

sudo -H -u git gitosis-init < /tmp/my_key.pub

Y configuramos la variable de entorno PATH del usuario con las rutas que contienen tanto a git como a gitosis:

client$ sudo -u git echo "export PATH=$PATH" > ~/.bashrc
client$ sudo -u git echo 'export PATH=$(git --exec-path):$PATH' >> ~/.bashrc

5. Clonar el repositorio de gitosis a la máquina cliente

Desde la máquina cliente, se debe clonar el repositorio de administración de gitosis, que será la forma en la que administraremos nuestros repositorios

git clone git@tuservidor.com:gitosis-admin.git

Hecho esto, gitosis ya está funcionando en el sistema y podemos empezar a administrarlo modificando el fichero gitosis.conf que se encuentra en este repositorio. En los próximos días colgaré un post sobre como configurar nuevos repositorios y administrarlos, pero por ahora podéis ir adelantando con el post de scie.nti.st que extiende esta guía a otros sistemas UNIX

Anuncios

MySQL y Rails en Leopard

Como estoy de vacaciones, me ha dado por investigar la plataforma Ruby on Rails, así que lo primero que se me ha ocurrido ha sido actualizar rails a su última versión, que en este momento está por la versión 2.3.2. Para hacer esto simplemente hay que ir a un terminal y escribir:

$ sudo gem update --system
$ sudo gem install rails
$ sudo gem update rake

Tras un rato de espera podemos comprobar si la actualización ha tenido éxito ejecutando

$ rails -v
Rails 2.3.2

Hasta ahí bien, hasta que creamos una aplicación e intentamos configurarla para trabajar con MySQL. En esta versión, Rails ya no integra por defecto el driver de conexión con MySQL, habiéndolo sustituido por una base de datos SQLite. Por tanto debe instalarse mediante gem.
Sin embargo, cuando se intenta instalar, ocurre lo siguiente:

$ sudo gem install mysql
Building native extensions. This could take a while...
ERROR: Error installing mysql:
ERROR: Failed to build gem native extension.

...Bla, bla, bla..

El error, tras investigarlo un poco se produce porque Leopard intenta compilar el driver como código universal y MySQL no se distribuye para Leopard de esta manera, sino como un binario para i386 o x64. Por tanto debe compilarse este módulo para la arquitectura que tengamos, que debe coincidir con la del binario de MySQL. Como encima yo tenía MySQL versión de 64 bits he tenido que destruirlo (Como no existe script de desinstalación ni similar, ha sido toda una destrucción en toda regla) para reemplazarlo por la versión de 64 bits. Esto se hace con los siguientes comandos (Cuidado con pulsar intro antes de tiempo con los “sudo rm -rf…”, mejor copiar y pegar directamente los comandos desde aquí):

sudo rm /usr/local/mysql
sudo rm -rf /usr/local/mysql*
sudo rm -rf /Library/StartupItems/MySQLCOM
sudo rm -rf /Library/PreferencePanes/My*
sudo rm -rf /Library/Receipts/mysql*
sudo rm -rf /Library/Receipts/MySQL*
vi /etc/hostconfig # borrar la línea MYSQLCOM=-YES-

Hecho esto ya nos podemos descargar la versión de 32 bits de MySQL e instalarla y compilar por fin nuestro driver de ruby correctamente especificando la arquitectura de la siguiente manera:

sudo env ARCHFLAGS="-arch i386" gem install mysql -- \
--with-mysql-dir=/usr/local/mysql --with-mysql-lib=/usr/local/mysql/lib \
--with-mysql-include=/usr/local/mysql/include

Si todo ha ido bien ya estará todo instalado, id a vuestros database.yml y a programar!