viernes, 12 de noviembre de 2010

Ubntu Server on a USB

Instalar debootstrap:

# sudo apt-get install debootstrap
# fdisk -l


Buscar la partición del usb y la formateamos.

# sudo mkfs.ext3 -F /dev/sdd1


Luego crear un punto de montaje para el dispositivo y mpntarlo:

# sudo mkdir -p /stick
# sudo mount /dev/sdXY /stick


Ahora lo mas simple, utilizamos debootstrap para instalar la distribución que deseamos:

# debootstrap lucid /stick


Esto debe descargar y desempaquetar los paquetes necesarios, directamente en el dispositivo USB. Cuando halla terminado estaremos nuevamente en el bash prompt.
Ahora se deben copiar algunos archivos, realizar algunos links simbólicos y editar el archivo fstab en el nuevo sistema.

# sudo cp /etc/hosts /stick/etc/
# sudo cp /etc/network/interfaces /stick/etc/network/
# sudo cp /etc/bash_completion /stick/etc/
# sudo cp /etc/bash.bashrc /stick/etc/


Ahora necesitamos el UUID del fs de nuestro USB para editar el fstab.

# blkid


nos devuelve todos los UUID que hay en el sistema. Copiamos el correspondiente al USB y editamos /stick/etc/fstab.


Editamos /stick/etc/fstab para que se vea así:

proc /proc proc defaults 0 0
UUID=6a96f671-a7b0-4954-bd48-f9d739730b3a / ext3 relatime 0 1


Una vez hecho esto podemos hacer chroot dentro del nuevo sistema, pero debemos montar primero algunos cosas criticas dentro de /stick
Once that is done you will want to chroot into your new filesystem but mount some critical filesystems inside it first:

# sudo mount -t sysfs sysfs /stick/sys
# sudo mount --bind /dev /stick/dev
# sudo mount -t proc proc /stick/proc
# sudo su -c 'chroot /stick'


Por ahora somos root porque sudo no esta implementado todavía.
Ahora copiaremos el nuestro timezone local en /etc:

# sudo cp /usr/share/zoneinfo/America/Argentina/Mendoza /etc/localtime


Ahora instalaremos un editor, por ejemplo vim:

# apt-get install vim


Ahora es momento de actualizar apt y tener los repositorios listos. Editamos /etc/apt/source.list para que quede así:

deb http://archive.ubuntu.com/ubuntu/ lucid restricted main multiverse universe
deb-src http://archive.ubuntu.com/ubuntu/ lucid restricted main multiverse universe
deb http://archive.ubuntu.com/ubuntu/ lucid-updates restricted main multiverse universe
deb-src http://archive.ubuntu.com/ubuntu/ lucid-updates restricted main multiverse universe
deb http://archive.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse
deb-src http://archive.ubuntu.com/ubuntu/ lucid-backports main restricted universe multiverse
deb http://archive.canonical.com/ubuntu lucid partner
deb-src http://archive.canonical.com/ubuntu lucid partner


Luego actualizamos la base de datos de paquetes y actualizamos el sistema, luego cambiamos la clave de root y finalmente agregamos usuarios, creamos el grupo admin y configuramos sudo para que los miembros del grupo admin tengan privilegios de sudo.

# apt-get update
# apt-get dist-upgrade
# passwd
# adduser steve
# addgroup admin
# adduser steve admin
# echo "%admin ALL=(ALL) ALL" >> /etc/sudoers


Instalamos el kernel de servidor junto con GRUB como bootloader, y configuramos correctamente el boot:

# apt-get install linux-image-server grub
# mkdir /boot/grub
# update-grub
# update-initramfs -u


Ahora dejamos el chroot e instalamos grub en el USB:

# exit
# grub-install --root-directory=/stick --no-floppy --recheck /dev/sda


Si todo fue bien podremos reiniciar dentro del USB. En este punto el sistema no es de solo lectura.

Para que el sistema sea de solo lectura utilizaremos "fsprotect"

Sobre fsprotect:
Conjunto de scripts para montar de forma transparente un fs en RAM, como sistema de ficheros de sólo lectura para proteger el almacenamiento flash. (La idea es no escribir nada en el disco flash mientras el sistema está en funcionamiento, esta utilidad protege su sistema contra la corrupción fs después de bajadas de energía inesperada.)

La página de inicio de Fsprotect tiene la versión disponible para su descarga en formato de archivo de origen del paquete debian fsprotect.dsc + tar.gz 1.0.5.

Para instalarlo:

Buscar la particion corespondiente al USB y montarla.

# sudo fdisk -l
# sudo mount /dev/sdXY /stick

# sudo mount -t sysfs sysfs /stick/sys
# sudo mount --bind /dev /stick/dev
# sudo mount -t proc proc /stick/proc
# sudo su -c 'chroot /stick'

wget http://ftp.de.debian.org/debian/pool/main/f/fsprotect/fsprotect_1.0.5.dsc
wget http://ftp.de.debian.org/debian/pool/main/f/fsprotect/fsprotect_1.0.5.tar.gz

# dpkg-source -I fsprotect_1.0.5.dsc


Aquí pueden aparecer algunos errores, pero se va a extraer los archivos necesarios en el directrio fsprotect-1.0.5.
Puede ser necesario instalar dpkg-dev

# cd fsprotect-1.0.5


Contruir el paquete .deb para la instalación:

# dpkg-buildpackage -b


Este comando va a crear el paquete .deb en ../

Ahora lo instalamos:

#> dpkg -i fsprotect_1.0.5_all.deb


Ahora despues de una instalación exitosa debemos agregar algunas opciones en el grub.cfg para habilitar fsprotect añadiendo la siguiente opcion al kernel deseado: fsprotect=1G (para un dispositivo flash 1GB).

viernes, 29 de octubre de 2010

Instalar Xen4.0 en Ubuntu 10.04 LTS

Instalar los siguientes paquetes:

apt-get install bcc bin86 gawk bridge-utils iproute libcurl3 libcurl4-openssl-dev bzip2 module-init-tools transfig tgif texinfo texlive-latex-base texlive-latex-recommended texlive-fonts-extra texlive-fonts-recommended pciutils-dev mercurial build-essential make gcc libc6-dev zlib1g-dev python python-dev python-twisted libncurses5-dev patch libvncserver-dev libsdl-dev libjpeg62-dev iasl libbz2-dev e2fslibs-dev git-core uuid-dev ocaml libx11-dev


Si estamos en 64-bits
apt-get install gcc-multilib


Instalar las dependencias.
apt-get build-dep xen-3.3


Descargar las fuentes para el kernel

cd /usr/src
git clone
git://git.kernel.org/pub/scm/linux/kernel/git/jeremy/xen.git linux-2.6-xen
cd linux-2.6-xen
git checkout -b xen/stable-2.6.32.x origin/xen/stable-2.6.32.x


Configurar el kernel, habilitar todo lo correspondiente a Xen.
make menuconfig




Compilar e Instalar
export CONCURRENCY_LEVEL=(number_of_cores) +1
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-xen kernel-image kernel-headers
dpkg -i ../linux-image-2.6.32.24-xen_2.6.32.24-xen-10.00.Custom_amd64.deb
update-initramfs -c -k 2.6.32.24-xen


Obtener codigo fuente de XEN

cd /usr/src/
wget http://bits.xensource.com/oss-xen/release/4.0.1/xen-4.0.1.tar.gz
tar xf xen-4.0.1.tar.gz
cd xen-4.0.1


Aplicar los siguientes cambios en la carpeta xen-4.0.1


--- .orig/tools/hotplug/Linux/xen-backend.rules 2010-10-05 14:08:56.436012895 +0400
+++ /tools/hotplug/Linux/xen-backend.rules 2010-10-05 11:48:38.694087211 +0400
@@ -9,3 +9,5 @@
KERNEL=="evtchn", NAME="xen/%k"
KERNEL=="blktap[0-9]*", NAME="xen/%k"
KERNEL=="pci_iomul", NAME="xen/%k"
+KERNEL=="gntdev", NAME="xen/%k"
+KERNELS=="xen", KERNEL=="xvd*", SUBSYSTEM=="block", OPTIONS+="last_rule"


Compilar Xen

make xen
make tools
make install-xen
make install-tools PYTHON_PREFIX_ARG=


Actualizar scripts de inicio

update-rc.d xend defaults 20 21
update-rc.d xendomains defaults 21 20


Esitar script de arranque. /etc/init.d/xend


-- xend.orig 2010-10-06 18:44:35.055245544 +0400
+++ xend 2010-10-06 18:46:26.056620024 +0400
@@ -21,7 +21,7 @@

shopt -s extglob
test -f /etc/sysconfig/xend && . /etc/sysconfig/xend
-
+/sbin/modprobe -v xenfs
if test "x$1" = xstart && \
test -d /proc/xen && \
! test -d /proc/xen/capabilities && \
@@ -57,6 +57,11 @@
test -z "$XENCONSOLED_TRACE" || export XENCONSOLED_TRACE
[[ "$XENSTORED_TRACE" == @(yes|on|1) ]] && export XENSTORED_TRACE
[[ "$XENBACKENDD_DEBUG" == @(yes|on|1) ]] && export XENBACKENDD_DEBUG
+ /sbin/modprobe -v xen-evtchn
+ /sbin/modprobe -v xen-gntdev
+ /sbin/modprobe -v xen-blkback
+ /sbin/modprobe -v xen-netback
+ /sbin/modprobe -v blktap
xend start
await_daemons_up
;;


Editar /etc/modules

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with "#" are ignored.
loop
lp
rtc
xen-evtchn
xen-gntdev
xen-netback
xen-blkback
xenfs
blktap


Editar Grub2 según corresponda:

vim /etc/grub.d/45_custom

#!/bin/sh
exec tail -n +3 $0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.

menuentry 'Ubuntu, with Linux 2.6.32.24-xen' --class ubuntu --class gnu-linux --class gnu --class os {
recordfail
insmod raid
insmod mdraid
insmod ext2
set root='(md1)'
search --no-floppy --fs-uuid --set 7b5672a0-774b-47fc-a8a3-7f93ded442b8
multiboot /boot/xen-4.0.1.gz dummy=dummy
module /boot/vmlinuz-2.6.32.24-xen dummy=dummy root=/dev/md1 ro console=tty0
module /boot/initrd.img-2.6.32.24-xen
}

martes, 23 de marzo de 2010

Clonar un Servidor en caliente

1. Realizar una instalación base en el servidor destino. (Lo mas similar a la instalacion del servidor origen, en especial las particiones).
2. Actualizar el servidor (update & upgrade).
3. Instalar todos los paquetes que estan instalados en el servidor origen.
3.1. En el servidor origen crear una lista de paquetes instalados:

sudo dpkg --get-selections > lista_paquetes_instalados

3.2. En el servidor destino instalar la lista de paquetes creada en 3.1.

sudo dpkg --set-selections < lista_paquetes_instalado
sudo aptitude install -f


4. Ahora solo queda sincronizar el servidor destino con el origen.

rsync -av --progress --inplace --rsh='ssh -pPORT' --exclude=boot/ --exclude=dev/ --exclude=proc/ --exclude=sys/ --exclude=selinux/ --exclude=media/ --exclude=mnt/ --exclude=srv/ --exclude=etc/fstab --exclude=etc/udev/ root@IP_SERVER_ORIGEN:/ .


Nota: Se debe habilitar la opcion de login de root por ssh en el servidor origen.

lunes, 22 de marzo de 2010

Repositorios Locales

Los pasos son los siguientes:

1.- Instalar el paquete debmirror.
2.- Se puede hacer de dos maneras:
3.- Crear una carpeta en el lugar deseado a colocar el mirror. (e.g. /home/repositorios).
4.- Para la copia de los archivos existen dos maneras sencillas de solucionarlo.

4.1- Una es, si se dispone de los dvd's se debe copiar de cada cada uno de ellos las carpetas dist y pool a la carpeta creaada en el paso 3. Luego correr el script de actualización de mirror.

4.2 La segunda es mas sencilla, pero depende de la conexión a internet ya que al correr solo el script se bajara todos los paquetes necesarios para el mirror. (Muchos Gb).

5.- La creación con el script es sencilla ya que con el paquete instalado en el paso 1 solo se debe pasar los parametros correctos.



#!/bin/bash

## Variables para debmirror
export GNUPGHOME=/home/mirrorkeyring
arch=amd64,i386
section=main,restricted,universe,multiverse
release=hardy,hardy-security,hardy-updates
server=cc.archive.ubuntu.com
inPath=/ubuntu
proto=ftp
outPath=/home/repositorio/

## Archivos de log
LOGDIR=/var/log/mirror
LOGFILE=ubuntu.log

echo "Script de Actualizacion Automatica de MIRRORs de Ubuntu Hardy $arch"
echo "Verificando..."
st=`ps cax |grep -c "debmirror"`
echo "Analizando Ejecucion..."
if [ $st -eq 0 ];then
echo "Ejecutando Actualizacion...."
cp $LOGDIR/$LOGFILE $LOGDIR/$LOGFILE.old
echo '' > $LOGDIR/$LOGFILE
debmirror -a $arch \
-s $section \
-h $server \
-d $release \
-r $inPath \
--progress \
-e $proto \
--ignore-release-gpg \
--passive \
$outPath > $LOGDIR/$LOGFILE 2>&1
echo "Listo... puedes ver el log en $LOGDIR/$LOGFILE"
else
echo "Debmirror ya se está ejecutando"
echo "La Actualizacion esta en proceso..."
fi

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.