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

Mostrando entradas con la etiqueta portatiles. Mostrar todas las entradas
Mostrando entradas con la etiqueta portatiles. Mostrar todas las entradas

viernes, 11 de noviembre de 2022

Log histórico de portátiles encendidos cada día

Por una necesidad concreta he escrito un script que va rellenando un log de los portátiles de alumnas que se encienden cada día en el instituto. La finalidad es generar un listado tabulado como el siguiente:
...
2022/11/11-08:37:10	portinves-o11	10.192.55.97
2022/11/11-08:37:10	portinves-o12	10.192.54.74
2022/11/11-08:37:23	portinves-o04	10.192.54.91
2022/11/11-08:37:30	portlenovo-o02	10.192.55.106
2022/11/11-08:37:38	portinves-o01	10.192.54.115
2022/11/11-08:37:45	portinves-o09	10.192.54.114
2022/11/11-08:37:46	portinves-o10	10.192.54.159
2022/11/11-08:37:51	portinves-o15	10.192.54.110
2022/11/11-08:38:09	portinves-o05	10.192.54.78
2022/11/11-08:38:26	portinves-o02	10.192.54.116
...
Aunque esa información puede encontrarse en la herramienta "controlies", quería tenerla centralizada en un fichero de texto plano fácilmente procesable para hacer estadísticas. Para saber que portátiles se han encendido puedo consultar el fichero /var/log/syslog del servidor, filtrando por "DHCPACK" y por el nombre "port":
# grep DHCPACK /var/log/syslog | grep -i port
...
Nov 11 10:37:21 servidor dhcpd: DHCPACK on 10.192.54.196 to 28:e3:47:32:7e:0e (portinves-o16) via 10.192.54.1
Nov 11 10:58:53 servidor dhcpd: DHCPACK on 10.192.55.111 to 6c:62:6d:14:e4:36 (portmsi-o13) via 10.192.54.1
Nov 11 11:10:29 servidor dhcpd: DHCPACK on 10.192.55.112 to 6c:62:6d:15:14:b6 (portmsi-o02) via 10.192.54.1
...
En mi caso esto es sencillo porque todos los portátiles de alumnos se llaman "portXXX-oXX". Otro filtro que se puede usar es la MAC, ya que la mayoría de portátiles del mismo lote tiene un prefijo de MAC idéntico.

Una vez obtenido el listado lo manipulo uno poco con utilidades bash para extraer la marca de tiempo, nombre e IP. Luego se ordena y eliminan líneas duplicadas, llevando todo a /var/log/portatiles.log. El script queda:
#!/bin/bash

dhcp_hoy=$(mktemp)
log_portatiles_hoy=$(mktemp)
log_portatiles="/var/log/portatiles.log"

grep DHCPACK /var/log/syslog | grep -i port  > $dhcp_hoy

while read -r line
do
  fecha=$(echo $line | head -c 15)
  fecha=$(date -d"$fecha" +%Y/%m/%d-%H:%M:%S)
  ip=$(echo $line | cut -d" " -f8)
  mac=$(echo $line | cut -d" " -f10)
  nombre=$(echo $line | cut -d" " -f11 | tr -d "()")

  echo -e "${fecha}\t${nombre}\t${ip}" >> $log_portatiles
done < $dhcp_hoy

cat $log_portatiles_hoy >> $log_portatiles

sort -u  -o $log_portatiles $log_portatiles

exit 0
Todo esto se pone en un script del servidor que es invocado un par de veces al día usando crontab. Con eso tendremos el log preparado para consultar y disponer de esa información por si nos la requieren.


Los 同志 chinos han acabado de ensamblar en órbita su Estación Espacial:
Han tenido que montarse su propia estación debido a las reticencias de USA. Cuando no se quiere colaborar no queda otra que competir... y competir contra China es cada vez más complicado. No creo que hayamos aprendido la lección.

martes, 25 de febrero de 2020

Monitorizando los portátiles del aula con monit (III)

Seguimos desde aquí.

Me interesaba saber en que momento en un aula concreta se habían conectado a la red los portátiles de los alumnos, con vistas a realizar unas comprobaciones y tareas en ellos con tmux-cssh.

La manera mas sencilla es usar monit para chequearlo y lanzar una alerta. Primero un script que encuentra todos los clientes conectados a la red del aula:
# cat /usr/local/bin/clientes-conectados.sh
#!/bin/bash
conectados=$(nmap -oG - -sP  192.168.0.200-253 | grep Up | awk '{print $2}')
total=$(echo $conectados | wc -w)
echo $conectados
exit $total
Ojo: para saber los clientes conectados escaneo el rango 192.168.0.200 a 253, que es el rango con el que se sirven IP a los portátiles en mis aulas. Cada cual debe adaptarlo a su caso.

El fichero de configuración de alerta de monit:
# cat /etc/monit/config.d/monitrc.clientes 
#Avisa cuando se conectan clientes a la wifi
check program clientes-conectados with path "/usr/local/bin/clientes-conectados.sh"
if status > 5  then alert
Por poner un límite inferior, he puesto que me avise cuando haya 5 o más portátiles conectados a la red wifi. En ese momento la alerta me llega con un correo tal como configuramos en entradas anteriores dedicadas a monit.

Out!

martes, 23 de julio de 2019

Control del estado de salud de la batería de nuestros portátiles.

El tener muchos portátiles iguales facilita que cuando la batería de uno de ellos se degrada y empieza a funcionar peor podemos comparar entre ellos e identificar las que están degenerando de una forma real.

Como en nuestro caso la garantía de los contratos cubre la batería durante varios años hemos pensado en cómo hacer una revisión de algunos modelos que daban signos de agotamiento, con el objeto de que nos cambien las baterías defectuosas antes de que expire la garantía.

En mi caso son portátiles Inves Helio-1106L, que son remarcados de Clevo W310CZ (y que se vende con otros etiquetados como Stone N120, Zoostorm 7270-9062, ...). Todos son el mismo.

1. Un poco de teoría de baterías.

Las características de una batería se definen por los mAh y el voltaje. Por ejemplo, para nuestros portátiles Inves tenemos baterías de 2800mAh y 14.8V, como se puede apreciar en la pegatina que traen (los Clevo originales traían baterías de 2200mAh, pero seguramente fueron ampliadas por requisitos del contrato, las cuales pedían una duración de 4 horas de uso medio según diversos tests).

Multiplicando ambos valores obtenemos la capacidad de energía acumulada, que sería 2.800*14.8=41.440wh. Eso significa que si el portátil consume de promedio 11w encendido, con 41.4wh tiene para 41.4/11=3.76 horas de funcionamiento. Con el tiempo y los ciclos de carga-descarga esa capacidad va mermando y es ese porcentaje de merma lo que queremos medir.

Para saber en tiempo real los datos de la batería usamos el comando upower. Cojo un portátil Inves cualquiera, lo cargo al 100% y con él enchufado a la corriente hago:
# upower -i /org/freedesktop/UPower/devices/battery_BAT0  
    .....
    energy:              30,0884 Wh
    energy-full:         30,0884 Wh 
    energy-full-design:  41,44 Wh  
    .....
    capacity:            72,6071%
Lo interesante: la capacidad por diseño de batería es 41.44wh. La capacidad real actual con la batería llena es de 30.08wh, por lo que la capacidad real en este momento es un 72% de la original. En nuestro caso la batería se considera averiada a efectos de garantía si está por debajo del 30%, por lo que de momento se libra de ser cambiada. De esta forma chequearemos todos los portátiles que deseemos.

Si nuestra batería tiene una ruta de acceso distinta de /org/freedesktop/UPower/devices/battery_BAT0 la podemos averiguar con:
# upower -e | grep BAT

2. Testeando la batería.

Una vez embarcado en esto, se me ha ocurrido chequear la bateria durante un ciclo de descarga, para hacerme una idea de su estado, duración y comprender el proceso de drenaje. Los datos que tomaré serán:
# upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage|energy"
    state:               fully-charged
    energy:              30,0884 Wh
    energy-empty:        0 Wh
    energy-full:         30,0884 Wh
    energy-full-design:  41,44 Wh
    energy-rate:         0 W
    percentage:          100%
Con los que haré un bucle que cada minuto guarde ese resultado en un log hasta que el portátil se apague por falta de energía. Para conseguir simular un uso continuo y exhaustivo desconectaré el apagado de pantalla (con xset), pondré el brillo al máximo (con xrandr), simularé mover el ratón cada minuto para evitar entradas en modo ahorro de energía (con xte) y mientras tanto reproduciré un vídeo de youtube de varias horas de duración conectado a la red wifi.

Este es el sript check-bateria.sh
#!/bin/bash
xset s off -dpms

while true
do
   xrandr --output eDP-1 --brightness 1.0
   xte   'mousermove 4 4'
   date >>  ~/log-bateria.txt
   upower -i $(upower -e | grep 'BAT') | grep -E "state|to\ full|percentage|energy" >> ~/log-bateria.txt
   sleep 60
   xte  'mousermove -4 -4'
done
exit 0
Los pasos a seguir son encender el portátil con la batería cargada al 100%, iniciar sesión, conectar la wifi, iniciar el vídeo de Youtube y ejecutar el script anterior, dejando todo en marcha hasta que el portátil se apague.

Un resumen de los datos capturados sería:
lun jul 22 10:04:51 CEST 2019
state:               fully-charged
energy:              30,0884 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         0 W
percentage:          100%
.................................
.................................
lun jul 22 10:06:51 CEST 2019
state:               discharging
energy:              30,0884 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         0 W
percentage:          100%
lun jul 22 10:07:51 CEST 2019
state:               discharging
energy:              29,6 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         0 W
percentage:          98%
.................................
.................................
lun jul 22 10:09:52 CEST 2019
state:               discharging
energy:              29,0968 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         14,9184 W
percentage:          96%
.................................
.................................
lun jul 22 10:14:52 CEST 2019
state:               discharging
energy:              28,1052 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         14,9057 W
percentage:          93%
.................................
.................................
lun jul 22 11:47:59 CEST 2019
state:               discharging
energy:              2,812 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         16,8519 W
percentage:          9%
lun jul 22 11:48:59 CEST 2019
state:               discharging
energy:              2,0276 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         43,2254 W
percentage:          6%
lun jul 22 11:49:59 CEST 2019
state:               discharging
energy:              1,7316 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         29,9519 W
percentage:          5%
lun jul 22 11:51:00 CEST 2019
state:               discharging
energy:              1,4504 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         17,1257 W
percentage:          4%
lun jul 22 11:52:00 CEST 2019
state:               discharging
energy:              1,1544 Wh
energy-empty:        0 Wh
energy-full:         30,0884 Wh
energy-full-design:  41,44 Wh
energy-rate:         17,6331 W
percentage:          3%
Conclusiones:
  • El consumo instantáneo (energy-rate) está entre 15 y 17.5 watios de promedio. Con 30.0884wh de capacidad aguantaría una hora y 48 minutos de uso continuo intensivo = 1.8 horas expresado en valor decimal.
  • Con los 41.44 Wh iniciales nos daría dos horas y media de uso intensivo, 2.5 horas en valor decimal.
  • Según upower la batería está en el 72,6071% de su capacidad inicial de fábrica. Para cotejar con la realidad hallamos la razón de las duraciones con el cociente 1.8/2.5 = 0.72. Correcto, coincide con lo estimado por upower.
Como la batería aún retiene un 72% de su capacidad de carga inicial no podemos reemplazarla usando la garantía. Bueno, otra vez será.


Ayer día 22 la India lanzó la nave Chandrayaan 2 en dirección a la Luna, con la intención de aterrizar un rover y convertirse en el cuarto país en la historia que ha puesto de forma controlada una sonda de exploración en la superficie de nuestro satélite.


Esto lo hace sin asistencia de ningún otro país, con su programa espacial propio y de forma autónoma.

El coste de la misión es de 126 millones de euros. El coste de una repetición de elecciones en 2019 en el Reino de España sería superior a los 140 millones de euros. Como vemos, cada uno hace lo que puede según su capacidad.

jueves, 9 de mayo de 2019

Configuración de pórtatiles TechComputer TC11

Nos han llegado unos portátiles TechComputer TC11, unos clónicos que internamente se identifican (usando dmidecode podemos verlo) como P325J. Traen una imagen de Xubuntu 18 para miniportátiles casi totalmente configurada. Anotaré en esta entrada las modificaciones que vaya haciendo.

Lo primero es definir en /etc/escuela2.0 las variables que identifican al nuevo modelo de equipo, de cara a aplicar reglas puppet:
# cat /etc/escuela2.0
SISTEMA=ubuntu1804
USO=portatiles
HARDWARE=TC11
USUARIO=alumno

Para los portátiles tengo un módulo puppet "xubuntu18_portatil_ajustes", en la cual hay un case por $hardware:

...
case $hardware {
    "TC11": {
       file {"/etc/X11/xorg.conf.d":
            owner => root , group => root , mode => 644 , 
            ensure => directory,
       }

       file {"/etc/X11/xorg.conf.d/10-xorg-tc11.conf":
            owner => root , group => root , mode => 644 , 
            source => "puppet:///modules/xubuntu18_portatil_ajustes/10-xorg-tc11.conf",
       }
       #Cambia resolucion del grub para que en consola aparezca bien el contenido.
       file { "/etc/default/grub":
            source => "puppet:///modules/xubuntu18_portatil_ajustes/grub.default.TC11",
            owner => root , group => root , mode => 644 , 
       }
       exec { "update-grub2":
            subscribe => File ["/etc/default/grub"],
            refreshonly => true
       }
       #Certificado ldap
       file { "/etc/ldap/ssl/ldap-server-pubkey.pem":
            owner => root , group => root , mode => 644 , 
            source => "puppet:///modules/xubuntu18_portatil_ajustes/ldap-server-pubkey.pem",
       }
    }
...

Lo que hacemos es:
  1. Añadir un /etc/X11/xorg.conf.d/10-xorg-tc11.conf con una configuración personalizada de Xorg. Por defecto estos portátiles vienen con una resolución altísima que deja la letra muy pequeña. El fichero 10-xorg-tc11.conf para una resolución de 1360x768 (se pueden probar otras resoluciones posibles usando el comando xrandr en un terminal) sería:
    Section "Device"
            ### Available Driver options are:-
            ### Values: <i>: integer, <f>: float, <bool>: "True"/"False",
            ### <string>: "String", <freq>: "<f> Hz/kHz/MHz",
            ### <percent>: "<f>%"
            ### [arg]: arg optional
            #Option "ColorKey" "integer"
            #Option "DRI" "string"
            #Option "CacheLines" "integer"
            #Option "DDC" "boolean"
            #Option "Dac6Bit" "boolean"
            #Option "XvMCSurfaces" "integer"
            #Option "Accel" "boolean"
            #Option "Present" "boolean"
            #Option "AccelMethod" "string"
            #Option "TearFree" "boolean"
            #Option "ReprobeOutputs" "boolean"
            #Option "VideoKey" "integer"
            #Option "XvPreferOverlay" "boolean"
            #Option "Backlight" "string"
            #Option "CustomEDID" "string"
            #Option "FallbackDebug" "boolean"
            #Option "DebugFlushBatches" "boolean"
            #Option "DebugFlushCaches" "boolean"
            #Option "DebugWait" "boolean"
            #Option "HWRotation" "boolean"
            #Option "VSync" "boolean"
            #Option "PageFlip" "boolean"
            #Option "SwapbuffersWait" "boolean"
            #Option "TripleBuffer" "boolean"
            #Option "Tiling" "boolean"
            #Option "LinearFramebuffer" "boolean"
            #Option "RelaxedFencing" "boolean"
            #Option "XvMC" "boolean"
            #Option "Throttle" "boolean"
            #Option "HotPlug" "boolean"
            #Option "Virtualheads" "integer"
            #Option "ZaphodHeads" "string"
            #Option "ZaphodHeads" "LVDS1,VGA1"
            #Option "ZaphodHeads" "0,2:HDMI1,DP2"
            #Option "Position" "0 0"
            #Option "Position" "1024 0"
            #Option "RightOf" "Laptop FoodBar Internal Display"
            #Option "monitor-LVDS" "Laptop FooBar Internal Display"
            #Option "monitor-VGA" "Some Random CRT"
            Identifier  "Card0"
            Driver      "intel"
            BusID       "PCI:0:2:0"
    EndSection
    
    Section "Screen"
        Identifier "Screen0"
        Device     "Card0"
        Monitor    "Monitor0"
        SubSection             "Display"
                Depth               24
                Modes              "1360x768" #Choose the resolution
        EndSubSection
    EndSection
    

  2. De igual manera, el grub aparece con una letra minúscula, para solucionar esto debemos meter un nuevo fichero /etc/default/grub y regenerarlo:
    # If you change this file, run 'update-grub' afterwards to update
    # /boot/grub/grub.cfg.
    # For full documentation of the options in this file, see:
    #   info -f grub -n 'Simple configuration'
    
    GRUB_DEFAULT=0
    GRUB_HIDDEN_TIMEOUT=0
    GRUB_HIDDEN_TIMEOUT_QUIET=true
    GRUB_TIMEOUT=10
    GRUB_TIMEOUT_STYLE=menu
    GRUB_DISTRIBUTOR=`lsb_release -i -s 2> /dev/null || echo Debian`
    GRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
    GRUB_CMDLINE_LINUX="ipv6.disable=1"
    
    # Uncomment to enable BadRAM filtering, modify to suit your needs
    # This works with Linux (no patch required) and with any kernel that obtains
    # the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
    #GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
    
    # Uncomment to disable graphical terminal (grub-pc only)
    #GRUB_TERMINAL=console
    
    # The resolution used on graphical terminal
    # note that you can use only modes which your graphic card supports via VBE
    # you can see them in real GRUB with the command `vbeinfo'
    GRUB_GFXMODE=800x600
    
    # Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
    #GRUB_DISABLE_LINUX_UUID=true
    
    # Uncomment to disable generation of recovery mode menu entries
    #GRUB_DISABLE_RECOVERY="true"
    
    # Uncomment to get a beep at grub start
    #GRUB_INIT_TUNE="480 440 1"
    GRUB_DISABLE_OS_PROBER=true
    

  3. Los portátiles no traen /etc/ldap/ssl/ldap-server-pubkey.pem, por lo que si usamos Secure LDAP la autenticación nos fallará. Metemos la clave (cogida de otra máquina que si la traiga) por si nos hace falta.
Seguiremos añadiendo cosas en este mismo post según vayan apareciendo problemas a resolver.


Addenda 17/mayo/2019:

  • Algunos portátiles una vez arrancados no cogen red y dan continuos errores en consola de RTC. Eso se debe a que tienen mal la fecha y debemos pulsar ESC o Supr en el inicio para entrar en la BIOS y meter la fecha correcta manualmente.
  • En algún portátil nos ha sucedido que en el arranque no carga el grub, sino que se muestra:
    Que es una shell de EFI. Eso sucede porque en la BIOS no está configurado bien el orden de arranque de dispositivos, el cual debe ser:

Addenda 20/mayo/2019:
Cuando vamos a consola con CTRL-ALT-F1 todo se ve con letra minúscula, tal como se veía el GRUB inicialmente. La modificación hecha antes para arreglarlo en el GRUB no funciona una vez se ha cargado el sistema.

La solución es hacer un script que cargue un font que sea mas visible. El script se llamará /usr/bin/local/fontset:
#!/bin/sh
setfont /usr/share/consolefonts/Uni3-TerminusBold32x16.psf.gz
Después hacemos ejecutable dicho script y lo invocamos en el inicio de sesión de root, añadiendo al final de /root/.profile:
test "$TERM" == "linux" && /usr/local/bin/fontset
Otra solución que he probado es quedar /etc/default/console-setup así:
# CONFIGURATION FILE FOR SETUPCON
# Consult the console-setup(5) manual page.
ACTIVE_CONSOLES="/dev/tty[1-6]"
CHARMAP="UTF-8"
CODESET="Lat15"
FONTFACE="Terminus"
FONTSIZE="16x32"
VIDEOMODE=
FONT="Lat15-Terminus32x16.psf.gz"
Y ejecutar después:
# cp /usr/share/consolefonts/Lat15-Terminus32x16.psf.gz /etc/console-setup/
# update-initramfs -u
# reboot
Esto hace que el cambio de tamaño de font sea ya desde la petición de login...pero en la consola 2 y sucesivas (CTRL-ALT-F2, F3,..). En la primera consola (CTRL-ALT-F1) no comprendo por qué motivo no se cambia.

Si en lugar de estas 3 últimas líneas hacemos "setupcon" se consigue un resultado similar, pero en las pruebas me he encontrado con que no siempre funciona.


Addenda 22/mayo/2019:

Hemos tenido otro problema con el touchpad, que de manera aleatoria deja de funcionar cuando llevamos un rato trabajando, obligándonos a conectar un ratón USB. Se detecta como un dispositivo SYNA3602:00 0911:5288 Touchpad (podemos verlo con "cat /proc/bus/input/devices") y es manejado por el módulo i2c_hid. Si buscamos en Internet vemos que tiene un pequeño historial de problemas.

La solución propuesta por nuestros compañeros de servicios centrales es actualizar el kernel y sus módulos a la versión 5.0.0-15, lo cual podemos hacer con unas reglas puppet:
package { 'linux-image-5.0.0-15-generic' :
    ensure => "installed" ,
}
package { 'linux-modules-5.0.0-15-generic' :
    ensure => "installed" ,
}
package { 'linux-modules-extra-5.0.0-15-generic' :
    ensure => "installed" ,
}
Y después de esto no vuelve a aparecer el problema del touchpad.


Addenda 23/mayo/2019:

Seguimos con cosas para corregir o mejorar que van descubriendo los compañeros.

En el escritorio de los portátiles parece el disco "sda2" accesible. Esta partición es donde se guarda clonezilla y lo mas adecuado es ocultarla con este fichero de configuración:
# cat /etc/udev/rules.d/99-hide-disks.rules
KERNEL=="sda2", ENV{UDISKS_IGNORE}="1"
Si queremos acceder desde los portátiles a la carpeta compartida /home/instituto hay un pequeño problema con los permisos, que se corrige:
file { "/etc/auto.instituto":
    ensure => file,
    owner => root, group => root, mode => 644,
}

Me despido compartiendo un maravilloso bar que encontré en Bulgaria:


Un buen sitio para un sysadmin y su cerveza.