Dic 30 2011

Configurar servidor pxe para instalación de windows en red

Tag: Softwaretres @ 9:57 pm

El objetivo, es montar un servidor pxe, para poder instalar un windows con arranque con red.

La máquina donde pondremos pxe tiene las siguientes características:

  • Ubuntu 11.10
  • kernel linux  3.0.0-14-generic

DNSMasq:

apt-get install dnsmasq-utils dnsmasq
mkdir -p /var/ftp/tftpboot
mkdir /var/ftp/tftpboot/pxelinux.cfg

Configuramos el fichero  /etc/dnsmasq.conf:

no-resolv
local=/localnet/
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h
dhcp-option=3,10.1.10.1
dhcp-boot=pxelinux.0
enable-tftp
tftp-root=/var/ftp/tftpboot

Syslinux

Instalación:

apt-get install syslinux

Se copian a mano los ficheros pxelinux.0 y  la carpeta memdisk en los directorios preparados para ello:

find / -name  pxelinux.0
cp /usr/lib/syslinux/pxelinux.0 /var/ftp/tftpboot/
cp -rf /usr/lib/syslinux/memdisk  /var/ftp/tftpboot/

Imagen de windows.

Cogemos la imagen de windows,  y la cargamos en /var/ftp/tftpboot/

PXELinux

Creamos el fichero de configuración para pxe, que será el encargado del arranque por red.

touch /var/ftp/tftpboot/pxelinux.cfg/default

Esta configuración es la que me ha funcionado. Ojo, hay que cambiar el nombre de la imagen de arranque.

nano /var/ftp/tftpboot/pxelinux.cfg/default

DEFAULT pe
PROMPT 60

LABEL pe
LINUX /memdisk
APPEND iso
INITRD /winpe_x86.iso

Para esta instalación, nos hemos basado en las siguientes guías:

  • http://www.savelono.com/linux/how-to-install-windows-7-over-a-network-using-linux-pxe-dnsmasq-and-samba.html
  • http://www.linuxquestions.org/questions/linuxquestions-org-member-success-stories-23/building-a-windows-livecd-with-barts-pe-for-linux-users-243478/
menéame menéame -

May 30 2011

Cuando usar ls y cuando usar find

Tag: Softwaretres @ 10:54 am

En general, a la hora de hacer scripts con listados de archivos y directorios, el comando “ls” es más que suficiente.

Sin embargo, a la hora de querer hacer un listado con la ruta completa, haciendo ls -R,  el resultado es parecido a este:

# ls -R

dir:
arch1 arch2 arch 3 arch4

Este tipo de salida, es difícil de procesar, después en los scripts.  Lo deseable es contar  con salidas:

dir/arch1
dir/arch2
dir/arch3
dir/arch4

Para conseguir esto, lo útil es usar find con un modificador de profundidad, para evitar que se listen todos los niveles de la jerarquía:

find /dir/* -maxdepth 0′

Os dejo un enlace al manual, para ver otros modificadores: http://unixhelp.ed.ac.uk/CGI/man-cgi?find

menéame menéame -

May 11 2011

Reducir el tamaño de la particion de swap en LVM

Tag: Softwaretres @ 10:00 am

Por defecto, la instalación de CENTOS hace unas particiones inmensas de swap, que están muy lejos del tamaño que vamos a querer usar nosotros.

Vamos a hacerlo a través de la consola.

Primero, reducimos el tamaño de SWAP, desmontando la paginación, y volviendo al estado antiguo.

swapoff -v /dev/VolGroup00/LogVol01
lvreduce  /dev/VolGroup00/LogVol01 -L 512M
mkswap  /dev/VolGroup00/LogVol01
swapon -va
cat /proc/swaps

Más información: http://www.centos.org/docs/5/html/Deployment_Guide-en-US/s1-swap-removing.html

menéame menéame -

Mar 01 2011

La gestión de los logs en bash script.

Tag: Software, technodummiestres @ 8:33 pm

Tener trazas es vital para encontrar los problemas cuando ocurren. Y ocurren. Vamos a ver hoy como hacer una gestión de creación, trazado y borrado de logs en nuestros propios scripts.

Donde se guardan los logs

Por defecto, los ficheros de log se guardan en la carpeta /var/log/X, siendo X el programa que los generó.

En mi caso, por problemas de permisos en la máquina donde los ejecuto, los guardo en /tmp.

Crear el fichero de log

Para tener más información, mis ficheros de log contienen en su nombre qué usuario es el que generó la traza.

LOG=/tmp/$APP.$(whoami).log

Mensajes de log

Cada mensaje de log, está identificado por la aplicación que lo generó, así como la hora minuto y segundo en que se generó la línea:

function log {

echo [$APP $(date +%H:%M:%S)] $@ >> $LOG

}

El uso de esta función sería:

log ‘mensaje de prueba 1. Ejecuto en directorio’ $PWD

Sentíos libros de añadir cualquier información más a la traza.

Borrar las trazas cuando exceden de un determinado tamaño.

No se puede llenar el sistema de archivos. Sobre todo cuando es una tarea periódica que ejecuta, por ejemplo todos los días.

Por ello, antes de empezar cada ejecución yo tengo una función de validar si el log ya existe, y, si excede un determinado tamaño, se borra y se empieza uno nuevo

function openLog {

LOG_LOG=$1

LOG_APP=$2

# If log is bigger than maxsize, delete it

if [ -e $LOG_LOG ] ; then

SIZE=$(stat -c %s $LOG_LOG)

if [ $SIZE -gt $MAXSIZE ] ; then

echo ‘borrando log’

rm -rf $LOG_LOG

fi;

fi;

# Create log if it doesn’t exist.

if [ ! -e $LOG_LOG ]; then

touch $LOG_LOG

fi;

}

# Create log if it doesn’t exist.

if [ ! -e $LOG ]

touch $LOG

}

Conclusiones

Es, por tanto, necesario comenzar siempre la ejecución de nuestros script abriendo el fichero de log, que lo creará si no existe o lo borrará si es demasiado grande.

Sentíos libres de utilizar y mejorar estas funciones ampliando su funcionalidad o la cantidad de información que vuelcan al sistema.

menéame menéame -

Ene 25 2011

Lo mínimo indispensable para depurar un script en perl

Tag: Softwaretres @ 10:30 am

“Yo no quiero saber perl. No quiero desarrollar nada nuevo. Sólo quiero depurar un script “

Aquí está lo mínimo para ser capaces de depurar en poco tiempo un script. Para empezar, para lanzar el script usamos el flag -d:

perl -d SCRIPT

Una vez dentro del depurador, observamos que se parece muchísimo al gdb. Aquí está lo mínimo para ser capaces de depurar con cierta soltura:

  • q: quit
  • l: lista n lineas
  • n: next
  • s:step. Ejecuta la siguiente línea sin entrar en el propio código.
  • p: print. Imprime los valores de las variables.
menéame menéame -