Debian GNU/Hurd
Développement de la distribution
Empaqueter des logiciels pour Hurd
Les paquets spécifiques à Hurd sont entretenus dans https://salsa.debian.org/hurd-team/.
Porter des paquets Debian
Si vous souhaitez aider le portage Debian GNU/Hurd, vous devriez vous familiariser avec le système d'empaquetage de Debian. Une fois que vous l'aurez fait en lisant la documentation disponible et en visitant le Coin du développeur, vous devriez savoir comment extraire les paquets source Debian et empaqueter un paquet Debian. Voici un cours intensif pour les personnes très paresseuses :
Obtenir le source et empaqueter des paquets
Le code source peut être obtenu en exécutant simplement
apt source paquet
, ce qui extrait aussi les sources.
Extraire un paquet source Debian nécessite le fichier
paquet_version.dsc
et les fichiers qui y sont listés.
Vous créez le répertoire d'empaquetage Debian avec la commande
dpkg-source -x paquet_version.dsc
.
La construction du paquet se fait dans le nouveau répertoire
d'empaquetage Debian paquet-version
avec
la commande dpkg-buildpackage -B "-mMonNom <MonAdresseÉlectronique>"
.
Vous pouvez utiliser
-b
au lieu de -B
si vous voulez aussi compiler
les parties indépendantes de l'architecture du paquet (mais c'est généralement
inutile dans la mesure où elles sont disponibles dans l'archive, et leur
construction peut nécessiter des dépendances supplémentaires).
Vous pouvez ajouter -uc
pour éviter de signer le paquet avec votre
clef OpenPGP.
La construction pourrait nécessiter d’installer des paquets supplémentaires.
Le plus simple est d’exécuter apt build-dep paquet
qui installera tous les paquets nécessaires.
Utiliser pbuilder peut être pratique. Il peut être construit avec
sudo pbuilder create --mirror http://deb.debian.org/debian-ports/ --debootstrapopts --keyring=/usr/share/keyrings/debian-ports-archive-keyring.gpg --debootstrapopts --extra-suites=unreleased --extrapackages debian-ports-archive-keyring
,
et pdebuild -- --binary-arch
peut être utilisé et gérera le
téléchargement des dépendances de construction, etc., et mettra le résultat dans
/var/cache/pbuilder/result
.
Choisissez un paquet
Sur quels paquets faut-il travailler ? À vrai dire, tous les paquets qui ne sont pas encore portés, mais qui nécessitent de l’être. Cela change constamment, alors il est conseillé de se focaliser d'abord sur les paquets ayant beaucoup de dépendances inverses, qui sont visibles sur le graphique de dépendance des paquets https://people.debian.org/~sthibault/hurd-i386/graph-radial.pdf mis à jour quotidiennement ou sur la liste des paquets les plus demandés https://people.debian.org/~sthibault/hurd-i386/graph-total-top.txt (c'est la liste des demandes à long terme, la liste des demandes à court terme est https://people.debian.org/~sthibault/hurd-i386/graph-top.txt). C'est généralement une bonne idée aussi d'en prendre parmi la liste des paquets périmés https://people.debian.org/~sthibault/hurd-i386/out_of_date2.txt et https://people.debian.org/~sthibault/hurd-i386/out_of_date.txt, parce qu’ils ont fonctionné et qu'ils ne sont probablement cassés qu'à cause d'un petit nombre de raisons. Vous pouvez aussi en prendre un au hasard parmi les paquets manquants, surveiller les journaux des processus d'empaquetage automatique sur la liste de diffusion debian-hurd-build-logs ou utiliser la liste de wanna-build en https://people.debian.org/~sthibault/hurd-i386/failed_packages.txt. Quelques problèmes de construction sont plus faciles à résoudre que d’autres, classiquement, « undefined reference to foo », ou foo consiste en quelque chose comme pthread_create, dlopen, cos…, (qui sont bien évidemment présents dans hurd-i386), qui montre que l’étape de configuration du paquet a aussi oublié d’inclure -lpthread, -ldl, -lm, etc., sur le Hurd. Notez que les fonctions ALSA MIDI ne sont pas disponibles.
Vérifiez également si le travail a déjà été fait sur https://alioth.debian.org/tracker/?atid=410472&group_id=30628&func=browse, https://alioth.debian.org/tracker/?atid=411594&group_id=30628&func=browse, sur le BTS (https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd), https://wiki.debian.org/Debian_GNU/Hurd et l'état en temps réel des paquets sur buildd.debian.org, par exemple https://buildd.debian.org/util-linux.
Il est préférable de transmettre le correctif de portage à l’amont lui-même, puisque c’est là ou il finira finalement. Il vaut mieux échanger directement avec lui plutôt qu’à travers le responsable de Debian du paquet Debian. Nous pouvons aisément appliquer le correctif sous forme de téléversement dans la suite unreleased de Debian et attendre que le correctif soit publié par l’amont et atterrisse dans Debian.
Paquets qui ne seront pas portés
Quelques paquets parmi ceux qui suivent, ou des parties de ces paquets,
seront peut-être portables plus tard, mais ils sont actuellement
au moins considérés comme non portables.
Ils sont normalement marqués NotForUs
dans la base de données de buildd.
-
base/makedev
, parce que le Hurd apporte ses propres versions de ce script. Le paquet source Debian ne contient qu'une version spécifique à Linux. -
base/modconf
etbase/modutils
, parce que les modules sont un concept spécifique à Linux. -
base/netbase
, parce que ce qui s'y trouve est hautement spécifique au noyau Linux. Le Hurd utiliseinetutils
à la place. -
base/pcmcia-cs
, parce que ce paquet est spécifique à Linux. -
base/setserial
, parce que c'est spécifique au noyau Linux. Cependant, avec le portage des pilotes de caractères Linux sur GNU Mach, nous pourrons peut-être les utiliser.
Problèmes généraux de portage
Une liste des problèmes courants est disponible sur le site amont. Les problèmes courants suivants sont spécifiques à Debian.
Avant d'essayer de corriger quoi que ce soit, vérifiez si le portage kfreebsd* n'a pas déjà préparé des correctifs, qui demandent juste à être adaptés pour convenir aussi à hurd-any.
-
foo : Depends: foo-data (= 1.2.3-1) but it is not going to be installed
La réponse courte est : la construction du paquet
foo
a échoué sur hurd-any, et cela doit être corrigé, recherchez l'échec de construction sur sa page d'état dans buildd.debian.org.Cela arrive habituellement quand la construction du paquet
foo
échoue actuellement, mais qu'il se construisait bien auparavant. Utilisezapt-cache policy foo foo-data
pour voir si par exemple la version1.2.3-1
defoo
est disponible et si une version plus récente defoo-data
2.0-1
est disponible. C'est parce que dans les debian-ports, les paquets indépendants de l'architecture (arch:all) sont partagés par toutes les architectures et donc, quand une version plus récente du paquet sourcefoo
(qui construit mes paquets binairesfoo
etfoo-data
) est introduite, le nouveau paquetfoo-data
arch:all est installé, même si le nouveau paquet binairefoo
pour hurd-any ne peut pas être construit, menant ainsi à des versions incompatibles. Pour corriger cela, il est nécessaire que la construction de l'archive debian-ports utilise dak à la place de mini-dak, ce qui est un travail qui n'est pas encore achevé. -
some symbols or patterns disappeared in the symbols file
Certains paquets entretiennent une liste des symboles qui sont censés apparaître dans les bibliothèques. Cette liste est cependant normalement obtenue sur un système Linux et donc inclut des symboles qui peuvent ne pas avoir de sens sur les systèmes autres que Linux (par exemple, du fait d'une fonctionnalité propre à Linux). Il est néanmoins possible d'introduire des conditions dans le fichier
.symbols
, par exemple :(arch=linux-any)linuxish_function@Base 1.23
-
Broken libc6 dependency
Certains paquets utilisent une dépendance erronée à
libc6-dev
. C'est incorrect parce quelibc6
est spécifique à certaines architectures GNU/Linux. Le paquet GNU correspondant estlibc0.3-dev
, mais les autres systèmes d'exploitation en utilisent de différents. Le problème peut être localisé avec le fichierdebian/control
de l'arborescence source. Parmi les solutions typiques, il est possible de détecter le système d'exploitation avecdpkg-architecture
et de mettre « en dur » (« hardcode ») le soname, ou mieux, utiliser un OU logique. Par exemple :libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev
.Libc-dev
est un paquet virtuel qui fonctionne pour n'importe quel soname, mais il ne faut le placer qu'en dernière option. -
undefined reference to snd_*, SND_* undeclared
Certains paquets utilisent ALSA même sur les architectures non Linux. Le paquet oss-libsalsa fournit quelques émulations à l'aide d'OSS, mais il est limité à la version 1.0.5 d'ALSA, et certaines fonctionnalités ne sont pas fournies, comme par exemple toutes les opérations de séquenceur.
Si le paquet le permet, la prise en charge d'ALSA devrait être désactivée pour les architectures
!linux-any
(par exemple à l'aide d'une option deconfigure
), un qualificatif[linux-any]
ajouté auBuild-Depends
d'ALSA, et l'inverse ajouté àBuild-Conflicts
, comme par exempleBuild-Conflicts: libasound2-dev [!linux-any]
. -
dh_install: Cannot find (any matches for) "foo" (tried in ., debian/tmp)
Cela se produit habituellement lorsque l’amont n’installe pas quelque chose parce qu’il ne reconnaît pas le système d’exploitation. Quelquefois c’est tout bête (par exemple, il ne sait pas que construire une bibliothèque sur GNU/Hurd se fait exactement comme sur GNU/Linux) et cela nécessite d’être corrigé. Quelquefois cela est réellement sensé (par exemple, installation des fichiers de service de systemd). Dans ce cas, il est possible d’utiliser dh-exec : la construction dépend de dh-exec, chmod +x du fichier .install, et de préfixer les lignes problématiques avec, par exemple, [linux-any] ou [!hurd-any].
Modifier l'installateur Debian
Pour construire une image ISO, le plus simple est de partir d'une image existante issue de la page des images CD de Hurd. Vous pouvez alors la monter et la copier :
mount debian-sid-hurd-i386-NETINST-1.iso /mnt cp -a /mnt /tmp/mon_image umount /mnt chmod -R +w /tmp/mon_image |
Vous pouvez monter le disque virtuel de démarrage et par exemple remplacer un traducteur par votre propre version :
gunzip /tmp/mon_image/initrd.gz mount /tmp/mon_image/initrd /mnt cp ~/hurd/rumpdisk/rumpdisk /mnt/hurd/ umount /mnt gzip /tmp/mon_image/initrd |
Vous pouvez reconstruire l'ISO avec grub-mkrescue :
rm -fr /tmp/mon_image/boot/grub/i386-pc grub-mkrescue -o /tmp/mon_image.iso /tmp/mon_image |