Algo de Linux: diciembre 2011

martes, 20 de diciembre de 2011

Crear un CD-ROM arrancable de GRUB con floppies de herramientas

A veces necesitamos un CD de arranque para reparar GRUB. Bien, pues esto es algo muy sencillo de hacer si tenemos instalado GRUB2 en nuestra máquina.

Para crear una iso de arranque en Debian Lenny, simplemente ejecutamos:

$ grub-mkrescue nombredearchivo.iso

Si en lugar de Lenny tenemos Squeeze:

$ grub-mkrescue -o nombredearchivo.iso

Y ya está. Con ésto crearemos una imagen iso que podemos quemar en un CD para rescatar grub en caso de fallo.

Para probar que funciona, podemos usar qemu:

$ qemu -cdrom nombredearchivo.iso

Ahora imaginemos que necesitamos actualizar la bios de un equipo antiguo, y que la única forma de actualización de la bios de este equipo es mediante disquete. Podemos crear una imagen del disquete de actualización de la bios en un archivo (por ejemplo: flashbiosnec.img) y añadirlo a la iso del CD-ROM que acabamos de crear.

Veamos cómo añadir imágenes de floppies a nuestra iso:

Primero.- Creamos un directorio de trabajo en nuestro home:

$ mkdir -p iso/boot/grub

Segundo.- Vamos a usar memdisk para cargar las imágenes de floppy. Por tanto, tendremos que copiar memdisk al directorio iso/ de nuestro home. Memdisk forma parte de syslinux, así que, si no tenemos instalado syslinux, primero lo instalamos:

$ apt-get install syslinux

Y luego copiamos memdisk al directorio iso/:

$ cp /usr/lib/syslinux/memdisk iso/

Tercero.- Copiamos nuestra imagen de floppy (flashbiosnec.img) al directorio iso/:

$ cp flashbiosnec.img iso/

Y creamos un fichero grub.cfg en iso/boot/grub/:

$ nano iso/boot/grub/grub.cfg

Con el siguiente contenido:

set menu_color_normal=green/black
set menu_color_highlight=red/white

menuentry "Actualizar BIOS NEC PowerMate VL4" {
linux /memdisk
initrd /flashbiosnec.img
}

  • La entrada set menu_color_normal=green/black define el color de texto y fondo de la entrada.
  • La entrada set menu_color_highlight=red/white define el color de texto y fondo cuando la entrada se encuentra seleccionadada.
La opción de menú que permite arrancar la imagen de floppy es:

menuentry "Actualizar BIOS NEC PowerMate VL4" {
  linux /memdisk
  initrd /flashbiosnec.img
}


donde:


menuentry "Actualizar BIOS NEC PowerMate VL4" {
}


Define la entrada con el texto que se va a mostrar en el menú.

Y las líneas:


linux /memdisk
initrd /flashbiosnec.img


Hacen que se cargue la imagen del floppy flashbiosnec.img mediante memdisk.

Una vez hecho ésto, añadimos todo lo que hay en iso/ a la imagen nombredearchivo.iso:

Si estamos usando Debian Lenny:

$ grub-mkrescue --overlay= iso/ nombredearchivo.iso

Y si estamos usando Squeeze:

$ grub-mkrescue -o nombredearchivo.iso iso/

Del mismo modo, podemos añadir más floppies.

jueves, 15 de diciembre de 2011

Cambiar passwords en modo "no interactivo"

A veces necesitamos cambiar password en modo batch en un script pidiendo que el usuario introduzca por teclado el password que quiere asignar. Ésto no se puede hacer usando el comando passwd pero sí mediante chpasswd.

Si quiero cambiar la password de un usuario en modo batch, no tengo más que ejecutar:

echo "USUARIO:PASSWORD" | chpasswd

Ejemplo:

# echo "root:ultrasecreta" | chpasswd

No funciona autofs5 + autofs5-ldap en Squeeze

Como de momento no he conseguido que funcione autofs5 + autofs5-ldap en Debian Squeeze, para no perder más tiempo, he optado por establecer la configuración de autofs en el cliente de la siguiente manera:

Añadiendo la siguiente línea al fichero /etc/auto.master:
/home /etc/auto.home

Como puede verse en el fichero /etc/auto.home:

#
# $Id: auto.master,v 1.4 2005/01/04 14:36:54 raven Exp $
#
# Sample auto.master file
# This is an automounter map and it has the following format
# key [ -mount-options-separated-by-comma ] location
# For details of the format look at autofs(5).
#/misc /etc/auto.misc --timeout=60
#/smb /etc/auto.smb
#/misc /etc/auto.misc
#/net /etc/auto.net

/home /etc/auto.home


Y creando el fichero /etc/auto.home con las instrucciones de montaje:

* -fstype=nfs,rw,hard,intr,nodev,nosuid,nolock,rsize=8192 servidor:/home/&

Quitar error de locales en Squeeze

He visto el siguiente problema con los locales en los equipos en los que he instalado squeeze:

root@recursos:~# locale -a
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_MESSAGES to default locale: No such file or directory
locale: Cannot set LC_COLLATE to default locale: No such file or directory

Para que no aparezca, añadimos las siguientes líneas al fichero /etc/profile:

LC_ALL=es_ES
export LC_ALL
LANG=es_ES.UTF-8@euro
export LANG


Y cargamos la configuración:

# source /etc/profile

Black screen al hacer logout con cualquier usuario en Squeeze

Estaba terminando de preparar una nueva imagen para los workstation de mi centro y después de multitud de problemas, como por ejemplo, que el autofs no funciona con ldap debido a un bug, me he tropezado con uno más: Si un usuario cierra su sesión en lugar de apagar el sistema, se produce un "black screen".

Por lo que he podido determinar, haciendo pruebas y buscando información, éste fallo se produce con tarjetas Intel y posiblemente NVidia.

La tarjeta integrada de la mayoría de los equipos de mi centro es una Intel 845:

# lspci |grep -i vga 00:02.0

VGA compatible controller: Intel Corporation 82845G/GL[Brookdale-G]/GE Chipset Integrated Graphics Device (rev 01)


Para resolverlo, he añadido los repositorios squeeze-backports a la máquina en pruebas:

# echo "deb http://backports.debian.org/debian-backports squeeze-backports main contrib non-free" > /etc/apt/sources.list.d/squeeze-backports.list

Y he instalado los paquetes xserver-xorg-video-intel, libdrm-intel1 y xorg de backports:

apt-get -t squeeze-backports install xserver-xorg-video-intel libdrm-intel1 xorg

miércoles, 14 de diciembre de 2011

Scripts de inicio interactivos en Debian Squeeze

A veces necesitamos un script que sólo se ejecute una vez y que nos permita configurar una máquina en el primer inicio de modo interactivo. Probé a utilizar uno de los que tenemos en los portátiles y vi que no funcionaba en una Debian Squeeze actualizada. Así que tuve que adaptarlo de la siguiente manera:

Copié el script a /etc/init.d:

# cp primer-arranque /etc/init.d

Después le añadí las cabeceras que debe tener todo script de inicio para cumplir con la LSB.

### BEGIN INIT INFO
# Provides: primer-arranque
# Required-Start: console-setup
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Interactive: true
# Short-Description: Configuración del equipo en el primer arranque
# Description: primer-arranque hace una configuración básica
# del equipo la primera vez que se inicia.
### END INIT INFO


Como se puede ver en la siguiente línea:

# Default-Start: S

Este script se ejecuta en /etc/rcS.d/

Para que se ejecute después del script console-setup, defino:


# Required-Start: console-setup

Y para que el script pueda actuar de forma interactiva con el usuario, añado la siguiente línea:


# X-Interactive: true


Una vez hecho ésto, ejecuto insserv para que se cree el enlace correspondiente que lo lance en /etc/rcS.d/

# insserv /etc/init.d/primer-arranque

Comprobé que se había creado el enlace: /etc/rcS.d/S22primer-arranque

Así que modifiqué el script para que cuando se ejecutase correctamente, borrara el enlace y no volviera a ejecutarse más, añadiéndole la siguiente línea:

unlink /etc/rcS.d/S22primer-arranque

A continuación podemos ver cómo ha quedado el script una vez terminado de retocar:

#!/bin/sh
#
# Configuración del equipo en el primer arranque.

### BEGIN INIT INFO
# Provides: primer-arranque
# Required-Start: console-setup
# Required-Stop:
# Default-Start: S
# Default-Stop:
# X-Interactive: true
# Short-Description: Configuración del equipo en el primer arranque
# Description: primer-arranque hace una configuración básica
# del equipo la primera vez que se inicia.
### END INIT INFO

PATH=/sbin:/usr/sbin:/bin:/usr/bin

. /lib/lsb/init-functions

rm -f /etc/udev/rules.d/70-persistent-net.rules

DIALOG=${DIALOG=dialog}
$DIALOG --title "Preparando el equipo workstation" --clear \
--yesno "Si se va a terminar de configurar el equipo como workstation, conteste Sí (Yes) a esta pregunta. En este caso se le preguntará por el nombre que se le va a poner. En el caso de que este equipo no se vaya a configurar en este momento, elija NO" 18 70

case $? in
0)
tempfile=`tempfile 2>/dev/null` || tempfile=/tmp/test$$
trap "rm -f $tempfile" 0 1 2 5 15
$DIALOG --title "Nombre del workstation" --clear \
--inputbox "Introduzca el nombre de este equipo:" 10 51 2> $tempfile

retval=$?

case $retval in
0)
NOMBRE=`cat $tempfile`
;;
esac

if [ "$NOMBRE" ] ; then
echo "
127.0.0.1 localhost
127.0.1.1 $NOMBRE

# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters" > /etc/hosts

cp -f /root/interfaces /etc/network/
cp -f /root/grub /etc/default/
echo "$NOMBRE" > /etc/hostname
hostname -F /etc/hostname
rm -rf /var/lib/puppet/ssl
mkswap /dev/sda5 2>/dev/null
swapon /dev/sda5 2>/dev/null
/etc/init.d/puppet restart
/etc/cron.weekly/ocsinventory-agent
update-grub
cp -f /root/rcS /etc/default/
unlink /etc/rcS.d/S22primer-arranque

else
$DIALOG --title "ERROR" --clear \
--msgbox "Falta el nombre de este equipo y es necesario para su configuración Puede volver a intentar la configuración reiniciando este ordenador." 12 46

case $? in
0) ;;
esac
fi
;;
esac

martes, 6 de diciembre de 2011

Instalar LibreOffice en Debian Squeeze

Podemos instalar fácilmente LibreOffice en Debian Squeeze desde los repositorios Backports.

Si no los hemos utilizado aún, añadimos sus fuentes a /etc/apt/sources.list

deb http://backports.debian.org/debian-backports squeeze-backports main

O creamos un archivo en /etc/apt/sources.list.d/ , como por ejemplo /etc/apt/sources.list.d/squeeze-backports.list y le añadimos las fuentes:

deb http://backports.debian.org/debian-backports squeeze-backports main

Una vez hecho ésto, actualizamos índices:

# apt-get update

E instalamos desde backports:

# apt-get -t squeeze-backports install libreoffice libreoffice-gnome libreoffice-l10n-es libreoffice-help-es libreoffice-pdfimport libreoffice-presentation-minimizer libreoffice-presenter-console

Con ello instalamos:
  • libreoffice: La suite LibreOffice completa.
  • libreoffice-gnome: Integración de LibreOffice en gnome.
  • libreoffice-l10n-es: Ponemos LibreOffice en español.
  • libreoffice-help-es: Instalamos la ayuda en español.
  • libreoffice-pdfimport: Extensión que nos permite importar y modificar documentos pdf mediante LibreOffice Draw.
  • libreoffice-presentation-minimizer: Extensión que nos permite reducir el tamaño de fichero que ocupan de nuestras presentaciones.
  • libreoffice-presenter-console: Extensión que nos proporciona un control ampliado en nuestras presentaciones, como por ejemplo, permitirnos ver la siguiente diapositiva o nuestras anotaciones mientras que la audiencia sólo ve la diapositiva actual.