Debian

Creazione di pacchetti Debian HowTo

Creazione di pacchetti Debian HowTo

1. Prefazione

Essere responsabili di una macchina significa prendersi cura dell'hardware oltre che dei componenti software. Come si vede nella vita di tutti i giorni come amministratore di sistema, è molto meglio installare il software come pacchetto software piuttosto che come un mucchio di file sorgente. Ciò riduce i costi per mantenere correttamente il sistema.

I pacchetti che sono disponibili dal tuo distributore preferito sono convalidati e supervisionati da un manutentore del pacchetto. Ha testato il software e ha assicurato che si adatta agli altri pacchetti software disponibili nella distribuzione. Inoltre, il pacchetto è firmato con una chiave GPG dal manutentore del pacchetto. Ciò garantisce l'integrità del pacco e mostra che il pacco proviene da una fonte attendibile.

Il formato del pacchetto dipende dalla tua distribuzione Linux. I formati selezionati sono i seguenti:

deb

Pacchetti utilizzati in: Debian GNU/Linux, Ubuntu, Armbian, Linux Mint, Knoppix

giri/min

Pacchetti utilizzati in: RedHat, Fedora, CentOS,  OpenSuse

tgz e txz

Pacchetti utilizzati in: Slackware

catrame.xz

Pacchetti utilizzati in: Arch Linux

Questo documento spiega brevemente come creare un pacchetto per Debian GNU/Linux. Per informazioni dettagliate sul formato del pacchetto Debian e sugli strumenti per mantenere un sistema Linux basato su 'deb' puoi dare un'occhiata al Debian Package Management Book [dpmb] Per creare pacchetti per Debian GNU/Linux questi documenti sono essenziali:

Il pacchetto con cui lavoreremo si chiama "helloworld" e ha il numero di versione 0.1. A scopo dimostrativo contiene semplicemente un singolo script Python che emette il famoso messaggio "Hello, world!”:

#!/usr/bin/python print ("Ciao, mondo!") 

2. Requisiti

2.1. Tasto GPG

Come passaggio 1, tieni a disposizione la tua chiave GPG. In seguito, sarà necessaria la chiave per firmare il pacco. Tieni presente che i pacchetti non firmati non sono affidabili e non possono far parte dell'universo Debian.

Nel caso in cui non disponi ancora di una chiave GPG, creane una. Puoi seguire i tre passaggi seguenti. Il primo comando genera una nuova chiave, il secondo esporta la tua nuova chiave in un file separato e il terzo aggiunge la chiave al tuo portachiavi personale.

$ gpg --gen-key $ gpg -a --output ~/.gnupg/TUO_NOME.gpg --export 'IL TUO NOME' $ gpg --import ~/.gnupg/TUO_NOME.gpg 

Durante la creazione assicurati che il nome _IL TUO NOME_ sia corretto. È comune utilizzare una combinazione di nome e cognome. Questo nome dovrà essere esattamente lo stesso nel pacchetto, quindi, quando si crea il file 'control' del pacchetto Debian. Per ulteriori informazioni su GPG dai un'occhiata al Manuale sulla privacy GNU [gph].

2.2. La catena degli strumenti di confezionamento

Per creare un pacchetto Debian con il codice sorgente sono necessari i seguenti pacchetti software sul sistema:

Come utente 'root' puoi installarli usando il seguente comando:

# apt-get install build-essential autoconf automake autotools-dev dh-make debhelper devscripts fakeroot xutils lintian pbuilder 

2.3. Preparare il software da impacchettare

Dobbiamo preparare una directory per costruire il pacchetto. Crea una directory per preparare l'ambiente in cui costruiremo il pacchetto:

$ mkdir -p ~./build/helloworld/0.1 

Copia il 'tar.gz' archivio compresso nella directory:

$ cp ciaomondo-0.1.catrame.gz ~./build/helloworld/0.1 

Entra nella directory ed estrai il pacchetto:

$ cd ~./build/helloworld/0.1 ~/costruisci/ciaomondo/0.1$ tar -xzf helloworld-0.1.catrame.gz 

Ora, la directory contiene sia il codice sorgente in una directory separata, sia l'archivio compresso:

~/build/helloworld/0.1$ ls helloworld-0.1 ciaomondo-0.1.catrame.gz 

3. debianizzazione

A questo punto aggiungeremo i file che sono specifici di un pacchetto Debian. Ecco perché questo passaggio è chiamato _Debianizzazione_ del software. Questo viene fatto in diversi passaggi singoli.

3.1 Preparare la struttura del pacchetto

Passa alla directory che contiene l'intero codice sorgente del pacchetto. Nel nostro esempio il pacchetto contiene il file 'helloworld.py', solo:

~$ cd build/helloworld/0.1/ciaomondo-0.1 ~/costruisci/ciaomondo/0.1/ciaomondo-0.1$ ls ciaomondo.pi 

Aggiungiamo i file che sono specifici di un pacchetto Debian. Lo strumento 'dh_make' entra in gioco. Lo switch '-e' usa l'indirizzo dato come indirizzo email nel campo 'Maintainer' del file 'debian/control'. Per creare il pacchetto usa invece il tuo indirizzo email. Tieni presente di utilizzare lo stesso indirizzo email che corrisponde alla tua chiave GPG.

L'opzione '-f' utilizza il file specificato come archivio sorgente originale e salta la copia dell'albero del programma corrente in 'programma.origine.

~/build/helloworld/0.1/ciaomondo-0.1$ dh_make -e [email protected] -f… /helloworld-0.1.catrame.gz 

Al prompt ti viene chiesto di selezionare il tipo di pacchetto che dovrebbe essere creato. Per scegliere _singolo binario_ digita 's'.

Tipo di pacchetto: binario singolo, binario indipendente, binario multiplo, libreria, modulo kernel, patch del kernel? [s/i/m/l/k/n] s Nome del manutentore : Frank Hofmann Indirizzo e-mail : [email protected] Data : Sat, 04 Nov 2017 21:16:13 +0100 Nome pacchetto : helloworld Versione : 0.1 Licenza : vuoto Tipo di pacchetto : Colpo singolo  per confermare: attualmente non esiste un Makefile di primo livello. Ciò potrebbe richiedere un'ulteriore messa a punto. Fatto. Modifica ora i file nella sottodirectory debian/. Dovresti anche controllare che i Makefile helloworld si installino in $DESTDIR e non in / . 

Ciò si traduce in una directory chiamata 'debian':

~/build/helloworld/0.1/ciaomondo-0.1$ ls debian helloworld.pi 

Questa directory contiene tutti i file specifici del pacchetto.

3.2. Regola il file di controllo

Il file 'debian/control' mantiene le dipendenze necessarie _per costruire_ il pacchetto. Utilizzando il comando 'dpkg-depcheck -d ./configure' riceverai una lista con tutti i pacchetti richiesti. Nel nostro caso non sono necessari ulteriori pacchetti perché Python è un linguaggio interpretato.

Successivamente, dobbiamo modificare il file 'debian/control' e aggiungere valori specifici del pacchetto. Per il nostro esempio appare come segue:

Fonte: helloworld Sezione: python Priorità: opzionale Manutentore: Frank Hofmann <[email protected]> Build-Depends: debhelper (>= 9) Standards-Version: 3.9.5 Pagina iniziale: http://www.efho.de/ #Vcs-Git: git://anonscm.debian.org/collab-maint/helloworld.git #Vcs-Browser: http://anonscm.debian.org/?p=collab-maint/helloworld.git;a=summary Pacchetto: helloworld Architettura: any Depends: $shlibs:Depends, $misc:Depends, python Descrizione: stampa Hello World in Python Stampa Hello World in Python 

3.3. Regola il file di copyright

Il file 'debian/copyright' contiene le informazioni sulla licenza per il pacchetto software. È preparato per il rilascio tramite GNU Public License 2 (GPLv2). Per il nostro esempio appare come segue:

Formato: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ Nome a monte: helloworld Fonte: http://www.efho.de/ File: debian/* Copyright: 2017 Frank Hofmann <[email protected]> Licenza: GPL-2+ Questo pacchetto è software gratuito; puoi ridistribuirlo e/o modificarlo secondo i termini della GNU General Public License come pubblicata dalla Free Software Foundation; o la versione 2 della Licenza, o (a tua scelta) qualsiasi versione successiva... Questo pacchetto è distribuito nella speranza che possa essere utile, ma SENZA ALCUNA GARANZIA; senza nemmeno la garanzia implicita di COMMERCIABILITÀ o IDONEITÀ PER UN PARTICOLARE SCOPO. Vedi la GNU General Public License per maggiori dettagli... Dovresti aver ricevuto una copia della GNU General Public License insieme a questo programma. In caso contrario, vedi  . Sui sistemi Debian, il testo completo della GNU General Public License versione 2 può essere trovato in "/usr/share/common-licenses/GPL-2". 

3.4. Regola il file del registro delle modifiche

Dopo le informazioni sul copyright, il file 'debian/changelog' deve essere modificato. Nel nostro esempio aggiungiamo l'informazione “Rilascio iniziale”.

ciaomondo (0.1-1) instabile; urgenza=basso * Rilascio iniziale -- Frank Hofmann <[email protected]> Sab, 04 Nov 2017 21:16:13 +0100 

Questo è tutto ciò di cui abbiamo bisogno finora: ora possiamo creare il pacchetto, finalmente.


4. Costruisci il pacchetto

Per compilare il pacchetto dobbiamo salire di una directory ed eseguire il seguente comando:

~/build/helloworld/0.1/ciaomondo-0.1$ dpkg-buildpackage -rfakeroot

L'opzione '-rfakeroot' consente a 'dpkg-buildpackage' di eseguire comandi come utente privilegiato con l'aiuto del comando 'fakeroot'. Questo è necessario per preparare il pacchetto e per creare file e directory.
Il comando sopra si traduce in un elenco più lungo di messaggi di output (mostrato qui in un ambiente di lingua tedesca):

dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellpaket helloworld dpkg-buildpackage: Quellversion 0.1-1 dpkg-buildpackage: Quelldistribution unstable dpkg-buildpackage: Quellen geändert durch Frank Hofmann <[email protected]> dpkg-buildpackage: Host-Architektur amd64 dpkg-source --before-build helloworld-0.1 fakeroot debian/rules clean dh clean dh_testdir dh_auto_clean dh_clean dpkg-source -b helloworld-0.1 dpkg-source: Informazioni: Quellformat "3.0 (quilt)" wird verwendet dpkg-source: Informazioni: helloworld wird unter Benutzung des existierenden ./helloworld_0.1.origine.catrame.gz gebaut dpkg-source: Informazioni: helloworld wird in helloworld_0.1-1.debian.catrame.xz gebaut dpkg-source: Informazioni: helloworld wird in helloworld_0.1-1.DSC gebaut debian / rules build dh costruire dh_testdir dh_auto_configure dh_auto_build dh_auto_test fakeroot debian / rules binari dh binary dh_testroot dh_prep dh_auto_install dh_installdocs dh_installchangelogs dh_perl dh_link dh_compress dh_fixperms dh_strip dh_makeshlibs dh_shlibdeps dh_installdeb dh_gencontrol dpkg-GenControl: Warnung: Feld dipende von Paket HelloWorld: unbekannte Substitutionsvariable $ shlibs :Depends dh_md5sums dh_builddeb dpkg-deb: Pacchetto "helloworld" wird in "... /helloworld_0.1-1_amd64.deb" gebaut. dpkg-genchanges <… /helloworld_0.1-1_amd64.changes dpkg-genchanges: kompletter Quellcode beim Hochladen hinzufügen dpkg-source --after-build helloworld-0.1 dpkg-buildpackage: Alles hochzuladen (Originalquellen enthalten) signfile helloworld_0.1-1.dsc Sie benötigen eine Passphrase, um den geheimen Schlüssel zu entsperren. Benutzer: "Frank Hofmann (Hofmann EDV) <[email protected]> " 4096 bit RSA Schlüssel, ID D431AC07, anno 2014-09-05 

4.1. Convalida del pacchetto

Congratulazioni - sei riuscito a creare un pacchetto Debian - sì! Ora, diamo un'occhiata più da vicino al pacchetto. Qui entra in gioco 'lintian'. Questo strumento convalida il tuo pacchetto per trovare violazioni contro le rigide regole che i pacchetti Debian devono soddisfare.

Per eseguire i test digitare il seguente comando:

lintian helloworld_0.1-1_amd64.deb 

Lo strumento non trova violazioni delle regole ma anche errori di ortografia e caratteri errati. L'interruttore '-pedante' chiede a 'lintian' di essere molto più critico del solito. Come puoi vedere di seguito, "lintian" è un po' scontroso e ha scoperto tre avvertimenti e un errore.

Fatta eccezione per il primo avvertimento, possiamo facilmente rendere felice 'lintian' e adattare il contenuto del pacchetto in base al set di regole. L'avviso 'new-package-should-close-itp-bug' significa che non c'è segnalazione di bug contro il pacchetto ITP (ITP significa _destinato a pacchetto_). Per un normale pacchetto Debian un bug report deve essere inviato al bugtracker per il pacchetto ITP per informare gli altri che intendi iniziare a impacchettare questo software.

4.2. Avvertimento: 'readme-debian-contains-debmake-template

Il file 'README.Debian' ha lo scopo di mantenere note aggiuntive riguardo a questo pacchetto. 'dh_make' ha creato questo file per noi:

ciaomondo per Debian ---------------------  -- Frank Hofmann <[email protected]> Sab, 04 Nov 2017 21:16:13 +0100 

Nel nostro esempio non abbiamo informazioni aggiuntive, quindi possiamo eliminare il file.

4.3. Avvertimento: 'descrizione-inizia-con-spazi-iniziali'

Questo avviso viene generato perché la descrizione più lunga del nostro pacchetto nel file 'debian/control' inizia con piùdi uno spazio. Non appena rimuoviamo un singolo spazio l'avviso scomparirà.

4.4. Errore: 'descrizione-sinossi-è-duplicato'

Ogni pacchetto richiede sia una descrizione breve che una più lunga in 'debian/control'. Questo errore viene generato perché entrambe le descrizioni sono identiche. Non appena abbiamo esteso la descrizione più lunga l'errore è sparito.


5. Link e riferimenti

- [ddr] Andreas Barth, Adam Di Carlo, Raphaël Hertzog, Lucas Nussbaum, Christian Schwarz, Ian Jackson: The Debian Developer's Reference
- [dnmg] Josip Rodin, Osamu Aoki: la guida del nuovo manutentore di Debian
- [dpmb] Axel Beckert, Frank Hofmann: il libro sulla gestione dei pacchetti Debian
- [dpm] Il manuale della politica Debian
- [dpt] Il tutorial sulla creazione di pacchetti Debian
- [gph] Manuale sulla privacy di GNU
- [lushpaiPackage] Alex Lushpai: Come creare un pacchetto Debian dai sorgenti


6. Ringraziamenti

L'autore desidera ringraziare Axel Beckert e Gerold Rupprecht per il loro supporto e i critici durante la preparazione di questo articolo.

I 10 migliori giochi da giocare su Ubuntu
La piattaforma Windows è stata una delle piattaforme dominanti per i giochi a causa dell'enorme percentuale di giochi che si stanno sviluppando oggi p...
I 5 migliori giochi arcade per Linux
Al giorno d'oggi, i computer sono macchine serie utilizzate per i giochi. Se non riesci a ottenere il nuovo punteggio più alto, saprai cosa intendo. I...
Battaglia per Wesnoth 1.13.6 Sviluppo rilasciato
Battaglia per Wesnoth 1.13.6 rilasciato il mese scorso, è la sesta versione di sviluppo nella 1.13.x e offre una serie di miglioramenti, in particolar...