Debian GNU/Hurd
Sviluppo della distribuzione
Pacchetti per Hurd
I pacchetti specifici per Hurd sono manutenuti su https://salsa.debian.org/hurd-team/.
Port dei pacchetti Debian
Chi desidera contribuire al port Debian GNU/Hurd deve aver confidenza con il sistema di pacchettizzazione Debian. Una volta acquisite queste conoscenze leggendo la documentazione disponibile e visitando l'angolo degli sviluppatori si dovrebbe essere in grado di estrarre i pacchetti sorgente Debian e di creare un pacchetto binario Debian. Per le persone più pigre è disponibile un corso rapido:
Recuperare i sorgenti e creare i pacchetti
Per recuperare i sorgenti di un pacchetto usare apt
source pacchetto; questo comando esegue anche l'estrazione
dei sorgenti dal file di archivio.
L'estrazione di un pacchetto sorgente Debian richiede il file
pacchetto_versione.dsc e dei file che sono elencati al suo
interno. La directory di compilazione Debian viene creata con il comando
dpkg-source -x pacchetto_versione.dsc.
Il pacchetto viene creato nella directory di compilazione Debian
pacchetto-versione con il comando
dpkg-buildpackage -B "-mMyName <MyEmail>". È possibile
usare -b al posto di -B per creare un pacchetto
con le sole parti indipendenti dall'architettura (solitamene è inutile
poiché sono già presenti nell'archivio e inoltre la loro compilazione
richiede anche ulteriori dipendenze). Inoltre è possibile
aggiungere -uc per evitare di firmare il pacchetto con la
propria chiave OpenPGP.
La compilazione potrebbe richiedere l'istallazione di altri pacchetti.
Il modo più semplice per farla funzionare è installare tutti i pacchetti
necessari usando il comando apt build-dep pacchetto.
Può essere comodo usare pbuilder. Prima deve essere compilato con
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 e poi usato con
pdebuild -- --binary-arch, gestisce il recupero delle
dipendenze per la compilazione, ecc. e salva il risultato in
/var/cache/pbuilder/result.
Scegliere un pacchetto
Quale pacchetto richiede del lavoro? Qualsiasi pacchetto che ancora
non è stato portato e che deve essere portato. Questi pacchetti cambiano
in continuazione quindi il lavoro è principalmente concentrato sui pacchetti
con molte dipendenze inverse, questi pacchetti possono essere individuati
grazie al grafico (aggiornato quotidianamente) delle dipendenze tra pacchetti
https://people.debian.org/~sthibault/hurd-i386/graph-radial.pdf oppure usando
l'elenco dei pacchetti più ricercati
https://people.debian.org/~sthibault/hurd-i386/graph-total-top.txt (ordinato a
partire dai pacchetti ricercati da più tempo, lo stesso elenco in ordine
inverso https://people.debian.org/~sthibault/hurd-i386/graph-top.txt).
Solitamente è una buona idea prendere un pacchetto tra quelli marcati
out-of-date
(NdT: non aggiornati) in
https://people.debian.org/~sthibault/hurd-i386/out_of_date2.txt o in
https://people.debian.org/~sthibault/hurd-i386/out_of_date.txt perché tali
pacchetti erano funzionanti ma adesso non funzionano più, probabilmente a
causa di piccoli problemi. È anche possibile prendere un pacchetto a caso
oppure sceglierne uno dopo aver controllato attentamente i log del processo
autobuilder sulla lista di messaggi debian-hurd-build-logs oppure da
https://people.debian.org/~sthibault/hurd-i386/failed_packages.txt.
Inoltre, controllare su https://alioth.debian.org/tracker/?atid=410472&group_id=30628&func=browse, https://alioth.debian.org/tracker/?atid=411594&group_id=30628&func=browse e BTS che il lavoro non sia già stato fatto (https://bugs.debian.org/cgi-bin/pkgreport.cgi?users=debian-hurd@lists.debian.org;tag=hurd), https://wiki.debian.org/Debian_GNU/Hurd e lo stato attuale dei pacchetti su buildd.debian.org, per esempio https://buildd.debian.org/util-linux.
È più opportuno spingere affinché la correzione venga fatta direttamente in upstream, dato che è lì che dovrà essere integrata alla fine. È meglio discutere direttamente con loro piuttosto che passare tramite il manutentore del pacchetto Debian. Possiamo facilmente applicare la correzione nella suite Debian unreleased e attendere che la patch venga rilasciata da upstream e arrivi in Debian.
Pacchetti che non devono essere portati
Alcuni dei seguenti pacchetti, o delle loro parti, potrebbero essere portabili in futuro ma almeno per ora sono considerati non-portabili. Questi pacchetti sono marcati come NotForUs nel database buildd.
base/makedev, perché Hurd dispone della propria versione di questo script. Il pacchetto sorgente Debian contiene solo la versione specifica per Linux.base/modconfebase/modutils, perché i moduli sono un concetto specifico di Linux.base/netbase, perché le parti fornite da questo pacchetto non disponibili sono altamente specifiche del kernel Linux. Al suo posto Hurd usainetutils.base/pcmcia-cs, perché questo pacchetto è specifico di Linux.base/setserial, perché è specifico per il kernel Linux. Comunque con il port dei driver a caratteri di Linux su GNU Mach saremo in grado di usarlo.
Problemi generali del port
Un elenco dei problemi più comuni è disponibile sul sito web originale. Le seguenti problematiche sono specifiche di Debian.
Prima di tentare di correggere qualcosa, controllare se il port kfreebsd* ha già la correzione, che ha solo bisogno di essere estesa a hurd-any.
-
foo : Depends: foo-data (= 1.2.3-1) but it is not going to be installedLa risposta breve: è fallita la compilazione del pacchetto
foosu hurd-any e deve essere sistemata, controllare il problema nella pagina di stato su buildd.debian.org.Questo accade quando l'ultima compilazione del pacchetto
fooè fallita ma in passato è riuscita. Conapt-cache policy foo foo-dataè possibile scoprire, per esempio, che sono disponibili le versioni1.2.3-1difooe la versione2.0-1difoo-datache è più recente. Questo accade perché su debian-ports, i pacchetti che sono indipendenti dall'architettura (arch:all) creati dal pacchetto sorgentefoo(la cui compilazione crea i pacchetti binarifooefoo-data) sono installati alla nuova versionefoo-datanonostante fallisca la compilazione del pacchetto binariofooper hurd-any; questo porta ad avere versioni incompatibili. La soluzione di questo problema richiede che l'archivio debian-ports utilizzi dak al posto di mini-dak e questo passaggio è attualmente in corso. -
alcuni simboli o pattern sono scomparsi dal file dei simboliAlcuni pacchetti gestiscono una lista dei simboli che ci si aspetta che appaiano nelle librerie. Tale lista viene solitamente usata su un sistema Linux e quindi potrebbe contenere simboli che potrebbero non avere senso su sistemi non-Linux (per esempio per una funzionalità specifica di Linux). È possibile inserire delle condizioni nel file
.symbols, per esempio:(arch=linux-any)linuxish_function@Base 1.23
Dipendenze di libc6 non funzionantiAlcuni pacchetti usano erroneamente una dipendenza da
libc6-dev. Questo è sbagliato perchélibc6è specifica di alcune delle architetture di GNU/Linux. Il pacchetto corrispondente per GNU èlibc0.3-devma su altri Sistemi Operativi potrebbe essere diverso. È possibile trovare questo errore nel filedebian/controldel sorgente del pacchetto. Le soluzioni tipiche sono includere il riconoscimento del SO tramitedpkg-architecturee specificare il soname, o meglio usare un OR logico. Per esempio:libc6-dev | libc6.1-dev | libc0.3-dev | libc0.1-dev | libc-dev. Il pacchetto virtualelibc-devfunziona con qualsiasi soname ma deve essere usato solo come ultima risorsa.-
undefined reference to snd_*, SND_* undeclaredAlcuni pacchetti utilizzano ALSA anche sulle architetture diverse da Linux. Il pacchetto oss-libsalsa fornisce l'emulazione via OSS ma è limitato alla versione 1.0.5 e alcune funzionalità, per esempio tutte le operazioni del sequencer, non sono disponibili.
Se il pacchetto lo permette, disabilitare il supporto ALSA sulle architetture
!linux-any(per esempio tramite un'opzioneconfigure) e aggiungere un qualificatore[linux-any]inBuild-Dependsdi alsa e aggiungere il contrario inBuild-Conflicts, per esempioBuild-Conflicts: libasound2-dev [!linux-any]. -
dh_install: Cannot find (any matches for) "foo" (tried in ., debian/tmp)Questo accade solitamente quando non è stato installato qualcosa perché non è stato riconosciuto il SO. Alcune volte è solo una sciocchezza (per esempio una libreria condivisa su GNU/Hurd si crea esattamente come su GNU/Linux) che deve essere corretta. Altre volte è più veritiero (non si installano i file di un servizio di systemd); in questo caso è possibile usare dh-exec: impostare una dipendenza di compilazione dh-exec, chmod +x sul file .install e inserire in testa alle righe che danno problemi con [linux-any] o [!hurd-any].
Hacking con l'installatore Debian
Il modo più semplice per creare un'immagine ISO è partire da una esistente tra quelle presenti nella pagina con le immagini dei CD Hurd. Poi è possibile montarla e copiarla:
mount debian-sid-hurd-i386-NETINST-1.iso /mnt cp -a /mnt /tmp/myimage umount /mnt chmod -R +w /tmp/myimage |
È possibile montare il ram disk iniziale e, per esempio, sostituire il traduttore con la propria versione:
gunzip /tmp/myimage/initrd.gz mount /tmp/myimage/initrd /mnt cp ~/hurd/rumpdisk/rumpdisk /mnt/hurd/ umount /mnt gzip /tmp/myimage/initrd |
Adesso ricreare l'immagine con grub-mkrescue:
rm -fr /tmp/myimage/boot/grub/i386-pc grub-mkrescue -o /tmp/myimage.iso /tmp/myimage |
