martes, 1 de diciembre de 2009

Como compilar un módulo del kernel

La primera pregunta al leer el título de post será ¿Para qué quiero compilar un módulo del kernel?. Pues bien, si trabajas habitualmente con linux y con hardware variado llegará el día en que los drivers suministrados por el fabricante para dicho hardware no se corresponderán con el kernel que tienes en la máquina donde has instalado el hardware, con lo cual, es casi seguro que al intentar cargar el módulo te dé un error y por consiguiente, tendrás que compilar el fuente de ese módulo para que funcione en ese kernel. Vamos a ver los pasos necesarios:

1.- Necesitaremos tener el código fuente del núcleo. En mi caso (CentOS 5.3) deberemos buscar en el siguiente enlace http://vault.centos.org/ la versión exacta de nuestro kernel.
$ uname -r

En mi caso aparece lo siguiente:
2.6.18-128.el5

Buscaremos por el enlace que hemos indicado antes hasta encontrar el que nos hace falta, en mi caso sería:
kernel-2.6.18-128.el5.src.rpm

Ahora que ya tenemos el kernel necesario solo hace falta hacer lo siguiente:
$ rpm -Uvh kernel-2.6.18-128.el5.src.rpm
$ cd /usr/src/redhat/SPECS
$ rpmbuild -bp --target i386 kernel-2.6.spec

Con esto ya tenemos las fuentes del núcleo, concretamente en /usr/src/redhat/BUILD/kernel-2.6.18/linux-2.6.18.i386/ (por lo menos en mi caso).

2.- Ahora toca proceder con la compilación en sí. Para ello vamos a utilizar un módulo de ejemplo. Crearemos un directorio nuevo en la rama del kernel, por ejemplo, "demo". Dentro de ese directorio crearemos un fichero:
$ vi Makefile

Añadimos lo siguiente:
obj-m:= hola.o
KERNEL = $(shell uname -r)
all:
make -C /lib/modules/$(KERNEL)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(KERNEL)/build M=$(PWD) clean

3.- Ya tenemos el fichero "Makefile". Hay que tener en cuenta que donde pone "hola.o" hay que poner el nombre del fichero que vamos a compilar, pero en vez de .c poner .o. En nuestro caso, como veremos a continuación el fichero fuente será "hola.c" y será tal y como vemos a continuación (dentro del directorio "demo"):
#include 
#include

MODULE_LICENSE("Dual BSD/GLP");

static int hola_init(void)
{
printk(KERN_ALERT "Cargando el modulo hola...\n");
return 0;
}

static void hola_exit(void)
{
printk(KERN_ALERT "Descargando el modulo hola...\n");
}

module_init(hola_init);
module_exit(hola_exit);

4.- Ya tenemos todo lo necesario para compilar el módulo, en nuestro caso tenemos el fichero "hola.c" en el caso de que fuese un fuente suministrador por el fabricante de hardware pues sería lo mismo pero cambiando los nombres correspondientes. Bien, para compilar simplemente hay que ejecutar el comando "make":
$ Make

5.- Una vez compilado solo queda cargar el módulo (como root), en nuestro caso sería así:
# insmod hola.ko

6.- Sólo queda verificar que el módulo está cargado:
# lsmod |grep hola
hola 5504 0

o también, en nuestro nuestro módulo hola.ko, viendo el mensaje que nos aparece en el log del sistema:
# tail -f /var/log/messages

Que nos mostrará lo siguiente:
Jan  1 12:21:20 centos53 kernel: Cargando el modulo hola...

7.- Para descargar el módulo del kernel ejecutamos lo siguiente:
# rmmod hola.ko

8.- Solo recordar que deberéis copiar el módulo en /lib. Crearemos un directorio donde corresponda y copiamos el fichero allí:
# mkdir -p /lib/modules/$(uname -r)/kernel/drivers/hola
# cp hola.ko /lib/modules/$(uname -r)/kernel/drivers/hola/

Añadir la entrada que corresponde en /etc/modprobe.conf:
alias hola hola

Ejecutamos:
# depmod -a

Con esto nos basta ejecutar lo siguiente para cargar el módulo:
# modprobe hola

Saludos.

miércoles, 19 de diciembre de 2007

Plan 9 en VMware Workstation 6

Buenas...

Después de un tiempo sin escribir... a veces por mucho trabajo y otras por desgana, pues aquí estoy. Hoy os contaré como instalar Plan 9 (http://plan9.bell-labs.com/plan9/) en VMware workstation 6 (http://www.vwmare.com/). La verdad es que había probado este sistema operativo así por encima, y tenía ganas de meterme más con él, con lo cual, aprovechando que me había bajado la versión 6 de VMware me puse a ello.

Lo primero que haremos será crear una nueva máquina en VMware. Seleccionaremos la opción "Typical". Lo único que habrá que tener en cuenta es la elección del sistema invitado (guest), que será "Other -> Other", la red como "Bridge" y aparte de esto, pues el tamaño del disco. Yo lo he creado con uno de 4GB, pero vamos, eso es cosa vuestra. Una vez que hayáis hecho varios "siguientes" tendréis la máquina creada. Ahora tendreis que editar la configuración de la máquina y asignar al CD-Rom la imagen ISO de Plan 9.

Bien, ya tenemos la máquina virtual creada, ahora pasaremos a instalar el sistema en sí (cosa que es de lo más fácil). Arrancamos la máquina virtual, veremos que arranca desde el CD y nos mostrara tres opciones. Seleccionaremos la opción 1, para instalar el sistema en nuestro disco duro. A partir de ahí yo lo único que he hecho es dejar casi todas las opciones por defecto, pero os plasmaré aquí las mismas:

Use DMA for ide drives[yes]: yesMouseport is (ps2, ps2intellimouse, 0, 1, 2)[ps2]: ps2
vgasize [640x480x8]: inst/textonlymonitor is [xga]: xga

Después de estas opciones nos dirá que no puede abrir el display y por tanto, la instalación seguirá en modo texto, que es lo que nosotros queremos. Nos aparece lo siguiente (En el "%" hay que poner inst/textonly).

init: starting /bin/rc%inst/textonly
Task to do [configfs]: (intro)File system (fossil, fossil+venti)[fossil]: (intro)

Task to do [partdisk]: (intro)
Disk to partition (sdC0, sdD0)[no default]: sdC0 (intro)
Install mbr (y, n)[no default]: y (intro)
>>>w (intro)
>>>q (intro)
Task to do [prepdisk]: (intro)
Plan 9 partition to subdivide (/dev/sdC0/plan9)[/dev/sdC0/plan9]: (intro)
>>>w (intro)
>>>q (intro)
Task to do [fmtfossil]: (intro)
Fossil partition to format (/dev/sdC0/fossil)[/dev/sdC0/fossil]: (intro)
Task to do [mountfs]: (intro)
Fossil partition (/dev/sdC0/fossil)[/dev/sdC0/fossil]: (intro)
Task to do [configdist]: (intro)
Distribution is from (local, net)[local]: (intro)
Task to do [mountdist]: (intro)
Distribution disk[no default]: /dev/sdD0/data (intro)
Location of archives [browse]: (intro)
/% exit (intro)
Task to do [copydist]: (intro)

Ahora se copiara el sistema a nuestro disco duro.

Task to do [bootsetup]: (intro)
Enabled boot method (floppy, plan9, win9x, winnt)[no default]: plan9 (intro)
Install the plan 9 master boot record (y, n)[no default]: y (intro)
Task to do [finish]: (intro)

Aqui se termina la instalación. Aclarar en la parrafada anterior, que cuando solo pongo "(intro)", es que no hay nada que poner, con la opción por defecto nos vale.

A partir de aquí tuve que hacer un par de retoques para que todo fuese bien. De entrada, antes de arrancar la máquina tendréis que, o bien eliminar el CD-Rom de la máquina virtual o bien configurarlo como SCSI. Esto es porque si lo dejas tal cual, la máquina virtual no arranca, por lo menos, a mi no me arrancaba, se quedaba en "Init starting /bin/rc". Por cierto, cuando os aparezca "user [none]": tenéis que poner "glenda".

Despues de lo anterior no deberiais tener problema para arrancar la máquina virtual y que os aparezca el entorno gráfico de plan 9. Aquí os podéis encontrar con el problema de que la pantalla de la máquina virtual no refresca bien, es decir, las ventanas dentro del entorno de vmware no refrescan bien y eso nos dará problemas para poder ver bien las pantallas y manejarnos con soltura. Si buscáis con el puntero del ratón los limites de las ventanas y las moveis un poco, veréis que esa ventana refresca hasta que de nuevo hagáis cosas. Para que las ventanas os refresquen perfectamente, deberéis desactivar la acceleración hardware de la siguiente forma: "echo hwaccel off > /dev/vgactl".

Con esto último ya os tiene que funcionar todo correctamente. A partir de aquí... pues nos queda mucho mucho mucho que investigar y aprender... pero lo dejamos para otros post, ok?
Saludos.

miércoles, 29 de agosto de 2007

Acceso SSH a nuestras máquinas sin pass.

Lo pasos que se describen a continuación os permitirán acceder a través de SSH a otros servidores sin tener que estar constantemente metiendo la clave. Por supuesto, lo tendréis que hacer desde un Linux. Lo ideal, como es mi caso, es tener una red interna y no accesible desde el exterior, tipo entorno de desarrollo, mas que nada para estar tranquilos, porque si alguien entrase a nuestra máquina tendría acceso directo a todas las demás que hayamos configurado de la forma en que mostramos a continuación.

Lo primero es generar en vuestro Linux la clave pública y privada, cosa que haremos con el siguiente comando: ssh-keygen -t rsa

Después, en la máquina a donde queremos acceder y dentro del "home" del usuario con el que queremos acceder creamos el siguiente fichero: /home/usuario/.ssh/authorized_keys

El contenido del fichero anterior será lo mismo que hay en el fichero /home/usuario/.ssh/id_rsa.pub de nuestro Linux local.

Hechos los pasos anteriores podréis acceder sin que la máquina remota os solicite el pass.

Tenéis mas información en el siguiente enlace:

http://www.ibm.com/developerworks/aix/library/au-satdistadmin/?ca=dgr-lnxw57sshunix&S_TACT=105AGX59&S_CMP=GRsite-lnxw57

miércoles, 4 de julio de 2007

Ldap no levanta el puerto por defecto (389)

Buenas...

Pues en esta ocasión, el problema es el que indica el título. Un compañero había instalado un servidor ldap, lo habiamos estado configurando y lo habíamos dejado funcionando. El caso es que al día siguiente arrancó la máquina tan normal y... el servidor ldap no funcionaba, levantaba el proceso correctamente pero el puerto 389 (el generico que ldap abre) no aparecía abierto. Así que mientras el "ps fax" nos mostraba el demonio "sldapd" corriendo, al hacer netstat -atn dicho puerto no aparecía. Con este problema era imposible hacer nada ya que para cualquier cosa hay que conectar, aunque sea localmente.

Después de buscar, cambiar, probar y borrar un montón de cosas durante un día entero, apareció la solución, que es tan fácil como borrar los ficheros __db.* que hay dentro del directorio "/var/lib/ldap". Algo así como "rm /var/lib/ldap/__db.*"

Estos ficheros creo que son unos ficheros cache, no se muy bien cual es su función, pero como podéis ver, os pueden crear un problema.

Espero que os sirva.

Saludos.

lunes, 2 de julio de 2007

I Olimpiada Informática Universitaria CELL+ LINUX

Pues eso, tal y como podéis leer en el título, me he matriculado en ese curso que da la UIMP... La verdad es que lo hice hace un par de semanas, siempre tiendo a mirar si hay algún curso interesante en verano relacionado con la informatica, o alguna charla y mira por donde aparece este curso. Impresionante... y encima aquí, en Santander.

Ya os contaré que tal esta... aunque hasta septiempbre nada.

Si queréis saber mas sobre el acceder a la web de la UIMP http://www.uimp.es y en búsqueda poner "informatica". Os saldrá la el título y pinchando sobre el podréis ver todo lo que ofrece.

Si alguien va que me mandé un mail o que escriba un comentario. No tengo intención de presentarme al concurso... pero bueno, quien sabe.

Saludos.

viernes, 29 de junio de 2007

Problemas con la Consola en VMWare ESX

Hola de nuevo...

El título describe perfectamente el problema.

Por cuestiones varias, en la empresa donde trabajo, hemos tenido que poner un servidor ESX 3.0 fuera de la subred en que tenemos los demás... y resulta que cuando tu ESX no esta en la misma Subred sale a relucir un bug que no te deja acceder. La solución, añadir la siguiente línea vmauthd.server.alwaysProxy=TRUE en "/etc/vmware/config".

Este mismo post (parecido) aparece en http://bevirtual.blogspot.com/ allí incluso hay mas detalles. El post es mio pero me parece mas util que esté en ese blog (que me gusta mucho) dedicado a virtualización aparte de en este que estás leyendo. Por mi parte prefiero que haya un par de sitios donde puedas encontrar soluciones a los problemas, antes de que tengas que visitar 20.

Nada mas.

Saludos.