Come creare manualmente un file DEB?


46

Voglio creare manualmente un file DEB. Vorrei solo fornire una cartella contenente i dati da installare e uno script da eseguire dopo l'installazione.

È possibile?


Non hai una buona risposta?
Gigamegs

@ David, in realtà ce l'ho fatta con "dpkg-deb", è molto più semplice, ecco perché ho scelto Gilles, elencando i file nella cartella del pacchetto mi dà una visione chiara del file da posizionare lì. Quindi penso che la sua risposta sia migliore ..
Daisy

Ho elencato anche tutti i file nel pacchetto.
Gigamegs

11
@David, intendo dire che la sua risposta è derivata è una cosa, ma "non è un'ottima risposta"? La risposta di Gilles è eccellente; non importa se la tua risposta è stata la prima, la sua è molto più completa. E non c'è niente di sbagliato nel prendere una risposta esistente e nell'espanderla; è una buona cosa
Michael Mrozek

Risposte:


57

Creare un pacchetto sorgente

La mia raccomandazione è di creare un pacchetto sorgente. Installa build-essential , debhelper , dh-make . Passare alla directory in cui si trovano i file che si desidera installare (il nome della directory deve essere nel formato $PACKAGE-$VERSION, ad es. myapp-4.2-1Per il primo tentativo di impacchettare Myapp V4.2) ed eseguire dh_make --createorig. Rispondi alle domande. Debhelper creerà l'infrastruttura di base necessaria per creare un pacchetto generando file in una sottodirectory denominata debian, sia alcuni file obbligatori che modelli per file opzionali. Potrebbe essere necessario modificare alcuni di questi file:

  • Modifica debian/rulesper creare ciò di cui hai bisogno per creare e installare i file nel posto giusto. Se hai solo bisogno di copiare alcuni file e non compilare elementi, basta modificare il file debian/installper specificare quali file devono essere installati dove.
  • Modifica debian/copyrightper aggiungere informazioni sulla licenza del pacchetto e informazioni su dove ottenere l'ultima versione (se pertinente).
  • Modifica debian/changelogper rimuovere il riferimento a un ITP (questo è rilevante solo se stai lavorando per il progetto Debian). Rinominare debian/postinst.exper debian/postinste aggiungere i comandi di post-installazione lì. Se successivamente aggiorni il tuo pacchetto, esegui debchange -iper aggiungere una voce di log o per modificare il file in Emacs (con dpkg-dev-el installato).

Esegui dpkg-buildpackage -rfakeroot -us -ucper compilare il .debpacchetto (rimuovilo -us -ucse vuoi firmare il pacchetto con la tua chiave PGP).

Creazione diretta di un pacchetto binario

Se decidi di creare un pacchetto binario direttamente senza crearlo da un pacchetto sorgente, il che non è molto più facile perché non ci sono tanti strumenti per facilitare il processo, avrai bisogno di familiarità di base con il formato dei pacchetti deb. È descritto nel Debian Policy Manual , in particolare cap. 3 (formato dei pacchetti binari) , cap. 5 (file di controllo) , cap. 6 (script di installazione) e appendice B (manipolazione del pacchetto binario) .

Assicurati che il tuo pacchetto installi i file previsti /usr/share/doc/copyright(contenente la licenza del contenuto del pacchetto, nonché dove trovare l'ultima versione del pacchetto) e /usr/share/doc/changelog.Debian.gz(contenente il log delle modifiche del pacchetto deb). Non hai bisogno di questi se intendi utilizzare il pacchetto solo internamente, ma è meglio averli.

Su Debian e derivati

Se hai gli strumenti Debian disponibili, usa dpkg-debper costruire il pacchetto. Nella directory contenente i dati da installare, aggiungere una directory chiamata DEBIANal livello superiore, contenente i file di controllo e gli script del manutentore.

$ ls mypackage-42
DEBIAN etc usr var
$ dpkg-deb -b mypackage-42

Nel modo più duro

Se non si dispone degli strumenti Debian, creare un archivio dei file che si desidera pacchetto chiamato data.tar.gz, un archivio separato dei file di controllo chiamato control.tar.gz(nessuna sottodirectory) e un file di testo chiamato debian-binarye contenente il testo 2.0.

cd mypackage-42
tar czf ../data.tar.gz [a-z]*
cd DEBIAN
tar czf ../../control.tar.gz *
cd ../..
echo 2.0 > debian-binary
ar r mypackage-42.deb debian-binary control.tar.gz data.tar.gz

Avete bisogno di almeno un file di controllo con i campi Package, Maintainer, Priority, Architecture, Installed-Size, Version, e ogni dichiarazione di dipendenza necessaria.

Viene chiamato lo script da eseguire dopo l'installazione postinst. Assicurati di renderlo eseguibile. Accanto control.

Conversione di un pacchetto binario da un formato diverso

Se hai già un pacchetto binario da un'altra distribuzione, puoi usare alien per convertirlo.


3
IMO è una copia della mia risposta? Cosa ne pensi?
Gigamegs

1
La risposta presuppone che l'OP sappia usare emacs. Emacs è davvero necessario qui? Per la modifica dei log delle modifiche, penso che si possa usare dch -i.
Faheem Mitha,

Cosa sta arfacendo che tarnon lo è?
mmstick

@mmstick È un formato diverso. Non so perché i progettisti del formato deb abbiano scelto di usare ar qui.
Gilles 'SO- smetti di essere malvagio' il

1
Se si desidera modificare il nome e l'e-mail dh_make --createorigutilizzati, è necessario export DEBEMAIL="me@example.com"e export DEBFULLNAME="Firstname Lastname"prima.
Ryan,

10

Prima di tutto devi creare una cartella di build e un archivio dei tuoi file: tar czvf data.tar.gz files

Quindi nella cartella build è necessario creare un file di controllo con alcune informazioni desiderate:

 Package: xxxxxx
 Version: 0.0.1
 Section: user/hidden 
 Priority: optional
 Architecture: armel
 Installed-Size: `du -ks usr|cut -f 1`
 Maintainer: Your Name <xxx@xxx.xx>
 Description: This is optional, but creates warnings if left out

Quindi è possibile aggiungere script di shell preinst, postint, prerm e postrm in modo indipendente per controllare il comportamento pre e post installazione e pre e post rimozione del file .deb e quindi è possibile creare l'archivio di controllo con tar: tar czvf control.tar.gz control preinst postinst prerm postrm

Allora avete bisogno di un file debian-binary: echo 2.0 > debian-binary. Nella tua cartella di build dovresti ora avere questi file: debian-binary control.tar.gze data.tar.gz.

Infine è necessario il arpacchetto per creare il file .deb:ar -r xxx.deb debian-binary control.tar.gz data.tar.gz


1
A proposito di ar -r xxx.deb debian-binary control.tar.gz data.tar.gzciò potrebbe valere la pena sottolineare che l'ordine è importante: il controllo deve venire prima dei dati.
Hibou57,

@Bytemain, la risposta più votata sembra effettivamente parzialmente basata sul tuo testo, ma aggiunge dettagli ad esso ed è meglio leggibile. la sequenza che possiamo copiare / incollare lo rende particolarmente più bello.
mariotomo,

3

Faccio molti pacchetti e farne uno completo non è cosa da poco. Sul versante positivo, i file e gli script richiedono molto meno lavoro. È possibile creare un tale pacchetto, molto semplicemente, con uno strumento noto come debreate .

Debreate è una GUI davvero semplice, per la creazione di semplici pacchetti DEB. Puoi semplicemente specificare quali file, dove vanno e se / cosa dovrebbe essere eseguito su post / preinstallazione / disinstallazione. Ero solito fare tutti i miei pacchetti nel modo standard, ma dopo aver iniziato a usare questo strumento, tornerò indietro solo quando necessario.



1

Mi sono imbattuto in questo con Zimbra 7 su Debian usando i suoi pacchetti Ubuntu. (Sono testardo, mi piace Debian> bUbuntu nonostante Zimbra rilasci solo per Ubuntu.) Non sono sicuro di come ho lavorato prima, sono certo di non doverlo fare prima di averlo installato in precedenza!

mkdir new
for i in *.deb
 do echo `date`: working on $i
 ar x $i
 cd control
 rm * 2> /dev/null
 tar -xzpvf ../control.tar.gz
 tr "_" "-" < control > control2
 mv -v control2 control
 tar -czpvf ../control.tar.gz .
 cd ..
 ar r new/$i debian-binary control.tar.gz data.tar.gz
done
rm -rf debian-binary control.tar.gz data.tar.gz control

Tutti i tuoi nuovi file .deb saranno presenti new/.

Nota : questo è stato su squeeze - dpkg su wheezy ha --force-bad-version ora.


1

Per una rapida creazione di pacchetti è possibile verificare il programma di installazione utente. Fa un'installazione del programma, guarda i cambiamenti e ne crea un pacchetto deb o rpm.


Sembra un'ottima opzione per tracciare i pacchetti che devi installare dal sorgente. Puoi offrire maggiori dettagli? Ad esempio, nel corso dell'installazione è possibile modificare collegamenti simbolici, eliminare file, modificare file di configurazione, aggiungere demoni, ecc ... fino a che punto controlla la traccia di installazione e annulla queste modifiche? Puoi facilmente modificare il suo output per aggiungere script prerm e postrm?
AatG,

guarda wiki.debian.org/CheckInstall Se vuoi cambiare le cose durante l'installazione - il modo più semplice è modificare Makefile per cambiare la sezione di installazione. prerm / postrm - non ho trovato il modo di modificarlo. È solo per piccoli programmi per consentire la semplice disinstallazione.
undefine

-4
$ apt-get install build-essential dh-make debhelper devscripts
$ wget http://nmap.org/dist/nmap-LAST.tar.bz2
$ tar xf nmap-LAST.tar.bz2
$ cd nmap-LAST
$ dh_make -s -e youremail@site.org -f ../nmap-LAST.tar.bz2
$ apt-get install libgtk2.0-dev flex bison libpcap0.8-dev \
  libpcre3-dev binutils-dev python-all-dev
$ dpkg-buildpackage
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.