Creazione del pacchetto Debian Howto

Creazione del pacchetto Debian Howto

Prefazione

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

I pacchetti disponibili dal tuo distributore preferito sono convalidati e supervisionati da un manutentore di pacchetti. Ha testato il software e assicura 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 pacchetto e mostra che il pacchetto proviene da una fonte di fiducia.

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

Deb

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

RPM

Pacchetti utilizzati in: Redhat, Fedora, CentOS, Opensuse

TGZ e TXZ

Pacchetti utilizzati in: Slackware

catrame.xz

Pacchetti utilizzati in: Arch Linux

Questo documento spiega come creare brevemente 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", è possibile dare un'occhiata al libro di gestione dei pacchetti Debian [DPMB] per creare pacchetti per Debian GNU/Linux Questi documenti sono essenziali:

  • The Debian New Manureer's Guide [DNMG]
  • Il riferimento dello sviluppatore Debian [DDR]
  • The Debian Packaging Tutorial [DPT]
  • The Debian Policy Manual [DPM]

Il pacchetto con cui lavoreremo si chiama "Helloworld" e ha il numero di versione 0.1. Per scopi dimostrativi contiene semplicemente un singolo script Python che produce il famoso messaggio “Ciao, mondo!":

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

Requisiti

2.1. Chiave GPG

Come passaggio 1, disporre della chiave GPG. Più tardi, la chiave sarà necessaria per firmare il pacchetto. Tieni presente che i pacchetti non firmati sono inaffidabili e non possono far parte dell'universo Debian.

Nel caso in cui non si disponga di una chiave GPG, crei una. È possibile seguire i tre passaggi seguenti. Il primo comando genera una nuova chiave, il secondo esporta la nuova chiave in un file separato e il terzo aggiunge la chiave al tuo chiavi personale.

$ gpg --gen-key
$ gpg -a --output ~/.gnupg/your_name.GPG -Export 'il tuo nome'
$ gpg --import ~/.gnupg/your_name.gpg

Durante la creazione assicurarsi che il nome dato _ il tuo nome_ sia corretto. È comune usare 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 della GNU [GPH].

2.2. La catena degli strumenti di imballaggio

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

  • build-essenziale
  • autoconf
  • Automake
  • Autotools-dev
  • DH-Make
  • Debhelper
  • Devscripts
  • FAKEROOT
  • Xutils
  • Lintiano
  • pbuilder

Come "root" dell'utente puoi installarli utilizzando il seguente comando:

# APT-get Installa build-build Autoconf Automake Autotools-Dev Dh-Make Debhelper Devscripts FakeKeroot Xutils Lintian Pbuilder

2.3. Preparare il software da confezionare

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

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

Copia il catrame.Archivio compresso GZ nella directory:

$ CP Helloworld-0.1.catrame.GZ ~./build/helloworld/0.1

Cambiare nella directory ed estrarre il pacchetto:

$ cd ~./build/helloworld/0.1
~/build/helloworld/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 Helloworld-0.1.catrame.Gz

Debianizzazione

A questo punto aggiungeremo i file specifici per un pacchetto Debian. Ecco perché questo passaggio si chiama _debianization_ del software. Questo viene fatto in diversi singoli passaggi.

3.1 Preparare la struttura del pacchetto

Cambiare nella directory che mantiene l'intero codice sorgente del pacchetto. Nel nostro esempio il pacchetto contiene il file "Helloworld.Py ', solo:

~ $ cd build/elhoworld/0.1/Helloworld-0.1
~/build/helloworld/0.1/Helloworld-0.1 $ ls
Ciao mondo.Py

Aggiungiamo i file specifici per un pacchetto Debian. Lo strumento 'dh_make' entra in gioco. Lo switch '-e' utilizza l'indirizzo indicato come indirizzo e-mail nel campo 'manutentore' del file 'debian/controllo'. Costruire il pacchetto utilizza invece il tuo indirizzo email. Tieni presente di utilizzare lo stesso indirizzo email che corrisponde alla tua chiave gpg.

Lo switch '-f' utilizza il file dato come archivio originale e salta la copia dell'albero del programma corrente per 'Programma.Orig '.

~/build/helloworld/0.1/Helloworld-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 _single binary_ type 's'.

Tipo di pacchetto: binario singolo, binario indep, binario multiplo, biblioteca, modulo kernel, patch kernel?
[s/i/m/l/k/n] s
Nome del manutentore: Frank Hofmann
Indirizzo e-mail: [email protected]
Data: sab, 04 novembre 2017 21:16:13 +0100
Nome del pacchetto: Helloworld
Versione: 0.1
Licenza: vuoto
Tipo di pacchetto: singolo
Colpire per confermare:
Attualmente non esiste un makefile di alto livello. Ciò potrebbe richiedere una messa a punto aggiuntiva.
Fatto. Modifica ora i file nella sottodirectory Debian. Dovresti anche
Controlla che l'Helloworld Makefiles installa in $ Destdir e non in / .

Ciò si traduce in una directory chiamata "Debian":

~/build/helloworld/0.1/Helloworld-0.1 $ ls
Debian Helloworld.Py

Questa directory contiene tutti i file specifici del pacchetto.

3.2. Regola il file di controllo

Il file "Debian/Control" mantiene le dipendenze necessarie _to build_ il pacchetto. Usando il comando 'dpkg -depcheck -d ./configura 'ricevi un elenco con tutti i pacchetti richiesti. Nel nostro caso non c'è altro pacchetto necessario perché Python è una lingua interpretata.

Successivamente, dobbiamo modificare il file "Debian/Control" e aggiungere valori specifici del pacchetto. Per il nostro esempio sembra segue:

Fonte: Helloworld
Sezione: Python
Priorità: facoltativo
Manutentore: Frank Hofmann
Build-dipende: debhelper (> = 9)
Versione standard: 3.9.5
Homepage: http: // www.efho.de/
#Vcs-git: git: // anonscm.Debian.org/collab-maint/helloworld.idiota
#Vcs-browser: http: // anonscm.Debian.org/?p = collab-maint/helloworld.git; a = riassunto
PACCHETTO: Helloworld
Architettura: qualsiasi
Dipende: $ shlibs: dipende, $ misc: dipende, 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 sembra segue:

Formato: http: // www.Debian.Org/Doc/Packaging-manuals/Copyright-Format/1.0/
Upstream-Name: Helloworld
Fonte: http: // www.efho.de/
File: Debian/*
Copyright: 2017 Frank Hofmann
Licenza: GPL-2+
Questo pacchetto è un software gratuito; È possibile ridistribuirlo e/o modificare
Secondo i termini della licenza pubblica generale GNU pubblicata da
la Free Software Foundation; o versione 2 della licenza o
(a tua opzione) qualsiasi versione successiva.
.
Questo pacchetto è distribuito nella speranza che sia utile,
ma senza alcuna garanzia; senza nemmeno la garanzia implicita di
Commerciabilità o idoneità per uno scopo particolare. Vedere il
Licenza pubblica generale GNU per maggiori dettagli.
.
Dovresti aver ricevuto una copia della licenza pubblica generale GNU
Insieme a questo programma. In caso contrario, vedi
.
Sui sistemi Debian, il testo completo del GNU Generale
Licenza pubblica La versione 2 è disponibile in "/USR/Share/Common Licenses/GPL-2".

3.4. Regola il file Changelog

Dopo le informazioni sul copyright, il file "Debian/Changelog" deve essere regolato. Nel nostro esempio aggiungiamo le informazioni "versione iniziale".

Helloworld (0.1-1) instabile; Urgency = Low
* Versione iniziale
-- Frank Hofmann Sab, 04 novembre 2017 21:16:13 +0100

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


Costruisci il pacchetto

Per creare il pacchetto dobbiamo spostare una directory ed eseguire il seguente comando:

~/build/helloworld/0.1/Helloworld-0.1 $ DPKG -BUILDPACKAGE -RFAKEROOT

L'opzione '-rfakeroot' consente a 'dpkg-buildpackage' di eseguire i comandi come utente privilegiato con l'aiuto del comando 'fakeroot'. Ciò è necessario per preparare il pacchetto e 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 Instable
DPKG-BUILDPACKAGE: Quellen Geändert Durch Frank Hofmann
DPKG-BUILDPACKAGE: host-architektur AMD64
dpkg-source-prima-build Helloworld-0.1
Fakeroot Debian/Regole Clean
dh pulito
dh_testdir
dh_auto_clean
DH_CLEAN
dpkg-source -b helloworld-0.1
DPKG-Source: Informazioni: Quellformat "3.0 (trapunta) "Wird Verwendet
DPKG-Source: Informazioni: Helloworld Wird Unter Benutzung des Existenden ./Helloworld_0.1.orig.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
Build Debian/Regole
build DH
dh_testdir
dh_auto_configure
dh_auto_build
dh_auto_test
Fakeroot Debian/Regole Binary
dh binario
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 da von paket helloworld: unbekannte sostituzionivariable $ shlibs: dipende
dh_md5sums
dh_builddeb
DPKG-DEB: paket "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 (originale Wellen ENALTEN)
Segnale Helloworld_0.1-1.DSC
Sie Benötigen Eine Passphrase, Um den Geheimen Schlüssel Zu Hentsperren.
Benutzer: "Frank Hofmann (Hofmann EDV)
"
4096-bit RSA Schlüssel, ID D431AC07, Erzeugt 2014-09-05

4.1. Convalidamento del pacchetto

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

Per eseguire il digitare test nel comando seguente:

Lintian Helloworld_0.1-1_AMD64.Deb

Lo strumento non trova violazioni delle regole ma anche errori di ortografia e personaggi sbagliati. The Switch '-Oppetic' 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.

Tranne il primo avvertimento possiamo facilmente rendere felici "Lintian" e assolutamente il contenuto del pacchetto secondo il set di regole. L'avvertimento "new-package-dovrebbe-close-itp-bug" significa che non esiste un report di bug contro il pacchetto ITP (ITP significa _inteso in pacchetto_). Per un pacchetto Debian regolare, un report di bug deve essere inviato a BugTracker per il pacchetto ITP per avvisare gli altri che si intende iniziare a confezionare questo software.

4.2. ATTENZIONE: "Readme-debian-contains-debmake-template

Il file 'readme.Debian 'ha lo scopo di mantenere ulteriori note su questo pacchetto. 'Dh_make' ha creato questo file per noi:

Helloworld per Debian
---------------------

-- Frank Hofmann Sab, 04 novembre 2017 21:16:13 +0100

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

4.3. ATTENZIONE: "Descrizione-Starts-With Leading-Spaces"

Questo avvertimento viene sollevato perché la descrizione più lunga del nostro pacchetto nel file "Debian/Control" inizia con più di un singolo spazio. Non appena rimuoviamo un singolo spazio, l'avvertimento scomparirà.

4.4. Errore: "Descrizione-Synopsis-is-duplicato"

Ogni pacchetto richiede sia una descrizione breve che quella più lunga in "Debian/Control". Questo errore viene sollevato perché entrambe le descrizioni sono identiche. Non appena abbiamo esteso la descrizione più lunga, l'errore è sparito.


Collegamenti 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: The Debian Package Management Book
- [DPM] Il manuale della politica Debian
- [dpt] The Debian Packaging Tutorial
- [GPH] Il manuale sulla privacy della GNU
- [Lushpaipackage] Alex Lushpai: come creare il pacchetto Debian dalla fonte


Riconoscimenti

L'autore desidera ringraziare Axel Beckert e Gerold Rupprecht per il loro supporto e i critici mentre prepara questo articolo.