Emerge: illegal instruction

Instrucción ilegal

Al eliminar los archivos que estaban en /var/cache/binpkg portage mostraba un error al intentar ejecutar cualquier opción del comando emerge: Instrucción ilegal.

Por lo tanto era imposible realizar cualquier operación en el sistema que se relacione a portage.

Tampoco era posible usar python, si intentaba usar el comando para entrar a la consola obtenía el mismo resultado.

Así que se fue necesario buscar otra opción para “rescatar” el sistema del estado en donde se encontraba. Afortunadamente los servicios que brindaba el equipo estabas siendo ejecutados sin problemas.

Primer grupo de paquetes

Para solucionar se inició el equipo con un CDMínimo de gentoo y se reinstalaron diversos paquetes binarios.

Obviamente para paquetes binarios se requiere un servidor de binarios, que como se mencionó anteriormente, este era precisamente el caso.

Una vez se arrancó desde el CDMínimo se procede a montar las particiones y el almacenamiento de los paquetes binarios.

Ejecutando la siguiente instrucción fue posible instalar algunos de los paquetes básicos.

Name: instruct_tar_binary. Instrucción para instalar paquetes binaros con tar..

tar --xattrs -xpf "Paquete a instalar" -C "Ruta destino"

Los programas que me dispuse a instalar fueron:

  • dev-lang/python
  • dev-lang/python-exec
  • sys-devel/binutils
  • sys-devel/gcc
  • sys-apps/baselayout
  • sys-apps/busybox
  • app-arch/gzip
  • app-arch/tar
  • app-arch/xz-utils
  • app-arch/zstd

Logros hasta el momento

  • Funciona emerge --sync

Sin embargo seguía fallando la instalación de paquetes, aunque empezaba el proceso de instalación, después de unos segundos solo mostraba nuevamente el mensaje de error: Instrucción inválida.

Pero no todo era malo. Como mencioné también era posible realizar por ejemplo emerge --sync, el cual antes no era posible. Y entre las otras opciones del comando emerge estaba emerge -K <paquete>. Eso me permitió continuar con la instalación de paquetes binarios en el equipo sin sacarlo de producción (¡Este equipo esta en producción!).

emerge -K

En este caso me dediqué a instalar todos los paquetes que tienen que ver con python, y que ya tenía a disposición en el servidor de binarios.

  • dev-python/PySocks
  • dev-python/certifi
  • dev-python/cffi
  • dev-python/chardet
  • dev-python/cryptography
  • dev-python/cython
  • dev-python/idna
  • dev-python/jinja
  • dev-python/markupsafe
  • dev-python/ply
  • dev-python/pycparser
  • dev-python/pyelftools
  • dev-python/pyopenssl
  • dev-python/requests
  • dev-python/setuptools_scm
  • dev-python/six

También varios paquetes que tenía en dev-utils:

  • dev-libs/boost
  • dev-libs/elfutils
  • dev-libs/expat
  • dev-libs/glib
  • dev-libs/gmp
  • dev-libs/libaio
  • dev-libs/libassuan
  • dev-libs/libffi
  • dev-libs/libgcrypt
  • dev-libs/libgpg-error
  • dev-libs/libpcre2
  • dev-libs/libpipeline
  • dev-libs/libusb
  • dev-libs/libxml2
  • dev-libs/libxslt
  • dev-libs/mpc
  • dev-libs/mpfr
  • dev-libs/nettle
  • dev-libs/npth
  • dev-libs/openssl
  • dev-libs/popt

Los que se tenían en sys-apps:

  • sys-apps/acl
  • sys-apps/attr
  • sys-apps/baselayout
  • sys-apps/busybox
  • sys-apps/coreutils
  • sys-apps/debianutils
  • sys-apps/diffutils
  • sys-apps/file
  • sys-apps/gentoo-functions
  • sys-apps/groff
  • sys-apps/help2man
  • sys-apps/hwids
  • sys-apps/kbd
  • sys-apps/kmod
  • sys-apps/portage
  • sys-apps/sandbox
  • sys-apps/shadow

Estoy seguro de que varios de los paquetes listados no se requerían. Pero por cuestiones de tiempo no es posible investigar sobre cada uno de ellos.

Conclusión

Después de reinstalar los paquetes anteriores fue posible utilizar el tan esperado:

emerge --update --newuse --deep --with-bdeps=y @world

Queda pendiente realizar pruebas del porqué lo sucedido.

Como siempre sucede en estos casos el mejor lugar para buscar información es en los sitios oficiales de gentoo, como son el foro y su wiki. En caso de no encontrar lo que se requiere se puede realizar la pregunta directamente en el foro, o se puede optar por el canal de IRC o su lista de correo, los cuales siempre serán de ayuda.

En situaciones como las mencionadas en esta entrada muchas veces se puede sentir tentado en la reinstalación completa del sistema. Sin embargo, esa debe ser la última opción. Lo mas rápido que he podido instalar un servidor gentoo ha sido 8 horas aproximadamente, pero en este caso el servidor estuvo fuera de linea no mas de 30 minutos, que fue el tiempo que tardé en reinstalar los requerido por python.

Sin duda hay ocasiones en las que reinstalar el sistema es la opción mas adecuada, pero ciertamente este no fue el caso.

Recursos

Nueva lap nuevos problemas

Realicé la compra de un equipo en el mes anterior, dicho equipo es una laptop Huawei matebook D15, sin embargo nunca supe en lo que me metía. En esta entrada mencionaré algunos de los problemas que se tuvieron que solucionar para hacer que gentoo funcione completamente en este equipo.

Igualmente me servirá para si en algún momento sea necesario reinstalar el equipo, lo cual para nada es descartable.

Huawei Matebook D15

Presento a esta pequeña.

huawei-lateral.jpeg

Figure 1: huawei matebook d15 ryzen 5

El equipo viene con un SSD de 512GB con puerto NVMe, 8Gb de ram, procesador AMD Ryzen 5 3500U, pantalla de 15 pulgadas con una resolución de 1920×1080.

Entre los puertos encontramos a 3 puertos USB “tradicionales” y un puerto de tipo “C”, un puerto minijack y un puerto hdmi. Digamos que es lo esperado en cualquier equipo actual.

Algo que hasta este momento me sigue gustando es el diminuto marco de la pantalla, lo que reduce el tamaño del equipo. Y en lo que no estoy de acuerdo es la desaparición del puerto ethernet. El cual, al menos en ocasiones lo he requerido en la oficina, porque no es posible llevar el equipo de escritorio a todos lados; ahora requeriré de un adaptador para estos casos.

Entre puntos buenos y malos, yo considero que el equipo cumple con lo que he esperado. Pero es necesario aclarar que esta vez el proceso de la instalación tuvo sus digamos… contratiempos.

Ethernet-wireless

La tarjeta de red RTL8822CE no esta soportada directamente en el núcleo de linux, por lo tanto hay que agregar al kernel el firmware adecuado.

La cadena que se agrega al cargador de firmware es la siguiente:

Device Drivers  --->
  Generic Driver Options  --->
    Firmware loader  --->
    -*- Firmware loading facility
    (rtw88/rtw8822c_fw.bin)

Como mencioné en párrafos anteriores el equipo no dispone de puerto ethernet. Utilicé una unidad USB en la que ya en alguna ocasión había preparado un CD mínimo de gentoo. ¿Cuál fue el problema? en esa versión del CD mínimo no estaba soportado la tarjeta de red.

Estuve buscando con conocidos algún adaptador usb-ethernet para poder continuar con la instalación. Luego de conseguir dicho dispositivo y continuar con lo que viene indicado en el handbook de gentoo, terminé mas o menos bien con la instalación.

Sin embargo, después de actualizar el cd mínimo de gentoo me dí cuenta de que ahora si se tiene soporte para la tarjeta de red inalámbrica del equipo.

Conclusión: Siempre se deben de actualizar los medios de instalación antes de realizar el proceso.

Mi error o mi omisión

Después de que terminé el proceso de instalación no funcionaba la red inalámbrica porque me faltó lo mencionado. No hay problema, pensé:

  • Fui a la sección correspondiente de la configuración del kernel y lo corregí.
  • Ejecuté el típico make && make modules_install && make install.
  • Después genkernel --lvm --install initramfs.
  • Ya casi para terminar grub-mkconfig -o /boot/grub/grub.cfg.
  • Y por último el esperado reboot.

El problema es que el nuevo kernel no podía arrancar el equipo. Me veía obligado a tener que volver a iniciar con el liveCD o arrancar con el kernel anterior (recordemos que grub guarda el kernel actual y una versión anterior con terminación old).

Pues bien, después de varios intentos, quitando y agregando módulos al kernel me dí cuenta de que el problema en realidad no tenía que ver con el kernel en sí.

La situación se dio porque olvidé agregar el servicio de lvm al arranque del sistema.😞

Así que todo se solucionó con:

rc-update add lvm default

Sin problemas

Después de la situación descrita, todo parecía ir bien. Sonido, bluetooth, webcam e incluso la configuración del servidor X se realizó sin problema.

Sin embargo quisiera subrayar que la instalación del servidor X y la correspondiente configuración del kernel, las realicé siguiendo las guías de la wiki de gentoo sobre xorg y amdgpu. “No hay pierde. Solo sigue derecho”.

Solo muestro el firmware que se tiene que cargar para que todo funcione.

Device Drivers  --->
  Generic Driver Options  --->
    Firmware loader  --->
    -*- Firmware loading facility
    (...amdgpu/picasso_asd.bin amdgpu/picasso_ce.bin amdgpu/picasso_gpu_info.bin amdgpu/picasso_me.bin amdgpu/picasso_mec2.bin amdgpu/picasso_mec.bin amdgpu/picasso_pfp.bin amdgpu/picasso_rlc_am4.bin amdgpu/picasso_rlc.bin amdgpu/picasso_sdma.bin amdgpu/picasso_ta.bin amdgpu/picasso_vcn.bin)

Todo acabó… ¿o no?

Todo parecía que había terminado, pero había un verdadero problema: El touchpad. El equipo no lo detectaba, ni dmesg, ni lspci, ni lsusb. Algo faltaba en el kernel. Con este problema estuve sufriendo bastante hasta que encontré la solución en este hilo del foro de gentoo.

Tenía exactamente el mismo problema que el descrito en la entrada.

Por medio de esa entrada pude encontrar otra página de la wiki de gentoo https://wiki.gentoo.org/wiki/Asus_Tuf_Gaming_fx505dy siguiendo la guía referente al touchpad pude resolver el problema.

Copio y pego tal cual fue la configuración del kernel.

Processor type and features  --->
    [*] AMD ACPI2Platform devices support
Device Drivers  --->
    -*- Pin controllers  --->
        <*> AMD GPIO pin control
    HID support  --->
        Special HID drivers  --->
            <*> HID Multitouch panels
        I2C HID support  --->
            <*> HID over I2C transport layer
    I2C support  --->
        I2C Hardware Bus support  --->
            <*> AMD MP2 PCIe
            <*> Synopsys DesignWare Platform
            <*> Synopsys DesignWare PCI
    Input device support  --->
        Mice  --->
            <*> ELAN I2C Touchpad support
            [*] Enable I2C support
            [*] Enable SMbus support

En dicha página menciona un touchpad Elan 1200 y aunque el de mi equipo es un Elan 2204 todo marcha de maravilla.

captura14012021.png

Figure 2: Captura de pantalla con emacs, urxvt y rofi en pantalla.

Gentoo, flatpak y p11-kit

Desde el primero del mes he estado sufriendo con algunas aplicaciones instaladas por medio de flatpak. He aquí la crónica de dicha situación.

En primer lugar. Soy usuario del protocolo matrix para mensajería instantánea. Es una excelente herramienta que da para mucho mas que simple mensajería instantánea. El cliente que utilizo es la versión de escritorio del programa Riot.im

Pues bien, de pronto la aplicación dejó de funcionar. Solo indicaba que había un error de configuración.

Estuve sufriendo algo pero como el uso que le doy es mas bien personal, y la versión de android (en el teléfono) seguía funcionando sin problemas no me puse a investigar ni intentar resolverlo al corto plazo.

Sin embargo, tuve la necesidad de utilizar skype en la oficina y ¡oh sorpresa! me encuentro con la misma situación que en mi equipo personal con riot. Empecé a revisar varias de mis aplicaciones y entre las que no funcionaron estuvo también spotify.

¿Cuál es la característica que une a estas tres aplicaciones en dos equipos diferentes?

Que las tres las instalé por medio de flatpak.

Me dispuse a eliminar todo lo referente a flatpak. Y volví a instalarlo y desde ahí instalar de nuevo las aplicaciones que tenía con flatpak, entre ellas Riot.im y las ya mencionadas skype y spotify. Y ¿que pasó? Nada. El problema persistía.

Entré al sitio desde donde obtuve el overlay de flatpak para gentoo y me encontré, en el apartado issues información referente al programa p11-kit.

En gentoo se actualizó a la versión 0.23.19 el 25 de febrero y con eso fallaban los programas antes mencionados. Sin embargo también agregaron la versión 0.23.20 como inestable

Entonces la solución fue muy simple. Agregué la nueva versión como segura en el archivo accept.keywords actualicé el equipo y listo 🎉

Espero pronto se considere a p11-kit-0.23.20 como estable para poder eliminar la entrada de accept.keywords de mis equipos.

Primer contacto con AwesomeWM

Algo de historia

Pese a lo que menciono el en título, en realidad no es mi primer contacto con dicho administrador de ventanas. En el pasado lo probé en Arch como por 10 minutos.

En Arch(trabajo) y Gentoo(mis equipos en casa) estuve vagando entre Openbox y Gnome, al final como en el trabajo me cambiaron a un equipo mas potente, me quedé con Gnome3 sobre Gentoo y desde que vivo con mi esposa, debido a que ella también utiliza la computadora de escritorio, decidí dejar un entorno de escritorio mas simple, es decir Gnome3 obviamente sobre Gentoo como sistema operativo.

Captura de pantalla de openbox

Sin embargo, no fueron las únicas opciones que probé. Todos sabemos que sobra en el mundo del software libre, son opciones. Entre lo que probé en mis principios linuxeros fue, si bien recuerdo, KDE, Gnome, XFCE y LXDE como entornos de escritorio, OpenBox, FluxBox y BlackBox como administradores de ventanas mas simples.

Ahora bien. cuando en la oficina por fin me dejaron usar Linux (Arch como ya mencioné) probé como por 10 minutos Awesome. En su momento no entendí ni el concepto, ni el funcionamiento del programa y terminé cambiando por el ya conocido por mi, OpenBox. Y cuando cambié de equipo cambie de Openbox a Gnome3.

Gnome 3.30 Última versión que he usado de gnome

El mes pasado, estaba leyendo sobre algo sobre administradores de ventanas en mosaico, (Sí, apenas lo supe después de algo así como 14 o 15 años de estar en este mundo pingüinesco).

Ese documento mencionaba a dwm y a xmonad. Pero investigando mas sobre el tema me encontré con awesome. E inmediatamente recordé aquel intento de 10 minutos de usar awesome. Entonces, me puse a instalar awesome en mi laptop, y al día siguiente me puse a hacer lo propio con mi equipo de la oficina.

Administradores de ventanas por mosaico

Describir lo que es un administrador de ventanas por mosaico es de lo mas simple. Por eso me sorprende no haber conocido o entendido el concepto antes.

dwm

Simplemente significa que las ventanas se organizan como si fueran mosaicos en la pantalla, aunque hay algunas disposiciones en las que se oculta una parte de alguna o algunas ventanas o incluso completamente. Lo importante del termino es que el administrador de ventanas las organiza en lugar del usuario.

xmonad

Dwm es un administrador dinámico de ventanas escrito en lenguaje C, por su parte xmonad es escrito en el lenguaje Haskell, originalmente era un clon de dwm, sin embargo, ha evolucionado de forma independiente.

Por su parte awesome es una bifurcación directa de Dwm, escrito en C y Lua. De hecho la configuración de awesome se realiza con dicho lenguage.

Existen mas administradores de ventanas en mosaico, pero no los voy a mencionar, aquí hay un listado de ellos.

Awesome

Como ya lo mencioné, awesome es un gestor dinámico de ventanas en mosaico, bifurcado a partir de dwm. Esta escrito en lenguaje C y en Lua. En el sitio de awesome dice que esta diseñado para usuarios avanzados, desarrolladores y para cualquiera que realiza tareas de computación pero quiere un gran control del entorno gráfico.

La configuración se realiza a partir de un archivo con código Lua, el cual esta en ~/.config/awesome/rc.lua. Desde dicho archivo se realiza la configuración de las teclas de acceso rápido (Por ejemplo, teclas multimedia), el menú, e incluso el tema (colores, fondo de pantalla, etcetera.).

El entorno consiste de una barra en la parte superior, la cual, a su vez, consiste en un botón para desplegar el menú, una lista de escritorios virtuales (tags), una lista de ventanas, la bandeja de notificación, fecha y un botón que indica la disposición que se tiene al momento y que, además, sirve para cambiar a la siguiente disposición.

Las notificaciones se muestran en la parte superior derecha y queda la gran mayoría del espacio libre para las ventanas, o sea, para el trabajo real.

A continuación muestro algunas entradas para hacer el menú, o mas bien, editarlo. En este caso agrego una entrada para activar xscreensaver a las opciones por defecto en el menú y un par de entradas mas.

myawesomemenu = {
    { "hotkeys", function() return false, hotkeys_popup.show_help end},
    { "manual", terminal .. " -e man awesome" },
    { "edit config", editor_cmd .. " " .. awesome.conffile },
    { "fondo de pantalla", "xscreensaver-command -activate" },
    { "restart", awesome.restart },
    { "quit", function() awesome.quit() end}
}

oficina = {
    { "LibreOffice", "loffice" },
    { "Writer", "lowriter" },
    { "Calc", "localc" },
    { "Impress", "loimpress" },
    { "Base", "lobase" },
    { "Draw", "lodraw" },
    { "Math", "lomath" }
}

herramientas = {
    { "Cups", "xdg-open http://localhost:631/" },
    { "Pcmanfm", "pcmanfm" },
}

mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon },
                                    { "Herramientas", herramientas },
				    { "Oficina", oficina },
                                    { "open terminal", terminal }
                                  }
                        })

Hay una un par de parámetros muy importantes que hay que configurar desde el principio. Estos son establecer el emulador de terminal y el editor por defecto.

terminal = "urxvtc"
editor = os.getenv("EDITOR") or "vim"

Aquí hay que cambiar “urxvtc” por el emulador de terminal que se tenga instalado, por ejemplo “xterm”. Y “vim” por el editor predeterminado, por ejemplo “nano”.

Por último mencionaré como modificar el tema visual. De forma predeterminada se tienen 4 temas: default, sky, xresources y zenburn. Estos se encuentan en /usr/share/awesome/themes/ Para seleccionar cada uno de ellos solo se debe editar la siguiente línea:

beautiful.init(gears.filesystem.get_themes_dir() .. "default/theme.lua")
-- beautiful.init(gears.filesystem.get_themes_dir() .. "sky/theme.lua")
-- beautiful.init(gears.filesystem.get_themes_dir() .. "sky/xresources.lua")
-- beautiful.init(gears.filesystem.get_themes_dir() .. "sky/zenburn.lua")

En este ejemplo agrego las 4 posibles opciones y comento las líneas que no se aplicarán.

Pero hay una opción mas. Copiar cualquiera de los temas a alguna ubicación del usuario. Por ejemplo, /home/usuario/.config/awesome/themes/ y editar la línea como se indica a continuacion:

$ mkdir ~/.config/awesome/themes
$ cp -r /usr/share/awesome/themes/default ~/.config/awesome/themes
beautiful.init("/home/usuario/.config/themes/default/theme.lua")

El archivo theme.lua que esta dentro de la carpeta del tema es donde se define el cada una de las propiedades que definen el tema, como pueden ser colores y fondo de pantalla. También se tienen algunas imágenes por ejemplo las que se despliegan en los botones de cerrar y de maximizar.

Con esto podemos iniciar las pruebas de awesomewm. Dejo pendiente la administración de las ventanas, el manejo de las diferentes distribuciones de ventanas, entre otras cosas. Pero ya tengo sueño y me voy a dormir.

Empathy y openfire

Desde hace meses había estado intentando trabajar con un servidor openfire 3.10.2 con empathy. El servicio se comportaba de forma correcta con el cliente spark (Para los usuarios de windows), y en mi caso con el cliente pidgin y el plugin para jabber.
Sin embargo soy usuario del entorno de escritorio Gnome, por lo tanto uso el cliente empathy que viene integrado con el mencionado entorno de escritorio.Por alguna razón el empathy lanzaba un error de inicio de sesión, desde el principio se podría suponer que era un error por el ssl, sin embargo no utilizo ningún certificado, solo autenticación simple.
El error que me indicaba el log del debug era el que sigue:
SASLAuthentication: SaslException
La solución
Para iniciar sesión se utiliza un usuario formado de la siguiente forma: usuario@dominio Donde usuario es el identificador del usuario a conectarse, mientras que dominio es el equipo al que se desea conectar, esta puede ser una dirección IP o el nombre del servidor, si es que se tiene agregado en el archivo hosts o se accede a el por medio de un servidor de nombres de dominio.
Bueno, con estos datos en mente entramos a la consola de administracion de openfire, luego en Server->Server Manager->System Properties. En este apartado se va a dar de alta dos nuevas propiedades:
xmpp.fqdn y xmpp.domain. En ambas se agregará el valor que usamos en dominio para iniciar sesión como valor de la property. Volvemos a intentar loguearnos con empathy y su plugin para jabber y listo.
Ahora podemos disfrutar de nuestro cliente empathy bién integrado a nuestro entorno Gnome y con mensajería en el servidor openfire.
La solución la encontré aquí.
Espero sea de ayuda :).

Minilap con arch linux con Xorg muy lenta.

Por cuestiones de trabajo esta semana tuve que reinstalar una minilap guia con 1gb de ram y procesador atom.

Este tipo de equipo no se destacan por su gran capacidad de procesamiento, sin embargo, hasta ahora había funcionado fluidamente con el inolvidable gnome 2, y con ubuntu (aunque no recuerdo la versión de ubuntu).

La situación es que requería ponerla a trabajar para un servicio simple, mostrar cierta información en pantalla para que, quienes acudan al sitio puedan ver información que el establecimiento desea mostrar y además algunos videos promocionales.

Al ser un equipo con pocas prestaciones y al usarlo para algo tan mundano decidí instalar un simple openbox como administrador de ventanas y vlc para mostrar los videos. Por otro lado, la aplicación que muestra la información esta desarrollada en java, por lo tanto el único extra requerido es el jre.

Una vez que instalé arch en el equipo este funcionaba fluidamente, instalé las aplicaciones mencionadas y cuando ejecutaba el administrador de ventanas con startx, la laptop se volvía insoportablemente lenta, ni que decir al ejecutar vlc y solicitar la reproducción de videos.

La solución fue simple y de lo mas obvia. El controlador de video.

En este caso solo instalé xf86-video-intel desde los repositorios de arch con el comando

      # pacman -S xf86-video-intel

Con esto el equipo funciona perfectamente. El controlador debe ser consistente con el hardware que se posea, siempre hay que recordar lo útil usar el comando:

lspci