Debian GNU/Hurd
Utveckling av Distributionen
Paketering av Hurd-mjukvara
Hurd-specifika paket underhålls på https://salsa.debian.org/hurd-team/.
Anpassa Debianpaket
Om du vill hjälpa Debian GNU/Hurd-anpassningen, så bör du göra dig bekant med Debians paketeringssystem. När du har gjort detta genom att läsa dokumentationen och besöka utvecklarhörnan så bör du veta hur man extraherar ett Debian-källkodspaket och bygger ett Debianpaket. Här följer en snabbkurs för latmaskar:
Få tag på källkod och bygga paket
Att skaffa källkoden kan enkelt göras genom att köra apt source
paket
, vilket även extraherar källkoden.
Att packa upp ett Debian-källkodspaket kräver filen
paket_version.dsc
och filerna som listas i denna. Du skapar
Debians byggmapp med kommandot
dpkg-source -x paket_version.dsc
Bygge av ett paket sker i den nu skapade Debianbyggmappen
package-version
med hjälp av kommandot
dpkg-buildpacakge -B "-mMittnamn <MinEmail>"
.
Istället för -B
kan du använda
-b
om du även vill bygga de arkitekturoberoende delarna
av paketet (Men det är oftast meningslöst eftersom de redan finns
tillgängliga i arkivet, och att bygga dem kan kräva ytterligare beroenden).
Du kan lägga till -uc
för att undvika att
signera paketet med din OpenPGP-nyckel.
Att bygga paketet kan kräva ytterligare installerade paket. Enklaste sättet
att installera dessa är apt build-dep paket
vilket installerar
alla paket som krävs.
Att använda pbuilder kan vara bekvämt. Det kan byggas 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
och sedan kan man använda pdebuild -- --binary-arch
vilket kommer
att hantera hämtning av byggberoenden, osv., och placera resultatet i
/var/cache/pbuilder/result
Välj ett paket
Vilket paket skall det arbetas på? Varje paket som inte ännu är anpassat beöver det jobbas på. Detta ändrar sig hela tiden, så det uppskattas om man först koncentrerar sig på paket med många bakåtberoenden, vilket kan ses i paketberoendegrafen https://people.debian.org/~sthibault/hurd-i386/graph-radial.pdf som uppdateras dagligen, eller på listan över mest efterfrågade paket https://people.debian.org/~sthibault/hurd-i386/graph-total-top.txt (detta är långtidslistan, korttidslistan är https://people.debian.org/~sthibault/hurd-i386/graph-top.txt). Det är också en god idé att välja paket från listorna på föråldrade paket, https://people.debian.org/~sthibault/hurd-i386/out_of_date2.txt och https://people.debian.org/~sthibault/hurd-i386/out_of_date.txt, eftersom dessa brukade fungera, men nu inte gör det av några mindre orsaker. Du kan också bara välja ett av de saknade paketen slumpmässigt, eller kontrollera autobyggloggar på sändlistan debian-hurd-build-logs, eller använda wanna-build-listan från https://people.debian.org/~sthibault/hurd-i386/failed_packages.txt. Några byggproblem är lättare att rätta än de andra. Exampelvis, "undefined reference to foo", där foo är något i stil med pthread_create, dlopen, cos, ... (som uppenbarligen finns tillgängliga på hurd-i386), som bara visar att konfigurationssteget av paktet missade att inkludera -lpthread, -ldl, -lm, osv, även på Hurd. Notera dock att ALSA MIDI-funktioner inte finns tillgängliga.
Kolla även om arbete har gjorts 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, och i BTS (https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd), och https://wiki.debian.org/Debian_GNU/Hurd, samt aktuell status av paket på buildd.debian.org, t.ex. https://buildd.debian.org/util-linux.
Det är bättre att skicka anpassningsrättning uppströms, eftersom det är där den kommer att hamna tillslut ; bättre att diskutera med dom direkt istället för via den ansvarige för Debianpaketet. Vi kan enkelt applicera rättningen som en uppladdning till Debians unreleased-uppsättning medan vi väntar på att patchen släpps uppströms och landar i Debian.
Paket som inte anpassas
Några av dessa paket, eller delar av dem, kan bli anpassningsbara senare, men för närvarande är dem åtminstone ansedda att inte vara anpassningsbara. Normalt markeras dessa med NotForUs i buildd-databasen.
-
base/makedev
, eftersom Hurd kommer med sin egna version av detta skript. Debians källkodspaket innehåller endast en Linux-specifik version. -
base/modconf
ochbase/modutils
, eftersom moduler är ett koncept som är specifikt för Linux. -
base/netbase
, eftersom kvarvarande saker som finns där är högst specifikt för Linuxkärnan. Hurd använderinetutils
istället. -
base/pcmcia-cs
, eftersom detta paket är Linuxspecifikt). -
base/setserial
, eftersom det är specifikt för Linuxkärnan. Dock så kan vi möjligen använda det med hjälp av anpassningen av Linux char-drivrutiner till GNU Mach.
Allmänna anpassningsproblem
En lista på vanliga problem finns tillgänglig på uppströmswebbsidan. Följande vanliga problem är specifika för Debian.
Innan du försöker rätta något, komtrollera om kanske kfreebsd*-anpassningen redan har en fix, som kanske endast måste utökas till hurd-any.
-
foo : Depends: foo-data (= 1.2.3-1) but it is not going to be installed
Det korta svaret är: paketet
foo
misslyckades att bygga på hurd-any, och det måste fixas, kolla på byggfelet på dess statussida på buildd.debian.org.Detta händer vanligtvis när paketet
foo
för närvarande misslyckas att bygga, men byggde utan problem tidigare. Användapt-cache policy foo foo-data
för att se att exempelvis version1.2.3-1
avfoo
finns tillgänglig, och en nyarefoo-data
version2.0-1
finns tillgänglig. Detta är på grund av att på debian-ports, delas arkitekturoberoende paket mellan alla arkitekturer, och därför när en ny version av källkodspaketfoo
(som bygger de binära paketenfoo
ochfoo-data
) laddas upp kommer det nyare arch:all paketetfoo-data
installeras, även om den nyare hurd-any binära paketetfoo
inte kan byggas, vilket leder till inkompatibla versioner. Att rätta detta kräver att debian-ports-arkivet använder dak istället för mini-dak, vilket fortfarande är ett pågående arbete. -
några sympboler eller mönster försvann i symbols-filen
Vissa paket underhåller en lista på symboler som väntar finnas i bibliotek. Denna lista används vanligen på ett linux-system och kan därför innehålla symboler som kanske inte är så vettiga på ett icke-Linux-system (t.ex. på grund av funktioner specifika för Linux). Man kan dock introducera villkor i
.symbols
-filen, exempelvis:(arch=linux-any)linuxish_function@Base 1.23
-
Felaktiga libc6-beroenden
Några paket använder ett felaktigt beroende på
libc6-dev
. Detta är felaktigt eftersomlibc6
är specifikt för vissa arkitekturer av GNU/Linux. Motsvarande paket för GNU ärlibc0.3-dev
men andra OS kommer ha andra beroenden. Du kan lokalisera problemet idebian/control
-filen i källkodsträdet. En typisk lösning inkluderar att detektera OSet med hjälp avdpkg-architecture
samt hårdkoda so-namnet, eller (vilket är bättre), använda en logisk OR, exempelvis:libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev
.libc-dev
är ett virtuellt paket som fungerar för alla so-namn, men du kan endast använda det som det sista alternativet. -
odefinierad referens till snd_*, SND_* odefinierad
Några paket använder ALSA även på icke-Linux-arkitekturer. Paketet oss-libalsa ger emulering via OSS, men den är begränsad till 1.0.5, och några funktioner ges inte, så som sequencer-hantering.
Om paketet tillåter det, skall alsa-stöd avaktiveras på arkitekturerna
!linux-any
(exempelvis genom enconfigure
-inställning), och en[linux-any]
-qualifier tillagd till alsasBuild-Depends
, och motsatsen läggs tillBuild-Conflicts
, så somBuild-Conflicts: libasound2-dev [!linux-any]
. -
dh_install: Cannot find (any matches for) "foo" (tried in ., debian/tmp)
Detta händer vanligtvis när uppström inte installerade något eftersom det inte kände igen operativsystemet. Ibland är det bara dumt (t.ex. när den inte vet att det är precis likadant att bygga ett delat bibliotek på GNU/Hurd som på GNU/Linux) och det behöver rättas. Ibland är det faktiskt korrekt (t.ex. att inte installera systemd-servicefiler). I detta fall kan man använda sig av dh-exec: lägg till en build-depend på dh-exec, kör chmod +x på .install-filen, och lägg till exempelvis [linux-any] eller [!hurd-any] till de problematiska raderna.
Hacka med Debian-installeraren
För att bygga en ISO-avbildning är det enklaste att börja med en existerande från sidan för Hurd CD-avbildningar. Du kan sedan montera den och kopiera den:
mount debian-sid-hurd-i386-NETINST-1.iso /mnt cp -a /mnt /tmp/myimage umount /mnt chmod -R +w /tmp/myimage |
Du kan montera den initiala ramdisken och exempelvis ersätta en översättare 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 du bygga om ison med grub-mkrescue:
rm -fr /tmp/myimage/boot/grub/i386-pc grub-mkrescue -o /tmp/myimage.iso /tmp/myimage |