sábado, 12 de diciembre de 2009

GIT y GITOSIS en Ubuntu 8.04 LST

1.Installar GIT

Primero instalamos los paquetes para que funcione git y ademas instalamos gitosis que nos permitira trabajar en un entorno de desarrollo multiusuario.

sudo su
cd /usr/src
aptitude install git git-clone
git clone git://eagain.net/gitosis.git
cd gitosis
python setup.py install


Nota: Si hay error con python se dede:
aptitude install python-setuptools


Creamos una usuario para git, en cuyo home tendremos los proyectos de desarrollo.

adduser --system \
--shell /bin/sh \
--gecos 'git version control' \
--group \
--disabled-password \
--home /home/git \
git


2.Habilitar llaves ssh para el acceso.

El usuario/administrador que desee poder acceder a GIT debe generar una clave pública.
Desde la línea de comandos debe ejecutar:
ssh-keygen -t rsa

Ahora se debe copiar la clave publica contenida en el archivo id_rsa.pub al servidor que contiene GIT.
Ejemplo:
scp $HOME/.ssh/id_rsa.pub usuario@server:/home/usuario/id_rsa.pub


Ahora en el server debemos hacer que gitosis agregue la clave publica del usuario, para darle permiso de acceso.

sudo -H -u git gitosis-init < path_to_file/id_rsa.pub
chmod 755 /home/git/repositories/gitosis-admin/hooks/post-update


3.Configurar GITOSIS desde la maquina del usuario/administrador

El usuario/administrador debe instalar GIT en su maquina.

sudo aptitude install git


El usuario/administrador debe crear una réplica del repositorio GIT que está en el servidor.

mkdir $HOME/proyectos
cd $HOME/proyectos
git clone git@:gitosis-admin.git
cd gitosis-admin


3.a. Archivo de configuración de GITOSIS

vim gitosis.conf

##Archivo de configuración de gitosis
[gitosis]
gitweb = yes #Habilitan el acceso web a todos
daemon = yes #los proyectos del repositorio


[group gitosis-admin]
writable = gitosis-admin #Nombre del proyecto, existe un directorio con el mismo nombre
members = user@worksation #Usuarios con acceso, debe existir el
#archivo user@worksation.pub en gitosis-admin/keydir/
[repo gitosis-admin]
gitweb = no #Acceso web al proyecto
daemon = no

## Agregamos los proyectos de desarrollo

[group develop]
writable = proyecto1 #Nombre del proyecto, existe un directorio con el mismo nombre
members = user@worksation #Usuarios con acceso, debe existir el
#archivo user@worksation.pub en gitosis-admin/keydir/
[repo proyecto1]
owner = El Administrador #Propietario del proyecto
description = Test repository #Descripción del proyecto


Siempre despues de editar el archivo gitosis.conf debemos subir los cambios al server.

Cambiar, add, commit, push !!!!

git add .
git commit -a -m "Añadido "
git push


4. Comenzando a trabajar con GIT y GITOSIS

El administrador crea un nuevo proyecto, todo se realiza desde el workstation y no en el server.

1. Agregar los cambios en el gitosis.conf
2. git add, commit, push !!!!

Ahora tenemos creado el proyecto, pero no existe el directorio, entonces:

mkdir proyecto1
cd proyecto1
git init
git remote add origin git@YOUR_SERVER_HOSTNAME:proyecto1.git


Creamos un archivo de pruebas

touch test
git add .
git commit -a -m "Creado el directorio del proyecto y un archivo de pruebas"
git push origin master:refs/heads/master

miércoles, 9 de diciembre de 2009

Usando GIT en el desarrollo

1.Uso de GIT

Comandos usuales:

git add archivo #Añadir archivo nuevo
git add . #Añadir todos los archivos
git commit -m "Mensaje" #Hace un commit, solo cuando hay cambios
git commit -a -m "Mensaje" #Hace commit si solo hemos modificado archivos existentes
git push #Sube las cosas al Repositorio GIT
git status #Muestra el estado actul del repositorio
git log #Nos da la historia del repositorio (ID_commit, Autor, Fecha)

git checkout -b #Crea un Branch nuevo (Vovemos haci atras)
git checkout #Para cambiar de branch
git branch #¿En que branch estoy?
git merge #Para unir el branch en el que estoy con otro

2. Trabajando con Ramas

En la imagen de ejemplo vemos el master branch y dos ramas (rama1 y rama2).

Como son los comandos que utilizamos para crear este "esquema"
Supongamos que estabamos trabajando en el master y decidimos volver a un commit del pasado, pues bien lo que haremos es:


#Averiguar el ID del commit al que queremos volver
git log
#Crear una rama nueva con el contenido que existia en el commit2
#"RAMA1"
git checkout -b rama1 id_commit2
git checkout rama1
#Ahora estamos en una nueva rama, donde la version es la que había en el commit2
#Podemos Simultanemente crear una segunda rama copia de la rama1
#"RAMA2"
git checkout rama2
#Ahora podemos trabajar en esta rama, cuanco tengamos una version definitiva podemos unirla a la master branch
#Primero nos movemos a la master branch
git checkout master
git merge rama2

viernes, 4 de diciembre de 2009

resolviendo gpg issues :P

el error es comun..
hacemos un aptitude update y nos encontramos algo como:

W: GPG error: http://ftp.de.debian.org stable/non-US Release: The following signatures couldn't be verified because the public key is not available: NO_PUBKEY F1D53D8C4F368D5D
W: You may want to run apt-get update to correct these problems

llamaremos PUBLICKEY=F1D53D8C4F368D5D

a resolverlo entonces.


gpg -vv --keyserver subkeys.pgp.net --recv $PUBLICKEY
gpg --export --armor $PUBLICKEY | apt-key add -

un issue q meencuentro seguido es q el server de llaves no tiene la llave, en debian tuve q usar wwwkeys.eu.pgp.net

done..

martes, 6 de octubre de 2009

Instalar GlusterFS (Parte 2)

Innstalación del CLiente

Instalar Dependencias
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev

Descargar, compilar e instlar Fuse
cd /tmp
wget ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/fuse-2.7.4glfs11.tar.gz
tar -zxvf fuse-2.7.4glfs11.tar.gz
cd fuse-2.7.4glfs11
./configure
make && make install


Descargar, compilar e instlar GlusterFS
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.7.tar.gz
tar xvfz glusterfs-2.0.7.tar.gz
cd glusterfs-2.0.7



Por defecto se instala en /usr/etc/glusterfs , vamos a modificar esto haciendo prefix='' en el archivo configure.
vim configure

server1:/tmp/glusterfs-2.0.7# ./configure



GlusterFS configure summary
===========================
FUSE client : yes
Infiniband verbs : no
epoll IO multiplex : yes
Berkeley-DB : yes
libglusterfsclient : yes
mod_glusterfs : no ()
argp-standalone : no

Instalamos:
make && make install
ldconfig
glusterfs --version


Ejemplo de configuración de GlusterFS (cliente)

vi /etc/glusterfs/glusterfs.vol


Ejemplo:

volume remote
type protocol/client
option transport-type tcp
option remote-host server1.example.com # can be IP or hostname
option remote-subvolume brick
end-volume

volume writebehind
type performance/write-behind
option window-size 4MB
subvolumes remote
end-volume

volume cache
type performance/io-cache
option cache-size 512MB
subvolumes writebehind
end-volume



glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

o

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs


mount

df -h

vi /etc/fstab


[...]
/etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0

init 6

Instalar GlusterFS (Parte 1)

Innstalación del Server

Instalar Dependencias
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev

Descargar, compilar e instlar GlusterFS
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.7.tar.gz
tar xvfz glusterfs-2.0.7.tar.gz
cd glusterfs-2.0.7

Por defecto se instala en /usr/etc/glusterfs , vamos a modificar esto haciendo prefix='' en el archivo configure.
vim configure

server1:/tmp/glusterfs-2.0.7# ./configure



GlusterFS configure summary
===========================
FUSE client : no
Infiniband verbs : no
epoll IO multiplex : yes
Berkeley-DB : yes
libglusterfsclient : yes
mod_glusterfs : no ()
argp-standalone : no

Instalamos:
make && make install
ldconfig
glusterfs --version


Ejemplo de configuración de GlusterFS (server)

vi /etc/glusterfs/glusterfsd.vol


Ejemplo:

volume posix
type storage/posix
option directory /data/export
end-volume

volume locks
type features/locks
option mandatory-locks on
subvolumes posix
end-volume

volume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volume

volume server
type protocol/server
option transport-type tcp
option auth.addr.brick.allow 192.168.0.101 # Edit and add list of allowed clients comma separated IP addrs(names) here
subvolumes brick
end-volume



update-rc.d glusterfsd defaults

/etc/init.d/glusterfsd start

miércoles, 30 de septiembre de 2009

Modem Huawei 3G en Ubuntu

Instalar WVDIAL

sudo aptitude install wvdial

Conectar el Módem 3G. Editar el archivo wvdial.conf

sudo vim /etc/wvdial.conf

Ingresar las siguientes líneas para Movistar:

Phone = *99#
Username = internet
Password = internet

Luego, ejecutar:

sudo wvdialconf

Esto va a completar los datos del archivo wvdial.conf dejando algo como ésto (mi caso):

[Dialer movistar]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = Analog Modem
ISDN = 0
Phone = *99#
Modem = /dev/ttyUSB0
Username = internet
Password = internet
Baud = 460800

DNS Movistar:

nameserver 200.49.193.140
nameserver 200.49.206.140

Ejecutar:

sudo wvdial movistar

miércoles, 16 de septiembre de 2009

RAID1 en Ubuntu

1. Instalación
NOTA: REALIZAR DURANTE LA INSTALACIÓN DE UBUNTU

En el particionado de discos elegimos la opción "Manual". Debemos estar seguros de que ambos discos rígidos fueron encontrados por el instalador. (se recomiendan dos discos idénticos).
Segido eliminamos cualquier partición existente.

Seguido creamos 3 particiones en ambos discos (para el /,la swap y el /home).
Las particiones deben ser del tipo "physical volume for RAID" (0xFD en fdisk) en ves de "Ext3 journaling file system". Tambien la primera partición de ambos discos debe ser marcada como bootable.

Seguido seleccionamos "Configure software RAID".

Guardamos las modificaciones hechas en la tabla de particiones.

Creamos (3) MD devices (cada uno configurado como RAID1 con 2 activos y 0 hotspace en disco).

Seguido elegimo el la partición del disco físico que será incluida en la RAID1. Es importantr seleccionar dos particiones con idéntico tamaño en nuestro ejemplo md0=sda1+sbd1, md1=sda2+sdb2 y md2=sda3+sdb3.


Configuramos el sistema de ficheros y los puntos de montaje para cada dispositivo RAID. En nuestro ejemplo "RAID device #0" es ext3 montada en /, "RAID device #1" es swap y "RAID device #2" es ext3 montada en /home.

Finalmente seleccionamos "Done setting up the partitions" y "Yes" para escribir los cambios en la tabla de particiones. El resto de la instalación de Ubuntu es normal.

Despues de la instalación y el primer reboot, debemos instalar grub en el segundo disco en el Master Boot Record (MBR). Sin esto la PC no arrancara si el primer disco (/dev/sda) falla y/o es removido de la PC.


~$ sudo grub-install /dev/sda

~$ sudo grub
grub> device (hd0) /dev/sdb
grub> root (hd0,0)
grub> setup (hd0)
grub> quit


WARNING: Hay un bug que hace fallar el boot si uno de los discos físicos seteados en la RAID1 falta. El siguente patch corrige el bug.


~$ cd /tmp
~$ wget http://www.iki.fi/kuparine/comp/ubuntu/en/local.diff
~$ cd /usr/share/initramfs-tools/scripts
~$ sudo patch -p0 < /tmp/local.diff
~$ sudo update-initramfs -k all -u


Aplicar el patch cada vez que initramfs-tools package es actualizado o reinstalado. (con la actualizacion del kernel) .

2. Testeando


~$ grep /dev/md /etc/fstab
~$ df -h / /home
~$ cat /proc/mdstat
~$ sudo mdadm --query --detail /dev/md0
~$ sudo mdadm --query --detail /dev/md1
~$ sudo mdadm --query --detail /dev/md2


3. Recuperar luego del fallo de un disco.


~$ cat /proc/mdstat
~$ sudo mdadm --query --detail /dev/md0
~$ sudo mdadm --query --detail /dev/md1
~$ sudo mdadm --query --detail /dev/md2

~$ sudo mdadm --add /dev/md0 /dev/sdb1
~$ sudo mdadm --add /dev/md1 /dev/sdb2
~$ sudo mdadm --add /dev/md2 /dev/sdb3

cat /proc/mdstat