Max CPUs de s390 y powerpc |
Preparándome para regular la velocidad de un cooler en una Raspberry PI para reducir el ruido, tema recurrente en mi vida, gracias a mi trabajo que me dá LinkedIn Learning, tomé algunos cursos, también como parte de mi campaña de recertificación y reaprendizaje continuo.
En el caso de Advanced Linux: The Linux Kernel, buena parte del curso ya la sé, pero siempre hay detalles nuevos y necesarios refrescos.
Comparto algunas cositas que me parecieron interesantes y algunas de mis pruebas.
El operador |&
Este no lo conocía, te junta stderr en stdout, fantástico.
view
Es una versión de vim en modo readonly, ¡que estúpido! llevo como veinticinco años mirando archivos con less que no tiene highlight, vos quizás pienses que lo estúpido es usar vim/view, cuestión de gustos y origen de varias flame wars.
initramfs
En el curso dice que el initramfs se abre con cpio y quizás gunzip, pero no, escarbando un poco en man cpio:
$ cpio --no-absolute-filenames -i < initrd.img-5.4.0-58-generic
sólo trae esto:
tree kernel/
kernel/
└── x86
└── microcode
└── AuthenticAMD.bin
Recordando mis fracasos con el router dañando por un rayo, usé binwalk:
$ sudo apt install binwalk
En particular en Mint Mate 20.1 no resuelve en las dependencias lzop, así que te enterás en el medio que falta, no importa, rm -r,
$ sudo apt install lzop
$ binwalk -e initrd.img-5.4.0-58-generic
Esto es más compeletito:
_initrd.img-5.4.0-58-generic.extracted/
├── 0.cpio
├── 17D6ECC
├── ....
├── 1DCEE71
├── 1DCEE71.zlib
├── 1E2C581
├── 1E2C581.zlib
├── 220582A.zip
├── 26DCC87.gz
├── ...
├── 3E9AA31.gz
├── 3FE8E9D.gz
├── 43CD22.gz
├── 4A69999.gz
├── 4B60465.xz
├── 4D6447.lzo
├── 4D64CC.xz
├── 51D939A
├── 51D939A.zlib
├── 7C00.cpio
├── cpio-root
│ └── kernel
│ └── x86
│ └── microcode
│ └── AuthenticAMD.bin
├── cpio-root-0
│ └── kernel
│ └── x86
│ └── microcode
│ └── GenuineIntel.bin
└── T1:X3_101115_1_8_1_expROM_FW_uni_template_eeprom0.bin
No me gusta para nada, estoy seguro que falta de todo, pero bueno, no voy a analizar esto con profundidad, ya que excede el alcance del curso, sólo completando...
Pero, si te aguantás dos minutos más, presenta el comando unmkinitramfs que hace exactamente lo que hace falta
$ tree -L 2
.
├── early
│ └── kernel
├── early2
│ └── kernel
└── main
├── bin -> usr/bin
├── conf
├── etc
├── init
├── lib -> usr/lib
├── lib32 -> usr/lib32
├── lib64 -> usr/lib64
├── libx32 -> usr/libx32
├── run
├── sbin -> usr/sbin
├── scripts
├── usr
└── var
¡Qué falta de paciencia y qué acertado no haber intentado profundizar! Me hubiese llevado semanas o para siempre, mirá el contenido de unmkinitramfs que es bash.
Modules
Busqué rápido y no encontré como identificar de los 5000 módulos disponibles cuáles están en uso (lsmod) y cuáles han sido usados (supongo que en dmesg) para eliminarlos del disco como medida de hardening y recuperación de espacio. La medida de hardening es blacklist. Queda para investigar algún día...
Kernel Source
Si te falla make ctags con
xargs: ctags: No such file or directory
sed: can't read tags: No such file or directory
Es por que te falta ctags:
$ sudo apt install universal-ctags
Building
Si al hacer make xconfig te dice:
* Could not find Qt via pkg-config.
* Please install either Qt 4.8 or 5.x. and make sure it's in PKG_CONFIG_PATH
Dale :
$ apt install qtbase5-dev
Si querés ver las opciones para otras arquitecturas, por ejemplo ARM:
$ make ARCH=arm xconfig
Igual no te olvides que necesitás toolchain y setear la variable de cross compilation, ya volveré sobre este tema en otra entrada a futuro.
Detalles ejercicios
Para entrar en GRUB en Linux Mint (Ubutnu) es con shift, recordá si estás en virtual box que Right Ctrl te hace recuperar el punteroo del mouse. Recordá que el layout del teclado de GRUB no necesariamente corresponde con lo que tengas.
En el ejercicio propone comparar dmesg con apic=debug, pero por algún motivo mi cerebro lo convirtió en acpi=debug.
La mejor táctica es ir probando con las diversas opciones (apic, acpi, nada) y luego tomar de /var/log/dmesg.X.gz los resultados, renombrar acordemente y ahí comparar con:
for FILE in dmesg.*; do
for DEBUG in ACPI APIC; do
echo -n "$FILE $DEBUG "
grep "$DEBUG" "$FILE" | wc -l
done
done
dmesg.acpi ACPI 50
dmesg.acpi APIC 7
dmesg.apic ACPI 50
dmesg.apic APIC 58
dmesg.original ACPI 50
dmesg.original APIC 7
Hay un ejercicio de agregar una entrada a grub.cfg, que se hace con update-grub. Como nunca lo hice le desconfío, así que comencé por regenerar grub.cfg al lado como referencia.
$ sudo grub-mkconfig -o grub.cfg.original
Si la salida de diff te parece muy rústica y no querés instalar kdiff3:
$ diff --side-by-side grub.cfg.original /boot/grub/grub.cfg -W160 | less
Lo importante es que agregó $vt_handoff a los parámetros del kernel y tocó un par de etiquetas, ok, esto indica que hay un cierto desfasaje entre la configuración y la realidad.
Luego fuí mirando cada archivo en /etc/grub.d, su stdout va a parar a /boot/grub.cfg
Estaría bueno que fuera generando comentarios para poder mapear de dónde sale cada cosa, ah, me adelanté, hay unos separadores en /boot/grub.cfg que indican cuál fué el archivo generador.
Para hacer el ejercicio tenemos dos caminos, agregar una custom entry en /etc/grub.d y ejecutar e proceso de conversión o editar directamente grub.cfg, hice esto último pues el ejercicio no pide que persista.
No te voy a contar lo que ocurre pero si que si agregás rdinit=/bin/sh te tira un busybox, interesante...
Curiosidades
Estos son algunos de los números de CPUs que soportan algunas arquitecturas:
arm: 32
x86: 64
s390: 512
powerpc: 8192
Conclusiones
El curso en general está bueno y me ha servido, pero no me parece tan advanced, quizás me perdí los intro/basic/intermediate.
Los ejercicios han sido útiles, pero el tiempo previsto no me corresponde a lo que le invertí, tipo que el primero lo hice en 15 minutos y decía 60 y el segundo decía 45 y estuve un par de horas.
Algunos ejercicios tienen leves discrepancias que me han ayudado a que los haga de modo no automático, sacando ventaja de los errores...
No hay comentarios:
Publicar un comentario