Showing posts with label linux. Show all posts
Showing posts with label linux. Show all posts

Tuesday, January 06, 2026

bin/Eterm-borderless

Ah. I'm still using Eterm from times to times, but its default color palette isn't that impressive. I've been using it without border or any widgets for decades thanks to the drag-to-move and drag-to-resize features of Enlightenment. but in August 2024, I made a few changes to the "Eterm-borderless" script that is bound to ALT+F5:


Eterm --borderless 
      --font-fx none        # else it tries dropping a shadow 
      -f white              # foreground color
      --double-buffer 
      # -x                  # (alias for --borderless)
      --cmod "96 255 255"   # trick for tinting the background towards green
      -O                    # transparent
      -0                    # immotile transparency optimization
      --scrollbar=0 --buttonbar=0 
      --color8 rgb:60/60/60 # better dark-grey
      --color3 rgb:cc/aa/00 # orangeish dark yellow looks better
      $* &
  • --viewport-mode is fundamentally what I do with my "restore-bg" trick
  • the default color8 (dark grey) is rgb:33/33/33, which is really too dark for any purpose
  • today's finding: an alternative to -f white could be --colorDB white -f rgb:dd/dd/dd --color7 rgb:bb/bb/bb. That gives you a default color that is bright-but-not-quite white while still having the true white when things are bold, without sacrifying any shade of gray. 

Saturday, November 01, 2025

Out of Memory

There's something going disturbingly wrong with my debian setup ... I thought it was mainly an issue with firefox, where the whole system froze and became completely unresponsive when youtube's scripts push the browser out of memory bounds. But it just happened as I tried to convert a too complex picture into a stack of svg path with inkscape while still having gimp opened with the bitmap edits and consuming about 3G of RAM to host them.

Usually, I can then access a text terminal and launch the top tool to kill the process that went crazy, but with that debian 12, it seems like it couldn't even keep that in memory ... too often, I end up having no other option but forcing the system to shut down, losing whatever state I had on the machine.

A message on stack exchange describes quite accurately what is possibly going wrong: the system has been assigning so much memory to data that it started stealing pages of executable code from processes ... and unfortunately, those processes call these pages back, forcing the swapper to find something else to kill, again and again. the "Out Of Memory" behaviour of the system does not kick in, or not before things have been running wild for over 10 or 20 minutes.

I've found some blog page presenting "Early OOM", an alternative that would kill memory-hoggers process in advance. Got it installed ... Got to check whether it helps ... Still have to write a wrapper to firefox launcher that would ulimit its consumption of virtual memory (did check it is effective).

(Maybe having a look at https://fedoraproject.org/wiki/Changes/EnableSystemdOomd could be useful, although it is for fedora installs) 

Spotting systemd_oomd running on my ubuntu (virtual) machine ...  

Thursday, October 02, 2025

Le mois dernier

Il faut bien le reconnaître, le mois de Septembre a été pas mal secoué... le remplacement de la machine à pain n'étant que le début des rappels à l'ordre du monde réel ... et j'avais un bouquin intéressant sous la main pour les soirées parce que m'attaquer à du code, j'avais rarement l'énergie de m'y mettre. Et quand je m'y mettais, c'était sur un side project que je retarde depuis trop longtemps: un remplaçant de Tomboy basé sur les bibliothèques d'Enlightenment... L'occasion d'ailleurs de me frotter un peu plus à Codeberg, l'alternative à github.

Mais il y aura quand-même eu quelques Bilouteries ... Dont des petits fantômes plutôt sympas inspiré d'un motif sur un des vêtements de ma fée... Enfin quelque chose qui fasse suffisamment fantôme sans faire trop Boo. C'est la castle zone qui va être contente :P

Bon, en plus de ça, je suis aussi tombé sur des moddeuses de (3)DS qui présentent leur collection .... et j'avoue, n'ayant toujours pas trouvé le public de School Rush, les voir inclure Ori ou Kirby dans leur coup de coeur, ça donnait envie de tenter d'établir le contact et de poursuivre l'exploration.

J'ai un peu discuté avec mon frangin des incohérences des niveaux historiques et de la manière de s'y attaquer, mais j'avoue que ça m'a plombé plus que motivé même si on est d'accord. Je crois que l'approche "make it exist first" ne me convient pas pour l'instant. J'ai besoin d'environnements qui permettent d'avancer proprement sur les nouveautés, pas d'un gigantesque chantier de trucs qui ne marchent pas. La prochaine étape, ça devra donc être de remplacer le setup "ramassage de pomme" par un setup "cascade/glissade" dans la première des "three rooms"

Et puisqu'on est dans le tour des trucs en vrac sur lesquels j'ai passé du temps, j'ai essayé un design pour un futur T-Shirt "if it's not broken, open it and see how it works" qui aurait été basé sur le bloc-question de Super Mario World, ce qui m'a emmené faire de l'analyse d'assembleur SNES. Mais ça n'a pas donné si bien que ça de sorte que j'ai aussi imprimé des schémas de circuits amiga pour une approche plus copper-and-blitter.

Thursday, July 24, 2025

I will survive (RockyLinux)

Okay, "I will survive" is not related to Rocky movies. "the survivor" is (are?)... Anyway, because of built-in hardware support for cutting-edge network cards and protocol that Ubuntu can't dream of, I've got to get comfortable with the RockyLinux distribution while I've never really been a fan of RedHat way-of-doing-things. A few mappings for commands I need to remember ...

apt-get install yum install
/etc/init.d/networking restart systemctl restart NetworkManager.service
apt-file search path/to/filednf provides path/to/file
yum whatprovides path/to/file
@unknown@ systemctl stop firewalld 
(some more apt/yum matches)

Friday, June 20, 2025

opacity under my middle finger

Pendant longtemps, je suis resté fidèle à la version 16 d'Enlightenment -- le gestionnaire de fenêtres pour Linux. e17 son successeur remplaçait un peu trop de choses à mon goût, et notamment tout mon setup de doctorant basé sur FancyLauncher tombait à l'eau...

Puis les gestionnaires de distribution linux ne m'ont plus vraiment laissé le choix ... et là on en est à Enlightenment 25.3 (bionew) ... et voici que je découvre 

  1. qu'on peut customiser ce qui se passe quand on utilise ALT+roulette
  2. qu'on peut mettre un comportement différent selon qu'on survole le bureau, une fenêtre, ... 
  3. qu'on peut en profiter pour changer l'opacité d'une fenêtre

Alors soyons clairs: les terminaux ou fenêtres transparents, de manière générale, ça m'est inutile: j'ai trop de fenêtre pour que ça serve à quoi que ce soit. Mais les terminaux qui permettent de quand-même voir mon fond d'écran par derrière, ça ça me botte. Par contre, un truc que je faisais souvent sous e16, c'était profiter d'un des mode de déplacements de fenêtre pour superposer deux chaînes cryptographiques, histoire de vérifier rapidement qu'elles étaient identique. Effectivement, au moment de déplacer une fenêtre "en mode transparence", e16 trichait et faisait une capture d'écran de votre bureau qu'il allait garder comme image #1 tandis qu'une capture de la fenêtre à déplacer se baladait comme image #2 avec alpha-blending de démoscèneur.

0.23.1 sur ma "machine à écrire" ... Lui peut toujours être redémarré d'un "kill -11" là où la version de debian va tenter de se blinder mais du coup peut devenir incontrôlable en cas de bug interne, ce qui m'a déjà coûté ma session de dsdev un peu trop souvent.

Il y a aussi ce comportement bizarre avec mon pointeur souris qui fait passe en distortion 3 quand je veux ouvrir un menu dans ddd ... et le fait que la zone d'influence de firefox déborde d'une 15aine de pixels sur la droite de sa fenêtre ... (edit: 0.24.2 me montre dans ce cas un curseur spécial "étendre la fenêtre horizontalement, mais revient à un "simple curseur" pendant encore 8-16 bons pixels avant de me montrer le curseur texte que j'attendais et me laisser taper dans la fenêtre cachée :-/)

Me voici donc au final avec la 0.24.2 (recompilé depuis les sources dans /usr/local/*, ajouté à la main dans un /usr/share/xsessions/e23.desktop -- personne n'est parfait ^^") qui me fait une bannière "guru meditation" quand je lui envoie un SIGSEGV, qui réagit gentillement à
enligthenment_remote -restart
mais qui a malheureusement remis à zéro tous mes réglages T_T ...

edit: avec un petit réglage de plus, j'ai aussi récupéré le "suspendre si je ferme l'écran": il suffisait juste de passer de "suspend intelligently" à "suspend". (J'imagine que "intelligently" évite la mise en veille si je suis en mode 'présentation', mais ça ne me tente pas pour ce PC)

Thursday, March 27, 2025

/boot/grub/oops.cfg

Une petite manip' de travers et je me suis retrouvé avec une machine multiboot automatisée qui ne bootait plus du tout. just un "grub2>" tout seul ... en général, je finis par retomber sur mes pattes dans ce genre de situation, mais cette fois-ci, même un simple "help" virait au "help.mod not found" ... Eh oui, il a bien changé, le monde des secteurs boots... le bootloader est un fichier comme un autre dans le répertoire /EFI d'un disque particulier. il charge des annexes venant d'autres fichiers comme les autres, et il peut aller les prendre avec l'un ou l'autre système de fichiers ...

Parce que oui, au moment d'utiliser la commande grub2-install --efi-directory=/boot/efi --boot-directory=/where/you/want/it/to/be ..., l'outil d'installation va regarder quel type de fichier est utilisé par le boot-directory et placer un grub.efi intégrant xfs ou fat ou (pourquoi pas) reiserfs ... 

Bonne nouvelle, par contre, les modules permettant d'accéder aux différents systèmes de fichiers sont tout de même disponibles, et la commande search --no-floppy --fs-uuid --set=VARNAME UUID_GOES_HERE marche toujours. Mais je tournais en rond jusqu'à ce que je note un set prefix=(hd0,gpt5)/boot/grub2 ... j'essaie quelques autres gpt (la table de partition, pas le chat) pour finalement tomber sur celle qui marche. Hourrah! Je peux enfin retrouver les fichiers vmlinuz et initrd ... je peux lire le fichier /boot/loader/entries/*.conf correspondant à ce que je veux démarrer pour copier-coller les uuid à travers l'interface chaise/clavier et au bout de 2 ou 3 erreurs (où le noyau linux s'est retrouvé sans système de fichier et ou j'ai préféré rebooter plutôt que de m'acharner avec des mount /dev/nvme0n1p5 /), j'ai mon linux de nouveau d'attaque... Ah parce que oui, menuentry, c'est bon pour les OS étrangers. Les entrées du genre "démarrer le système", "démarrer avec le kernel précédent" et "démarrer en mode opération de sauvetage avec Lino Commando", on a droit à des fichiers séparés que blscfg (encore un autre module, suivant les BootLoaderSpec) va passer en revue.

j'aurais probablement pu me simplifier la vie en exécutant export $prefix ; configfile $prefix/grub.cfg une fois le "chemin d'accès à grub.cfg" corrigé, mais ça, je ne l'ai découvert que trop tard ^^"

Bien, donc j'ai pu depuis mon système redémarré revenir à un système fonctionnel à coup de grub2-mkconfig et grub2-install, mais du coup, je perdais ma tentative de modifier l'OS à booter depuis n'importe quel OS en ré-installant grub sur une partition partagée ... et rien à faire, pas moyen de trouver où était la définition de cette variable prefix ... Mais j'avais vu un truc intéressant: la présence d'une commande source FILENAME suggérant qu'on pourrait aller lire un fichier .cfg minimal sur la partition partagée et garder grub tranquillement là où il est censé être.

Saturday, February 22, 2025

Crappy Debbie WiFi

Bad luck, I've got unreliable WiFi with the new distro: every now and then a web page will get stuck while loading. When they're not, they're taking age to complete. If I ping, I don't see "network unreachable", but I see the pings struggling, the resovled name changing, sometimes even switching from IPv6 to IPv4. So I went for a monitoring of dmesg -w and I spot events like

[13390.293505] wlp2s0: disconnect from AP e4:bf:xx:xx:xx:50 for new auth to e4:bf:xx:xx:xx:48
[13390.332410] wlp2s0: authenticate with e4:bf:xx:xx:xx:48
[13390.332455] wlp2s0: 80 MHz not supported, disabling VHT
[13390.379300] wlp2s0: send auth to e4:bf:xx:xx:xx:48 (try 1/3)
[13390.382294] wlp2s0: authenticated
[13390.385211] wlp2s0: associate with e4:bf:xx:xx:xx:48 (try 1/3)
[13390.396102] wlp2s0: RX ReassocResp from e4:bf:xx:xx:xx:48 (capab=0x1411 status=0 aid=3)
[13390.400601] wlp2s0: associated
[13390.414136] wlp2s0: Limiting TX power to 20 (20 - 0) dBm as advertised by e4:bf:xx:xx:xx:48
[13411.113702] wlp2s0: disconnect from AP e4:bf:xx:xx:xx:48 for new auth to e4:bf:xx:xx:xx:50
Every 20-30 seconds. They match the struggles of ping.

Now, there are posts about how to handle frequent disconnections, and I wish they weren't so often behind cookie walls, so I could scan through them more easily. The link mentioned would offer little to no help. "Have you tried switching to networkd+resolved instead of NetworkManager ?" ... eh ... I'd rather leave that untouched if I can. See, it's not a whole new system: a decade-old ubuntu was able to use that same WiFi chip reliably.

if I watch iwconfig, I can see Bit Rate ramping up after a disconnect, then reach a certain point (around 100Mb/s) and then we disconnect and are back to a few Mb/s again. Yet, sudo iw dev wlp2s0 set bitrates legacy-2.4 48 36 24 18 12 9 6 does not seem to help ... Of course: ramping up bit rate is not the cause of the issue, it's a consequence of network being disconnected: it has to slowly re-establish connection every 30 seconds.

I'd like to say that I've found a blog post that proposed me to check nm-connection-editor and change "band auto" into "band B/G (2.4GHz). I'd like to say I've got a colleague explaining that pointed out it would have no effect until I manually systemctl restart NetworkManager.service, no matter whether I clicked "save" button on that settings window. Truth is this has been suggested (among many other useless things) by the rubber duck, again.

Now that it's fixed and that I read those dmesg lines again, I spot how there were *2* MAC addresses competing, and my computer would hop from one to another. Likely I could have saved myself trouble by disabling either band on the access point settings, but that may have affected phones of my relatives.

Saturday, February 15, 2025

The Tomboy Quest

  • Tomboy.exe is truly a PE32 executable holding .Net assembly ... my bare kernel doesn't want to run that
  • what with mono-runtime ? it starts, but is missing Mono.Posix ...
  • it is in my /ubuntu/usr/lib/mono/4.5, as a dll, but there are also some .../lib/mono/gac/Mono.Posix and a /usr/lib/libMonoPosixHelper.so ... so I'd better install libmono-posix4.0-cil from debian repos ...
  • okay, but now it complains about a missing gtk-shark ... I see references for that in /ubuntu/usr/share/cli-common/packages.d ... let's try and make some symlink ...
  • still not ... time to install strace and see what it fails to find... mhmm ... seems to be the Facades/gtk-sharp.dll and friends. But ubuntu did not have any Facades either ... so I guess that must be the files in .../lib/mono/gac/*-sharp instead. (strace did look for them, at least). Without gac contents, none of packages.d or policies.d is taken into account ...
  • trying again ... more sophisticated exception this time, about libglibsharpglue-2.so not found, if I'm not mistaken. It insist on it to be in /usr/lib/cli (fair enough), which only contains binfmt-detector-cli so far (part of mono-runtime)
  • more progress again, now missing libappindicator.so.1 ? would debian pacakge libayatana-appindicator1 do the trick ?
  • libgconf-2.so.4 you say ? okay, there's a .deb too ... now it says "Initializing Mono.Addins" ... it say "no GUI 'su' tool found" ... nothing ... What if I have mate-session running ? Ah! There you are ! Okay, your icon in the tray is a broken file ... your icon in the enlightenment dock is a question mark, but you ... are ... there. (I guess using --new-note or --search on the command line would have done the trick as well).

Time for some context, I guess ? Well, you know I've been installing a debian lately. It turns out it did not have the tomboy tool available in the repository... This is no surprise to me: the latest ubuntu I installed at work did not have it either, but my colleagues had started to deploy phabricator and it's been a good amount of years that I've switched all my dev-musing into that (mostly because it has instant upload of pictures despite a more sluggish overall interface ... and I can easily share contents with colleagues).

I'm done with PhD research and all, so my old collection of notes about a better Internet aren't very useful either ... but I started using tomboy a few years before it turned obsolete to hold some of my fairy's collection and automate the production of monthly curated list of that collection. So the last weeks have been a reboot-dance between the new debbie and the old ubuntu depending on whether I needed USB support or she needed her collection. That must come to an end because firefox certificates are about to expire in that old ubuntu, with no more packages to replace it.

The process above will sure turn into a maintenance nightmare sooner or later, but guess what, it's not the first time I resort on such process. Last time was to keep using an old Adobe Acrobat for Linux because the new one was a usability nightmare ... and it did a fair job for years and years, even hopping from SuSE to Ubuntu. Sure, I tried alternatives, like Folio, or rebuilding from sources, or the tomboy-ng package readily available for my debian (but that turned out to have several critical bugs and lacked key features for my curation technique, despite having a very welcome convert-old-notes tool) ... I hadn't tried NobleNote, thought ... maybe I should have ...

Sunday, January 19, 2025

Debian pour Icebear

Une surprise 2025 dont je me serais bien passé: le laptop du bureau ne fonctionne plus avec le lecteur de cartes d'identité belges ... selon jigé, ça marcherait mieux avec Edge ... très peu pour moi. Le couac, c'est que ma bonne vieille distribution ubuntu ne sait plus faire les mises à jour non plus. J'ai donc passé un moment à essayer de faire tourner d'autres distro dessus, à commencer par une RockyLinux (j'avais déjà l'iso) qui n'a pas réussi à booter, puis la LTS d'Ubunutu (24.04) pour laquelle j'ai dû chipoter (boot UEFI obligatoire) mais qui n'a pas su utiliser eid.belgium.be une fois tous les package installés. La raison ? les gens de chez Ubuntu sont fan du système "snap" et firefox se retrouve maintenant lui aussi dans un "snap".

Bon, j'avoue que moi, je ne suis pas franchement fan de snap. L'idée était sympa quand il s'agissait de recevoir un jeu et ses dépendances sans venir mettre des crochets dans toutes les bibliothèques du système, mais quand on retrouve gnome-dans-un-snap ou firefox-dans-un-snap, franchement, pour la gestion du disque sur un système pas si tera que ça (typiquement je limite la partition système à 42Go), ça devient vite pénible. Et là, en plus, ça rend une fonction primaire du système (remplir la déclaration d'impôts) impossible, donc ciao.

Où trouver une distribution Ubuntu-like qui n'utilise pas snap ? Debian, tout simplement.

Alors pour les non-pingouins d'entre vous que le paragraphe sur snap n'a pas fait fuir, debian c'est la distribution sur laquelle Ubuntu s'appuie. En gros, des fans de debian ont un jour voulu faire en sorte que leur linux soit plus accessible, capable de lire des mp3 nativement, avec une configuration plus simple de la connexion internet, etc. et ils ont lancé Ubuntu avec tout ce qu'ils avaient préparé.

Et donc, quand on vient de lancer une version démo (on dit "une live", nous autres ^^") d'Ubuntu et qu'on lance juste derrière une version démo de Debian 12, il y a quelques surprises ... comme "ehM pouraoui je suis en qwertyM" parce que le module de boot ne prend pas son temps à vous poser des questions avant de débarquer sur le bureau. Ou "Eh ? comment, perdu.com n'est pas joignable ? " pour me rendre compte que "ah bah oui, le wifi n'est pas configuré ^^" ... de nouveau, ça faisait partie des questions préliminaires avec Ubuntu.

Mais, youpie, le package de support des cartes d'identités, lui, marche bien, y compris dans firefox. Enlightenment et terminology sont disponibles et je pense bien avoir pris un package "mate" plutôt que gnome. Alors qu'est-ce que je fais encore sous ouinouin plutôt que de prendre en main ma nouvelle debian ? Eh bien, c'est que le boot system du laptop, ce n'est pas UEFI de base. Et j'aimerais le garder en dual boot. Et il y a une commande pour grub (1) qui devrait me permettre de détecter la debian et l'ajouter depuis ubuntu ... je voulais vérifier ce que c'était avant de lancer update-grub en aveugle (qui n'était évidemment pas dans la liste des grub* que je testais puisque ... lol ... il *finit* par grub là où tous les autres outils *commencent* par grub ^^"

edit: voilà: ça boote. Maintenant, copier les signon.json et autre key4.db pour que le nouveau profil firefox puisse avoir mes identités, copier le répertoire .e pour récupérer ma config enlightenment ... forcer un peu l'affichage de firefox pour que ce soit supportable

edit+: bon, si je veux pouvoir faire tourner mon bon vieux desmume de référence, je vais devoir suivre mes instructions pour ajouter le support 32-bit ...

edit++: "lili usb creator" est manifestement prévu pour créer des clés MBR. Si la machine-cible est configurée en GPT/UEFI, c'est mort. Dans ce cas-là, c'est rufus qu'il nous faut.

edit+++: manifestement, sous debian, il faut mentionner .bashrc explicitement dans son .bash_profile ^^"

Thursday, April 18, 2024

32-bit

Bion, jusqu'ici mon laptop tient bon, mais il a un truc un peu spécial qu'il vaut mieux que je documente pour mon moi-du-futur: il continue de faire tourner certains programmes en 32-bit alors que c'est un ubuntu 64-bit. Lors de mes premiers pas dans l'espace d'adressage gigantesque d'AMéDée64, le double support 32/64, c'était la règle, mais ça fait quelques années déjà qu'on y est plus.

Or, mon environnement de tests automatiques pour libgeds s'efforce de faire croire au code qu'il est sur une DS en ajoutant de la mémoire valide ici où là pour que les écritures dans les registres n'échouent pas. Ruse qui ne marche qu'avec un système 32-bit pour une raison qu'il faudra que je demande à mon moi-du-passé de me documenter.

When AMD64 support had been introduced in Ubuntu systems, the default was to ensure the system could run both 32-bit and 64-bit executables. That means 2 copies of the standard libraries, 2 copies of many libraries, etc. Nowadays, your default Linux distributor has dropped 32-bit distros and the 64-bit distros have been updated so that they only feature 64-bit binaries. So the CPU can still run 32-bit thing, the kernel can still run 32-bit processes, but the support libraries are missing. That means when I e.g. try to use 2009-old SchismTracker to export a .xm of a soundtrack, I get a puzzling error message.

En plus de ça, l'outil que j'utilise pour éditer les musiques du jeu (SchismTracker) a laissé tomber le support des fichiers .XM pour ne plus produire que des .IT ... alors que je m'en sers essentiellement pour convertir les .IT du frangin en .XMs :P ... Je promène donc avec moi un répertoire de binaires 32-bits lui permettant de continuer de tourner mais il faut pour celà que l'OS lui-même ait quand-même quelques outils et configurations sous la main pour exécuter du 32 bits. Faute de quoi, le shell persistera à nous dire

-bash: /home/grizzly/bin32/schismTracker: no such file or directory

alors qu'il est bel et bien là (ouais, pas terrible, les codes d'erreur pour le coup).

Comme linaro vient de me faire le coup, je profite que je suis pas à pas un petit howto sur stackoverflow pour me laisser un topo de voyageur temporel...

Of course, the binary alone is not enough: I have noah-arch-ived a few mandatory libraries that the application will use, like libXxf86misc.so, but these are not the "support" libraries. When I mean by that is C and C++ runtime, ia32 elf loading libraries (yup, your kernel typically doesn't know how to do that alone and needs a shared library to load executables into memory ^^"). So for future self and geeks-in-training reading this, here are the commands I typically use


sudo dpkg --add-architecture i386 # there is more than x86_64, you know
sudo apt-get update
# accidentally did an apt-get upgrade...
sudo apt-get install libc6:i386 libncurses5:i386 libstdc++6:i386
# that was enough for me.
# sudo apt-get install multiarch-support # might be needed otherwise...
sudo apt-get install libz1g:i386 # was needed later on for linaro building newlib

edit: does it sound convoluted to use 2 different versions of SchismTracker when you could just use some XM-targetting software to create the music in first place ? Well, you should ask Nina Kalinina to tell you how *she* makes music ready for GBA playback ;-)

Friday, December 02, 2022

baloo_file ?

 Je tente une migration de ma VM ubuntu au bureau. De 18.04 à 20.04, en espérant que ça me permettra de partager plus facilement les produits de builds avec les machines de tests tournant en 20.04 ...

Mais au moment où j'essaie de prendre la machine en main, je suis face à un système tellement peu réactif que passer en mode console est à peu près ma seule option. Le coupable, c'est kswapd ... enfin non. Le coupable, ce serait plutôt baloo_file, qui semble s'être décidé à indexer l'entièreté du système (à travers un process fils baloo_file_extractor) en même temps que d'autres opérations de bienvenue (regarder si il y a une mise à jour dispo) sont aussi en cours. Sur un système avec 2G de mémoire au total, ça ne pardonne pas vraiment.

Le message d'erreur quand le programme de mise à jour d'une distribution à l'autre aurait pu être plus clair, cela dit. https://ubuntu.com/blog/how-to-upgrade-from-ubuntu-18-04-lts-to-20-04-lts-today ... Voire, l'outil aurait pu auto-installer ses dépendances plutôt que de signaler une erreur :-P

L'outil de mise à jour voulait me virer e17 ... mais pas de panique: c'est juste parce que le package a été rebaptisé "enlightenment". Heureusement, il est possible de passer le 'nettoyage des anciens packages' le temps de vérifier que tout se passe comme il faut, découvrir les alternatives de la nouvelle distro puis valider le nettoyage avec apt auto-remove (ou quelque-chose du genre suggéré au premier apt-get remove e17)

La bonne nouvelle c'est que je vais pouvoir utiliser terminology dans cette VM aussi. à moi les tyls et autres tycat pour avoir des images en ligne de commande $_$

Par contre, terminology n'a pas de support pour la ruse "un 2eme fond d'écran parfaitement ajusté pour qu'on puisse lire le texte par-dessus" que j'utilisais avec Eterm... 'faudra peut-être que je travaille à une PR.

Friday, January 28, 2022

when the going gets panic, the tough goes kdump

NOTE: kdump is a service that can use kexec tool to create a log-and-core dump into some place in case of kernel panic by pre-loading an additional (rescue) kernel somewhere in memory

I discovered that last year because Red Hat Linux was doing it automatically when a crash occurred (and well, being developing drivers rather than embedded device, it is bound to happen again), but if I remember correctly, one can also --install  and ./configure it on Ubuntu.

When the kernel isn't entering PANIC, though, it could raise a WARN, where you still see a registers and stack dump, but things keep rolling. It might be telling you that something is unsafe and might have triggered a deadlock if we weren't so lucky, though. Better listen to them.

Sunday, November 21, 2021

direct framebuffer

Parmi les projets tombés en désuétude, il y eu mon dernier GUI en date pour plate-forme PC. Mais pour des raisons techniques, celle-ci devait se faire avec la même technologie que celle choisie pour faire de la vidéo de fou: directfb. Rien à voir avec directX (enfin, presque rien): c'est une bibliothèque permettant de manipuler le plus directement possible l'abstraction de mémoire vidéo (fbdev) sous Linux.

J'avais déjà fait quelques petits programmes de test avec mais ici je me suis retrouvé évidemment à vouloir tester l'application qui était derrière, de manière systématique, chose qui était impossible à travers HDMI/USB ... (enfin, disons peu pratique plutôt qu'impossible).

dfb->WaitForSync(dfb) () et DSCAPS_PRIMARY sans DSCAPS_FLIPPING avec un dfb->SetCooperativeLevel (dfb, DFSCL_EXCLUSIVE). Tout venait de là. En monitorant un peu les timestamps obtenus au moment du retour de WaitForSync, il devenait possible de se la jouer "Future Crew" et prédire dans combien de temps le retour d'écran allait avoir lieu. Mieux: je pouvais même prédire quelle portion de la VRAM était succeptible d'être utilisée par l'écran, et donc quelle portion de cette même VRAM pouvait être modifiée sans produire d'artefacts visibles.

Le site que j'utilisais jusque là n'est plus trop en vie... mais le code devrait toujours être présent sur github ... encore que les dates des dernières mises à jour semblent crier "do not use for new designs". Dommage.

Et sur devterm ? est-ce que ça fonctionnerait ? le package est disponible, son package 'bin' aussi ... par contre, j'ai systématiquement un 'segmentation fault' quand j'essaie d'utiliser les outils comme dfbshow ou dfbplay (juste après l'initialisation du joystick). Même dfbinfo n'y échappe pas. Il y a un /dev/fb0 sur l'appareil, fonctionnant en 480x1280 selon /proc/fb...

Voilà, c'est ce qu'il y avait à en dire en 2021, mais je note ce matin que quelqu'un s'est lancé dans directFB2 ... il faudra que je regarde ça de plus près ;)

Friday, October 15, 2021

Coupez!

Imaginons qu'on ait envie de faire un peu de demoscene au milieu de Linux. Imaginons encore qu'on ait vraiment besoin qu'une partie du programme ne soit jamais interrompue par autre-chose. Difficile, hein ?

J'ai fait un truc un peu du genre, un jour, mais il faut avoir accès à la configuration du bootloader. De même qu'on peut forcer le kernel Linux à n'utiliser qu'une partie de la mémoire, on peut restreindre l'ensemble de coeurs accessibles au scheduler grâce à isolcpus=0,1,2 (ou tout autre combinaison qui vous convienne, laisser un coeur sur 4 au système, c'était un peu extrême :-P). Quel est l'intérêt ? eh bien, c'est que si ces coeurs ne sont plus utilisés par les processus génériques, un programme ayant les droits suffisant peut toujours faire appel à sched_setaffinity() pour se lier à un coeur en particulier, y compris un coeur qui avait été 'isolé' du reste du système.

Je me demande si ça donnerait quelque-chose d'intéressant sur le devterm. 'faudra que j'y exécute un lscpu ce soir, tiens... Pourquoi je vous ressort ça là maintenant? Hmm ... peut-être à cause du gars qui faisait la promotion de ce genre de technique poussée au point d'héberger un système temps-réel à côté de Windows entre la démo de miroirs déformables en temps réel, les caméras 3D temps-réel et du système de lentille liquide contrôlée électriquement sur la foire de Stuttgart ...

Monday, January 20, 2020

test de pente en cours

Voilà, j'ai mis en route quelques modifications pour appliquer les idées du nouveau système de description du niveau avec comme point de départ un p'tit morceau de code qui crèe un 'niveau de référence' et place un personnage simple dessus qui devra avancer d'un bout à l'autre sans ce faire stopper.

Tout ça se passe dans l'environnement 'unit-testing' plutôt que sur la console elle-même et donc est testé contre les fuites de mémoire. Mais au moment d'essayer de comprendre pourquoi il y a une fuite, je me rends compte que scan-mem.pl (qui traduit les adresses stockées dans un fichier trace%d.log en nom de fichier/fonction/numéro de ligne) ne marche plus.

I had to do some more unit-testing on the new level description system. Good thing with that unit-testing environment (running on my dev PC rather than on the NDS or in an emulator) is that it features some memory leak detection. But unfortunately, as I tried to use my scan-mem.pl script -- the one that converts raw addresses stored in log files into filenames and line numbers -- I couldn't get anything relevant.

The reason for that is that Linux "now" features an address space layout randomization mechanism, that ensure .ELF files are no longer loaded at well-known memory locations, but instead takes advantage of their re*L*ocatable nature to make every instance of the program somewhat different from the others, and therefore make sith-hat hackers' life miserable by denying them simple access to part of the code/data they'd like to use in their exploit. Generally speaking, this is great, but right-here-right-now, this is bad news.

La faute au "nouveau" système de brouillage d'espace mémoire qui ne charge plus les fichiers .elf des programmes Linux à des adresses fixes (définies dans le programme) mais qui va utiliser la faculté des fichiers ELF à se reloger en mémoire pour que chaque exécution du programme utilise des adresses légèrement différentes. L'idée est de faire en sorte qu'un hacker qui parviendrait à provoquer un crash dans votre machine avec des données à lui (au hasard, une police .ttf véreuse ;) ne puisse pas pour autant appeler la fonction popen() ou system() avec des données à lui ... parce qu'il faudrait d'abord qu'il devine où elle se trouve dans ce processus-ci.

Ça ne fait pas mes affaires, mais c'est assez simple à régler: une 'simple' ligne supplémentaire dans le fichier log pour indiquer l'emplacement actuel d'une fonction précise et un appel à nm fichier_elf | grep nom_de_fonction dans le script de décodage, et je peux recalculer le décalage utilisé, le soustraire aux valeurs trouvées dans le fichier log et conquérir le monde (mouah hah hah ...)

Hopefully, this isn't that bad to fix. All I need to do is to extract the 'expected' address of some function within the decoding script, re-compute the offset and substract it to every value found in the logfile and tAke oVeR the wORld (mwah ha haah)... Erhm. The leak. Did I just said 'the world' ?  

Euh. Enfin. On va déjà essayer de conquérir le "leakage: 0%", ce sera pas si mal.

Où était le memory leak, alors?

Le bloc incriminé, c'est une palette d'actions spéciales qui est allouée dans le parseur de scripts. Je n'utilise encore rien de ce genre pour mes petits tests, mais ils sont alloués automatiquement quand on crée le parseur. Normalement, ils devraient ensuite être délégués à GameScript quand le parseur est détruit (et qu'on est prêt à jouer au niveau) .. sauf que dans ce cas-ci c'est le destructeur de GameScript qui détruit le ScriptParser, mais il le fait après avoir regardé aux palettes d'actions ... et donc cette délégation tombe trop tard. Facile à corriger.

Thursday, September 26, 2019

Adventures in LVM

I had issues resizing the / partition of my system some time before creating the last VM I was using at work, so apparently I though "oh yeah, I'll enable Linear Volume Management (or whatever LVM stands for) this time".

Everything worked fine as long as I was running on that VM. And I don't remember having to grow the partition (I'm unsure the disk backing it would have allowed it to grow a lot, anyway).

But then I had to make the same virtual disk working on a new root filesystem, likely because the new VM has UEFI boot enabled by default and the previous disk image was for MBR-boot only... https://www.svennd.be/mount-unknown-filesystem-type-lvm2_member/ helped a lot to recover stuff.

Do you think that would make it.

No. Of course not. I managed to screw my enlightenment window manager configuration, and end up with nothing but black-on-black windows (with nice blue shadows when I switch focus, though). Since all the enlightenment configuration files are "encrypted" now, I unfortunately can't vim me out of this mess, so I thought "never mind: I'll mount a second instance of that hard disk and recover files from there ... haha. Nice try.

Of course, the two disks have the same LVM identifier, so none of lvscan and friends allow to use both at the same time >_<

some shutdowns later, I copied back my configuration and have a working window manager again. pfew.

Next time, I'll remember to archive contents of ~/.e/ before feeling adventurous... enlightenment nicely makes up to 10 backups of your files, but when one more is lost about everytime you start a new session, apparently. And one quickly makes lots of sessions while trying to fix such issues :-/

Wednesday, April 18, 2018

shell functions

For so long, I have been creating aliases for my shell. "dir" would be "ls -la" and things like that. TCSH even had ways to retrieve some attributes to the aliases. building 20 student programs and testing them would have merely required me to type N (for next), B (for build) and T (to launch simple tests). Do I need to fix something to better evaluate their program ? B again, then T again.

But it had its drawbacks, and it was pretty ugly to code. Nowadays, I'd do that with shell function instead. Rather than trying to rewrite the statement, it truly allows me to extract all the arguments (either separately or together) and then calling one or more commands

cl()
{
    color.pl $* | less -R
}


One last place here I used aliases is with the "quick cd" tool I use to keep my brain sane and my screen not-excessively-cluttered
#!/usr/bin/bash

export CITY=$(pwd)
echo "You are in the City. $CITY"
echo "You can set 4 locations. North, South, East and West."

alias setN='export NORTH=$(pwd)'
alias setW='export WEST=$(pwd)'
alias setE='export EAST=$(pwd)'
alias setS='export SOUTH=$(pwd)'
alias setC='export CITY=$(pwd)'

alias N='cd $NORTH'
alias S='cd $SOUTH'
alias E='cd $EAST'
alias W='cd $WEST'
alias C='cd $CITY'

And yes, it pretends that you're running an old-fashioned, text-based adventure game instead of crawling directories. Because i found it easier to thing of thinks as "west", "north", etc. rather than trying to remember what letter I used for "gstreamer" and what letter was for "alsa".

Thursday, March 01, 2018

__lock_jiffies

Perdu dans un petit coin d'un driver Linux, une fonction sympa qui augmente un des verrous avec un chronomètre ... histoire de voir combien de temps on est resté en section critique.

Je devrais peut-être bien ajouter quelque-chose de ce genre avec parseLine() dans GameScript, tiens.

Et capturer le numéro de ligne des transitions crées, ce ne serait pas mal non plus.

Saturday, November 19, 2016

3 days

File copies in progress. I could get the unit tests and the editors of dsgametools succesfully built by the latest devkitpro installed on my BMx, after all. But without the copyrighted content of SchoolRush, the unit tests won't run ^^".

I'm a bit disappointed by 'terminology', the new terminal+file explorer from the Enlightenment project, esp. because its 'set terminal background' command (tybg) doesn't seem to work, neither do the fancy 'tyls' command. 

I'm kinda scared, too, because it looks like emacs is doing weird rendering. And I'm afraid this is something related to my graphical environment rather than related to emacs itself ...

PS: file copied. Unit test succesful

Tuesday, November 15, 2016

7 days!

Here I am, back on my BMX because my 2007 "grizzly" thinkpad is no longer operational. I cannot call it "dead", but the battery no longer works, meaning that using it for arm-chair development in the evening has turned highly improbable (with improbability equal to 42, to be precise).

I'll give myself 7 days to try and compile SEDS and LEDS with the latest devkitpro on this box. If that's not enough, I'll just import my damn' old "devkitpro 32" and keep going.


Me revoici sur mon BMX: la batterie de mon autre ordi m'a complètement lâché. Certains des éléments que j'avais pointé en mai comme posant problème devraient fonctionner mieux maintenant que j'ai restructuré mon code, d'autres ont toujours besoin d'une mise à jour. Je me donne 7 jours pour y remédier. Passé ce délai, je récupérerai mon gros .zip avec l'ancienne version de devkitpro que je traine depuis Apple Assault, et basta.