Debian GNU/Hurd
De ontwikkeling van de distributie
Hurd-software verpakken
De Hurd-specifieke pakketten worden onderhouden op https://salsa.debian.org/hurd-team/.
Debian pakketten geschikt maken
Als u de overzetting van Debian naar GNU/Hurd wilt helpen, moet u zichzelf vertrouwd maken met het Debian-verpakkingssysteem. Eens u dit gedaan heeft door de beschikbare documentatie te lezen en de Hoek voor Ontwikkelaars te bezoeken, zou u moeten weten hoe u Debian broncodepakketten uitpakt en een Debian pakket bouwt. Hier volgt een spoedcursus voor de zeer luie mensen:
Broncode verkrijgen en pakketten bouwen
De broncode verkrijgen kan door eenvoudig apt source package
uit
te voeren, dat ook de broncode zal uitpakken.
Voor het uitpakken van een broncodepakket van Debian is het bestand
package_version.dsc
vereist en de erin vermelde bestanden.
U bouwt de compilatiemap van Debian met het commando
dpkg-source -x package_version.dsc
Het bouwen van een pakket gebeurt in de nu bestaande compilatiemap van de Debian
pakket-versie
met het commando
dpkg-buildpackage -B "-mMijnNaam <MijnEmail>"
.
In plaats van -B
kunt u
-b
gebruiken, als u ook de architectuur-onafhankelijke delen van
het pakket wilt bouwen (maar dat is meestal nutteloos omdat deze al beschikbaar
zijn in het archief, en het bouwen ervan extra afhankelijkheden kan vereisen).
U kunt -uc
toevoegen om te vermijden dat het pakket ondertekend
wordt met uw OpenPGP-sleutel.
Voor het bouwen zijn mogelijk extra geïnstalleerde pakketten nodig. De
eenvoudigste manier is om apt build-dep package
uit te voeren, dat
alle vereiste pakketten zal installeren.
Het gebruik van pbuilder kan handig zijn. Het kan gebouwd worden met
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
en dan kan men pdebuild -- --binary-arch
gebruiken dat het
downloaden van de bouwvereisten zal afhandelen, enz. en het resultaat in
/var/cache/pbuilder/result
zal plaatsen.
Er een uitkiezen
Aan welk pakket gewerkt moet worden? Wel, elk pakket dat nog niet overgezet werd, maar wel overgezet moet worden. Dit verandert constant, dus is het beter om u eerst te concentreren op pakketten die door veel andere pakketten vereist worden, hetgeen te zien is in de grafiek met pakketvereisten https://people.debian.org/~sthibault/hurd-i386/graph-radial.pdf, die elke dag bijgewerkt wordt, of op de lijst met de meest gevraagde pakketten https://people.debian.org/~sthibault/hurd-i386/graph-total-top.txt (dit is de lijst met veelgevraagde pakketten op de lange termijn; de lijst met veelgevraagde pakketten op de korte termijn is https://people.debian.org/~sthibault/hurd-i386/graph-top.txt). Het is meestal ook een goed idee om te kiezen uit de lijsten met verouderde pakketten https://people.debian.org/~sthibault/hurd-i386/out_of_date2.txt en https://people.debian.org/~sthibault/hurd-i386/out_of_date.txt, omdat die vroeger werkten en nu waarschijnlijk om slechts een paar redenen defect zijn. U kunt ook gewoon willekeurig één van de ontbrekende pakketten kiezen, of letten op de autobuild-logs op de mailinglijst van het bouwlogboek van debian-hurd, of gebruik maken van de wanna-build-lijst van https://people.debian.org/~sthibault/hurd-i386/failed_packages.txt. Sommige bouwproblemen zijn gemakkelijker op te lossen dan andere. Een typisch probleem is "undefined reference to foo", waarbij foo zoiets is als pthread_create, dlopen, cos, ... (die uiteraard beschikbaar zijn op hurd-i386), wat alleen laat zien dat men in de configuratiestap van het pakket vergeten is om ook op de Hurd -lpthread, -ldl, -lm, enz. op te nemen. Houd er echter rekening mee dat ALSA MIDI-functies niet beschikbaar zijn.
Controleer ook of er al werk gedaan werd op https://alioth.debian.org/tracker/?atid=410472&group_id=30628&func=browse, https://alioth.debian.org/tracker/?atid=411594&group_id=30628&func=browse, en op het BTS (https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd), en op https://wiki.debian.org/Debian_GNU/Hurd, en de levensstatus van pakketten op buildd.debian.org, bijv. https://buildd.debian.org/util-linux.
Het is beter om de oplossing voor de overzetting naar de bovenstroomse ontwikkelaars zelf te sturen, want daar is het dat die uiteindelijk zal moeten terechtkomen; u kunt beter rechtstreeks met hen communiceren dan via de Debian beheerder van het Debian pakket. We kunnen de oplossing makkelijk toepassen als een upload naar de suite unreleased van Debian in afwachting tot de patch uitgebracht wordt door de bovenstroomse ontwikkelaars en in Debian belandt.
Pakketten die niet overgezet zullen worden
Sommige van deze pakketten, of delen ervan, kunnen later overzetbaar worden, maar op zijn minst op dit moment worden deze als niet-overzetbaar beschouwd. Ze worden normaal gemarkeerd als NotForUs in de database van buildd.
-
base/makedev
, omdat de Hurd met zijn eigen versie van dit script komt. Het Debian bronpakket bevat alleen een Linux-specifieke versie. -
base/modconf
enbase/modutils
, omdat modules een concept zijn dat specifiek is voor Linux. -
base/netbase
, omdat wat daar nog rest, zeer specifiek is voor de Linux-kernel. In plaats daarvan gebruikt de Hurdinetutils
. -
base/pcmcia-cs
, omdat dit pakket Linux-specifiek is. -
base/setserial
, omdat dit specifiek is voor de Linux-kernel. Maar met de overzetting van Linux char-stuurprogramma's naar GNU Mach kunnen we dit misschien gebruiken.
Algemene overzettingsproblemen
Een lijst met veelvoorkomende problemen is te vinden op de bovenstroomse website. De volgende veelvoorkomende problemen zijn specifiek voor Debian.
Voordat u iets probeert op te lossen, moet u nagaan of de overzetting naar kfreebsd* niet al een oplossing heeft die gewoon een uitbreiding naar hurd-any nodig heeft.
-
foo : Depends: foo-data (= 1.2.3-1) but it is not going to be installed
(foo : Vereist: foo-data (= 1.2.3-1) maar dat zal niet geïnstalleerd worden)Het korte antwoord is: pakket
foo
kon niet gebouwd worden op hurd-any, en dat moet opgelost worden; bekijk de bouwfout op zijn statuspagina van buildd.debian.org.Dit gebeurt meestal wanneer pakket
foo
momenteel niet gebouwd kan worden, terwijl dit voorheen wel goed liep. Gebruikapt-cache policy foo foo-data
om vast te stellen dat bijvoorbeeld versie1.2.3-1
vanfoo
beschikbaar is en er een recentere versie2.0-1
vanfoo-data
beschikbaar is. Dit is omdat op debian-ports architectuur-onafhankelijke (arch:all) pakketten gedeeld worden met alle architecturen, waardoor dus, wanneer een recentere versie van het broncodepakketfoo
(waaruit de binaire pakkettenfoo
enfoo-data
gebouwd worden) geüpload wordt, het recentere arch:all pakketfoo-data
geïnstalleerd wordt, zelfs wanneer het recentere hurd-any binaire pakketfoo
niet gebouwd kan worden, hetgeen dus leidt tot incompatibele versies. Om dat op te lossen moet het debian-ports archief dak gebruiken in plaats van mini-dak, en daaraan wordt nog steeds gewerkt. -
sommige symbolen of patronen zijn verdwenen uit het symbolenbestand
Sommige pakketten houden een lijst bij van de symbolen die naar verwachting in bibliotheken zullen verschijnen. Deze lijst wordt echter meestal verkregen op een Linux-systeem en bevat dus symbolen die mogelijk niet logisch zijn op niet-Linux-systemen (bijvoorbeeld door functionaliteit die alleen in linux gebruikt wordt). Men kan echter wel conditionele constructies invoeren in het bestand
.symbols
, bijvoorbeeld:(arch=linux-any)linuxspecifieke_functie@Base 1.23
-
Defecte libc6-vereiste
Sommige pakketten gebruiken een foutieve afhankelijkheid van
libc6-dev
. Dit is onjuist omdatlibc6
specifiek is voor sommige architecturen van GNU/Linux. Het corresponderende pakket voor GNU islibc0.3-dev
, maar andere besturingssystemen zullen er een ander hebben. U kunt het probleem vinden in het bestanddebian/control
van de broncodeboom. Typische oplossingen zijn onder meer het detecteren van het besturingssysteem met behulp vandpkg-architecture
en de soname in de code verankeren, of beter, een logische OR gebruiken, bijv.:libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev
. De vermeldinglibc-dev
betreft een virtueel pakket dat voor elke soname werkt, maar u moet deze optie enkel als laatste plaatsen. -
ongedefinieerde verwijzing naar snd_*, SND_* niet gedeclareerd
Sommige pakketten gebruiken ALSA zelfs op niet-Linux architecturen. Het pakket oss-libsalsa biedt enige emulatie over OSS, maar het is beperkt tot 1.0.5, en sommige functies zijn niet beschikbaar, zoals alle sequencer-bewerkingen.
Als het pakket dit toelaat, zou alsa-ondersteuning moeten worden uitgeschakeld op de architecturen
!linux-any
(bijvoorbeeld via een optie voorconfigure
), en een kwalificatie[linux-any]
zou toegevoegd moeten worden aan deBuild-Depends
van alsa, en het omgekeerde zou moeten toegevoegd worden aanBuild-Conflicts
, zoalsBuild-Conflicts: libasound2-dev [!linux-any]
. -
dh_install: Kan geen (overeenkomsten voor) "foo" vinden (geprobeerd in ., debian/tmp)
Dit gebeurt meestal wanneer de bovenstroomse code iets niet installeerde omdat die het besturingssysteem niet herkende. Soms is de code gewoon dom (ze weet bijvoorbeeld niet dat het bouwen van een gedeelde bibliotheek op GNU/Hurd precies hetzelfde is als op GNU/Linux) en dat moet worden gerepareerd. Soms is het echt logisch (bijv. Systemd-servicebestanden niet installeren). In dat geval kan men dh-exec gebruiken: een bouwvereiste instellen op dh-exec, het commando chmod +x uitvoeren voor het bestand .install en aan het begin van de problematische lijnen bijv. [linux-any] of [!hurd-any] invoegen.
Ontwikkelen van het Debian-installatieprogramma
De eenvoudigste manier om een ISO-image te bouwen is te beginnen met een bestaand image van de pagina met Hurd cd-images. U kunt dit dan aankoppelen en kopiëren:
mount debian-sid-hurd-i386-NETINST-1.iso /mnt cp -a /mnt /tmp/myimage umount /mnt chmod -R +w /tmp/myimage |
U kunt de initiële ram-schijf aankoppelen, en bijv. een translator (vertaler) vervangen door uw eigen versie:
gunzip /tmp/myimage/initrd.gz mount /tmp/myimage/initrd /mnt cp ~/hurd/rumpdisk/rumpdisk /mnt/hurd/ umount /mnt gzip /tmp/myimage/initrd |
Nu kunt u het ISO-image opnieuw bouwen met grub-mkrescue:
rm -fr /tmp/myimage/boot/grub/i386-pc grub-mkrescue -o /tmp/myimage.iso /tmp/myimage |