Come creare un pacchetto deb che installa una serie di file


23

Vorrei creare un nuovo pacchetto deb per installare serie di file. Se possibile, desidero decomprimere la cartella contenente questi file come parte dell'installazione in un percorso di cartella noto. In caso contrario, alcune conoscenze su come impacchettare le cartelle e i file di origine sarebbero molto utili.

La domanda è - è possibile e se sì - come?

Facciamo un esempio:

~/mypluginfolder/contiene i file x, yuna sottocartella chiamata abce all'interno di quel file chiamato un altro z.

Voglio tar questa cartella: tar -cvf myfiles.tar ~/mypluginfolder

Presumo che il mio pacchetto debian sarebbe simile

myfiles.tar.gz
myfiles+ppafoss_0.1-1/
   myfiles.tar
   DEBIAN
      changelog, compat, control, install, rules source

È possibile in qualche modo decomprimere myfiles.tarin un percorso di cartella noto per esempio

/usr/share/rhythmbox/plugins/

Quindi il risultato finale sarebbe:

/usr/share/rhythmbox/plugins/mypluginfolder
/usr/share/rhythmbox/plugins/mypluginfolder\x
/usr/share/rhythmbox/plugins/mypluginfolder\y
/usr/share/rhythmbox/plugins/mypluginfolder\abc\z

Se - supponendo che il launchpad abbia bisogno del sorgente, si cerca di sapere dove dovrei inserire le cartelle e i file sorgente nella struttura del pacchetto deb.


Questo alla fine diventerà una serie di singoli pacchetti PPA launchpad.

Quello che preferisco (ma potrebbe non essere in grado di ottenere ...) è di mantenere il mio packaging al minimo: creare una serie di pacchetti da un modello e regolare il minimo indispensabile (log delle modifiche, ecc. + La struttura di file / file e cartelle tar) .


Ehm ... perché vuoi che un .deb esegua l' estrazione del catrame ? Perché non prendere semplicemente il codice sorgente dal tar e creare il deb da zero con il sorgente?
Thomas Ward

2
Una possibilità potrebbe essere quella di wget il tarball da un altro posto, stile Adobe Flash.
giovedì

@jrg, che scarica il programma di installazione .bin, non un tarball. lo stile di packaging di Adobe non fornisce la fonte (la sua fonte chiusa). Il concetto, tuttavia, è sempre lo stesso, scarica il codice da un'altra parte e quindi estrai / installa (sono nit = pignolo qui: P)
Thomas Ward

@LordofTime Stessa differenza. ; p
jrg

Risposte:


31

Di seguito, presumo che il sorgente sia aperto (ad esempio script Python) che non sono quindi vincolati a nessuna architettura (ad esempio amd64 o i386), quindi "tutto". Se hai qualche sorgente C, devi usarla Architecture: amd64 i386nel tuo controlfile sorgente .


creando un pacchetto pronto per Launchpad

Questo alla fine diventerà una serie di singoli pacchetti PPA launchpad.

Quello che preferisco (ma potrebbe non essere in grado di ottenere ...) è di mantenere il mio packaging al minimo - creare una serie di pacchetti da un modello e regolare il minimo indispensabile (log delle modifiche, ecc. + Il file tar).

Launchpad accetta solo pacchetti sorgente, quindi crea un rulesfile che installi i file nei posti corretti. Per comodità, userò debhelper . La directory con i tuoi file dovrebbe apparire come:

debian/changelog
debian/control
debian/rules
debian/compat
mypluginfolder/...

Un debian/copyrightfile può anche essere utile per informare gli utenti sulle licenze associate al pacchetto. Non penso che tu abbia bisogno di uno postinstscript poiché devi solo estrarre alcuni file. compatdovrebbe contenere il livello di compatibilità debhelper, ad esempio "8". (fare riferimento alla pagina di manuale di debhelper per maggiori dettagli)

Il changelogfile può essere modificato con il dchcomando, disponibile dal devscriptspacchetto. L' rules(utilizzando debhelper) deve contenere:

#!/usr/bin/make -f
%:
    dh $@
override_dh_install:
    dh_install mypluginfolder/ /usr/share/rhythmbox/plugins

Renderlo eseguibile utilizzando chmod 755 debian/rules. Un pacchetto sorgente può essere compilato usando debuild -S. Assicurati di essere in una directory denominata <package-name>-<version>. Maggiori informazioni sul override_comportamento e sul dhcomando sono disponibili nella sua pagina di manuale .

La Guida per i nuovi manutentori di Debian è stata molto utile per me capire questo, si consiglia di leggere. La confezione di esempio è disponibile su https://github.com/Bumblebee-Project/bumblebee-ppa .


creazione di pacchetti dall'albero dei file esistente

dpkg-deb -bpuò essere utilizzato per creare tarball da un albero di file esistente. Innanzitutto, inizia con la creazione di una directory che dovrebbe essere chiamata come il tuo pacchetto. Presumo che tu voglia nominarlo myplugine inserirlo /usr/share/rhythmbox/plugins/mypluginfolder. Inoltre, crea la DEBIANdirectory (maiuscola!) Per la memorizzazione delle informazioni sul pacchetto:

mkdir -p myplugin/usr/share/rhythmbox/plugins/mypluginfolder
mkdir myplugin/DEBIAN

Copia sui tuoi file:

cp -r ~/mypluginsfolder myplugin/usr/share/rhythmbox/plugins

Successivamente, avrai bisogno di un cosiddetto file di controllo situato in myplugin/DEBIAN/controlcui viene descritto il pacchetto. Il contenuto di tale file è riportato di seguito:

Package: myplugin
Version: 1.0-1
Maintainer: You <whatever@contact.address>
Architecture: all
Description: plugins for Rhythmbox
 Longer description here
 .
 As you can see, new paragraph are split by a single dot,
 and lines have to be indented by one space.

Ora puoi facoltativamente verificare il contenuto del tuo pacchetto. Il comando successivo elenca i contenuti delle voci di file e directory di myplugin:

find myplugin -ls

Se sei soddisfatto, compila il pacchetto nella directory corrente:

dpkg-deb -b myplugin .

Apparirà un nuovo file, chiamato come <package>_<version>_<architecture>.debin questo esempio myplugin_1.0-1_all.deb. È possibile utilizzare il lessprogramma per sbirciare nel file. Ad esempio less myplugin_1.0-1_all.deb,.


3
+1 genio assoluto - Mi inchino a te signore. Grazie!
Fossfreedom

Grazie per questo grande aiuto! Ho avuto qualche problema con il file di controllo, alla fine ha funzionato, ma non chiedermi come;)
Gerhard Burger,
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.