jueves, 31 de diciembre de 2009

Montar partición de dentro de un archivo imagen

kpartx es la herramienta que crea el apartir de la tabla de particiones un mapa del dipositivo. Suponemos que tenemos una imagen de disco .img que contiene varias particiones y queremos montar una o varias de ellas. kpartx mapeará cada partición a un dispositivo loop bajo /dev/mapper y permitirá montar el dispositivo loop a un directorio local.

Mapeo de una imagen:

# kpartx -a /foo/bar/disk.img

Checking que dispositivos loop se usaron para montar la partición:

# kpartx -l /foo/bar/disk.img
loop1p1 : 0 8177022 /dev/loop1 63

La Imagen de disco tiene un partición y esta mapeada en /dev/loop1p1. Ahora podemos montar la partición:

# mount /dev/mapper/loop1p1 /mnt/img

Una vez terminado, podemos desmontar y remover el mapeo del dispositivo:

# umount /mnt/img
# kpartx -d /foo/bar/disk.img
loop deleted : /dev/loop1

sábado, 12 de diciembre de 2009

Publicar codigo en Blogger

En Blogger:
Ir a Personaliza --> Diseño --> Edicion de HTML

Buscar la línea:
<div class="codeview">
]]></b:skin>
</div>

Y arriba de esta colocar:

.codeview {
font-family: Arial, Helvetica, sans-serif;
color: #001f49;
margin : 15px 35px 15px 15px;
padding : 10px;
clear : both;
list-style-type : none;
border-top : 2px solid #cccccc;
border-right : 2px solid #cccccc;
border-bottom : 2px solid #cccccc;
border-left : 2px solid #cccccc;
background : #f9f9f9 no-repeat right bottom;
background-color: #FFFFFF;
}
.codeview li {
font-size : 13px;
line-height : 24px;
font-family : "Courier New", "MS Sans Serif", sans-serif, serif;
color : #333333;
font-weight : normal;
margin : 0;
padding : 0;
}

Listo, para publicar codigo, en la entrada nueva del blog:
<div class="codeview">
Insertar el codigo aquí.
</div>

Instalar Xen en Ubuntu 8.04 LST

Pasos previos
Nos loguemos como root:

sudo su

Es buena idea deshabilitar AppArmor:(si existe)

/etc/init.d/apparmor stop
update-rc.d -f apparmor remove

Instalando Xen

Para Instalar Xen lo único que debemos hacer es ejecutar el comando:

aptitude install ubuntu-xen-server
mv /lib/tls /lib/tls.disabled

vim /etc/modules
[...]
loop max_loop=64
[...]

ls -l /boot/

total 36052
-rw-r--r-- 1 root root 420395 2009-04-01 21:41 abi-2.6.24-23-server
-rw-r--r-- 1 root root 74171 2009-04-01 21:41 config-2.6.24-23-server
-rw-r--r-- 1 root root 82847 2009-04-15 14:57 config-2.6.24-24-xen
drwxr-xr-x 2 root root 4096 2009-06-17 12:55 grub
-rw-r--r-- 1 root root 7496287 2009-06-17 12:42 initrd.img-2.6.24-23-server
-rw-r--r-- 1 root root 7218067 2009-06-16 15:39 initrd.img-2.6.24-23-server.bak
-rw-r--r-- 1 root root 7439996 2009-06-17 12:49 initrd.img-2.6.24-24-xen
-rw-r--r-- 1 root root 7439756 2009-06-17 12:49 initrd.img-2.6.24-24-xen.bak
-rw-r--r-- 1 root root 103204 2007-09-28 08:03 memtest86+.bin
-rw-r--r-- 1 root root 1163432 2009-04-01 21:41 System.map-2.6.24-23-server
-rw-r--r-- 1 root root 1128034 2009-04-15 14:57 System.map-2.6.24-24-xen
-rw-r--r-- 1 root root 1930136 2009-04-01 21:41 vmlinuz-2.6.24-23-server
-rw-r--r-- 1 root root 1894234 2009-04-15 14:57 vmlinuz-2.6.24-24-xen
-rw-r--r-- 1 root root 401328 2009-02-21 01:04 xen-3.2.gz

ls -l /usr/lib/xen-tools

total 36
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 centos-4.d
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 centos-5.d
-rwxr-xr-x 1 root root 4409 2008-04-05 22:12 common.sh
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 dapper.d
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 debian.d
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 edgy.d
lrwxrwxrwx 1 root root 8 2009-06-17 12:49 etch.d -> debian.d
lrwxrwxrwx 1 root root 15 2009-06-17 12:49 fedora-core-4.d -> fedora-core-6.d
lrwxrwxrwx 1 root root 15 2009-06-17 12:49 fedora-core-5.d -> fedora-core-6.d
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 fedora-core-6.d
lrwxrwxrwx 1 root root 15 2009-06-17 12:49 fedora-core-7.d -> fedora-core-6.d
lrwxrwxrwx 1 root root 6 2009-06-17 12:49 feisty.d -> edgy.d
drwxr-xr-x 2 root root 4096 2009-06-17 12:49 gentoo.d
lrwxrwxrwx 1 root root 6 2009-06-17 12:49 gutsy.d -> edgy.d
lrwxrwxrwx 1 root root 6 2009-06-17 12:49 hardy.d -> edgy.d
lrwxrwxrwx 1 root root 8 2009-06-17 12:49 lenny.d -> debian.d
lrwxrwxrwx 1 root root 8 2009-06-17 12:49 sarge.d -> debian.d
lrwxrwxrwx 1 root root 8 2009-06-17 12:49 sid.d -> debian.d


Como vemos podemos instalar cualquiera de las siguientes distribuciones:

* Debian: Lenny, Sid, Etch, Sarge
* Ubuntu: Dapper Drake, Edgy Eft, Feisty Fawn, Gutsy Gibbon, Hardy Heron
* CentOS 4, CentOS 5
* Fedora Core 4, 5, 6, Fedora 7
* Gentoo

Para mantener un orden vamos a guardar las maquinas virtuales en el directorio /home/xen:

mkdir /home/xen


Utilizaremos xen-tools para crear maquinas virtuales. El paquete xen-tools se instala junto con el paquete ubuntu-xen-server package

Ahora editamos el fichero /etc/xen-tools/xen-tools.conf. Este fichero contiene los valores por defecto con los que se creará la maquina virtual, a mones que en su momento especifiquemos un valor diferente, es decir, funciona como una plantilla.

dir = /home/xen
use-ide = 1
install-method = debootstrap
size = 4Gb # Disk image size.
memory = 512Mb # Memory size
swap = 256Mb # Swap size
# noswap = 1 # Don't use swap at all for the new system.
fs = ext3 # use the EXT3 filesystem for the disk image.
dist = hardy # Default distribution to install.
image = sparse # Specify sparse vs. full disk images.
gateway =
netmask =
passwd = 1
kernel = /boot/vmlinuz-`uname -r`
initrd = /boot/initrd.img-`uname -r`
mirror = http://archive.ubuntu.com/ubuntu/
ext3_options = noatime,nodiratime,errors=remount-ro
ext2_options = noatime,nodiratime,errors=remount-ro
xfs_options = defaults
reiser_options = defaults
disk_device = xvda #default


Ahora reiniciamos el sistema:

init 6


Si el sistema reinicia sin problemas, todo anduvo bien.
Ejecutamos:

uname -r

y nuestro nuevo Xen kernel debe mostrar algo así:

2.6.24-24-xen


Network Bridge a medida
La solucion con Puentes/bridge's es la mas comoda segun nuestro analisis.
consta de la interfaz fisica en si un puente a ella, y luego varias vif asociadas a la anterior .

ej: eth1 ---->peth1----->bridge_eth1{vif1 vif2 vif3}

Xen trae consigo las herramientas necesarias [lease scripts en bash] para poder crear puentes rapidamente. por esto, solo hay q tener en claro el numero de vif, la interfaz y el nombre q le deseamos dar dar al bridge. entonces:

vifnum=1 netdev=eth1 bridge=lan

este anterior, seria el argumento del script. Ya que esta dentro de los procesos de arranque de Xen es necesario colocarlo dentro del mismo para que funcione.

llamaremos al script "redes", [el que colocamos en xend-config.sxp para que sea invocado al momento del arranque de xen debe tener permisos de ejecucion]

el contenido del script seria el siguiente:

#!/bin/sh
dir=$(dirname "$0")
echo "$dir"
"$dir/network-bridge" "$1" vifnum=1 netdev=eth1 bridge=lan
ifconfig lan up
"$dir/network-bridge" "$1" vifnum=2 netdev=eth2 bridge=wan
ifconfig wan up


es bueno aclarar que los ifconfig***** se los coloca por precaucion ya que en ubuntu no suele funcionar el punte si no esta bringed up la interfaz.

Otro detalle problematico en ubuntu es q en algunos casos no suele funcionar bien el bridge.[perdida de paquetes] tomar la precaucion de corroborar si mii-tool pethx alerta un "link ok" solo. de ser este el caso, realizar ifdown/ifup a la interface hasta que mii-tool alerte "negotiated 100baseTx-FD flow-control, link ok"



Crear un Guest


xen-create-image --hostname NOMBRE --ip=


En Ubuntu debemos editar el archivo de configuración de la maquina virtual para que reconozca el los discos virtuales.

Cambiamos 'file:' por 'tap:aio:'

vim /etc/xen/NOMBRE.cfg
[...]
#
# Disk device(s).
#
root = '/dev/xvda2 ro'
disk = [
'tap:aio:/home/xen/domains/NOMBRE/swap.img,xvda1,w',
'tap:aio:/home/xen/domains/NOMBRE/disk.img,xvda2,w',
]
[...]


Administrar Maquinas Virtuales en XEN

xm create NOMBRE # Arrancar VM
xm create NOMBRE -c # Arrancar VM e ingresar en consola de la VM
xm console NOMBRE # Ingresar en consola de la VM
xm list # Mostrar lista de VM activas
xm destroy NOMBRE # Detener VM
xm top # ver el estado activo de cada equipo
Dentro de la maquina virtual si ingresamos con xm create NOMBRE.cfg -c para salirnos de la consola debemos presionar ctrl+5 y volveremos a la consola de la que partimos.

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..