Nota: L'originale è più recente di questa traduzione.
Debian GNU/Hurd
Sviluppo della distribuzione
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-get
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. Inoltre è possibile
aggiungere -uc
per evitare di firmare il pacchetto con la
propria chiave pgp.
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-get 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/graph-radial.pdf oppure usando
l'elenco dei pacchetti più ricercati
https://people.debian.org/~sthibault/graph-total-top.txt (ordinato a
partire dai pacchetti ricercati da più tempo, lo stesso elenco in ordine
inverso https://people.debian.org/~sthibault/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/out_of_date2.txt o in
https://people.debian.org/~sthibault/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/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-i386.
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 solitamento 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].