Jusqu'à ce jour, je n'avais pas grand chose à dire de mal sur FreeBSD alias l'OS du Bien.
Et bien, c'est toujours le cas :D
Par contre, les gens du projet Ruby-Gnome2, là, c'est autre chose.
Sans que je m’aperçoive de quoique ce soit, ses filous-là ont violé la hiérarchie immuable d'un système BSD pour aller écrire des saletés.

Bon, je me calme et je décris le problème.

Voulant recompiler mon noyau FreeBSD, j'avais eu quelques soucis dernièrement que j'avais écartés en disant :

C'est transitoire, je referais un coup de csup plus tard


Le plus tard est arrivé aujourd'hui car en installant les pilotes de ma nouvelle imprimante[1], je suis dans l'obligation de sortir le support des imprimantes USB du noyau.

Je modifie donc le descriptif de mon noyau, mets à jour les sources et lance la compilation... Et bing

/usr/lib/libl.a: file not recognized: File format not recognized

Premier reflexe, je recherche sur le Web et ne trouvant rien au bout de quelques minutes, je tente un

coruscant# file /usr/lib/libl.a
/usr/lib/libl.a: ASCII Pascal program text

Là, ça devient curieux pour une archive de fichiers objet C. A l'affichage, je trouve les coupables :

coruscant# more /usr/lib/libl.a

#
# glib-mkenums.rb
#
# C language enum description generation library like as glib-mkenums tool.
#
# Copyright(C) 2006-2008 Ruby-GNOME2 Project.
#
# This program is licenced under the same license of Ruby-GNOME2.
#

module GLib
  class EnumDefinition
    attr_accessor :EnumName, :enum_name, :ENUM_NAME, :ENUM_SHORT
    attr_accessor :type, :Type
    attr_accessor :g_type_prefix, :prefix

    attr_reader :constants

    def initialize(name, const_lines, g_type_prefix, options={})
      @options = options || {}
      @EnumName = name
      @g_type_prefix = g_type_prefix
      @constants = []
[...]

Bon, autant être clair, je n'ai aucune idée de ce que ça fout là !!!
Il faut pourtant bien que j'arrive à me sortir de ce mauvais pas.
Je tente donc de passer par freebsd-update en lisant ça et prie le bon daemon de m'aider.

coruscant# freebsd-update fetch
Looking up update.FreeBSD.org mirrors... 4 mirrors found.
Fetching public key from update5.FreeBSD.org... failed.
Fetching public key from update2.FreeBSD.org... failed.
Fetching public key from update3.FreeBSD.org... failed.
Fetching public key from update4.FreeBSD.org... failed.
No mirrors remaining, giving up.

Après une meilleure lecture, c'est normal, freebsd-update ne marche que sur des RELEASE et moi, uname -a retourne

FreeBSD coruscant.dnsalias.net 8.2-STABLE FreeBSD 8.2-STABLE #7: Mon Jan  2 20:39:49 CET 2012 fred@coruscant.dnsalias.net:/usr/obj/usr/src/sys/CORUSCANT  i386

Une recherche plus approfondie me dit que cette bibliothèque est en fait un bout de l'analyseur lexicale lex... Tiens, tiens, il se trouve qu'il y en a un dans /usr/src/usr.bin/lex.
Bonne pioche !!!
Et hop, pour régler le problème

coruscant# cd /usr/src/usr.bin/lex/lib
coruscant# make && make install

Bon, tout ça est à faire en mode mono-user car cette bibliothèque fait partie du système de base et donc plusieurs commandes de base peuvent en dépendre.
En plus, moi, ça m'a provoqué un magnifique kernel panic au make install. Après investigation superficielle, un problème dans le ffs serait la cause. Mais bon, je n'avais plus eu de kernel panic depuis au moins 5 ans sur le système de base[2].

En tout cas, si je tenais le goret de chez Ruby-Gnome2qui a mis le script dans libl.a !!!!!

Je vais pouvoir fini l'installation de l'imprimante comme indiqué ici. Ça va encore en faire des aventures ;)

Notes

[1] De récup, une HP Photosmart 3210... Merci Maman :)

[2] J'en ai eu un récemment avec CodaFS mais je n'avais pas reconstruit le serveur Coda malgré les mises à jour successives du noyau dont il dépend... Bien mérité en somme :D