Algo de Linux: septiembre 2011

viernes, 30 de septiembre de 2011

Actualizar la imagen de un netboot del centro

Ya que tengo que volver a asignar portátiles a otros usuarios y, algún que otro software y actualizaciones de puppet, como por ejemplo NetworkManager dieron problemillas, he pensado que lo mejor que puedo hacer es actualizar la imagen y volver a clonarlos con el sistema actualizado y los errores solucionados.

Para empezar, clono el portátil con la imagen que viene en el DVD de recuperación del sistema. Una vez clonado, ya tengo un equipo limpio que aún no se ha configurado.

Siguiente paso: Arranco el portátil desde un pendrive de rescate en el que tengo System Rescue CD y Clonezilla, entre otras cosas e inicio Clonezilla, no para clonar, sino para entrar en un shell.

Una vez que tengo un shell, lo primero que hago es ver la lista de particiones con:

# fdisk -l

Al ejecutar fdisk -l, veo la lista de particiones del disco duro y observo que linux se encontraba instalado en /dev/hda2.

El siguiente paso: Montar la partición donde se encuentra instalado el sistema:

# mount /dev/sda2 /mnt

Después monto el /dev del sistema live que estoy corriendo (en este caso, clonezilla) en el directorio /dev de la partición que acabo de montar:

# mount --bind /dev /mnt/dev

También monto /proc del sistema live en el directorio /proc de la partición que he montado anteriormente:

# mount --bind /proc /mnt/proc

Y ejecuto el comando chroot para acceder al sistema instalado en /dev/hda2 (en este caso Squeeze):

# chroot /mnt

Bien, pues una vez hecho ésto, ya tengo corriendo el sistema del portátil dentro de la "jaula" chroot.

Como en estos momentos, no tengo red, conecto el cable y levanto la interfaz eth0:

# ifconfig eth0 up

Y solicito una ip al servidor:

# dhclient eth0

Con ésto, ya tengo acceso a la red. Compruebo si tengo resolución de nombres en el fichero /etc/resolv.conf. Como estoy en la red del centro, la tendré al haber hecho el dhclient,  pero, si no la tengo, añado la ip del servidor de nombres del centro:

# echo "nameserver 172.19.144.3" >> /etc/resolv.conf

Actualizo los paquetes del sistema con pkgsync:

# pkgsync
Y fuerzo la ejecución de tareas puppet que haya para él:

# puppetd -t
Vuelvo a actualizar los paquetes del sistema con pkgsync, por si después de hacer el puppetd -t hubiera paquetes nuevos:

# pkgsync

Siguiente paso: Pongo una password de root conocida por mí mediante el comando:

# passwd
Borro en el servidor puppet el certificado almacenado en esta sesión. Para ello ejecutamos en el servidor puppet:

# puppetca --clean debian.valledeljerte3

Donde debian.valledeljerte3 es el nombre de la máquina a la que se le ha creado el certificado.

Y  borro en el cliente los ficheros de certificado que se han creado dentro de /var/lib/puppet/ssl

En cuanto al fichero /etc/udev/rules.d/70-persistent-net.rules, no es necesario borrarlo, porque lo borra automáticamente el script:
S99primer-arranque.

Por si acaso lo necesitara en algún momento para algo en particular, voy a crear dos imágenes:
  • portatil-alumno.
  • portatil-profesor.
El script S99primer-arranque configura el portátil para un alumno. Así que creo una imagen para portátiles de alumnos.

Una vez creada la imagen de portátil de alumno, vuelvo a arrancar el equipo con un shell de clonezilla y:
  • Modifico el fichero /etc/escuela2.0 para que contenga:
    • use=portatil-alumno
    • use2=portatil-profesor
  • Borro el script S99primer-arranque del directorio /etc/rcS.d/
  • Y copio el script S99primer-arranque-p, que configura un ordenador de profesor al directorio /etc/rcS.d
Después de realizar las modificaciones, inicio de nuevo con clonezilla y creo una imagen para portátiles de profesores.

miércoles, 28 de septiembre de 2011

NetworkManager: Establecer conexión wifi antes de iniciar sesión en Debian


Una cosa que me fastidiaba de NetworkManager era no poder establecer una conexión inalámbrica antes de iniciar sesión con un usuario, pero, a partir de la versión 0.7, NetworkManager ya permite establecer conexiones a redes wifi durante el arranque del sistema.

Si echamos un vistazo al fichero /etc/NetworkManager/NetworkManager.conf, veremos que, como mínimo, contiene lo siguiente:

[main]
plugins=ifupdown,keyfile

[ifupdown]
managed=false

NetworkManager usa "plugins" que parsean y almacenan configuraciones en disco que se encontrarán disponibles para NetworkManager antes de que cualquier usuario haya iniciado sesión.

El plugin "keyfile" nos va a permitir hacer lo que queremos: Almacenar la configuración de conexión de nuestra red y establecer dicha conexión antes de que iniciemos la sesión. Si no se encontrara añadida la palabra keyfile en plugins, dentro de este fichero, lo añadimos y reiniciamos NetworkManager:

# /etc/init.d/network-manager restart

Las configuraciones de las redes a las que se conecta cada usuario, se almacenan en un directorio dentro de su home, concretamente en:
/home/USUARIO/.gconf/system/networking/wireless/networks/ dentro de un directorio con el nombre del SSID de la red, en un archivo %gconf.xml. Es decir, que si nuestra red tiene el SSID WLAN_44, la configuración se almacenará en el fichero:

/home/USUARIO/.gconf/system/networking/wireless/networks/WLAN_44/%gconf.xml

En cuanto a las configuraciones de sistema, que se encontrarán disponibles para realizar la conexión antes de que el usuario inicie sesión, se almacenarán en:

/etc/NetworkManager/system-connections/nombreconexion

Bien, pues una vez activado, no tenemos más que crear nuevas conexiones:
  • Haciendo clic con el botón derecho sobre el icono de nm-applet y seleccionando la opción "Editar las conexiones".
  • Llamando directamente al editor de configuraciones, desde un terminal: /usr/bin/nm-connection-editor
  • Editando a mano los ficheros de configuración.
Una vez introducidos los parámetros de configuración de la red, marcamos las casillas "Conectar automáticamente" y "Disponible para todos los usuarios", como se muestra en la imagen de ejemplo:



Nos pedirá que introduzcamos la password de root para poder almacenar la configuración y la almacenará en:

/etc/NetworkManager/system-connections/nombreconexion

Si nos desplazamos al directorio /etc/NetworkManager/system-connections/, veremos que se encuentra creado el fichero con los datos necesarios para establecer la conexión.

Y ya está. Ahora, cada vez que encendamos el equipo, se habrá establecido la conexión inalámbrica antes de iniciar la sesión, algo interesante para mí, porque comparto la conexión con otros equipos y de este modo tan sólo tengo que encender la máquina. Y muy útil para las actualizaciones de los portátiles del centro, vía puppet.