Instalación y configuración en clientes Linux - manumora/controlies GitHub Wiki

1. Instalación en clientes.

1.1. Tarea puppet.

La versión 0.7.0-8 solo de controlies para clientes solo funciona en Ubuntu 18 Bionic, no se asegura compatibilidad con Ubuntus anteriores ni con Debian.

Para instalar los clientes añadir en las clases específicas de puppet correspondientes a nuestros grupos de máquinas los includes siguientes:

   include "instala_controlies" 
   include "actualizaciones_controlies"  <--Obsoleto, ya no existe desde la versión 0.7.0-6

Para Xubuntu 18 el fichero seria: /etc/puppet/manifests/classes/xubuntu1804/especifica-xubuntu-linex-2018.pp

Como lo normal es empezar probando en un conjunto restringido de máquinas y luego desplegarlo en todo el centro si todo va bien se recomienda usar un case de tipo:

   case $hostname {
          "a02-pro","a32a-pro","depleng-o01": {
                 include "instala_controlies"
          }
          default: {
          }
   }

1.2. Paquetes gestionados por pkgsync.

Para que los paquetes no sean quitados por pkgsync no olvidemos poner en los mayhave correspondientes, añadir los paquetes curl (en todos), controlies-ltspserver (en los servidores de aula con thinclients) y controlies-client (en el resto). Normamente estos mayhaves están distribuidos por una tarea puppet desde el servidor nfs del centro, en la ruta /etc/puppet/files/xubuntu...

Otra opción posible es crear un fichero /etc/pkgsync/mayhave.d/mayhave.controlies o similar en cada pc cliente con los paquetes necesarios enumerados dentro.

1.3. Paquete pkpgcounter.

Una de las dependencias de controlies-client/controlies-ltspserver es el paquete pkpgcounter. Ese paquete ya no existe en Ubuntu Bionic, pero la versión para Ubuntu Artful sigue siendo compatible y podemos descargarla a mano de:

http://mirrors.kernel.org/ubuntu/pool/universe/p/pkpgcounter/pkpgcounter_3.50-7.1_all.deb

En nuestro caso el paquete ha sido metido en el repositorio privado de la red educativa, por lo que dentro de los centros si estará disponible para su instalación con apt-get.

1.4. Permitir la detección de clientes encendidos mediante avahi.

Para que las máquinas cliente encendidas puedan ser visibles en tiempo real dentro del menú Gestión->Equipos debemos asegurarnos de que en el fichero /etc/avahi/avahi-daemon.conf de cada cliente tenemos:

 publish-workstation=true

Para que se anuncien en la red mediante avahi y el controlies del servidor los pueda detectar.

1.5. Clase ssh_confidence_controlies.

Si queremos controlar los clientes desde Gestión->Equipos hay que establecer una relación de confianza entre el servidor donde está controlies y los clientes. Instalaremos los certificados mediante la regla puppet:

  include "ssh_confidence_controlies" 

Hay que recordar previamente colocar las claves públicas que se distribuirán a los clientes según se detalla en

https://github.com/manumora/controlies/blob/master/puppet/ssh_confidence_controlies/LEEME.

1.6. Problemas con la resolución de nombres.

En ubuntu 18 todos los pc clientes tienen el servicio systemd-resolved para DNS + cacheo. Este servicio nos ha dado problemas intermitentes a la hora de resolver nombres dentro de la red local que con controlies se agudizan. Esto lleva a problemas de montaje de homes, funcionamiento de puppet, etc.

La solución para evitar este problema no resuelto que hemos usado es:

  • Meter en /etc/hosts de cada pc cliente las IP de las máquinas importantes (servidor, ldap, puppetinstituto,...) para realizar una resolución local que nunca falle.

    172.X.Y.Z servidor ldap puppetinstituto
    
  • Poner en /etc/systemd/resolved.conf el valor Cache=no, para deshabilitar el cacheo de nombres.

Ambas soluciones nos han resultado efectivas en tanto en cuenta no se resuelvan los problemas con systemd-resolved.

2. Aulas con thinclients.

La tarea puppet instala_controlies instala el paquete debian controlies-client en la mayoría los equipos exceptuando las aulas que todavía mantengamos con thinclients, en las cuales debe instalarse el paquete controlies-ltspserver.

La forma de avisar a instala_controlies de que el aula tiene thinclients es poniendo en /etc/escuela2.0

 IES_ISLTSP=true

Adicionalmente, debemos asegurarnos de que la imagen de los thinclients tienen bien configurada la resolución de nombres correspondiente a nuestro IES, ya que por defecto no viene configurada. Esto podemos hacerlo mirando /opt/ltsp/i386/etc/resolv.conf y confirmando los valores correctos en:

  nameserver 172.X.Y.Z
  search tudominio

Otra opcion (no probada) es editar /opt/ltsp/i386/etc/lts.conf y definir los valores:

  DNS_SERVER=172.X.Y.Z 
  SEARCH_DOMAIN=tudominio

En ambos casos no olvidemos regenerar luego la imagen de los thinclients.

3. Configuración del seguimiento de trabajos de impresión.

  • Las impresoras no se controlan por defecto, hay que configurar a mano las que queremos monitorizar. Para ello ir a la máquina donde queremos controlar la impresora y editar el fichero:

        /etc/cups/printers.conf
    

    añadiendo el prefijo tea4cups:// como en los siguientes ejemplos:

        ...
        DeviceURI tea4cups://socket://192.168.1.100:9100
        ...
        DeviceURI tea4cups://usb://Samsung/ML-1210 
    
  • Hay que tener cuidado con una cosa: si ponemos el filtro tea4cups en varias colas de impresión conectadas en cascada a la misma impresora, en la contabilidad los trabajos apareceran repetidos. El caso tipico es una impresora usb conectada a un PC y compartida hacia otros PC. En ese caso el filtro tea4cups debe ponerse solamente en el PC conectado fisicamente a la impresora, no en todos los demás.

  • En caso de impresoras especialmente complejas (que admitan impresión por doble cara, formatos A3, etc) es conveniente hacer pruebas (imprimiendo a doble cara, con varias copias, con acabado intercalado, etc) para verificar que se lleva bien la contabilidad. Tea4cups se limita a recoger la información que la pasa el driver CUPS para la impresora y enviarlo a controlies. Si el driver envía datos incorrectos (y es mas frecuente de lo que parece) la contabilidad será errónea. En ese caso la mejor solución es probar con otro driver distinto. En nuestra experiencia los drivers de OpenPrinting suelen dar mejores resultados en ese aspecto.

  • Tea4cups utiliza internamente el comando pkpgcounter (que analiza el fichero raw generado como salida del driver antes de ser enviado a la impresora) para determinar el número de páginas del trabajo impreso. Desafortunadamente, hay drivers para los que pkpgcounter no funciona, ya que usan un formato de fichero raw no estándar, propietario o desconocido. Un ejemplo esto son las impresoras de inyección Lexmark Z60X. En ese caso el número de páginas siempre resultará 0 y solo podremos hacer, como mucho, un seguimiento de los trabajos impresos, pero no de su extensión en páginas.

4. Problemas en el seguimiento de impresión.

Dado el gran número de impresoras disponibles en el mercado y la variedad de drivers para ellas, es posible que el recuento de impresión no sea correcto. Esto se detectará cuando al registrar un trabajo de impresión este aparece con un número incorrecto (incluso disparatado) de páginas o de copias.

Es importante cuando sucede esto acotar cuando se produce el problema: si sucede siempre o si sucede con una configuración especial de impresión, por ejemplo al elegir múltiples copias, doble cara, algun tipo de intercalado, etc. Esto nos ayudará al rastreo del origen.

4.1. Fundamentos del seguimiento de impresión.

El funcionamiento del registro de impresión es el siguiente:

  • Un programa envía un trabajo de impresión al CUPS

  • El CUPS pasa al driver el trabajo de impresión y éste genera el fichero en bruto que será enviado a la impresora. Este fichero está en "lenguaje de impresión" que comprende directamente la impresora, como PCL, PS (postscript), PJL o una infinidad de lenguajes y sublenguajes.

  • El CUPS llama al filtro tea4cups pasándole el trabajo en bruto, el nombre del fichero, el PC, el usuario, el nº de copias, etc. Ojo: el nº de páginas del documento no es calculado por el cups.

  • El tea4cups recopila estos datos y se los pasa al script /usr/share/controlies-client/seguimiento_impresion. Este script recoge todo, calcula el nº de páginas llamando al programa pkpgcounter con el fichero en bruto y envia los datos a controles.

De esto se deduce que:

  • Si el nº de copias es incorrecto, seguramente el fallo sea del driver de impresión.

  • Si el nº de páginas es incorrecto, seguramente el fallo sea de pkpgcounter, que no es capaz de procesar el fichero en bruto generado por el driver. También podría ser del driver, que genera un fichero en bruto no estándar.

4.2. Problemas con el driver.

En el caso de que sospechemos que el problema es el driver, habría que configurar de nuevo la impresora con otro driver. Puede ser que el sistema operativo nos ofrezca varios drivers alternativos, en cuyo caso habría que probarlos.

Otra fuente de drivers es la página http://www.openprinting.org/printers, en ella están casi todos los drivers conocidos y actualizados para todas las impresoras soportadas por CUPS, salvo alguna excepción.

4.3. Problemas con el pkpgcounter.

Este programa ha sido desarrollado por Jerome Alet (http://www.pykota.com/software/pkpgcounter/), que siempre se presta a colaborar cuando hay problemas. Lo primero que tenemos que hacer es obtener el fichero bruto de la impresión que nos causa problemas. Para ello hay que editar el script /usr/share/controlies-client/seguimiento_impresion y añadir las siguientes lineas::

#!/bin/bash
......
.......

fecha=$(date +"%F %H:%M:%S")
echo  "$fecha -> $TEAPRINTERNAME $TEAJOBID $TEATITLE $TEAUSERNAME $equipo $paginas $TEACOPIES" >> /tmp/logprinter.log
cat "$TEADATAFILE" > /tmp/$TEAJOBID.prn

peticion="http://ldap.$dominio/controlies/init/registro/actualizalogprinter?impresora=$TEAPRINTERNAME&jobid=$TEAJOBID&usuario=$TEAUSERNAME&host=$equipo&trabajo=$TEATITLE&paginas=$paginas&copias=$TEACOPIES&tamanio=$TEAJOBSIZE"
actualiza=$(wget -q -O - $peticion 2>/dev/null)

echo "Resultado: $actualiza" >> /tmp/logprinter.log

exit 0

Esto lo que hace es que a partir de ese momento se guardará un registro de lo enviado a controlies en el fichero local /tmp/logprinter.log. Adicionalmente, cada trabajo de impresión tiene un identificador numérico llamado JOBID. Con este identificador se crea una copia del fichero de impresión en bruto llamado /tmp/JOBID.prn (siendo JOBID un número) por cada trabajo enviado a controlies.

Para depurar nos será suficiente con tener una copia de /tmp/logprinter.log y una copia del fichero /tmp/JOBID.prn. Si hacemos para un trabajo cualquiera:

    pkpkgcounter /tmp/JOBID.prn

Nos saldrá en pantalla el número de páginas que ha calculado pkpgcounter. Así podremos saber si se corresponde o no con el número de páginas que tenía el trabajo original.

Por curiosidad, a veces también podemos visualizar el contenido del fichero en bruto, pero eso dependerá de en que formato se encuentre. Hay visualizadores para ficheros formatos PS, PCL, etc, pero tendremos primero que intentar averiguar el formato con:

    file /tmp/JOBID.prn

Y luego buscaremos en Internet si hay un visualizador para dicho tipo de ficheros.

Con esta información ya podremos empezar a depurar el fallo.

5. Otras configuraciones sobre los clientes.

  • Los equipos envían un informe del estado del pkgsync y el puppet cada 57 minutos. Esta periodicidad se puede cambiar manualmente para un equipo concreto en el /etc/crontab del equipo, modificando:

         */57 * * * * root /usr/share/controlies-client/seguimiento_equipo 
    
  • Desde los servidores de aula hay configurado un encendido general automático de revisión de los thinclients todas las mañanas a las 8:15. Esto puede cambiarse en el servidor NFS, en:

         /etc/puppet/modules/actualizaciones_controlies/manifests/init.pp  <--Obsoleto, desde la versión 0.7.0-6 seria ../instala_controlies/manifests/init.pp
    

    cambiando la regla cron para poner la hora (o las horas) que queramos:

         cron { revision-matinal: 
           command => "/usr/share/controlies-client/despierta_thinclients", 
           user    => root, 
           hour    => 8, 
           minute  => 15 
         }