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.
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/modconf
ebase/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 installed
La risposta breve: è fallita la compilazione del pacchetto
foo
su 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-1
difoo
e la versione2.0-1
difoo-data
che è 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 binarifoo
efoo-data
) sono installati alla nuova versionefoo-data
nonostante fallisca la compilazione del pacchetto binariofoo
per 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 simboli
Alcuni 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 funzionanti
Alcuni 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-dev
ma su altri Sistemi Operativi potrebbe essere diverso. È possibile trovare questo errore nel filedebian/control
del sorgente del pacchetto. Le soluzioni tipiche sono includere il riconoscimento del SO tramitedpkg-architecture
e 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-dev
funziona con qualsiasi soname ma deve essere usato solo come ultima risorsa.-
undefined reference to snd_*, SND_* undeclared
Alcuni 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-Depends
di 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 |