pkgsrc et options de dépendences

Je suis en train de packager un module apache, mod-vhost-ldap, qui a pour dépendence www/apache22 et par conséquent devel/apr-util. Jusque là, rien de terrible, les inclusions suivantes gèrent ces dépendances directes :

Seulement voila, pour que mod-vhost-ldap compile correctement, devel/apr-utils doit impérativement être compilé avec le support LDAP. Ceci est réalisé en plaçant la variable PKG_OPTIONS.apr-util=ldap par exemple dans /etc/mk.conf. Cependant, si cette variable n’est pas renseignée, et que rien de particulier n’est spécifié dans le Makefile du package mod-vhost-ldap, la compilation de ce dernier foirera lamentablement et je vous met au défi d’en trouver la cause.

@

J’me suis tâté à balancer ça sur imil.net, mais après tout, puisque j’y raconte ma vie et que ceci est probablement l’un des instants les plus magiques de cette dernière, je vais pas m’en priver (non on attend pas un gamin).

Depuis combien de temps j’attend ça… je sais plus bien, à vue de nez, je dirais une huitaine d’années, depuis que j’ai commencé à contribuer chez eux. J’ai pondu des trucs, plus ou moins interessants, j’ai participé dans la mesure du possible et surtout dans la mesure de mes compétences, de mon temps, un peu au petit bonheur. Et finalement, c’est arrivé, sous l’œil bienveillant de mes deux sponsors que je remercie sincèrement: je suis officiellement développeur NetBSD.

Faire cuire les oignons 5 minutes

Deux ptites astuces que je poste plus pour m’en souvenir qu’autre chose.

J’avais acheté il y a quelques temps une oreillette bluetooth. À cette époque, j’avais vilainement galéré avec btsco et la stack bluetooth Linux, pour finalement obtenir un résultat moyennement satisfaisant puisque l’attachement de l’oreillette nécessitait moult manipulations.

Sur ma Debian flambant neuve, et pres de 3 ans plus tard, les choses se sont considérablement améliorées.

1. ajout des lignes suivantes dans le fichier ~/.asoudrc :

Tu te prosterneras devant tes idoles

Il est arrivé !

Source Code Secrets: The Basic Kernel" de William et Lynne Jolitz, ou l’histoire “codée” du portage de BSD vers l’architecture i386.

Je l’ai rapidement feuilleté, et ce bouquin est encore plus fascinant que je le pensais: il s’agit de l’explication, pratiquement ligne-à-ligne de ce portage, code et schémas d’archi à l’appui. C’est un peu comme un conte de fées quoi.

Dégageuntu 9.01

De frustrations en déconvenues, j’ai profité d’un upgrade de machine pour virer ubuntu et repasser à debian.

Oui, ubuntu est un bon produit dans sa globalité, j’en ai fait des éloges à ses débuts, j’ai pris sa défense lorsque les premières bourdes sont apparues, j’ai même encore recemment chanté les louanges de héron boiteux, mais voila, me concernant, la qualité du travail effectué par les mainteneurs d’ubuntu depuis quelques mois n’a fait qu’empirer.

Quickies

Premier post de l’année àla ma-vie-mon-œuvre.

Pour Noël, nourrissant l’illusion que je vais reussir à m’accrocher à un projet plus de 2 mois, j’ai topé le domaine beastiebox.org, qui, aussi surprenant que cela puisse paraitre, était disponible. Alors plutot que de se le faire squatter hein…

Toujours sur ce sujet, j’ai reçu juste avant mon départ un mail de monsieur Thorsten Glaser du projet MirBSD qui me demandait si je pouvais intégrer mksh dans BeastieBox. C’est chose faite, mais sa compilation est désactivée par défaut car ce shell, un clone léger du Korn Shell, pèse tout de même autour de 160K, soit deux fois plus que sh(1) dans sa version BBOX. J’ai par contre été assez bluffé par la qualité du code de mksh, ultra propre, ultra portable, je vous le recommande :)

La magie de l'ELF

En comparant le projet qui m’obsède jour et nuit et les outils similaires déjà existants (crunchgen(1), rescue), j’en suis venu à me poser des questions sur le cas d’un mode “full static”. Pour mémoire, BeastieBox “trouve” la fonction à appeler fonction de argv[0], et je pars du principe que chaque nom de fonction doit être construit dynamiquement. Ce tour de passe-passe est facilement geré par les fonctions dlopen(3) / dlsym(3) dans le cas d’un binaire compilé dynamiquement, mais quid d’un binaire beastiebox compilé à l’aide du swtich -static ? Point de ld.so_elf à la rescousse ici, la seule solution qui m’est apparue… c’est d’attaquer le binaire comme le fait précisemment ld.so_elf, en mmap‘ant le binaire et en l’adressant via les structures ELF.

Duplication de symboles, la bonne methode

On oublie le post ci dessous. En effet, après avoir posté le resultat de mes travaux sur tech-userlevel@, j’ai appris une astuce des plus magiques. Arnaud Lacombe me dit dans une réponse : _ Just looking quickly at the code, you can avoid the “#ifdef BBOX commant_() #else main() #endif” heavy logic and the commonfunc.sh' hack by using nm(1), objcopy(1) and symbol renaming as done by crunchgen(1). </foo>_ Je regarde donc comment s'y prend le gaillard de crunchgen(1)` pour eviter les conflits de symboles et je vois ceci :

Regexp du soir, espoir

Dans ma tentative de conquete du monde, je suis confronté à un problème auquel je n’avais pas immédiatement pensé. En effet, une foule d’outils partagent sans vergogne certains noms de fonction (usage(), help(), error()…) et de variables globales. Cet ennuyeux constat aboutit evidemment à des problèmes de linkage et faisait lamentablement foirer la compilation de mon BeastieBox cheri.

Une solution evidente était de renommer ces fonctions et leurs appels. mais…

Flemme quoi.