Come e perché creare pacchetti -dbg, -dev, -doc?


15

Sto scrivendo un pacchetto Ubuntu per un pacchetto che fornisce essenzialmente un numero di librerie e intestazioni che poi verranno utilizzate per costruire altri software. Il pacchetto si scompone anche in piccoli pacchetti secondari interdipendenti; in questo senso il pacchetto è abbastanza simile a boost.

Ho notato che pacchetti come boost forniscono

[...]
libboost-dbg
libboost-dev
libboost-doc
[...]
libboost-all-dev
[...]

ma niente che si chiami con il nome boosto libboost.

  • Qual è l'idea alla base di questo?
  • Quali sono gli scopi della -dbg, -deve -docpacchetti?
  • Ci sono delle istruzioni fornite su come scrivere i file di build per quei pacchetti?

Risposte:


13

Idea e scopo

Il motivo principale per separare questi diversi pacchetti ha a che fare con lo spazio su disco e la velocità di download. In particolare, è una grande preoccupazione per lo spazio mirror poiché significa distribuire più copie dei dati. Rendendo i foo-common, foo-datao foo-docpacchettiArchitecture: all , abbiamo solo conserva una copia dei dati nell'archivio anziché averlo copiato con ciascuna architettura (es i386, amd64, ect ...). I simboli di debug non sono necessari per la maggior parte degli utenti e finiscono per rendere il download del pacchetto più lungo.

Per i pacchetti negli archivi Ubuntu ufficiali, in realtà non vi è alcun motivo per creare -dbgpacchetti manualmente. Le macchine di compilazione eliminano automaticamente i simboli di debug e li inseriscono in -dbgsympacchetti ospitati su ddebs.ubuntu.com. (Vedi: Pacchetti simboli di debug ) -dbgche esistono normalmente sono semplicemente trasferiti da Debian.

Istruzioni

Per quanto riguarda l'implementazione, dai un'occhiata a questa domanda:

In breve, è necessario creare nuove stanze debian/controlper ciascun pacchetto. Quindi è debian/foo-*.installnecessario creare anche i file. Ciò consentirà dh_installdi inserire i contenuti giusti nei pacchetti giusti.

Il foo.installpacchetto binario principale potrebbe apparire come:

usr/bin/
usr/lib/

foo-common.install, foo-data.install, foo-doc.install, O qualsiasi altra cosa:

/usr/share/doc/
/usr/share/icons/
/usr/share/foo/
/usr/share/locale/

E per foo-dev:

/usr/include/
/usr/lib/pkgconfig
/usr/lib/*.so

La creazione del foo-dbgpacchetto richiede la modifica in debian/rulesquanto normalmente dh_stripeliminerà i simboli di debug. Quindi abbiamo bisogno di ignorare quel comportamento:

.PHONY: override_dh_strip
override_dh_strip:
        dh_strip --dbg-package=foo-dbg

12

Boost è un esempio complesso, diamo prima uno più semplice.

In particolare, il pacchetto sorgente openssl fornisce 5 pacchetti binari:

  • libssl1.0.0contiene la libreria dinamica OpenSSL, versione 1.0.0. Ecco cosa devono eseguire i programmi collegati a questa libreria. Il nome del pacchetto contiene un numero di versione perché potresti avere altre versioni della libreria installate contemporaneamente, se hai altri programmi collegati a un'altra versione che non è compatibile con i binari con 1.0.0.
  • opensslcontiene strumenti da riga di comando che utilizzano la libreria OpenSSL. Anche se hai più versioni della libreria, non hai bisogno di più versioni di questi strumenti: ce n'è solo una /usr/bin/openssle strumenti, dati e documentazione associati.
  • libssl-devcontiene i file necessari se si desidera compilare un programma che si collega a OpenSSL. Esistono file di intestazione C ( *.h), librerie per il collegamento ( *.a, *.so) e alcuni file assortiti.
  • libssl-doccontiene documentazione per la libreria OpenSSL. Questo pacchetto è necessario solo per scrivere programmi che utilizzano la libreria.
  • libssl1.0.0-dbgcontiene simboli di debug. È utile solo per le persone che eseguono il debug della libreria OpenSSL o dei programmi che la utilizzano. La risposta di andrewsomething ha maggiori informazioni su questi -dbgpacchetti.

Inoltre, precise contiene una versione precedente della libreria libssl0.9.8, poiché esistono programmi ancora collegati alla versione precedente.

Altri pacchetti che potresti vedere sono collegamenti per lingue diverse da C. OpenSSL non viene fornito con nessuno (ci sono collegamenti a OpenSSL per altre lingue, ma non provengono dalla stessa fonte). Un esempio è sqlite3 , fornito con attacchi TCL .

Il motivo principale per suddividere i pacchetti in questo modo è che pacchetti diversi hanno destinatari diversi. Un sistema in cui nessuno compila mai nulla necessita solo del libpacchetto principale e forse degli strumenti da riga di comando; verranno installati automaticamente dalle dipendenze, se necessario. Se qualcuno vuole compilare un programma che utilizza la libreria, ha bisogno del -devpacchetto. Se qualcuno vuole scrivere un programma che utilizza la libreria, ha bisogno del -docpacchetto.

E che dire di Boost? Segue la stessa struttura, ma poiché Boost è un'enorme libreria, è suddiviso in molti pacchetti più piccoli: libboost-*1.46.1e libboost-*1.46-dev. In particolare, esiste solo una versione di Boost, 1.46 , ma oneiric aveva sia 1.42 che 1.46 . Esiste anche un boost di default del metapacchetto che inserisce il pacchetto con versione come dipendenza.

Guardando libhangul , oltre al pacchetto di libreria dinamica libhangul1e al pacchetto di sviluppo libhangul-dev, c'è un pacchetto libhangul-data. Questo pacchetto contiene dati aggiuntivi richiesti dalla libreria. Anche se hai più versioni della libreria, possono condividere il -datapacchetto. Inoltre, il pacchetto è indipendente dall'architettura. Il software che contiene una grande quantità di dati indipendenti dall'architettura è suddiviso in pacchetti dipendenti dall'architettura e indipendenti dall'architettura, per risparmiare spazio sui siti di distribuzione. Un altro suffisso con un significato simile è -common.

Le regole di packaging di Ubuntu e Debian sono molto simili, quindi il materiale per la creazione di pacchetti Debian si applica anche a Ubuntu. In effetti, puoi avere lo stesso pacchetto sorgente per Debian e Ubuntu; l'unica cosa che rende diversi i pacchetti Debian e Ubuntu è la loro compilazione con diverse versioni della libreria, e non è altro che la differenza tra le diverse versioni di Ubuntu. Tieni a portata di mano la documentazione per gli sviluppatori Debian , in particolare il Manuale delle politiche Debian e il Riferimento per gli sviluppatori ; consultare la Guida del nuovo manutentore per un'introduzione. Ignora le parti su come lavorare con il progetto Debian e così via, leggi le parti su come creare un pacchetto.dh_make è un buon modo per iniziare con un pacchetto deb (ti consigliamo di selezionare "Libreria").

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.