lunes, 27 de julio de 2009

Usando GIT

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

lunes, 20 de julio de 2009

Notificaciones de Sistema en el Mail (Parte 2)

La anterior entrada explicaba como habilitar el correo y hacer que Cron notifique sus actividades.
Ahora vamos a explicar como hacer par que los mensajes de syslog sean notificados en nuestra cuenta de correo.

Creamos un named-pipe

# mkdir /etc/syslog.pipes
# mknod /etc/syslog.pipes/criticalMessages p
# chmod 600 /etc/syslog.pipes/criticalMessages

Un named-pipe es un tipo de archivo que implementa un fifo stream, permitiendo a dos procesos diferentes halaer entre ellos Utilizaremos named-pipes para implementar mensajes en tiempo real entre syslog y nuestro mailer.

Editamos /etc/syslog.conf y añadimos la entrada para mensajes criticos

*.crit |/etc/syslog.pipes/criticalMessages


Enviar los mensajes por correo:
Creamos un script shell que lea los mensajes de la fifo y los envie por email:

/usr/bin/syslogMailer


#!/bin/bash

# syslogMailer: a script to read stdin and turn each line into an alert
# email typically this is used to read a named-pipe written to by syslog
#
# example usage: syslogMailer < /etc/syslog.pipes/criticalMessages
#

alertRecipient="fireman@example.com" # the mail recipient for alerts
TMOUT=1 # don't wait > 1 second for input

# process each line of input and produce an alert email
while read line
do
# remove any repeated messages
echo ${line} | grep "message repeated" > /dev/null 2>&1
if test $? -eq 1
then
# send the alert
echo "${line}" | mail -s "critical error on syslog" ${alertRecipient}
fi
done


chmod u+x /usr/bin/syslogMailer

Ejecutamos el script cada 5 minutos con una regla de cron como la siguiente:

# m h dom mon dow command
0-59/5 * * * * /usr/bin/syslogMailer < /etc/syslog.pipes/criticalMessages > /dev/null 2>&1

Alternativamente podemos ampliar el tipo de mensajes que deseasmos recibir en la cuenta de correos:

# Email root on crit, err, emerg
*.crit |/etc/syslog.pipes/logMessages
*.emerg |/etc/syslog.pipes/logMessages
*.err |/etc/syslog.pipes/logMessages
*.alert |/etc/syslog.pipes/logMessages
*.warn |/etc/syslog.pipes/logMessages

Nota: Crear un pipe con /etc/syslog.pipes/logMessages y modificar la entrada del Cron hacia /etc/syslog.pipes/logMessages

viernes, 17 de julio de 2009

Notificaciones de Sistema en el Mail

En esta nota voy a explicar como hacer para que cada vez que Cron realice algo, nos envie un mail a una cuenta de correos.

Requerimos de un MTA funcionando en nuestro servidor, y de algunas herramientas básica.


aptitud install sendmail mailutils


Despues devemos configurar sendmail o el MTA que usemos para que envie los correos a la direccion deseada:

vim /etc/mail/sendmail.conf

[...]
#------------------------------------------------------------------------------
# Cron Job Configuration
#
# CRON_MAILTO="root"; String cronjob output
# Recipient of *rare* cronjob output. Some cronjobs will be running
# under user `mail`, so any problems encountered would probably be missed
# so define a user who actually (hopefully) checks email now and again.
#
CRON_MAILTO="ladireccion@empresa.com";
#
# CRON_PARMS=""; String cron specific parmeters
# Cron parameters - applied *only* when sendmail queue running is done
# via a cronjob. Applied after QUEUE_PARMS and MISC_PARMS, and can
# therefore override them if need be.
#
CRON_PARMS="";
#
#------------------------------------------------------------------------------
[...]


Y editamos el archivo /etc/crontab


vim /etc/crontab

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO="ladireccion@empresa.com"
# m h dom mon dow user command
[...]


Si creamos un nuevo Cron Jobs con el comando crontab -e debemos agregar al comienzo del archivo la linea MAILTO="ladireccion@empresa.com"


crontab -e

MAILTO="ladireccion@empresa.com"
# m h dom mon dow command
25 13 * * * /PATH_AL_SCRIPT/script.sh
[...]


Importante!!!
Sendmail puede dar un error de FQDN (Fully Qualified Domain Name) debido a que no encuentra el nombre en /etc/hosts
Corrección:

vim /etc/hosts

[...]
127.0.0.1 localhost.mydomain localhost server1 #<----- El orden Importa!!!!
[...]

lunes, 13 de julio de 2009

KVM en Ubuntu 8.04

Intoducción

Lo más importante es que el procesador tenga Virtual Technology, empezamos comprobando si el procesador esta incluido en la lista de CPUs que soportan HVM.

Verificamos si el procesador soporta el conjunto instrucciones de virtualización compatible con KVM. Buscamos la cadena vmx o svm en los flags del procesador.


cat /proc/cpuinfo | grep vmx # Intel
cat /proc/cpuinfo | grep svm # AMD


deberías obtener un resultado parecido a:
INTEL

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx lm constant_tsc arch_perfmon pebs bts rep_good pni monitor ds_cpl vmx est tm2 ssse3 cx16 xtpr dca sse4_1 lahf_lm

AMD

flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt rdtscp lm 3dnowext 3dnow rep_goodpni cx16 lahf_lm cmp_legacy svm extapic cr8_legacy 3dnowprefetch

Si no obtenemos la salida, KVM no funcionará.

Revisar que el BIOS de la maquina tenga habilitada la opción de Virtual Technology

Instalar KVM y otros.

Activar el repositorio Universe y actualizar el sistema.

sudo su
vim /etc/apt/source.list

[...]
deb http://ar.archive.ubuntu.com/ubuntu/ hardy universe
deb-src http://ar.archive.ubuntu.com/ubuntu/ hardy universe
deb http://ar.archive.ubuntu.com/ubuntu/ hardy-updates universe
deb-src http://ar.archive.ubuntu.com/ubuntu/ hardy-updates universe
[...]

aptitude update

aptitude upgrade

aptitude install qemu virt-manager libvirt-bin kvm

Añadimos los usuarios que queremos administren KVM al grupo kvm

adduser kvm


Reiniciamos el Equipo.

Probamos el comando kvm

kvm


Si aparece el siguiente mensaje, el procesador no soporta instrucciones de virtualización (aun habiendo aprobado el test de flags) o el BIOS tiene deshabilitado la opción de Virtualización.

open /dev/kvm: No such file or directory
Could not initialize KVM, will disable KVM support
Ubuntu does not support running KVM without hardware acceleration. Sorry.


Para ser ordenados creamos un directorio donde alojaremos nuestras maquinas virtuales.


mkdir /home/kvm
chown nobody.nogroup /home/kvm

KVM y Qemu se pueden manejar desde comand line (de ahora en adelante 'CL') o desde un entorno grafico.

Administrar KVM desde CL.

Creando un Guest.

aptitude install ubuntu-vm-builder

ubuntu-vm-builder kvm hardy \
--domain vmX \
--dest /home/kvm/vmX \
--arch i386 \
--hostname vmX \
--mem 256 \
--user bgx \
--pass elpass \
--ip \
--mask \
--net \
--bcast \
--gw \
--dns \
--mirror http://archive.localubuntumirror.net/ubuntu \
--components main,universe \
--addpkg vim openssh-server molly-guard etckeeper \
--libvirt qemu:///system ;

Usar una imagen de CD de la distribucion linux que mas nos guste.
Cambiamos la opción mirror:

mount -o loop path_to_image/imagen.iso /mnt

ubuntu-vm-builder --mirror /mnt


Otras herramientas con las que contamos son python-virtinst (virt-install, virt-clone, virt-viewer).

Ejemplo clonado de guest usando virt-clone.

virt-clone -o vm_origen -n hostname_nuevo --file /home/kvm/nueva_maquina/disco.img


Para visualizar la cantidad de maquinas funcionando, detenerlas, arrancarlas, hacer hot-plug de un dispositivo usb, etc... utilizamos "Virtual Shell".
El comando virsh es parte del paquete libvirt.

Existen multitud de comandos para manipular imagenes con virsh. Para manipular las imagenes con virsh necesitamos ser agregado al grupo libvirtd.


aptitude install libvirt-bin
adduser libvirtd

virsh

Welcome to virsh, the virtualization interactive terminal.

Type: 'help' for help with commands
'quit' to quit

virsh # help

Commands:

help print help
attach-device attach device from an XML file
attach-disk attach disk device
attach-interface attach network interface
autostart autostart a domain
capabilities capabilities
connect (re)connect to hypervisor
console connect to the guest console
create create a domain from an XML file
start start a (previously defined) inactive domain
destroy destroy a domain
detach-device detach device from an XML file
detach-disk detach disk device
detach-interface detach network interface
define define (but don't start) a domain from an XML file
domid convert a domain name or UUID to domain id
domuuid convert a domain name or id to domain UUID
dominfo domain information
domname convert a domain id or UUID to domain name
domstate domain state
domblkstat get device block stats for a domain
domifstat get network interface stats for a domain
dumpxml domain information in XML
freecell NUMA free memory
hostname print the hypervisor hostname
list list domains
migrate migrate domain to another host
net-autostart autostart a network
net-create create a network from an XML file
net-define define (but don't start) a network from an XML file
net-destroy destroy a network
net-dumpxml network information in XML
net-list list networks
net-name convert a network UUID to network name
net-start start a (previously defined) inactive network
net-undefine undefine an inactive network
net-uuid convert a network name to network UUID
nodeinfo node information
quit quit this interactive terminal
reboot reboot a domain
restore restore a domain from a saved state in a file
resume resume a domain
save save a domain state to a file
schedinfo show/set scheduler parameters
dump dump the core of a domain to a file for analysis
shutdown gracefully shutdown a domain
setmem change memory allocation
setmaxmem change maximum memory limit
setvcpus change number of virtual CPUs
suspend suspend a domain
ttyconsole tty console
undefine undefine an inactive domain
uri print the hypervisor canonical URI
vcpuinfo domain vcpu information
vcpupin control domain vcpu affinity
version show version
vncdisplay vnc display



Administrar KVM desde GUI a través de SSH.
Esta opción es mucho mas intuitiva y "user friendly"


aptitude install virt-manager xauth


Desde una maquina remota con X11 podemos acceder al servidor a través de ssh habilitando la opción de gráficos.


ssh -X server_hostname_o_ip


El resultado será la GUI de Virt-manager en nuestro escritorio, de donde podemos administrar todas las maquina virtuales, crear nuevas y modificar las existentes.



viernes, 10 de julio de 2009

Instalar Clamav en Ubuntu desde repositorios

  • Simplemente ejecutamos:

aptitude update

  • Para usar en forma manual instalamos el paquete clamav


aptitude install clamav

  • Para usar automáticamente instalamos el paquete clamav-daemon.

aptitude install clamav-daemon

  • Para configurar clamav editamos los archivos:
clamav.conf o clamd.conf
freshclam.conf
  • Luego de configurar ClamAV con las opciones requeridas:

/etc/init.d/clamav-daemon restart