pacchetti-e-repository.rst 9.03 KB
Newer Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
**********************
Pacchetti e Repository
**********************

La distribuzione FUSS comprende un repository di pacchetti aggiuntivi
rispetto alla base (Debian), disponibile all'indirizzo
https://archive.fuss.bz.it/ ed ospitato su ``isolda.fuss.bz.it`` nella
directory ``/iso/repo``.

Build dei pacchetti
===================

Nei repository del software sviluppato per FUSS è presente la directory
``debian`` contenente i file necessari per la generazione dei pacchetti
``.deb``.

Setup
-----

Per effettuare build locali dei pacchetti è necessario installare alcuni
strumenti di sviluppo::

    # apt install devscripts dput-ng

.. note:: Assicurarsi di aver installato anche i Recommends dei
   pacchetti (questo è il comportamento di default di ``apt``, a meno
   che non lo si sia disabilitato manualmente), in particolare nel caso
   di ``dput-ng``.

Inoltre è necessario impostare le variabili di ambiente ``DEBEMAIL`` e
``DEBFULLNAME``, contenenti rispettivamente il nome completo e l'email
dello sviluppatore, che verranno usate per aggiornare alcuni metadati.

Per usare ``dput-ng`` per effettuare gli upload serve configurarlo
creando il file ``~/.dput.d/profiles/fuss-<versione>.json`` contenente::

    {
        "method": "sftp",
        "fqdn": "archive.fuss.bz.it",
        "incoming": "/iso/incoming/<versione>",
        "allow_dcut": false,
        "allowed-distribution": {},
        "codenames": null,
        "post_upload_command": "ssh -S none isolda.fuss.bz.it 'sudo /iso/bin/post-upload'",
        "hooks": [
            "allowed-distribution",
            "checksum",
            "suite-mismatch" 
        ]
    }

dove ``<versione>`` è ``jessie`` per FUSS server e ``stretch`` per FUSS
client.

Assicurarsi inoltre di poter accedere via ssh a ``isolda.fuss.bz.it`` senza
ulteriori opzioni; ad esempio potrebbe essere necessario aggiungere
quanto segue a ``~/.ssh/config``::

    Host isolda.fuss.bz.it
        User root

.. note::  dput-ng usa paramiko per effettuare le connessioni ssh;
   questo implica che le opzioni impostate direttamente in
   ``~/.ssh/config`` vengono lette correttamente, ma non c'è supporto
   per l'uso di ``Include`` per suddividere la configurazione su più
   file.

   Inoltre non verrà salvato il fingerprint dei server, ma verrà chiesto
   ogni volta di verificarlo.

   A luglio 2018 i fingerprint di isolda sono::

       256 SHA256:aLTgA+Trj5iYo0dl0i8Q82aigs3K/dPwDbazrvG95YY root@isolda (ECDSA)
       256 SHA256:7i6j0jXPWRrW6LXDGbR+HWr3AFJi6gGSmdW41uBRJV4 root@isolda (ED25519)
       2048 SHA256:OkP1maDf0pSIGCdq1mph8oI8CTADMrFXfe3aty608SA root@isolda (RSA)

Chroot
''''''

I pacchetti ``.deb`` vanno buildati all'interno della versione di
destinazione in cui andranno installati; il modo più semplice per farlo
è creare una chroot ed installarvi gli strumenti di base per la
generazione di pacchetti::

    # mkdir <versione>_build
    # debootstrap <versione> <versione>_build (<mirror>)
    # chroot <versione>_build
    # apt install debhelper devscripts dpkg-dev

dove ``<versione>`` è al momento (settembre 2018) ``jessie`` per il FUSS
server e ``stretch`` per il FUSS client.

Clone del repository
--------------------

Clonare il repository del progetto desiderato::

    git clone https://work.fuss.bz.it/git/<progetto>


Il branch da buildare per l'upload è ``master``, da aggiornare nel caso
in cui si abbia già un clone locale del repository::

    git checkout master
    git pull

Versionamento
-------------

Per poter pubblicare il pacchetto, è necessario incrementare il numero
111
112
113
114
115
116
117
118
119
120
di versione nel file ``debian/changelog``.

Le guide di sviluppo degli specifici pacchetti danno indicazioni sulla
policy di versionamento, ma nella maggior parte dei casi sarà da
incrementare il patch level (es. da 9.0.5-1 a 9.0.6-1).

.. note:: Nei pacchetti contenenti programmi in python è generalmente
   necessario mantenere aggiornato il numero di versione anche in
   ``setup.py``; come per debsrc sopra questo dovrebbe essere citato nel
   README dei pacchetti.
121
122
123
124

Il programma ``dch``,  permette di automatizzare l'editing del file
``debian/changelog`` che contiene la versione del pacchetto.

125
126
127
* Quando si iniziano a fare modifiche usare il comando ``dch -v
  <nuova_versione>`` per creare una nuova stanza ed aprire il changelog
  nell'editor di default.
128

129
130
  Verrà impostato il numero di versione richiesto e la release speciale
  ``UNRELEASED`` che indica che le modifiche sono ancora in lavorazione.
131

132
133
134
135
  Si può anche usare ``dch`` senza opzioni: in questo modo se l'ultima
  stanza risulta ``UNRELEASED`` il file verrà aperto così com'è, mentre
  se l'ultima stanza riporta una release come ``unstable`` ne viene
  creata una nuova incrementando il numero di versione.
136

137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
  Attenzione che in quest'ultimo caso dch potrebbe non essere in grado
  di indovinare la versione corretta: verificare e nel caso correggere.
  Inoltre, nel caso in cui non si sia elencati tra i Maintainer e
  Uploaders in ``debian/control`` verrà aggiunta una riga ``Non
  Maintainer Upload`` che per noi non è rilevante e va tolta.

  Nel caso in cui più persone facciano modifiche, dch provvederà a
  suddividerle in sezioni intestate con il nome della persona che ha
  effettuato la modifica.

* Descrivere le modifiche effettuate, possibilmente indicando i ticket
  di riferimento da cui nascono le richieste di modifica.

* Man mano che si fanno modifiche, descriverle se necessario nel
  changelog, usando ``dch`` senza opzioni, come descritto sopra.

* Quando si è pronti a pubblicare il pacchetto, modificare ``UNRELEASED``
  con ``unstable`` nella prima riga; questo si può fare anche con il
  comando ``dch -r``.
156

157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
Build
-----

Alcuni pacchetti, come octofussd necessitano della preventiva creazione
del tar dei sorgenti originali, come specificato nel README dei
rispettivi repository; in tal caso prima di eseguire il comando
precedente è necessario eseguire, nella directory principale del
repository::

    debian/rules debsrc

Per eseguire il build del pacchetto, nella directory principale del
repository eseguire::

    dpkg-buildpackage -us -uc

Se la procedura va a buon fine, nella directory superiore si troveranno
i pacchetti ``.deb`` generati, e anche i file ``.changes``, ``.dsc`` e
``.tar.gz`` con il sorgente del pacchetto.

Test
----

Tramite ``dpkg -i <nomefile>.deb`` si puo' installare e testare il
pacchetto. Si ricorda che ``dpkg`` non risolve le dipendenze, quindi darà un
errore nel caso si sia aggiunta una nuova dipendenza.

Per installare le dipendenze mancanti si può usare il comando::

    apt -f install

Un altro comando utile è ``dpkg -c <nomefile>.deb`` per verificare i
file presenti nel pacchetto.

Commit e push
-------------

Eseguire il commit su git di tutte le modifiche apportate, indicando se
possibile nel commit log il numero di ticket associato alla modifica,
con la dicitura "refs #NUMERO".

Un metodo veloce è eseguire::

    git commit -a -m "<modifiche effettuate>. refs #NumeroTicket" 

e successivamente eseguire il push con::

    git push

Upload
------

Per uploadare il pacchetto buildato con ``dput-ng`` è sufficiente usare
il comando::

    dput fuss-<versione> nomepacchetto_versione_arch.changes

Nel caso si voglia procedere manualmente invece si possono copiare i
file generati su ``isolda`` nella directory ``/iso/incoming/<versione>``
ed aggiornare il repository con il comando::

    # /iso/bin/post-upload

Verificare poi che in ``/iso/incoming/<versione>`` non siano rimasti
file spuri, e nel caso cancellarli a mano.

Configurazione del repository
=============================
Elena Grandi's avatar
Elena Grandi committed
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266

Il file ``/iso/repo/conf/distributions`` definisce le distribuzioni
utilizzate nel repository, con snippet di configurazione come::

    Origin: FUSS
    Label: FUSS
    Suite: jessie
    Codename: jessie
    Version: 8.0
    Architectures: i386 amd64 source
    Components: main contrib
    Description: FUSS 8.0
    SignWith: C00D47EF47AA6DE72DFE1033229CF7A871C7C823

inoltre nello stesso file sono definite le versioni precedenti e future
della distribuzione. Al momento attuale la configurazione riguarda fino
alla versione 10 di Debian (codename ``buster``).

Le varie distribuzioni sono raggiungibili da apt usando, in
``/etc/apt/sources.list``::

    deb http://archive.fuss.bz.it CODENAME_DISTRIBUZIONE main contrib

e la chiave con la quale viene firmato il repository si può installare
su una macchina debian o derivate eseguendo, da root::

   # wget -qO - https://archive.fuss.bz.it/apt.key | apt-key add -

Aggiunta di nuova distribuzione e/o nuovo repository
----------------------------------------------------

Oltre al file ``/iso/repo/conf/distributions`` per indicare la nuova
distribuzione e/o nuovo repository, è necessario:

* Creare una cartella per lo spool di incoming dei pacchetti in
  ``/iso/incoming/<nuova distribuzione>``
* Aggiungere la descrizione e il path relativo al punto precedente nel
  file ``/iso/repo/conf/incoming``
* Aggiungere allo script ``/iso/bin/post-upload`` l'esecuzione del
  processing del nuovo path di incoming. In questo script vanno tolte
  quelle non più usate quando è certo che non ci saranno più nuovi
  pacchetti per una specifica distribuzione.