"Después del juego es antes del juego"
Sepp Herberger

sábado, 29 de septiembre de 2018

Mensaje pop-up en escritorio de usuario desde conexión ssh.

Un compañero planteaba el problema de como enviar un mensaje al usuario que tenia abierta una sesión gráfica en el escritorio de la máquina desde una conexión ssh del usuario root. Un escenario típico sería estar haciendo alguna tarea de mantenimiento en remoto y comunicar algo de interés al usuario de la máquina a la que estamos conectados, tipo "ya está instalado el programa" o "no apague la máquina al acabar, por favor".

Para conseguir esto el código a teclear después de entrar por ssh sería:
export XAUTHORITY=/var/run/lightdm/root/:0
mensaje="El programa ya esta instalado, puede probar"
zenity --warning --width=200 --no-wrap --text="$mensaje" --display=:0
Lo importante aquí es asignar a XAUTHORITY la sesión del usuario que está usando el escritorio, ya que por muy root que seamos no podemos enviar el mensaje mostrado por "zenity" a su escritorio sin tener permisos para ello.

En este código hay varias asunciones: que el usuario está en la sesión gráfica :0 (eso se sabe haciendo un "who" antes) y que su fichero XAUTHORITY es /var/run/lightdm/root/:0. Esto último lo sabemos haciendo:
# ps aux | grep X
root       517  2.1  1.0 293236 41432 tty7     Ssl+ 16:28   2:15 /usr/lib/Xorg :0 -seat seat0 -auth /var/run/lightdm/root/:0 -nolisten tcp vt7 -novtswitch
.....
Estos parámetros serán así de forma general para todas las máquinas de nuestros centros (basadas en una imagen similar de Xubuntu) pero habría que tener cuidado con los valores del display o el xauthority otros casos, como una configuración multiseat o con thinclients.

Me despido con una foto de la Opportunity reaparecida después de la mega-tormenta de arena que ha azotado Marte en los últimos meses:


De momento está mohína y no responde, a ver si con un poco de suerte se cargan las baterías y puede hacer un rearranque del sistema, despertando una vez más victoriosa y con ganas de explorar. Que maravilla, preparada para funcionar 90 soles (días marcianos) lleva mandando datos 14 años. Sin ningún genero de duda está hecha por los mismos técnicos que diseñaron los Fujitsu P300 que tenemos como thinclients en las aulas.


lunes, 10 de septiembre de 2018

Ejecutar un script que necesita conexión de red al apagar la máquina en Ubuntu 18

Ya estamos de vuelta del veranito con las pilas cargadas, vamos al lío: me interesa ejecutar un script cuando las máquinas estén apagándose o reiniciándose pero es importante que durante la ejecución del mismo todavía hubiera red, ya que el script hace conexiones hacia fuera.

Anteriormente con init.d esto lo hacíamos poniendo el script en /etc/rc6.d, pero con Ubuntu 18 y systemd eso se ha acabado. Ahora debemos hacerlo creando un servicio:
# cat /etc/systemd/system/apagado.service 
[Unit]
Description=Script para ejecutar en apagado
Requires=network.target
After=network.target
Before=shutdown.target reboot.target halt.target
DefaultDependencies=no

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/bash /root/apagado.sh

[Install]
WantedBy=multi-user.target
Los parámetros Requires/After/Before establecen las dependencias y precedencias con las que se ejecutará el script /root/apagado.sh, que es donde tenemos nuestro código.

Una vez definido el servicio lo activamos con:
# systemctl enable apagado.service
Después reiniciamos la máquina y a partir de ahora el script /root/apagado.sh se ejecutará en cada shutdown/reboot.



martes, 17 de julio de 2018

Multiseat en Ubuntu 18

Tras 2 añitos con multiseat en varias ubicaciones del centro puedo afirmar que son un éxito de crítica y público. Se usan a diario sin mayor problema, habiendo desaparecido la confusión inicial del usuario al ver que hay un solo PC para dos tríadas de monitor, teclado y ratón. Sacamos 2 puestos de trabajo totalmente operativos de dónde solo había un único PC con el único gasto de comprar una tarjeta VGA barata de menos de 40 euros.

Tengo incluso una anécdota de un usuario que me decía que tenia problemas en su PC y señalaba hacia un espacio vacío para referirse a él (donde estaba su antiguo PC hasta que sustituí ambos por uno con multiseat), ya que tenia interiorizado de que el PC que había en la mesa era el de su compañero de despacho y que él no tenía una máquina física a la que aporrear cuando fallaba algo.

Todo el montaje lo tratamos en la serie de artículos parte 1, parte 2 y parte 3.

Con el cambio a Ubuntu 18 temía que esto no funcionase o fuese a dar problemas nuevos. Pues no casi todo lo antiguo vale, la única parte que hay que saltarse porque ya no es necesaria está en el primer artículo, bajo el epígrafe "2. Preparando el entorno", en los párrafos que hablan de añadir un repositorio ppa y actualizar paquetes desde él. Es decir, en Ubuntu 18 debemos ignorar la parte:

Bueno, pues para preparar esto tenemos que empezar añadiendo un repositorio ppa:
# sudo add-apt-repository ppa:ubuntu-multiseat/ppa
Que nos añadirá:
# cat /etc/apt/sources.listd.d/ubuntu-multiseat-ppa-trusty.list 
deb http://ppa.launchpad.net/ubuntu-multiseat/ppa/ubuntu trusty main
# deb-src http://ppa.launchpad.net/ubuntu-multiseat/ppa/ubuntu trusty main
Y actualizamos los paquetes, especialmente los relaciones con las X para soporte multiseat :
# sudo apt-get update
# sudo apt-get upgrade

De hecho si intentamos realizar los pasos anteriores veremos que fallan porque no hay paquetes para Ubuntu 18 Bionic, ya que la última versión es para Ubuntu 16. No se muy bien que ha pasado, pero asumo que lo que implementaba ese repositorio se ha integrado en la paquetería oficial de Ubuntu.

Por tanto sólo haremos la parte:

Tambien hay que editar
# # cat /etc/lightdm/lightdm.conf
[LightDM]
logind-load-seats=true
Para que lightdm reconozca la configuración de los seat y abra una sesión en cada monitor, con todo el hardware asociado.

Tampoco viene mal quitar el paquete light-locker. Hemos observado que produce pantallas en negro y bloqueos especialmente en el seat secundario. Si tenemos pkgsync lo mejor es ponerlo en maynothave.

El resto se hará igual a como se relata en los artículos de hace dos años. De hecho, si guardamos los ficheros creados en /etc/udev/rules.d de Ubuntu 14 seguramente podamos copiarlos a Ubuntu 18 sin problemas, aunque yo he preferido hacerlo todo a mano para controlar mejor el proceso.

Bueno, pues un quebradero menos de cabeza.

martes, 10 de julio de 2018

Ubuntu 18: configuración pantalla y sonido para Siatic (HP ProDesk 600 G1 SFF)

En estos 2 artículos anteriores VGA en HP Prodesk y Clonado de monitor y cañón vimos como lograr poner en Ubuntu 14 la resolución adecuada y la pantalla/cañón clonados en los PC HP ProDesk 600 G1 SFF que tenemos en las Siatics. Básicamente usábamos "xrandr" y un script de inicio en /etc/xdg/autostart para hacerlo.

En la imagen de Ubuntu 18 nos viene de serie el driver propietario nvidia instalado, que nos permite configurar fácilmente un xorg.conf a medida mediante el comando nvidia-settings. La configuración óptima para nuestra instalación de Siatics es:
# cat /etc/X11/xorg.conf.d/10-Siatic-xorg.conf

Section "Screen"
    Identifier     "Screen0"
    Device         "Device0"
    Monitor        "Monitor0"
    DefaultDepth    24
    Option         "Stereo" "0"
    Option         "nvidiaXineramaInfoOrder" "CRT-1"
    Option         "metamodes" "HDMI-0: 1280x800 +0+0, VGA-0: 1280x800 +0+0"
    Option         "SLI" "Off"
    Option         "MultiGPU" "Off"
    Option         "BaseMosaic" "off"
    SubSection     "Display"
        Depth       24
    EndSubSection
EndSection
Es decir, se ponen ambos dispositivos con resolución 1280x800 e imagen clonada. Al estar en xorg.conf.d esto se ejecuta desde el arranque de las X ya en el mismo lightdm.

Un problema adicional que tuvimos anteriormente es que hay instalaciones de Siatic con un cable VGA con terminadores de color negro que tiene menor calidad que el cable normal, con terminadores de color azul. Eso hacía que no se detectasen bien las propiedades del monitor y se quedase en resolución máxima de 1024x768.

Para solucionar eso añadíamos con xrandr varios "modelines" manualmente indicando los parámetros para resoluciones mas altas. Ahora eso no es necesario, supongo que los compañeros que han hecho la imagen de Ubuntu 18 han metido la definición de esos modelines en algún lado o bien el driver nvidia detecta mejor, ya que ahora xrandr si que muestra todas la resoluciones posibles independientemente del cable usado.

La mejor manera de aplicar esta configuración es mediante una regla puppet del tipo:
class xubuntu_18_siatic {
  .....
  .....
  #================================================================
  #Ponemos un xorg.conf.d que fija resolucion 1280x800 clonada en ambas
  #salidas de video.
  file {"/etc/X11/xorg.conf.d/10-Siatic-xorg.conf":
    owner => root , group => root , mode => 644 ,
    source => "puppet:///modules/xubuntu18_siatic/10-Siatic-xorg.conf",
  } 
  ....
  ....
}

En cuanto al sonido teníamos un problema distinto: debíamos anular la salida de sonido de la tarjeta nvidia ya que eso confundía a los usuarios y provocaba que hubiese muchas veces problemas. Como vemos con lspci hay demasiadas tarjetas de sonido y eso despista:
# lspci | grep -i audio
00:03.0 Audio device: Intel Corporation Xeon E3-1200 v3/4th Gen Core Processor HD Audio Controller (rev 06)
00:1b.0 Audio device: Intel Corporation 8 Series/C220 Series Chipset High Definition Audio Controller (rev 04)
01:00.1 Audio device: VIDIA Corporation High Definition Audio Controller (rev a1)
El método usado con Ubuntu 14 pasaba por hacer en /etc/rc.local un "remove" del dispositivo 01:00.1 durante el arranque. En esta entrada se puede ver como se hacía.

Debido a que en Ubuntu 18 no hay /etc/rc.local de forma nativa (aunque puede activarse) he encontrado una forma bastante elegante de anular la tarjeta de sonido nvidia, con un fichero en rules.d:
# cat /etc/udev/rules.d/70-audio-nvidia-off.rules
ACTION=="add", KERNEL=="0000:01:00.1", SUBSYSTEM=="pci", RUN+="/bin/sh -c 'echo 1 > /sys/bus/pci/devices/0000:01:00.1/remove'"
De igual forma podemos distribuirlo a todas las Siatics mediante puppet:
   ....
   ....
   #================================================================
   # Regla udev para quitar el audio nvidia y dejar solo el audio de placa base

   file {"/etc/udev/rules.d/70-audio-nvidia-off.rules":
      owner => root , group => root , mode => 644 ,  
      source => "puppet:///modules/xubuntu18_siatic_/70-audio-nvidia-off.rules"
   }
   ....
   ....
Esté método de "quitar" dispositivos PCI podremos también emplearlo en otros tipos de máquinas que tengamos en el centro, como infolabs o ltsp, y así poder quitar no solo dispositivos de sonido que no se usen, sino tambien tarjetas wifi y otros artefactos inútiles.

sábado, 7 de julio de 2018

LTSP: como distinguir entre cliente y servidor de aula.

En un entorno LTSP las sesiones de los clientes y el servidor de aula se ejecutan en siempre en este último, ya que los clientes son "terminales tontos".

A veces nos interesa en un script saber si estamos en el cliente (manejado por el alumno) o en servidor (manejado por el profesor) para permitir o no determinadas cosas. Por ejemplo, la aplicación Control Siatic que usamos para manejar la pizarra debería arrancarse sólo en el puesto del profesor y no en el de los alumnos.

Para saber en cual de ambos puestos estamos podemos usar la variable de entorno "$LTSP_CLIENT", que nos dice si el puesto es un cliente o no.
if [ ! -z "$LTSP_CLIENT" ] 
then
   echo "Estamos en el cliente $LTSP_CLIENT_HOSTNAME"
else
   echo "Estamos en el servidor $HOSTNAME"
fi

Nótese como usamos $LTSP_CLIENT_HOSTNAME para usar el nombre real del thinclient, ya que $HOSTNAME nos da el nombre del servidor de aula en todos los PC del aula, ya sea servidor o uno de los clientes.

Clonezilla en la red privada de un aula mediante arranque PXE

En este post veremos como configurar un arranque de clonezilla mediante PXE en un aula con ordenadores de sobremesa para los alumnos (workstations o infolabs). De esta manera no nos hará falta un pendrive o CD para arrancar el clonezilla para un uso normal.

Ojo, esto no es para clonado multicast: en el caso de que pongamos a clonar varios equipos esto sería una clonación unicast, por lo que cada PC se clonaría independientemente de los demás. Esto implica que el clonado será más lento cuantos mas equipos haya clonando ya que la red se comparte entre todos.

Para poder poner esta configuración tambien es necesario tener una red privada en el aula, con su propio espacio de direcciones 192.168.X.Y y su propio servidor dhcp.

1. Instalación del servidor dhcp y tftp.

En el ordenador del profesor instalamos, si no está ya, isc-dhcp-server. Si dentro del aula hay otro hardware que hace de servidor dhdcp (por ejemplo un punto de acceso wifi), lo desactivamos.

Configuración del servidor dhcp (cambia eth0 por la tarjeta de red que está conectada a la red interna):
# cat /etc/default/isc-dhcp-server 
# Defaults for isc-dhcp-server initscript
# sourced by /etc/init.d/isc-dhcp-server
# installed at /etc/default/isc-dhcp-server by the maintainer scripts

#
# This is a POSIX shell fragment
#

# Path to dhcpd's config file (default: /etc/dhcp/dhcpd.conf).
#DHCPD_CONF=/etc/dhcp/dhcpd.conf

# Path to dhcpd's PID file (default: /var/run/dhcpd.pid).
#DHCPD_PID=/var/run/dhcpd.pid

# Additional options to start dhcpd with.
# Don't use options -cf or -pf here; use DHCPD_CONF/ DHCPD_PID instead
#OPTIONS=""

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth0"
Otro fichero con la configuración para decir al arranque PXE donde está el fichero pxelinux.0:
# cat /etc/dhcp/dhcpd.conf 
# TFPT server for PXE boot

option domain-name-servers 172.25.231.2;
default-lease-time 86400;
max-lease-time 604800;
authoritative;

subnet 192.168.0.0 netmask 255.255.255.0 {
  range 192.168.0.100 192.168.0.250;
  filename "/var/lib/tftpboot/pxelinux.0";
  next-server 192.168.0.254;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.0.255;
  option routers 192.168.0.254;
}
Cambia 172.25.231.2 por la IP de tu servidor ldap, 192.168.0.254 por la dirección dentro de la red del aula del PC del profesor y 192.168.0.X por tu espacio de direcciones del aula (en el caso de que uses otro).

A veces la configuración del servicio dhcp no está en /etc/dhcp/dhcpd.conf sino en /etc/ltsp/dhcpd.conf. Esto sucede cuando hemos instalado antes el servicio ltsp-server-standalone. En ese caso habría que modificar este último fichero.

El otro paquete a instalar es el servidor tftpd-hpa. Su configuración es:
# cat /etc/default/tftpd-hpa 
# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS="[::]:69"
TFTP_OPTIONS=""
No olvidemos meter en el mayhave de pkgsync ambos paquetes si no no queremos que se desinstalen.

2. Configuración menú PXE.

Todo el menú está en /var/lib/tftpboot:
# ls -l /var/lib/tftpboot
total 344
-rw-rw-rw- 1 root root  68306 may 25 02:11 bg.png
-rw-rw-rw- 1 root root  20704 jun 21 13:19 chain.c32
drwxrwxrwx 9 root root   4096 jun 21 13:44 clonezilla
-rw-rw-rw- 1 root root  55012 jun 21 13:19 menu.c32
-rw-rw-rw- 1 root root  26720 jun 21 13:20 pxelinux.0
drwxrwxrwx 2 root root   4096 jun 21 13:25 pxelinux.cfg
-rw-rw-rw- 1 root root 152976 jun 21 13:19 vesamenu.c32
Los ficheros chain.c32, menu.c32, vesamenu.c32 y pxelinux.0 los sacamos de /usr/lib/syslinux/ tras instalar el paquete syslinux-common. El fichero bg.png es un fondo de pantalla cualquiera.

Creamos el directorio clonezilla visto en el listado anterior, entramos en el y descargamos clonezilla-live-2.5.5-38-amd64.zip, descomprimiéndolo dentro. Debe quedar:
# ls -l /var/lib/tftpboot/clonezilla/ 
total 262160
drwxrwxrwx 3 root root      4096 mar 29 21:38 boot
-rw-rw-rw- 1 root root 239003081 mar 29 15:38 clonezilla-live-2.5.5-38-amd64.zip
-rw-rw-rw- 1 root root       160 mar 29 21:38 Clonezilla-Live-Version
drwxrwxrwx 3 root root      4096 mar 29 21:35 EFI
-rw-rw-rw- 1 root root     18092 ago 11  2015 GPL
drwxrwxrwx 3 root root      4096 mar 29 21:38 home
-rw-rw-rw- 1 root root  24470488 jun 21 13:44 initrd.img
drwxrwxrwx 2 root root      4096 mar 29 21:38 live
drwxrwxrwx 2 root root      4096 mar 29 21:38 syslinux
drwxrwxrwx 6 root root      4096 mar 29 21:38 utils
-rw-rw-rw- 1 root root   4921104 jun 21 13:43 vmlinuz
Los ficheros vmlinuz e initrd.img no están inicialmente, pero los copiamos del directorio /var/lib/tftpboot/clonezilla/live a /var/lib/tftpboot/clonezilla.

Creamos el directorio pxelinux.cfg y dentro el fichero default:
# cat /var/lib/tftpboot/pxelinux.cfg/default 
DEFAULT vesamenu.c32
PROMPT 0
TIMEOUT 50 # 5 segundos
TOTALTIMEOUT 3000
ONTIMEOUT clonezilla
#MENU HIDDEN  Solo muestra la cuenta atrás, si se pulsa una tecla aparece el menú.
# Menu Configuration
MENU WIDTH 80
MENU MARGIN 10
MENU PASSWORDMARGIN 3
MENU ROWS 15
MENU TABMSGROW 20
MENU CMDLINEROW 20
MENU ENDROW 24
MENU PASSWORDROW 20
MENU TIMEOUTROW 24
MENU TITLE Menu de Arranque de Sistema
MENU MASTER PASSWD $1$xyBSCMrw$FbRbg76bC8fVXL9JjQctC.
MENU PASSPROMPT Introduzca Password:
MENU BACKGROUND bg.png
MENU COLOR TITLE    1;36;44     #c00090f0 #00000000 std

NOESCAPE 1
ALLOWOPTIONS 0

LABEL bootfromdisk
  MENU LABEL Arranque desde Disco duro
  localboot 

LABEL clonezilla
  MENU DEFAULT
  MENU LABEL Clonezilla
  kernel clonezilla/vmlinuz 
  append initrd=clonezilla/initrd.img boot=live union=overlay username=user config components quiet noswap edd=on nomodeset nodmraid locales="es_ES.UTF-8" keyboard-layouts=es fetch=tftp://192.168.0.254/var/lib/tftpboot/clonezilla/live/filesystem.squashfs ocs_daemonon="ssh"  ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin"  ocs_live_batch=no  vga=788  ip=frommedia  net.ifnames=0   nosplash i915.blacklist=yes  radeonhd.blacklist=yes  nouveau.blacklist=yes  vmwgfx.enable_fbdev=1  keeppxe
Recordemos cambiar las dos ocurrencias de 192.168.0.254 por la IP que tuviera el PC del profesor en tu aula.

Tal como queda, los clientes conecatados la VLAN del aula al arrancar por PXE cargarán un sistema clonezilla completo, como cuando arrancamos con CD o pendrive. Es conveniente automatizar en el arranque la parte en que se monta /home/partimag (el directorio donde estarán las imágenes) para no tener que hacerlo luego a mano nosotros cada vez que clonemos. Eso se hace utilizando el parámetro oc_prerun en la carga del clonezilla vista en el menú anterior.

En mi caso tengo las imágenes en el directorio /mnt del PC del profesor y accedo a ellas montándolas por sshfs. Aquí cada cual puede poner el sistema que quiera: montaje por NFS, por Samba, etc. Lo que si es conveniente, para reducir el tráfico hacia la red externa, es que las imágenes que cargamos estén ubicadas en el PC del profesor, dentro de la red privada del aula.

Esta es mi secuencia de comandos de montaje en /home/partimag:
ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin" 
Evidentemente, hay que cambiar "passwordroot" por tu contraseña de root o bien usar un usuario no root con permisos sobre /mnt para hacer el montaje.

Por último, como es costumbre de buen sysadmin no viene mal automatizar toda la ristra de cuestiones que nos hace clonezilla: tipo de restauración, nombre de la imagen, disco destino, etc. Esto lo hacemos añadiendo ocs_live_run a la linea de arranque del menú, de una forma similar a como lo hacemos con los pendrives automáticos de Clonezilla:
ocs_live_run="ocs-sr -g auto -e1 auto -e2 -r -j2 -k1 -scr -p poweroff restoredisk nombreImagen sdX"  ocs_live_extra_param=""  ocs_postrun=""
Siendo nombreImagen el nombre del directorio donde está la imagen en /home/partimag y sdX el disco o discos donde clonar.

De esta manera basta con arrancar el/los clientes por PXE y marcharnos, ya que el resto del proceso se haría de forma automática.

3. Configuración arranque PXE en clientes.

Por último, para configurar el arranque PXE en clientes podemos usar su BIOS o bien instalar el paquete ipxe, que añade al Grub /boot/grub.cfg) una entrada que permite elegir ese tipo de arranque, mas o o menos:
### BEGIN /etc/grub.d/20_ipxe ###
menuentry "Network boot (iPXE)" --users "" --class network {
 insmod part_msdos
 insmod ext2
 set root='hd0,msdos3'
 if [ x$feature_platform_search_hint = xy ]; then
   search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos3 --hint-efi=hd0,msdos3 --hint-baremetal=ahci0,msdos3  3e9a285d-eb53-4ff8-a31e-af7be11035d2
 else
   search --no-floppy --fs-uuid --set=root 3e9a285d-eb53-4ff8-a31e-af7be11035d2
 fi
    linux16 /boot/ipxe.lkrn
}

4. Sirviendo el clonezilla por NFS en lugar de por TFTP.

En el apartado 2 vimos como el sistema operativo clonezilla se sirve a los clientes durante el arranque por TFTP, con el parámetro:
fetch=tftp://192.168.0.254/var/lib/tftpboot/clonezilla/live/filesystem.squashfs 
Esto hace que para iniciar el sistema clonezilla en el cliente PXE primero tenga que transmitirse todo el fichero .squashfs completo, lo cual puede llevar unos minutos en función de la saturación de la red.

Otra opción mas ligera consiste en servir el sistema de ficheros donde está clonezilla mediante NFS. Para ello instalamos el nfs-kernel-server y creamos el fichero para compartir:
# cat /etc/exports 
/var/lib/tftpboot/clonezilla  *(ro,sync,no_subtree_check)
El menú PXE será:
LABEL clonezilla-nfs
  MENU DEFAULT
  MENU LABEL Clonezilla-nfs
  kernel clonezilla/vmlinuz 
  append initrd=clonezilla/initrd.img boot=live union=overlay username=user config components quiet noswap edd=on nomodeset nodmraid locales="es_ES.UTF-8" keyboard-layouts=es netboot=nfs nfsroot=192.168.0.254:/var/lib/tftpboot/clonezilla ocs_daemonon="ssh"  ocs_prerun="echo passwordroot | sshfs -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no root@192.168.0.254:/mnt /home/partimag -o workaround=rename -o password_stdin"  ocs_live_batch=no  vga=788  ip=frommedia  net.ifnames=0   nosplash i915.blacklist=yes  radeonhd.blacklist=yes  nouveau.blacklist=yes  vmwgfx.enable_fbdev=1  keeppxe
En esta solución el sistema cargado en initrd monta y accede desde el primer momento a filesystem.squashfs y comienza el arranque de forma inmediata, lo cual hace el proceso mas rápido y vistoso. La parte clave es:
netboot=nfs nfsroot=192.168.0.254:/var/lib/tftpboot/clonezilla 



viernes, 6 de julio de 2018

Repositorio propio de nuestra red local + paquete .deb de Foxit PDF Reader

1. Repositorio propio de nuestra red local.

Como estamos actualizando todos los sistemas a Ubuntu 18 es el momento de crear un repositorio de paquetes propio de mi red.

Este repositorio me permite meter paquetes .deb que no vienen en los repositorios estándar de Ubuntu o de Educarex, pero que si son útiles en el día a día del centro. Ejemplos de eso son master-pdf-editor, Googleearth, drivers de impresoras Epson o Brother, Adobe Reader o paquetes creados/empaquetados por nosotros mismos como aulalinex, controlies o Foxit PDF.

De esta manera los instalaremos posteriormente con una regla puppet del tipo:
package {"nombre-paquete": ensure => installed }
Para crear el repositorio sigo cuidadosamente las instrucciones de mi compañero Esteban, realizando la instalación en el directorio /var/www/html/iesvirgendeguadalupe de mi servidor principal.

El fichero distributions tendría el contenido:
Origin: IES Virgen de Guadalupe
Label: Ubuntu Bionic packages
Suite: bionic
Codename: bionic
Architectures: i386 amd64
Components: main
Description: Paquetes adicionales para el IES
DebIndices: Packages Release . .gz .bz2
SignWith: CFC4E733
La clave pública la guardaremos siguiendo los pasos enumerados por Esteban en su blog en la ruta /var/www/html/iesvirgendeguadalupe/iesvirgendeguadalupe.asc.

Una vez montado el repositorio, cuando queramos añadir un paquete .deb como master-pdf-editor haremos:
# cd /var/www/html/iesvirgendeguadalupe
# wget https://code-industry.net/public/master-pdf-editor-5.0.32_qt5.amd64.deb
# reprepro --ask-passphrase includedeb bionic master-pdf-editor-5.0.32_qt5.amd64.deb 
# rm master-pdf-editor-5.0.32_qt5.amd64.deb el contenido del
Si queremos ver la lista de paquetes añadidos al repositorio haremos (ojo, aquí salen todos los que llevo añadidos yo):
# cd /var/www/html/iesvirgendeguadalupe
# reprepro list bionic
bionic|main|i386: adobereader-enu 9.5.5
bionic|main|i386: arduinoide 1.8.1
bionic|main|i386: aulalinex-alumno 4.2-17
bionic|main|i386: aulalinex-alumno-ltsp 4.2-0
bionic|main|i386: aulalinex-profesor 4.2-17
bionic|main|i386: brother-udev-rule-type1 1.0.0-1
bionic|main|i386: brscan4 0.4.3
bionic|main|i386: dcp9020cdwcupswrapper 1.1.2-1
bionic|main|i386: dcp9020cdwlpr 1.1.2-1
bionic|main|i386: epson-inkjet-printer-escpr 1.6.5-1lsb3.2
bionic|main|i386: epson-printer-utility 1.0.0-1lsb3.2
bionic|main|i386: hl4140cncupswrapper 1.1.1-5
bionic|main|i386: hl4140cnlpr 1.1.1-5
bionic|main|i386: jkiwi 0.9.5
bionic|main|i386: serveraulalinex-ltsp 4.2-0
bionic|main|amd64: FoxitReader 2.4.1
bionic|main|amd64: adobeair 1:2.6.0.19170
bionic|main|amd64: arduinoide 1.8.1
bionic|main|amd64: aulalinex-alumno 4.2-17
bionic|main|amd64: aulalinex-alumno-ltsp 4.2-0
bionic|main|amd64: aulalinex-profesor 4.2-17
bionic|main|amd64: aulalinex-profesor-ltsp 4.2-2
bionic|main|amd64: brother-udev-rule-type1 1.0.0-1
bionic|main|amd64: edu.media.mit.scratch2editor 458.0.1
bionic|main|amd64: epson-inkjet-printer-escpr 1.6.5-1lsb3.2
bionic|main|amd64: ideservice 4.0.4
bionic|main|amd64: imagescan 3.42.2-1epson4ubuntu18.04
bionic|main|amd64: imagescan-plugin-gt-s650 1.0.0-1epson4ubuntu18.04
bionic|main|amd64: imagescan-plugin-networkscan 1.1.1-1epson4ubuntu18.04
bionic|main|amd64: imagescan-plugin-ocr-engine 1.0.0-1epson4ubuntu18.04
bionic|main|amd64: jkiwi 0.9.5
bionic|main|amd64: libdvdcss2 1.2.13-0
bionic|main|amd64: master-pdf-editor 5.0.32
Ya con todo funcionando queda añadirlo a todas las máquinas Ubuntu 18. Eso lo hacemos con una regla puppet como ésta:
class xubuntu18_repositorio {

  file {"/etc/apt/sources.list.d/iesvirgendeguadalupe.list":
     owner=>root, group=>root, mode=>664,
     source=>"puppet:///modules/xubuntu18_repositorio/iesvirgendeguadalupe.list",
     notify => Exec["instalar-certificado-iesvirgendeguadalupe"],
  }

  exec { "instalar-certificado-iesvirgendeguadalupe":
     path => "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
     command => "/usr/bin/wget  -O - http://servidor/html/iesvirgendeguadalupe/iesvirgendeguadalupe.asc | /usr/bin/apt-key add  - ; 
     apt-get update",
     refreshonly => true,
  }
}
Siendo el fichero iesvirgendeguadalupe.list:
deb http://servidor/html/iesvirgendeguadalupe bionic main
Con esto distribuido a todas las máquinas ya podemos instalar cualquier paquete del repositorio de forma rápida con un simple apt-get install "paquete" o una regla puppet.

2. Paquete deb de Foxit PDF Reader.

Foxit PDF es un visor de PDF ligero que es bastante completo y no viene mal tenerlo instalado, junto con evince u okular. Hay determinados PDF generados por Rayuela que solo hemos conseguido imprimirlos bien desde Foxit.

El problema es que hace mucho tiempo que no se distribuyen paquetes .deb, por lo que la instalación se realiza con un fichero ejecutable .run al estilo de Windows. Este método no es automatizable y hay que hacerlo máquina a máquina. Para ahorrarme ese trabajo aburrido he creado un paquete .deb con la última versión.

He descargado FoxitReader.enu.setup.2.4.1.0609(r08f07f8).x64.run de aquí y lo he instalado en mi máquina.

Luego he descargado FoxitReader_1.1.0_i386.deb con:
# wget http://cdn02.foxitsoftware.com/pub/foxit/reader/desktop/linux/1.x/1.1/enu/FoxitReader_1.1.0_i386.deb
Esta es la única versión .deb que hay, la 1.1. Este .deb me servirá de esqueleto para construir uno nuevo conteniendo Foxit 2.4.1. Para ello sigo las instrucciones relatadas en este post antiguo.

Desempaqueto:
dpkg-deb -R FoxitReader_1.1.0_i386.deb foxitreader
Luego en el directorio foxitreader metemos los ejecutables y todo lo que se ha instalado con el .run, editamos los ficheros de controls, postinst y postrm en foxitreader/DEBIAN y reempaquetamos:
# dpkg-deb -b foxitreader FoxitReader_2.4.1_amd64.deb
Con esto ya tenemos el paquete listo para subir a nuestro repositorio creado con reprepro en el punto anterior.

Aquí tenemos el paquete listo para descargar: descarga.

Seguiremos contando cosas de nuestra migración a Ubuntu 18, mucho mas tranquila con el know-how adquirido en la caótica actualización a Ubuntu 14.