Category Archives: GNU/Linux

Montando /usr como read-only

El Filesystem Hierarchy Standard es una especificación que define una pautas y requerimentos para la construcción del árbol de directorios que constituye un sistema operativo tipo-UNIX. Algunas distribuciones GNU/Linux se adhieren a este estándar y otras no, los BSD tampoco. Algunos de los puntos pueden ser bastante discutibles, pero tiene aspectos interesantes.

Al principio me sorprendió que uno de los consejos fuera que el directorio /usr tendría que estar en una partición separada y montada como sólo lectura. Pero el objetivo es que /usr pueda ser compartido entre distintos servidores por red. A mi personalmente me parece más interesante pensando en aspectos de seguridad:  ¿quién es el guapo que mete un rootkit en los ejecutables de un sistema de sólo lectura?

Así que decidí montar en mi sistema el directorio /usr como read-only. Esta es la entrada correspondiente en el fichero /etc/fstab, en mi caso la partición correspondiente a /usr es /dev/sda6.

/dev/sda6    /usr    ext4    ro    0    1

Pero esto supone un problema, ¿cómo actualizo el sistema sin permiso de escritura en /usr? Fácil, el sistema puede remontarse (no hace falta desmontar y volver a montar, con el riesgo que esto supondría para la estabilidad), podemos usar mount con el parámetro remount para aplicar cambios en un sistema de ficheros montado. Ejemplos:

# mount /dev/sda6 /usr -o remount,ro
# mount /dev/sda6 /usr -o remount,rw

Lo que yo hice para facilitar las cosas fué añadir estas dos entradas de alias en /root/.bashrc

alias usrro='mount /dev/sda6 /usr -o remount,ro && mount | grep sda6'
alias usrrw='mount /dev/sda6 /usr -o remount,rw && mount | grep sda6'

Ahora puedo usar los comandos usrrw y usrro antes y después de actualizar el sistema. En estos comandos de alias, la parte que hay a partir de && es puramente informativa, así podemos asegurarnos que los cambios se han aplicado correctamente.

Si se diera el caso de que somos unos paranoicos de la seguridad, no estaría nada mal aplicar el mismo cuento a los directorios /bin y /sbin, aunque hacer particiones expresamente para directorios que ocupan tan poco puede parecer un poco ridículo. Quizás la solución sería que estos dos directorios, donde encontramos los comandos básicos del sistema, no estuviesen montados en una partición sinó en un fichero con la opción loop, aunque hay que tener claro que esto es peligroso, si se corrompiera dicho fichero nos quedaríamos con un sistema inusable.

Se aceptan ideas.

Habilitar el reinicio de X.org con ctrl+alt+backspace

xorg_logoUna de las coas que más me ha gustado siempre de X.org (implementación de X Window System) es su capacidad para reiniciarse con una combinación de teclas.

Es un problema típico tener una aplicación colgada que está molestando al resto del sistema, hasta el punto de no poder hacer nada, pero si esta aplicación corre sobre el entorno gráfico y se nos permite usar el teclado podremos reiniciar todo este entorno sin tener que reiniciar todo el sistema operativo, cosa que es de muy agradecer.

Hasta ahora esto era tan simple como hacer Ctrl + Alt + Backspace, pero alguien ha decidido que esto es peligroso y confuso para el usuario. Y a partir de la versión 1.6.0 del servidor X.org esta función ha sido deshabilitada por defecto, con lo que más de uno ha roto el teclado intentando la maldita combinación.

Para volver a la configuración anterior, hay un montón de formas; al igual que hay un montón de formas de arrancar este software (con .xinitrc o con .xsession, con la configuración en /etc/X11/xorg.conf o al vuelo con HAL, etc). Veremos los casos más típicos:

Generalmente, aunque ahora X.org ya soporta el arranque sin archivo de configuración gracias a HAL, la mayoria de los mortales seguimos usando /etc/X11/xorg.conf para definir cómo queremos que se comporte, por lo tanto este es el caso que explicaré. Si queremos recuperar esa funcionalidad (conocidacomo zap o zapping) podemos añadir a xorg.conf las siguientes líneas:

Section "ServerFlags"
    Option  "DontZap" "false"
EndSection

Entonces buscamos la sección InputDevice y añadimos:

Option  "XkbOptions" "terminate:ctrl_alt_bksp"

Ahora, cuando hagamos iniciado Xorg de nuevo, podemos reiniciarlo con la famosa combinación de teclas.

Reiniciar Linux automáticamente en caso de un kernel Panic

Un Kernel Panic es un error del núcleo del sistema operativo (o de uno de sus módulos) que muestra un dump con información de depuración, esto puede ser útil a desarrolladores del sistema operativo para esclarecer las causas del error. Pero a la mayoría de los mortales no les va a servir de nada esa información casi críptica. Además, en caso que la máquina sea un servidor, lo último que queremos es que deje de dar servicio, entonces la solución pasa por programar un reinicio automático en caso de Kernel Panic. Para conseguir esto haremos lo siguiente, abrimos el archivo /etc/sysctl.conf y añadimos la siguiente línea:

kernel.panic = 10

Si ahora nuestro servidor decide morir, resucitará al cabo de 10 segundos, iniciando el arranque desde cero. El problema que esto supone es que podemos tener un servidor en problemas constantes y ni siquiera darnos cuenta.

Una posible solución sería hacer que la máquina envíe un correo electrónico (ver mi anterior arículo Enviar e-mail desde la consola) al administrador avisándole que se ha reiniciado, este correo electrónico puede incluir el contenido de /var/log/messages para entender qué es lo que estaba pasando justo antes del reinicio.

Diferencias entre locate, slocate, mlocate y rlocate

Analizamos estos cuatro programas de GNU/Linux que sirven exactamente para lo mismo (buscar archivos en el disco) y que se usan casi de la misma forma.

Ejemplo de uso, buscamos el archivo sshd_config en todo el sistema de ficheros:

$ locate sshd_config

/etc/ssh/sshd_config

/usr/man/man5/sshd_config.5.gz

LOCATE

El comando locate se usa para buscar archivos en el disco duro. A diferencia del comando find, que es increíblemente potente, locate sólo puede hacer búsquedas simples por nombre de archivo. A cambio de sus limitadas posibilidades, locate es rápido, muy rápido. El truco está en que no busca a lo largo del disco duro como hace find, sinó que busca en una base de datos propia. Esta base de datos es actualizada por el programa updatedb.

Cuando ejecutamos updatedb, esta base de datos se actualiza. Si hacemos cualquier cambio en los archivos (crear, borrar, mover, etc) y después buscamos algo con locate, este va a buscar en una base de datos que no se corresponde exactamente al estado actual del disco. Es por esto que la mayoría de distribuciones de GNU/Linux ejecutan updatedb de forma automatizada (usando cron) de forma periódica, pero la búsqueda puede no ser perfecta a no ser que usemos el comando updatedb justo antes de usar el comando locate.

El primer problema que tiene locate es que updatedb tarda bastante en recorrer el disco duro. El segundo, mucho más grave, es que si existe una base de datos de todos los archivos del disco y esta puede ser consultada por los usuarios, estos pueden conocer el contenido de los directorios a los que no tienen acceso.

Los comandos locate, updatedb y find (entre otros) són parte del paquete findutils de GNU.

SLOCATE

Ya hemos visto los problemas de seguridad que nos encontramos al guardar una base de datos de los archivos en disco si esta puede ser libremente consultada. Slocate (o Secure Locate) viene a solucionar este problema. La gracia está en que cuando se ejecuta updatedb, la base de datos no guarda sólo el nombre de los archivos, sinó que añade los permisos (propietario, grupo, etc). De esta forma, slocate sólo muestra al usuario la información adecuada, la de los archivos a los que tiene acceso.

MLOCATE

En slocate vemos que el problema de seguridad está solucionado, ahora vamos a conocer mlocate (o Merging Locate) que además de implementar la misma solución (está basado en slocate), soluciona el grave problema de velocidad del comando updatedb. Lo que hace mlocate cuando ejecutamos updatedb no es crear una base de datos entera de todos nuestros archivos, sinó guardar sólo las diferencias a la base de datos original, por lo que updatedb es mucho más rápido si han habido pocos cambios.

RLOCATE

Aquí vamos a dejar de lado la tradicional idea de ejecuto updatedb, luego busco. Pero también dejamos de lado la simpleza de los programas anteriores. Rlocate consta, además, de un módulo para el kernel y de un daemon, todos bajo el mismo nombre. Estos son necesaros para que la base de datos se actualize sóla y no necesitemos usar updatedb. A medida que vamos creando/eliminando archivos en el sistema, rlocate crea bases de dafos diferenciales en tiempo real. Sólo vamos a usar updatedb para optimizar la base de datos. Parece ser la mejor solución, el único problema es el propio hecho de estar cargando un módulo y un daemon sólo para poder buscar archivos, la mayoría de la gente prefiere la simpleza de usar slocate o mlocate.

Una vez analizados los cuatro, está muy claro que ganan mlocate y rlocate, el uso de uno u otro dependerá de las ganas de complicarse preparando el sistema para que funcione rlocate (que tampoco hay para tanto) o si preferimos la simpleza de instalar y usar. Aunque en realidad lo normal es no molestarse mucho con el tema y usar lo que incluya nuestra distribución, que con toda probabilidad va a ser slocate o mlocate.

Copiar y pegar en Linux

Listado de conocimientos técnicos necesarios para entender este post con éxito:

  • Hay que saber seleccionar un texto
  • Hay que saber pulsar botones en un mouse
  • Hay que saber lo que es un ordenador y como interactuar con él

Podría empezar diciendo algo así como: ¡No se asusten, es igual que en Ruindows!… pero la verdad es que el hecho de copiar y pegar en GNU/Linux (o en cualquier otro sistema operativo tipo UNIX) tiene su gracia. Por supuesto que podemos hacer el clásico Ctrl+C para copiar y Ctrl+V para pegar, y también con el menú Edición –> Copiar, etc. Pero esto no nos importa porque ya sabemos hacerlo :D

Vamos a hablar del tercer botón del mouse. El tercer botón del mouse es, generalmente, el que hay en la ruedecita de scroll, no pienso analizar el resto de posibilidades. Tanto si estamos en modo texto o en modo gráfico. Tanto si estamos usando un programa de edición de textos, un navegador, una terminal o cualquier otra cosa con textos seleccionables, un clic con el tercer botón (o botón del medio) del mouse pegará el texto que tengamos seleccionado. Así de simple. No hay más.

Por si no ha quedado claro pondré un ejemplo a nivel de parbulario. Seleccionamos una palabra, frase, párrafo, texto, página web, etc como lo hemos hecho toda la vida y hacemos clic con el botón del medio en el lugar donde queramos copiar el contenido.

Si nuestro mouse no tiene más que dos botones, hacer clic con los dos a la vez genera el mismo evento que hacerlo con el tercer botón.

Cómo espeficar el teclado en español en Xorg

Teclado EspañolEste post puede parecer una tonteria, por evindente, pero recuerdo hace tiempo haberme encontrado con ese problema y no tener ni idea de cómo solucionarlo. Si usas KDE o Gnome, tienes un bonito menú donde configurar el layout del teclado y ponerlo en español.

Pero si eres usuario de algun window manager más simple y DIY, tienes que añadir lo siguiente al fichero /etc/X11/xorg.conf dentro del apartado Section “InputDevice” que hace referencia al teclado. Tenemos que poner el modelo de teclado (número de teclas) y por supuesto el mapeo de teclado “es”.

Option "XkbModel" "pc105"

Option "XkbLayout" "es"

Ahora puedes usar tu mapeo de teclado en cualquier aplicación gráfica sin tener que configurar nada más. Otra forma de hacer lo mismo sería usar el comando setxkbmap:

# setxkbmap -model pc105 -layout es

Ya que hablo del fichero xorg.conf, aprovecho para anunciar xorg-conf.org, un nuevo proyecto que espera realizar una base de datos de configuraciones para xorg.conf, podéis enviar allí vuestros ficheros de configuración.

Linux From Scratch: ahora sí

LFSYa he terminado mi Linux From Scratch en el portátil. Sinceramente pensaba que sería mas díficil, simplemente hay que copiar, entender y pegar una serie de comandos que ya vienen hechos. Esto no significa que no me haya gustado, he aprendido muchísimo en pocos dias (no lo he contado en horas para no asustarme). La gracia está en el hecho de poder construir el sistema como a tí te dé la gana, pero por ser la primera vez me he ceñido al guión, aunque tengo ganas de probar algunos de los hints que proponen en la web oficial.
Ahora mismo tengo un sistema base que no sirve para mucho, y tengo que arreglar un problema que me dan las locales a la hora de leer según qué página man, y lo más importante, conseguir que me detecte la eth0, no sé que habré hecho mal pero espero resolverlo. Al menos no me he llevado ningún kernel panic, que ya es mucho.
Si te gusta conocer como funciona y se construye un sistema operativo GNU/Linux, no te puedes perder esta maravilla. Muy recomendale.

Linux From Scratch

Para los que no conozcan el proyecto, LFS (Linux From Scratch) es una “distribución” GNU/Linux que no encaja muy bien en la definición de distribución, pues no hace nada por tí, sino que espera a que tu hagas TODOS los pasos.

Me explico, Linux From Scratch consta básicamente de un manual que nos explica cómo crear una distribución Linux desde cero; los paquetes que hay que bajar, de dónde bajarlos, cómo compilarlos y en qué orden, cómo crear el árbol de directorios y los archivos de configuración, etc. ¿Y para qué sirve esta tonteria? Pues, a mi modo de ver sirve para aprender cómo funciona realmente un sistema GNU/Linux internamente. Aunque no sólo sirve para esto, de hecho con la ayuda de LFS podemos hacer una distribución 100% a nuestro gusto, o usarla de base para un proyecto mayor (como es el caso de Arch).

Para ello sólo necesitamos una partición en nuestro disco, que es donde se llevará a cabo el largo proceso de instalación, y un sistema host que usaremos para realizar el proceso (puede ser un Live CD o una instalación de Linux en una partición aparte). En mi caso estoy realizando el proceso en mi portátil, usando Arch como sistema host e instalando LFS en una partición de 2GB. Si todo el proceso funciona bien y consigo reiniciar con un sistema mas o menos funcional, intentaré añadir los paquetes que hagan falta (ayudándome del proyecto BLFS) para conseguir un sistema usable de verdad.

De momento he compilado las herramientas básicas, he hecho un chroot para entrar en el supuesto sistema (que de momento sirve de bien poco), y sigo compilando y compilando software a mano (nótese la diferencia con Gentoo, aquí hay que desempaquetar, hacer el ./configure, make, make install para cada paquete, LFS nos ayuda proporcionando los comandos con sus parámetros adecuados). Soy consciente que en cualquier momento puedo quedarme estancado (por problemas en los tests de compilación, o por cometer algún error, o por falta de tiempo/ganas, etc), pero de momento parece muy interesante, y aunque no llegase al final, por lo menos habré aprendido muchas cosas sobre cómo se construye una distribución GNU/Linux, qué paquetes dependen de qué otros en un sistema básico, cuales necesitan tal o cual libreria, etc.

[sigue mi aventura con LFS]

¿Fácil = mejor?

Ultimamente me veo rodeado de muchas personas que empiezan a sentir interés por el software libre y en especial por las distribuciones Linux. Cuando me piden que les recomiende alguna distribución acostumbro a recomendar Kubuntu, no por que me parezca la mejor (de hecho veo a Ubuntu algo mas pulida, pero prefiero recomendar KDE a gente que sé que va a trastear con las posibilidades que ofrece este escritorio).

Por lo que estoy viendo, lo que más cuesta entender es el por qué coño hay tantas distribuciones, ¿podré hacer tal cosa con esta?¡Claro!¿Pues donde está la diferencia entre la distribución X y la distribución Y? Les cuento que básicamente la diferencia la marcan tres aspectos: el instalador, el software por defecto y la forma en que el sistema va a actualizarse o van a instalarse/desinstalarse más programas en él. Cuando me preguntan por qué estoy recomendándoles una distribución que no uso, o porqué no les recomiendo la distribución que uso en casa, tengo que explicar que les estoy recomendando algo fácil¿y entonces porqué no usas tú Ubuntu si es mas facil? La respuesta es muy simple:

La mejor distribución es la que más se adapta a tí y a tus necesidades, y menos te pide que tú y tus necesidades os adaptéis a ella. Si vas a empezar con esto usa algo fácil (primero tienes que familiarizarte, ya habrá tiempo para usar Gentoo, Arch Linux o Slackware mas tarde si hay interés en aprender), si vas a montar un servidor no vas a necesitar para nada el entorno gráfico (mejor usa una distribución que pueda instalarse sin él), si vas a usarla en un Pentium 133 no le instales escritorios como KDE o Gnome (usa Fluxbox por ejemplo), si la vas a usar para jugar… oh wait!

Yo quiero algo que se adapte a mis necesidades, pero a mis amigos no les recomendaria nunca algo que se adaptase a mis necesidades sinó a las suyas, que generalmente son: facilidad de uso y un entorno bonito. En mi opinión no es mejor una distribución por que la pueda instalar mi madre.

[Actualización]
15 dias después de escribir este post, estaba curioseando en OSnews y he encontrado una comparativa Arch Linux VS Slackware. Atención al primer párrrafo:

This is an article outlining the differences between –what I believe– are the two best Linux distros around today. Mind you though, “best” doesn’t always mean “easy”.

…curioso.

Perl/Linux

Siento mucho poner el tag curiosidades a una distribución Linux, pero es que esta se lo merece mucho. Se trata de una distribución donde TODOS los programas están escritos en Perl. Como ellos dicen, “from /sbin/init to /bin/vi. Perl/Linux usa algunos programas del proyecto Perl Power Tools (PPT), otros de Jay Kominek’s Perl/Linux page. El resto de las herramientas necesarias han sido escritas en Perl de la nada, como por ejemplo: plHttpd, edit, vi, mount, xargs, login, passwd, getty, halt, init, ifconfig, route. Según sus autores, el único código compilado es el kernel linux, perl y uClibc.

Como dato curioso, en la web del proyecto hay un texto llamado Linux and the Perl, que es una parodia del mítico Linux and the GNU Project de Richard Stallman. Pongo algunas comparaciones:

Empieza con…

Many computer users run a modified version of a Perl system every day, without realizing it. Through a peculiar turn of events, the version of Perl systems which is widely used today is more often known as “Linux”, and many users are not aware of the extent of its connection with the Perl Project. Linux and the Perl

Many computer users run a modified version of the GNU system (18k characters) every day, without realizing it. Through a peculiar turn of events, the version of GNU which is widely used today is more often known as “Linux”, and many users are not aware of the extent of its connection with the GNU Project. Linux and the GNU Project

Y sigue…

Perl and perl based software was the largest single contingent, around 30% of the total source code, and this included some of the essential major components without which there could be no system. Linux itself was about 3%. So if you were going to pick a name for the system based on who wrote the programs in the system, the most appropriate single choice would be “Perl”. Linux and the Perl

GNU software was the largest single contingent, around 28% of the total source code, and this included some of the essential major components without which there could be no system. Linux itself was about 3%. So if you were going to pick a name for the system based on who wrote the programs in the system, the most appropriate single choice would be “GNU”. Linux and the GNU Project

Ya más hacia el final…

When Linus Torvalds wrote Linux, he filled the last major gap. People can now put Linux together with the Perl system to make a complete free system: a Linux-based Perl system (or Perl/Linux system, for short). Linux and the Perl

When Linus Torvalds wrote Linux, he filled the last major gap. People could then put Linux together with the GNU system to make a complete free system: a Linux-based version of the GNU system; the GNU/Linux system, for short. Linux and the GNU Project

Y podria seguir comparando el texto entero, jajaja.