Creare un pacchetto deb contenente script personali

Da Guide@Debianizzati.Org.
Vai alla navigazione Vai alla ricerca
Debian-swirl.png Versioni Compatibili

Tutte le versioni supportate di Debian

Introduzione

Portare in giro i propri script per poterli avere a disposizione su diverse macchine è un'operazione facile; basta metterli su una pendrive e copiarli all'occorrenza sul computer su cui verranno eseguiti.
Il problema sorge quando gli script diventano tanti, le macchine tante e la memoria poca, per cui capire se uno script è aggiornato su un PC (o se è installato) diventa improbo.

In questa guida verrà spiegato sommariamente, e senza la pretesa dell'esaustività vista l'enorme mole del gigante "Debian Packaging", come crearsi un pacchetto .deb che non fa nient'altro che contenere un certo numero di script. Questi script verranno installati nella directory /usr/bin/ .

Operazioni preliminari

Innanzitutto creiamo una directory di lavoro nella nostra home. In questo caso la chiameremo "pacchetti":

$ cd ~
$ mkdir pacchetti

quindi spostiamoci nella directory appena creata:

$ cd pacchetti

e creiamo un'ulteriore directory che conterrà tutti i file specifici per il nostro pacchetto. Questo è anche il momento di scegliere il nome del pacchetto; con uno sforzo di fantasia chiameremo il pacchetto "imieiscript" e la sua versione partirà dalla 1.0 . Creiamo la directory:

$ mkdir imieiscript-1.0

e spostiamoci al suo interno:

$ cd imieiscript-1.0

È giunto il momento di occuparci del pacchetto, creiamone lo "scheletro" con debhelper:

$ dh_make -n

e rispondiamo "s" alla prima domanda (stiamo creando un pacchetto singolo) e premiamo "invio" alla seconda domanda per accettare i suggerimenti su e-mail, nome del maintainer, licenza etc.
A questo punto si può notare che è stata creata una directory "debian" che ha al suo interno diversi file e template di file.
A noi non interessano tutti ma solo i file: changelog, compat, control, copyright e rules, oltre alla directory source, per cui tutti gli altri possono essere tranquillamente eliminati.
Ci sarà bisogno anche di un file install inizialmente vuoto. Dovremo crearlo in quanto ci servirà dopo.
Ora serve una directory che conterrà gli script che vogliamo installare per cui, accanto alla directory "debian", creiamo un'altra directory che possiamo chiamare, ad esempio, "script" e in cui verranno inseriti tutti gli script che vogliamo.

La situazione alla fine dovrebbe essere la seguente:

pacchetti/
       |-- imieiscript-1.0/
                       |-- debian/
                             |-- changelog
                             |-- copyright
                             |-- compat
                             |-- control
                             |-- install
                             |-- rules
                             |-- source/
                       |-- script/
                             |-- s3v-script1
                             |-- s3v-script2
                             |-- s3v-script3

Gli script

Nell'esempio precedente si è scelto come nome per gli script "s3v-script1", "s3v-script2" e "s3v-script3" ma, ovviamente, bisognerebbe scegliere un nome più significativo. La cosa importante è che il nome degli script sia assolutamente diverso da tutto ciò che si trova (o potrebbe trovarsi) in /usr/bin/ e che essi abbiamo i corretti permessi di esecuzione.
Ad esempio potrebbe essere conveniente dare i permessi di esecuzione a tutti ma di scrittura solo a root:

$ chmod 755 s3v-script1 s3v-script2 s3v-script3

non preoccupatevi del proprietario (utente:gruppo) del file, questo sarà sempre cambiato in root:root .

Il file changelog

Questo è il file che tiene traccia dei cambiamenti nel pacchetto per ciascuna versione, all'inizio si presenta così:

imieiscript (1.0) unstable; urgency=low

  * Initial Release.

 -- s3v <s3v@localhost>  Fri, 28 Jun 2013 21:46:24 +0200

e può essere lasciato inalterato. Se si vuole si può cambiarlo, ad esempio, così:

imieiscript (1.0) unstable; urgency=low

  * Versione iniziale del pacchetto che contiene i miei script personali.

 -- s3v <s3v@localhost>  Fri, 28 Jun 2013 21:46:24 +0200

Il file control

Questo è il file più importante e contiene le informazioni sul pacchetto e le sue dipendenze. Questi sono i cambiamenti apportati:

Source: imieiscript
Section: misc
Priority: extra
Maintainer: s3v <s3v@localhost>
Build-Depends: debhelper (>= 8.0.0)
Standards-Version: 3.9.4
Homepage:

Package: imieiscript
Architecture: all
Depends:
Description: Questo pacchetto contiene gli script di s3v

La sezione scelta è "misc" e l'architettura "all" (poiché il pacchetto contiene script che girano sotto Bash e non dipendono dall'architettura); inoltre è stata inserita una breve descrizione e tolte le dipendenze.

Il file install

Inseriamo questo:

script/* usr/bin/

in questo modo tutti gli script contenuti nella directory script che abbiamo creato saranno copiati in /usr/bin/ .

Creazione e installazione del pacchetto

Ora è tutto pronto per creare il pacchetto. Spostarsi nella directory "imieiscript-1.0" ed eseguire:

$ dpkg-buildpackage -us -uc

Alla fine saranno creati nella directory "pacchetti" quattro file:

imieiscript_1.0_i386.changes
il file che contiene i cambiamenti e l'hash per verificare l'autenticità dei file (i386 può cambiare, qui è dovuto al fatto che ho compilato su architettura i386)
imieiscript_1.0.tar.gz
il file compresso che contiene tutti i file del pacchetto
imeiscript_1.0.dsc
contiene la firma del file .tar.gz e le informazioni del pacchetto
imieiscript_1.0_all.deb
il file .deb vero e proprio

È importante sottolineare che gli unici file essenziali per ricreare o modificare il pacchetto sono solo i primi tre della lista. Il quarto file (il pacchetto .deb) può invece essere installato sulle macchine che si desidera con un:

# dpkg -i imieiscript_1.0_all.deb

tutto il resto non è più necessario e può essere tranquillamente cancellato.

Modifica del pacchetto

Supponiamo di dover modificare uno script e di voler creare la versione 1.1 del pacchetto. L'operazione a questo punto è banalissima. Se si hanno i tre file i prima (.changes, .tar.gz e .dsc), basta un:

$ dpkg-source -x imeiscript_1.0.dsc

per ricreare la directory "imeiscript-1.0" e lavorare nuovamente sui file e gli script. Quando gli script sono stati modificati, cambiare il changelog così:

imieiscript (1.1) unstable; urgency=low

  * Tolta la funzione miafunzione() dallo script s3v-script1

 -- s3v <s3v@localhost>  Fri, 28 Jun 2013 22:19:11 +0200

imieiscript (1.0) unstable; urgency=low

  * Initial Release.

 -- s3v <s3v@localhost>  Fri, 28 Jun 2013 21:46:24 +0200
<pre>
Si può vedere che è stata aggiornata la versione (1.1), la data e aggiunta una spiegazione a quello che si è cambiato.<br/>
Ora, come prima, basta un:
<pre>$ dpkg-buildpackage -us -uc

per ricreare altri quattro file che però, adesso, conterranno la versione aggiornata.

Controllare il pacchetto

Se si vuole controllare il pacchetto .deb creato, si può usare lintian:

$ lintian imieiscript_1.1_all.deb

che provvederà a fare un check sul pacchetto per controllare se esso contiene errori oppure ha bisogno di modifiche per aderire alla policy e entrare nei repository di Debian.
Il check, visto che si tratta di un pacchetto personale, non è necessario. Se siete paranoici:

$ lintian imieiscript_1.1_all.deb
E: imieiscript: debian-changelog-file-contains-invalid-email-address s3v@localhost
E: imieiscript: debian-changelog-file-contains-invalid-email-address s3v@localhost
E: imieiscript: helper-templates-in-copyright
W: imieiscript: copyright-has-url-from-dh_make-boilerplate
E: imieiscript: copyright-contains-dh_make-todo-boilerplate
E: imieiscript: extended-description-is-empty
E: imieiscript: maintainer-address-malformed s3v <s3v@localhost>
E: imieiscript: maintainer-address-is-on-localhost s3v <s3v@localhost>
W: imieiscript: binary-without-manpage usr/bin/s3v-script1
W: imieiscript: binary-without-manpage usr/bin/s3v-script2
W: imieiscript: binary-without-manpage usr/bin/s3v-script3

che ci informerà che l'indirizzo e-mail non è corretto, il file "copyright" va modificato, gli script andrebbero accompagnati da una manpage (come impone la policy Debian) e nel file "control" manca una descrizione completa del pacchetto.




Guida scritta da: S3v 22:18, 28 giu 2013 (CEST) Swirl-auth20.png Debianized 20%
Estesa da:
Verificata da:

Verificare ed estendere la guida | Cos'è una guida Debianized