Advarsel! Denne oversættelse er for gammel, benyt venligst originalen.
Debian GNU/Hurd
Udvikling af distributionen
Tilpasning af Debian-pakker
Hvis du vil hjælpe til med tilpasningen af Debian GNU/Hurd, skal du gøre dig bekendt med Debians pakningssystem. Når det er gjort, ved at læse tilgængelig dokumentation og besøge udviklerhjørnet skulle du vide hvordan man udpakker Debians-kildekodepakker og opbygger en Debian-pakke. Her er et lynkursus til glæde for de meget dovne:
Anskaffelse af kildekode og opbygning af pakker
Anskaffelse af kildekode kan gøres ved blot at køre apt source
pakkenavn
, hvilket også vil udpakke kildekode.
Udpakning af Debian-kildekodepakker kræver filen
package_version.dsc
og filerne anført i den. Man oprette Debians
opbygningsmappe med kommandoen dpkg-source -x package_version.dsc
Opbygning af en pakke foretages i det nu oprettede Debian-opbygningsmappe
package-version
med kommandoen
dpkg-buildpackage -B "-mMyName <MinEmail>"
I stedet for -B
kan man bruge -b
, hvis man også ønsker
at opbygge de arkitekturuafhængige dele af pakken. Man kan tilføje
-uc
for at undgå signering af pakken med ens pgp-nøgle.
Opbygning kan kræve at yderligere pakker installeres. Den simpleste måde er
at køre apt build-dep pakkenavn
, som installerer alle krævede
pakker.
Anvendelse af pbuilder kan være bekvemt. Den kan opbygges med
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
og dernæst kan man benytte pdebuild -- --binary-arch
, som håndterer
download af opbygningsafhængigheder, osv., og placerer resultatet i
/var/cache/pbuilder/result
.
Vælg en pakke
Hvilken pakke skal der arbejdes på? Enhver pakke som endnu ikke er tilpasset, men skal tilpasses. Dette ændrer sig hele tiden, hvorfor vi foretrækker at man først koncenterer sig om pakker, med mange baglæns afhængigheder, der kan ses på pakkeafhængighedsgraften https://people.debian.org/~sthibault/graph-radial.pdf, der opdateres dagligt, eller på listen over de mest efterspurgte https://people.debian.org/~sthibault/graph-total-top.txt (det er langtidslisten, korttidslisten er https://people.debian.org/~sthibault/graph-top.txt). Normalt er det også en god ide, at vælge fra de forældede lister https://people.debian.org/~sthibault/out_of_date2.txt og https://people.debian.org/~sthibault/out_of_date.txt, da disse tidligere har fungeret og der nok kun er et par årsager til at de ikke fungerer. Du kan også vælge en tilfældig af de manglende pakker ellere være på udkig efter autobuilding-logfiler på postlisten debian-hurd-build-logs eller anvende wanna-build-listen fra https://people.debian.org/~sthibault/failed_packages.txt .
Undersøg også om der allerede har været arbejdet på https://alioth.debian.org/tracker/?atid=410472&group_id=30628&func=browse, https://alioth.debian.org/tracker/?atid=411594&group_id=30628&func=browse og BTS (https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd) og https://wiki.debian.org/Debian_GNU/Hurd, samt den aktuelle pakketilstand på buildd.debian.org, fx https://buildd.debian.org/util-linux.
Pakker der ikke vil blive tilpasset
Nogle af disse pakker, eller dele af dem, kan måske tilpasses senere, men pt. anses de som minimum for at være umulige at tilpasse. De er normalt markeret med NotForUs ("ikke til os") i buildd-databasen.
base/makedev
, fordi Hurd har sin egen version af dette scipt. Debians kildekodepakke indeholder kun en Linux-specifik version.base/modconf
ogbase/modutils
, fordi moduler er et Linux-specifikt koncept.base/netbase
, fordi de resterende ting er meget specifikt rettet med Linux-kernen. Hurd bruger i stedetinetutils
.base/pcmcia-cs
, fordi pakken er Linux-specifik.base/setserial
, fordi den er specifikt rettet mod Linux-kernen. Dog vil vi måske kunne bruge den da Linux' char-drivere er tilpasset til GNU Mach.
Generelle tilpasningsproblemstillinger
En liste over almindelige problemerstillinger er tilgængelig på opstrøms websted. Det følgende er specifikt for Debian.
Før man forsøger at rette noget, så kontrollér om kfreebsd*-tilpasningen måske allerede har en rettelse, som blot også skal udvides til at omfatte hurd-i386.
-
Defekt libc6-afhængighed
Nogle pakker anvender en fejlagtig afhængighed af
libc6-dev
. Det er forkert, dalibc6
er specifik for nogle GNU/Linux-arkitekturer. Den tilsvarende GNU-pakke erlibc0.3-dev
, men andre styresystemer vil have andre pakker. Problemet findes i filendebian/control
i kildekodetræet. Typiske løsninger er at detektere styresystemet ved hjælp afdpkg-architecture
og hårdkode soname, eller bedre, at anvende logisk OR. Eksempelvis:libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev
.libc-dev
er en virtuel pakke, der fungerer for ethvert soname, men det skal kun anvendes som en sidste udvej. -
undefined reference to snd_*, SND_* undeclared
Nogle pakker anvender ALSA, selv på ikke-Linux-arkitekturer. Pakken oss-libsalsa leverer nogen emulering gennem OSS, men det er begrænset til 1.0.5, og noget af funktionaliteten stilles ikke til rådighed, så som alle sequencer-handlinger.
Hvis pakken tillader det, bør alsa-understøttelse slås fra på
!linux-any
-arkitekturer (eksempelvis gennem enconfigure
-valgmulighed, og en[linux-any]
-qualifier føjet til alsasBuild-Depends
, desuden skal det modsatte føjes tilBuild-Conflicts
, så somBuild-Conflicts: libasound2-dev [!linux-any]
. -
dh_install: Cannot find (any matches for) "foo" (tried in ., debian/tmp)
Det sker typisk når opstrøm ikke installerede et eller andet, fordi styresystemet ikke blev genkendt. Nogle gange er det bare dumt (fx ved det ikke at opbygning af et delt bibliotek på GNU/Hurd er præcis det samme som under GNU/Linux), og at det skal rettes. Nogle gange giver det faktisk mening (fx ingen installering af systemd-servicefiler). I det tilfælde kan man benytte: build-afhængighed af dh-exec, chmod +x filen .install, og indsæt fx foran de problematiske linjer [linux-any] eller [!hurd-any].
Hacking med Debian installer
For at opbygge et ISO-filaftryk, er det lettest at begynde med et eksisterende fra Hurd CD-filaftryk-siden. Dernæst kan du mount'e og kopiere det:
mount debian-sid-hurd-i386-NETINST-1.iso /mnt cp -a /mnt /tmp/myimage umount /mnt chmod -R +w /tmp/myimage
Du kan mount'e den indledende RAM-disk, og fx erstatte en translator med din egen version:
gunzip /tmp/myimage/initrd.gz mount /tmp/myimage/initrd /mnt cp ~/hurd/rumpdisk/rumpdisk /mnt/hurd/ umount /mnt gzip /tmp/myimage/initrd
Nu kan den genopbygge ISO'en med grub-mkrescue:
rm -fr /tmp/myimage/boot/grub/i386-pc grub-mkrescue -o /tmp/myimage.iso /tmp/myimage