miércoles, octubre 09, 2019

Kernels nuevos en Debian Buster

Continuando con la serie de posts con versiones estables, en este artículo publico la última versión disponible del kernel de Linux, compilada, empaquetada y fácilmente instalable como .deb sobre cualquier sistema Debian GNU/Linux 10 Buster de 64 bits sin quilombo de dependencias.

En cada directorio encontrarán los paquetes con la imagen del kernel, los encabezados, el changelog y la configuración utilizada en la compilación, que está basada en la publicada en el repositorio experimental de Debian.
Si les interesa saber qué hay de nuevo, les dejo el link al post sobre novedades del kernel en Phoronix y el clásico resumen hecho por la gente de KernelNewbies.

A medida que vayan saliendo nuevas versiones iré actualizando este pequeño “repositorio” para mantenerlo al día.

jueves, agosto 15, 2019

Una noche de genios (salvo por el jurado)

El viernes 9 de agosto pasado, la agrupación de Hockey Masculino del Luján Rugby Club organizó en el Salón del Rotary Club Juan Barnech una “Noche de Mente” con el fin de recaudar fondos para costear el traslado del equipo de hockey juvenil Vikinguitos a una competencia en Mar del Plata.

Para quienes no han oído hablar de este tipo de encuentros, una “Noche de Mente”, más conocida como “Noche de Genios”, es un evento a beneficio de una agrupación o institución en el cual distintos grupos de amigos / familiares conforman equipos o “mesas” que compiten entre sí respondiendo preguntas en distintas rondas, donde cada ronda trata sobre una temática particular tal como deportes, cine y televisión, literatura, música, biología, historia, cultura general, etc. Aquellos que responden correctamente suman puntos y la mesa que más puntos acumula se corona ganadora de la noche.

La tarjeta de participación tiene un costo simbólico que, en conjunto con las donaciones de distintos comercios y lo obtenido de la venta en cantina, aporta a un fondo común del que salen los premios y, fundamentalmente, la recaudación para la cual fue organizado el evento. En general, los organizadores y quienes trabajan en pos de ello son los miembros de la misma institución, sus padres, familiares y amigos. En Luján suelen realizarse con frecuencia, llevadas adelante por promociones de escuelas, grupos deportivos y agrupaciones sociales.

El fin último es colaborar con una institución reconocida y en pos de un buen motivo. También, desde luego, pasar una noche divertida con amigos y conocidos.

Así transcurrió la noche del viernes, con una concurrencia completa, con buena atención por parte de los jóvenes de la agrupación, con una sana y animada competencia entre mesas amigas. Así transcurrió hasta el momento del anuncio de los resultados.

Es que, sorprendentemente, el jurado anunció como ganadora a la mesa equivocada, cuyo puntaje acumulado es matemáticamente imposible de obtener según los anuncios de conteos parciales que el mismo anfitrión realizó durante distintos momentos de la noche. Se lo digo de otra forma: ni siquiera teniendo calificación perfecta en todas las rondas restantes, dicha mesa podía haber obtenido el puntaje que fue asignado por el jurado. Para peor, el anfitrión anunció que la mesa había ganado "por más de 40 puntos" sobre el resto, según sus palabras.  Un error del que quien operaba la locución podría haberse percatado inmediatamente si hubiera prestado la mínima atención a las rondas anteriores.

Durante el cierre del evento, nos acercamos con un participante amigo a consultar respecto de la validez de los resultados. No quedaba ninguno de los jurados –que se ausentaron rápidamente, por lo visto–, pero sí uno de los organizadores del juego. Sin saber cómo se realizaron los cálculos, hizo lo posible para comprender la cadena de errores que habían cometido:
  1. El jurado cometió un error al calcular el puntaje de la mesa “ganadora”, sumando dos veces la calificación de las primeras rondas, con lo cual arribaba a un resultado muy superior –y errado– al del resto de los competidores. Sumando correctamente los valores de la planilla de resultados del jurado, el puntaje real de la mesa ganadora no alcanzaba el mínimo necesario para estar entre los primeros tres puestos del encuentro.
  2. Quien realizó el control de las respuestas de la anteúltima ronda, intercambió el puntaje de dos mesas. Nuestras respuestas correctas, cotejadas contra lo mencionado al final de la ronda 9, eran 17, mientras que en la planilla de resultado figuraban sólo 6 puntos. Esos 17 puntos figuraban asignados a la mesa de la columna inmediatamente anterior.
  3. La forma en que la organización podría haber validado o refutado lo mencionado en el punto anterior es con la revisión de la hoja de respuestas de cada mesa. Curiosamente, la única hoja de respuestas que faltaba era la correspondiente a nuestra mesa. “Parece como si lo hubiéramos hecho a propósito” dijo quien atendió nuestro reclamo. En efecto, parece como si lo hubieran hecho a propósito.
  4. Finalmente, no se anunciaron los puntajes de las últimas rondas. De haberlo hecho, los tres errores previamente mencionados podrían haberse advertido y resuelto en el momento.
Una Noche de Genios es un encuentro donde se premia a quienes responden correctamente.
¿Qué validez puede tener, entonces, la corrección de un jurado que se equivoca al otorgar el primer premio?

Podría decirse “errar es humano” o “es un juego, no deberías tomártelo tan a pecho”. Si una situación similar se diera en un partido de hockey, ¿no habría la agrupación competidora presentado una queja formal?

Es cierto, errar es humano, como también es humano reconocer los propios errores. Lo primero sucedió. Ahora estoy esperando una disculpa pública por parte de la organización.

Por lo pronto, van dos recomendaciones para las próximas noches de genios, que son de especial interés si la tarjeta dice “Agrupación de Hockey Masculino del Luján Rugby Club”:
  • Si está del lado de la organización: revise las hojas de resultados entre dos o más personas; anuncie las respuestas correctas al finalizar cada juego y los puntos asignados a cada mesa; realice revisión por pares de las sumas de puntajes; y si se le complican las sumas, ¡use Excel, por el amor de Dios!
  • Si participa en una noche de genios: controle las sumas de su propia mesa y controle además los puntajes de las demás. Nunca se sabe si el jurado que le tocó en la noche se llevó matemáticas a marzo.
Para finalizar, sólo deseo que los Vikinguitos tengan mejor suerte. Que lleven adelante un excelente encuentro en Mar del Plata, compitiendo con ansias y con garra.

Y espero, más que nada, que puedan traerse un merecido trofeo, en vez de volver a Luján desilusionados con una victoria-que-no-fue porque la organización se equivocó al sumar los puntos del partido.

Mauro A. Meloni

viernes, septiembre 14, 2018

Benchmark day 4: Toshiba 3.5" DT01ACA 1TB (DT01ACA100)

Esta es la cuarta entrega de la serie de pruebas a discos rígidos y SSDs, motivada por una reciente actualización de la estación de trabajo. Siguen las especificaciones y más abajo los resultados por si a alguno le interesa.

Toshiba 3.5" DT01ACA
Modelo: TOSHIBA DT01ACA100
Capacidad: 1 TB
Interfaz: SATA III
Caché: 31 MiB (aprox 24 MB)
Velocidad: 7200 RPM
Tamaño de sector: 4K físico, 512 lógico
# hdparm -I /dev/sda:
ATA device, with non-removable media
 Model Number:       TOSHIBA DT01ACA100
 Serial Number:      [REDACTED]
 Firmware Revision:  MS2OA750
 Transport:          Serial, ATA8-AST, SATA 1.0a, SATA II Extensions, SATA Rev 2.5, SATA Rev 2.6, SATA Rev 3.0; Revision: ATA8-AST T13 Project D1697 Revision 0b
Standards:
 Used: unknown (minor revision code 0x0029) 
 Supported: 8 7 6 5 
 Likely used: 8
Configuration:
 Logical  max current
 cylinders 16383 16383
 heads  16 16
 sectors/track 63 63
 --
 CHS current addressable sectors:    16514064
 LBA    user addressable sectors:   268435455
 LBA48  user addressable sectors:  1953525168
 Logical  Sector size:                   512 bytes
 Physical Sector size:                  4096 bytes
 Logical Sector-0 offset:                  0 bytes
 device size with M = 1024*1024:      953869 MBytes
 device size with M = 1000*1000:     1000204 MBytes (1000 GB)
 cache/buffer size  = 23652 KBytes (type=DualPortCache)
 Form Factor: 3.5 inch
 Nominal Media Rotation Rate: 7200
Capabilities:
 LBA, IORDY(can be disabled)
 Queue depth: 32
 Standby timer values: spec'd by Standard, no device specific minimum
 R/W multiple sector transfer: Max = 16 Current = 16
 Advanced power management level: disabled
 DMA: mdma0 mdma1 mdma2 udma0 udma1 udma2 udma3 udma4 udma5 *udma6 
      Cycle time: min=120ns recommended=120ns
 PIO: pio0 pio1 pio2 pio3 pio4 
      Cycle time: no flow control=120ns  IORDY flow control=120ns
Commands/features:
 Enabled Supported:
    * SMART feature set
      Security Mode feature set
    * Power Management feature set
    * Write cache
    * Look-ahead
    * Host Protected Area feature set
    * WRITE_BUFFER command
    * READ_BUFFER command
    * NOP cmd
    * DOWNLOAD_MICROCODE
      Advanced Power Management feature set
      Power-Up In Standby feature set
    * SET_FEATURES required to spinup after power up
      SET_MAX security extension
    * 48-bit Address feature set
    * Device Configuration Overlay feature set
    * Mandatory FLUSH_CACHE
    * FLUSH_CACHE_EXT
    * SMART error logging
    * SMART self-test
      Media Card Pass-Through
    * General Purpose Logging feature set
    * WRITE_{DMA|MULTIPLE}_FUA_EXT
    * 64-bit World wide name
    * URG for READ_STREAM[_DMA]_EXT
    * URG for WRITE_STREAM[_DMA]_EXT
    * WRITE_UNCORRECTABLE_EXT command
    * {READ,WRITE}_DMA_EXT_GPL commands
    * Segmented DOWNLOAD_MICROCODE
      unknown 119[7]
    * Gen1 signaling speed (1.5Gb/s)
    * Gen2 signaling speed (3.0Gb/s)
    * Gen3 signaling speed (6.0Gb/s)
    * Native Command Queueing (NCQ)
    * Host-initiated interface power management
    * Phy event counters
    * NCQ priority information
      Non-Zero buffer offsets in DMA Setup FIS
    * DMA Setup Auto-Activate optimization
      Device-initiated interface power management
      In-order data delivery
    * Software settings preservation
    * SMART Command Transport (SCT) feature set
    * SCT Write Same (AC2)
    * SCT Error Recovery Control (AC3)
    * SCT Features Control (AC4)
    * SCT Data Tables (AC5)
Security: 
 Master password revision code = 65534
  supported
 not enabled
 not locked
  frozen
 not expired: security count
 not supported: enhanced erase
 156min for SECURITY ERASE UNIT.
Logical Unit WWN Device Identifier: [REDACTED]
 NAA  : 5
 IEEE OUI : 000039
 Unique ID : [REDACTED]
Checksum: correct

# smartctl -x /dev/sda
smartctl 6.6 2016-05-31 r4324 [x86_64-linux-4.17.0-0.bpo.1-amd64] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org

=== START OF INFORMATION SECTION ===
Model Family:     Toshiba 3.5" DT01ACA... Desktop HDD
Device Model:     TOSHIBA DT01ACA100
Serial Number:    [REDACTED]
LU WWN Device Id: [REDACTED]
Firmware Version: MS2OA750
User Capacity:    1.000.204.886.016 bytes [1,00 TB]
Sector Sizes:     512 bytes logical, 4096 bytes physical
Rotation Rate:    7200 rpm
Form Factor:      3.5 inches
Device is:        In smartctl database [for details use: -P show]
ATA Version is:   ATA8-ACS T13/1699-D revision 4
SATA Version is:  SATA 3.0, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is:    Wed Aug  8 11:48:00 2018 -03
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
AAM feature is:   Unavailable
APM feature is:   Disabled
Rd look-ahead is: Enabled
Write cache is:   Enabled
ATA Security is:  Disabled, frozen [SEC2]
Wt Cache Reorder: Enabled

=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

General SMART Values:
Offline data collection status:  (0x84) Offline data collection activity
     was suspended by an interrupting command from host.
     Auto Offline Data Collection: Enabled.
Self-test execution status:      (   0) The previous self-test routine completed
     without error or no self-test has ever 
     been run.
Total time to complete Offline 
data collection:   ( 7167) seconds.
Offline data collection
capabilities:     (0x5b) SMART execute Offline immediate.
     Auto Offline data collection on/off support.
     Suspend Offline collection upon new
     command.
     Offline surface scan supported.
     Self-test supported.
     No Conveyance Self-test supported.
     Selective Self-test supported.
SMART capabilities:            (0x0003) Saves SMART data before entering
     power-saving mode.
     Supports SMART auto save timer.
Error logging capability:        (0x01) Error logging supported.
     General Purpose Logging supported.
Short self-test routine 
recommended polling time:   (   1) minutes.
Extended self-test routine
recommended polling time:   ( 120) minutes.
SCT capabilities:         (0x003d) SCT Status supported.
     SCT Error Recovery Control supported.
     SCT Feature Control supported.
     SCT Data Table supported.

SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME          FLAGS    VALUE WORST THRESH FAIL RAW_VALUE
  1 Raw_Read_Error_Rate     PO-R--   100   100   016    -    0
  2 Throughput_Performance  P-S---   142   142   054    -    71
  3 Spin_Up_Time            POS---   116   116   024    -    191 (Average 203)
  4 Start_Stop_Count        -O--C-   100   100   000    -    13
  5 Reallocated_Sector_Ct   PO--CK   100   100   005    -    0
  7 Seek_Error_Rate         PO-R--   100   100   067    -    0
  8 Seek_Time_Performance   P-S---   115   115   020    -    34
  9 Power_On_Hours          -O--C-   100   100   000    -    145
 10 Spin_Retry_Count        PO--C-   100   100   060    -    0
 12 Power_Cycle_Count       -O--CK   100   100   000    -    13
192 Power-Off_Retract_Count -O--CK   100   100   000    -    13
193 Load_Cycle_Count        -O--C-   100   100   000    -    13
194 Temperature_Celsius     -O----   206   206   000    -    29 (Min/Max 19/33)
196 Reallocated_Event_Count -O--CK   100   100   000    -    0
197 Current_Pending_Sector  -O---K   100   100   000    -    0
198 Offline_Uncorrectable   ---R--   100   100   000    -    0
199 UDMA_CRC_Error_Count    -O-R--   200   200   000    -    0
                            ||||||_ K auto-keep
                            |||||__ C event count
                            ||||___ R error rate
                            |||____ S speed/performance
                            ||_____ O updated online
                            |______ P prefailure warning

General Purpose Log Directory Version 1
SMART           Log Directory Version 1 [multi-sector log support]
Address    Access  R/W   Size  Description
0x00       GPL,SL  R/O      1  Log Directory
0x01           SL  R/O      1  Summary SMART error log
0x03       GPL     R/O      1  Ext. Comprehensive SMART error log
0x04       GPL     R/O      7  Device Statistics log
0x06           SL  R/O      1  SMART self-test log
0x07       GPL     R/O      1  Extended self-test log
0x08       GPL     R/O      2  Power Conditions log
0x09           SL  R/W      1  Selective self-test log
0x10       GPL     R/O      1  SATA NCQ Queued Error log
0x11       GPL     R/O      1  SATA Phy Event Counters log
0x20       GPL     R/O      1  Streaming performance log [OBS-8]
0x21       GPL     R/O      1  Write stream error log
0x22       GPL     R/O      1  Read stream error log
0x80-0x9f  GPL,SL  R/W     16  Host vendor specific log
0xe0       GPL,SL  R/W      1  SCT Command/Status
0xe1       GPL,SL  R/W      1  SCT Data Transfer

SMART Extended Comprehensive Error Log Version: 1 (1 sectors)
No Errors Logged

SMART Extended Self-test Log Version: 1 (1 sectors)
No self-tests have been logged.  [To run self-tests, use: smartctl -t]

SMART Selective self-test log data structure revision number 1
 SPAN  MIN_LBA  MAX_LBA  CURRENT_TEST_STATUS
    1        0        0  Not_testing
    2        0        0  Not_testing
    3        0        0  Not_testing
    4        0        0  Not_testing
    5        0        0  Not_testing
Selective self-test flags (0x0):
  After scanning selected spans, do NOT read-scan remainder of disk.
If Selective self-test is pending on power-up, resume after 0 minute delay.

SCT Status Version:                  3
SCT Version (vendor specific):       256 (0x0100)
SCT Support Level:                   1
Device State:                        SMART Off-line Data Collection executing in background (4)
Current Temperature:                    29 Celsius
Power Cycle Min/Max Temperature:     29/31 Celsius
Lifetime    Min/Max Temperature:     19/33 Celsius
Under/Over Temperature Limit Count:   0/0

SCT Temperature History Version:     2
Temperature Sampling Period:         1 minute
Temperature Logging Interval:        1 minute
Min/Max recommended Temperature:      0/60 Celsius
Min/Max Temperature Limit:           -40/70 Celsius
Temperature History Size (Index):    128 (61)

Index    Estimated Time   Temperature Celsius
  62    2018-08-08 09:41    30  ***********
 ...    ..( 19 skipped).    ..  ***********
  82    2018-08-08 10:01    30  ***********
  83    2018-08-08 10:02     ?  -
 ...    ..(  4 skipped).    ..  -
  88    2018-08-08 10:07     ?  -
  89    2018-08-08 10:08    31  ************
 ...    ..( 11 skipped).    ..  ************
 101    2018-08-08 10:20    31  ************
 102    2018-08-08 10:21    30  ***********
 ...    ..(  6 skipped).    ..  ***********
 109    2018-08-08 10:28    30  ***********
 110    2018-08-08 10:29    29  **********
 ...    ..(  7 skipped).    ..  **********
 118    2018-08-08 10:37    29  **********
 119    2018-08-08 10:38    30  ***********
 ...    ..(  2 skipped).    ..  ***********
 122    2018-08-08 10:41    30  ***********
 123    2018-08-08 10:42    31  ************
 ...    ..( 11 skipped).    ..  ************
   7    2018-08-08 10:54    31  ************
   8    2018-08-08 10:55    30  ***********
 ...    ..(  5 skipped).    ..  ***********
  14    2018-08-08 11:01    30  ***********
  15    2018-08-08 11:02    29  **********
 ...    ..(  5 skipped).    ..  **********
  21    2018-08-08 11:08    29  **********
  22    2018-08-08 11:09    30  ***********
  23    2018-08-08 11:10    30  ***********
  24    2018-08-08 11:11    30  ***********
  25    2018-08-08 11:12    29  **********
  26    2018-08-08 11:13    29  **********
  27    2018-08-08 11:14    30  ***********
  28    2018-08-08 11:15    29  **********
 ...    ..( 11 skipped).    ..  **********
  40    2018-08-08 11:27    29  **********
  41    2018-08-08 11:28    30  ***********
 ...    ..(  2 skipped).    ..  ***********
  44    2018-08-08 11:31    30  ***********
  45    2018-08-08 11:32    29  **********
 ...    ..( 15 skipped).    ..  **********
  61    2018-08-08 11:48    29  **********

SCT Error Recovery Control:
           Read: Disabled
          Write: Disabled

Device Statistics (GP Log 0x04)
Page  Offset Size        Value Flags Description
0x01  =====  =               =  ===  == General Statistics (rev 1) ==
0x01  0x008  4              13  ---  Lifetime Power-On Resets
0x01  0x010  4             145  ---  Power-on Hours
0x01  0x018  6      1200047924  ---  Logical Sectors Written
0x01  0x020  6         2860535  ---  Number of Write Commands
0x01  0x028  6      1608553599  ---  Logical Sectors Read
0x01  0x030  6         2008039  ---  Number of Read Commands
0x03  =====  =               =  ===  == Rotating Media Statistics (rev 1) ==
0x03  0x008  4             145  ---  Spindle Motor Power-on Hours
0x03  0x010  4             145  ---  Head Flying Hours
0x03  0x018  4              13  ---  Head Load Events
0x03  0x020  4               0  ---  Number of Reallocated Logical Sectors
0x03  0x028  4               2  ---  Read Recovery Attempts
0x03  0x030  4               9  ---  Number of Mechanical Start Failures
0x04  =====  =               =  ===  == General Errors Statistics (rev 1) ==
0x04  0x008  4               0  ---  Number of Reported Uncorrectable Errors
0x04  0x010  4               0  ---  Resets Between Cmd Acceptance and Completion
0x05  =====  =               =  ===  == Temperature Statistics (rev 1) ==
0x05  0x008  1              30  ---  Current Temperature
0x05  0x010  1              29  N--  Average Short Term Temperature
0x05  0x018  1               -  N--  Average Long Term Temperature
0x05  0x020  1              33  ---  Highest Temperature
0x05  0x028  1              19  ---  Lowest Temperature
0x05  0x030  1              31  N--  Highest Average Short Term Temperature
0x05  0x038  1              24  N--  Lowest Average Short Term Temperature
0x05  0x040  1               -  N--  Highest Average Long Term Temperature
0x05  0x048  1               -  N--  Lowest Average Long Term Temperature
0x05  0x050  4               0  ---  Time in Over-Temperature
0x05  0x058  1              60  ---  Specified Maximum Operating Temperature
0x05  0x060  4               0  ---  Time in Under-Temperature
0x05  0x068  1               0  ---  Specified Minimum Operating Temperature
0x06  =====  =               =  ===  == Transport Statistics (rev 1) ==
0x06  0x008  4             125  ---  Number of Hardware Resets
0x06  0x010  4             112  ---  Number of ASR Events
0x06  0x018  4               0  ---  Number of Interface CRC Errors
                                |||_ C monitored condition met
                                ||__ D supports DSN
                                |___ N normalized value

SATA Phy Event Counters (GP Log 0x11)
ID      Size     Value  Description
0x0001  2            0  Command failed due to ICRC error
0x0002  2            0  R_ERR response for data FIS
0x0003  2            0  R_ERR response for device-to-host data FIS
0x0004  2            0  R_ERR response for host-to-device data FIS
0x0005  2            0  R_ERR response for non-data FIS
0x0006  2            0  R_ERR response for device-to-host non-data FIS
0x0007  2            0  R_ERR response for host-to-device non-data FIS
0x0009  2           20  Transition from drive PhyRdy to drive PhyNRdy
0x000a  2           19  Device-to-host register FISes sent due to a COMRESET
0x000b  2            0  CRC errors within host-to-device FIS
0x000d  2            0  Non-CRC errors within host-to-device FIS

# hdparm -tT /dev/sda
/dev/sda:
 Timing cached reads:   30620 MB in  1.99 seconds = 15374.86 MB/sec
 Timing buffered disk reads: 562 MB in  3.00 seconds = 187.20 MB/sec

$ dd if=/dev/zero of=archivo.img count=1K bs=1M conv=fdatasync
1024+0 records in
1024+0 records out
1073741824 bytes (1,1 GB, 1,0 GiB) copied, 6,37302 s, 168 MB/s

Las pruebas de lectura con hdparm y con dd. Cuanto más velocidad indiquen, mejor, por supuesto.

palimpsest – Prueba de rendimiento de solo lectura (clic para agrandar)

Este gráfico representa la velocidad de lectura y el tiempo de acceso en distintas partes del disco, desde los sectores más externos al plato (parte izquierda) hasta los más cercanos al eje (parte derecha). La línea azul representa la velocidad de lectura (asociada a la escala izquierda), mientras que los puntos verdes representan los tiempos de acceso en distintas ubicaciones del disco (asociada a la escala derecha).

Como en todos los almacenamientos rotativos, existe una gran diferencia en la velocidad de lectura al operar con los primeros sectores respecto de los últimos: de casi 200 MB/s en los primeros sectores, a 100 MB/s en los últimos. La latencia de acceso ronda los 18 ms, variando entre 10 ms y 30 ms aprox.

$ bonnie++

(pendiente de realizar)

Todas las pruebas fueron realizadas sobre una partición ext4.

lunes, febrero 05, 2018

Kernel with KPTI and full Retpoline for Debian Stretch

Durante enero salieron a la luz –al menos para nosotros, simples mortales– las vulnerabilidades meltdown y spectre, que ya son ampliamente conocidas. Las mitigaciones tardaron en aparecer –y aún están trabajando en ello–, pero teniendo en cuenta que los bugs ya están siendo aprovechados in the wild, conviene tener a mano algunos parches para zafar.

Por ello aquí dejo el último kernel con los parches KPTI y full Retpoline, construido con un compilador compatible con -mindirect-branch, para ser instalado directamente sobre Debian GNU/Linux 9 Stretch:

jueves, noviembre 16, 2017

Kernels nuevos en Debian Stretch

Actualización 2019: Este post ha quedado obsoleto. En Kernels nuevos en Debian Buster encontrarán núcleos compilados para la nueva versión estable de Debian.

Continuando con la serie de posts con versiones estables del kernel de Linux, dejo disponible la última versión que compilé en casa. Todas estas son directamente instalables sobre Debian GNU/Linux 9.0 Stretch de 64 bits sin quilombo de dependencias. Cada directorio contiene los paquetes con la imagen del kernel, los encabezados y la configuración utilizada en la compilación.
Si les interesa saber qué hay de nuevo, les dejo el link al post sobre novedades del kernel en Phoronix y el clásico resumen hecho por la gente de KernelNewbies.

sábado, julio 08, 2017

Skype for linux y los tonos DTMF

Increíble. Una aplicación de telefonía donde en la última versión (5.3.01, al menos) no anda el keypad para enviar tonos DTMF.

Obviamente, sin eso no podés hablar con el 90% de las empresas que tienen un preatendedor (“para ventas, marque 1; para soporte, marque 2, …”), que es para lo que fundamentalmente lo utilizo.

Si eso anduvo siempre… ¿qué necesidad había de cambiar el código?

Sabemos que Skype viene cayendo desde hace rato, pero caer… tan bajo?

martes, julio 04, 2017

Post instalación Debian GNU/Linux 9 (Stretch)

Más o menos cada dos años (aunque debería decir "when ready") sale una nueva versión de la rama estable de Debian, y así fue el caso en junio del corriente, pues liberaron Debian 9 "Stretch".

Para continuar la secuencia de recomendaciones post-instalación que inició con un post de Tomás, es buen momento de llevar mi humilde sugerencia de paquetes para obtener un escritorio usable en esta última versión.

Haciendo un copy-paste del post previo, éste tiene dos destinatarios principales:
  • para el que quiera tener una instalación de debian stretch (estable) usable, vale decir, con algunas aplicaciones más modernas que las que trae por defecto pero tratando de no salir demasiado de los repos oficiales;
  • y para mí, para no perder tiempo haciendo memoria en el caso de tener que reinstalar el sistema.
Y en la constante búsqueda de comodidad digital, cambio nuevamente de entorno de escritorio. Ahora el elegido es Cinnamon (las veces anteriores fueron GNOME y KDE) por tres cuestiones principales:
  • en primer lugar -y fundamentalmente- porque el explorador de archivos Nemo tiene árbol de directorios. Nautilus no lo tiene y eso lo hace inutilizable;
  • en segundo lugar, porque el entorno es estéticamente agradable y razonablemente liviano;
  • y finalmente, porque a diferencia de Mate, está hecho con GTK3 e integra adecuadamente la mayoría de las aplicaciones de escritorio.
Podría haber seguido utilizando KDE, la verdad es que está muy bien armado también, pero me di cuenta que sigo utilizando aplicaciones gtk (gedit, evince, meld) y pareció razonable el cambio.
Bueno, sin mas charla, vamos a lo que nos trae.

Paso 1

Esta instalación ocupará al menos 6 GB, por lo que tengan en cuenta cuanto desean dejar libre para los directorios de usuario y para el crecimiento/mantenimiento del sistema. Para comenzar, partimos de la instalación base de Debian Stretch. Para que se den una idea, hay que seguir la instalación tradicional y cuando presenta el uso que se dará (escritorio, servidor, etc) desmarcar todas las opciones y continuar normalmente.

Paso 2

Una vez instalado y hecho el primer arranque, luego de iniciar sesión lo que suelo hacer al toque es deshabilitar la opción de instalación de paquetes recomendados, puesto que pocas veces son necesarios y además engordan sobremanera el espacio ocupado por el sistema. Para ello basta con ejecutar la línea siguiente para que las próximas instalaciones eviten instalarlos.
echo "APT::Install-Recommends \"false\";" > \
    /etc/apt/apt.conf.d/90-powerup-disable-recommends.conf

Paso 3

Luego, sólo si están detrás de un proxy, hay varias formas de configurarlo: puede ser globalmente mediante las variables de entorno http_proxy y https_proxy o bien mediante la configuración de APT para aquellos casos donde dispongan de un servidor de caché como APT-Cacher. Por ejemplo:
PROXY="http://proxy.miorganizacion.com.ar:8080/"
export http_proxy=$PROXY
export https_proxy=$PROXY
echo "Acquire::http::Proxy \"$PROXY\";" > /etc/apt/apt.conf.d/90-powerup-proxy.conf

Paso 4

Verificar que están configurados los repositorios oficiales de la distribución. Por ahora omito backports, pero en un futuro será útil. Para ello, el archivo /etc/apt/sources.list debería listar, al menos, los siguientes:
deb http://debian.unnoba.edu.ar/debian/ stretch main contrib non-free
deb http://security.debian.org/debian-security/ stretch/updates main contrib non-free
deb http://debian.unnoba.edu.ar/debian/ stretch-updates main contrib non-free
deb http://deb.debian.org/debian/ stretch-backports main contrib non-free
Aquí utilizo el mirror que cordialmente provee la UNNOBA pues gracias a la Asociación Redes de Interconexión Universitaria estamos a pocos saltos de distancia. Traten de no atosigarla de peticiones o utilicen cualquier otro de los mirrors listados oficialmente.

Paso 5

Agregar repositorios externos (no oficiales) que contienen software útil. Este paso es un tanto complejo pues a partir de Stretch es necesario incorporar las claves públicas para poder descargar software adicional. Además, algunas aplicaciones sólo están disponibles para arquitectura de 64 bits. Desde luego, tengan en cuenta que adicionar un repositorio no oficial implica confiar en lo que sus administradores publiquen allí.

Paso 5.1. Paquetes requeridos para las operaciones posteriores

apt install apt-transport-https ca-certificates gnupg wget

Paso 5.2. Instalar las claves públicas de los repositorios

El nombre final indica qué aplicación contiene cada repositorio. Las claves deben alojarse en el directorio siguiente:
cd /etc/apt/trusted.gpg.d/
wget -q https://dl.google.com/linux/linux_signing_key.pub -O- | gpg --dearmor > google-chrome.gpg
wget -q https://packages.microsoft.com/keys/microsoft.asc -O- | gpg --dearmor > vscode.gpg
wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xFC918B335044912E" -O- | gpg --dearmor > dropbox.gpg
wget -q "https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xA87FF9DF48BF1C90" -O- | gpg --dearmor > spotify.gpg
wget -q https://www.virtualbox.org/download/oracle_vbox_2016.asc -O- | gpg --dearmor > virtualbox.gpg

Paso 5.3. Definir los repositorios externos

Van todos en el directorio siguiente:
cd /etc/apt/sources.list.d/
# software solo disponible para amd64
echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" > google-chrome.list
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" > vscode.list
# software disponible para i386 y amd64
echo "deb [arch=i386,amd64] http://linux.dropbox.com/debian sid main" > dropbox.list
echo "deb http://repository.spotify.com stable non-free" > spotify.list
echo "deb http://download.virtualbox.org/virtualbox/debian stretch contrib" > virtualbox.list

Paso 6

Clásico: actualizar la lista de paquetes. Utilizaremos apt en vez de apt-get sólo por cuestión de gusto. Ustedes utilicen el que prefieran.
apt update

Paso 7

Instalar un entorno gráfico. Para la interfaz gráfica hay varios metapaquetes que se corresponden a cada entorno de escritorio: para Cinnamon instalaremos task-cinnamon-desktop; para KDE, instalen kde-plasma-desktop; para GNOME supongo que gnome-core alcanza (no lo sé con certeza); para XFCE instalen xfce4; para LXQT (lo que antes era LXDE) instalen lxqt; y para Mate el paquete mate-desktop-environment . Si alguno quedó afuera me avisan.

Tengo entendido que para placas GPU AMD/ATI ya no es necesario ningún driver privativo, pues el driver open-source Radeon alcanza, pero eventualmente podría ser necesario para placas GPU nVidia, donde el paquete a instalar es xserver-xorg-video-nvidia o alguno de los drivers que aparecen con el nombre nvidia-legacy. Si tienen un chipset Intel, con lo que viene por defecto suele alcanzar.

Sobre el entorno gráfico, como comentaba al inicio del artículo, mi recomendación esta vez es utilizar Cinnamon, pero instalo Openbox también pues suele ser útil para casos de urgencia. Los demás componentes de nombre extraño son bibliotecas que evitan que Cinnamon arroje advertencias o aplicaciones que se prefieren antes de las que vendrían por defecto.
apt install xorg lightdm mesa-utils openbox \
    xserver-xorg-input-all xserver-xorg-input-synaptics

apt install task-cinnamon-desktop cinnamon-l10n \
    desktop-base gir1.2-gtop-2.0 gir1.2-nmgtk-1.0 \
    network-manager-gnome pulseaudio firefox-esr \
    firefox-esr-l10n-es-ar thunderbird \
    thunderbird-l10n-es-ar

Superpaso 8

Instalar paquetes desde los repositorios oficiales. Como en la línea anterior, cada paquete está enlazado a su descripción en el sitio de Debian.

Paso 8.1. Controladores y servicios útiles

apt install acpi-support amd64-microcode cifs-utils \
    dkms fail2ban intel-microcode ntfs-3g ssh \
    unattended-upgrades uptimed

Paso 8.2. Herramientas útiles de línea de comando

apt install acpi alsa-utils aptitude buku bash-completion \
    clamav curl deborphan dialog ffmpeg file fish flac \
    hexedit htop iotop imagemagick iptraf-ng irqbalance \
    jmtpfs less lftp livestreamer manpages markdown mc \
    mlocate nano netcat-openbsd nethogs nmap p7zip-full \
    pv pxz qemu-kvm screen smbclient sshfs tcpdump \
    trickle tshark unrar unzip vbindiff w3m wavemon \
    wget youtube-dl zip

Paso 8.3. Lenguajes de programación, herramientas y documentación

apt install build-essential git git-doc git-man idle3 \
    ipython3 pylint3 python3 python3-doc sqlite3 \
    sqlite3-doc

Paso 8.4. Programas gráficos para fines variados (editores, reproductores, etc)

apt install default-jre filezilla fslint gufw hardinfo \
    keepassx mpv pavucontrol sound-theme-freedesktop \
    sqlitebrowser synaptic vlc wireshark-gtk \
    xdg-user-dirs-gtk xterm

apt install baobab blueman brasero cheese \
    gnome-font-viewer gnome-system-monitor gnote \
    gvfs-backends gvfs-fuse nemo-fileroller rhythmbox \
    transmission-gtk audacious file-roller gedit-plugins \
    ghex gimp gksu gucharmap leafpad meld sound-juicer 

Paso 8.5. Soporte y drivers para impresoras

apt install cups cups-browsed foomatic-db-compressed-ppds \
    foomatic-db-engine openprinting-ppds \
    printer-driver-cups-pdf system-config-printer \
    system-config-printer-udev

Paso 8.6. Iconos y temas de escritorio

apt install arc-theme breeze-icon-theme \
    clearlooks-phenix-theme faba-icon-theme \
    gnome-colors lxde-icon-theme mate-icon-theme \
    mate-icon-theme-faenza tango-icon-theme

Paso 8.7. Versión más moderna del kernel (4.17) y encabezados

Reemplacen amd64 por i386 si su arquitectura es de 32 bits. La primera línea instala la versión de kernel de Estable. La segunda línea (que dice stretch-backports) instala adicionalmente una versión más moderna.
apt install firmware-linux linux-headers-amd64 \
    linux-image-amd64 linux-doc

apt -t stretch-backports install firmware-linux \
    linux-headers-amd64 linux-image-amd64  \
    linux-doc

Paso 8.8. Versión más moderna de la suite LibreOffice (6.1)

apt -t stretch-backports install libreoffice \
    libreoffice-help-es libreoffice-l10n-es \ 
    libreoffice-gtk3 hunspell-es
    libreoffice-style-breeze libreoffice-style-sifr \
    libreoffice-style-tango libreoffice-gnome \
    libreoffice-style-colibre \
    libreoffice-style-elementary

Paso 8.9. Firefox más moderno

Omitido pues la que viene por defecto (ERS 52) es una versión bastante moderna.

Paso 8.10. Tipografías

apt install fonts-cantarell fonts-croscore \
    fonts-crosextra-caladea fonts-crosextra-carlito  \
    fonts-dejavu fonts-dkg-handwriting fonts-awesome \
    fonts-humor-sans fonts-liberation fonts-noto \
    fonts-oxygen fonts-roboto

Paso 9

Instalar paquetes desde repositorios externos.
apt install dropbox spotify-client virtualbox-5.2
Las aplicaciones siguientes sólo están disponibles en versión de 64 bits, por lo que si su arquitectura es 32... lo siento...
apt install code google-chrome-stable
Con eso queda listo prácticamente todo lo que proviene por fuera de Debian. Lo único queda pendiente es PyCharm, que como no tiene paquete disponible hay que bajarse el comprimido y alojarlo donde crean conveniente.

Paso 10

Listo, con eso les queda un sistema operativo casi perfecto.

El tema de escritorio de las capturas es Arc Darker, el conjunto de iconos es Gnome Wine y fuentes son Noto Sans UI Regular en su mayoría.

Todo lo documentado aquí está disponible en un sencillo script que instala Cinnamon y ejecuta todos estos pasos de un saque. Lo dejo disponible por si les sirve: stretch-powerup.sh (20180802)

Algunos consejos adicionales:
  • Para iniciar un programa rápidamente, usen la tecla Win y escriban parte del nombre. Alt+F2 también funciona, pero no tiene autocompletado.
  • La fuente Noto tiene un montón de variantes para distintos idiomas y por ello los cuadros de dialogo de selección de fuente se hacen eternos. Como usualmente uno sólo utiliza los alfabetos latinos, es posible desactivar aquellas fuentes que no se utilizan y reducir el listado. Para ello, descarguen este archivo 95-powerup-restrict-noto.conf y guardenlo en el directorio /etc/fonts/conf.d/
  • Para tener la tipografía clásica en las terminales Fx, ejecuten dpkg-reconfigure console-setup y en “Tipo de letra para la consola” seleccionen “No cambie la tipografía del arranque”.
Falta un paso adicional (súmamente útil) para mejorar toda la tipografía del sistema, pero eso queda para el post del mes que viene. Mientras tanto, si me olvido de algo, o ven algo que sobra, abajo están los comentarios…