File: maint-guide.it.sgml

package info (click to toggle)
maint-guide 1.0.2
  • links: PTS
  • area: main
  • in suites: woody
  • size: 652 kB
  • ctags: 12
  • sloc: makefile: 104; sh: 8
file content (1608 lines) | stat: -rw-r--r-- 70,033 bytes parent folder | download
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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
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
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
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
<!doctype debiandoc system>

<debiandoc>

 <book>

  <titlepag>

   <title>Guida per il nuovo Maintainer</title>

   <author>Josip Rodin <email/jrodin@jagor.srce.hr/
   </author>
   <author>Traduzione: Francesco P. Lovergine <email/frankie@debian.org/
   </author>

   <version>versione 1.0.2, 10 giugno 2001.</version>

   <copyright>
   <copyrightsummary>Copyright &copy; 1998-2001 Josip Rodin.</copyrightsummary>

   <p>Questa guida pu� essere utilizzata nei termini della GNU General Public License
   versione 2 o successive.

   <p>Questo documento � stato realizzato utilizzando come modello i documenti seguenti:

   <p>Making a Debian Package (noto come Manuale di Debmake), copyright &copy;
   1997 Jaldhar Vyas <email/jaldhar@debian.org/.

   <p>The New-Maintainer's Debian Packaging Howto, copyright &copy; 1997
   Will Lowe <email/lowe@debian.org/.
   </copyright>

  </titlepag>

  <toc sect>

  <chapt id="start">Partire "nel modo giusto"

  <p>Questo documento prover� a descrivere la costruzione di un pacchetto
  Debian GNU/Linux per un comune utente Debian (e aspirante sviluppatore),
  utilizzando un linguaggio immediato e con l'ausilio di esempi concreti.
  C'� un detto latino che dice <em> Longum iter est per preaecepta, breve 
  et efficax per exempla!</em> (La via � lunga con la teoria, 
  ma breve ed efficiente con gli esempi!).

  <p>Una cosa che rende Debian una distribuzione Linux di prima scelta,
  � il suo sistema di pacchettizzazione. Sebbene ci sia una vasta quantit�
  di software gi� in formato Debian, qualche volta � necessario installare
  del software che non lo �. 
  Potresti chiederti come creare personalmente i tuoi pacchetti e forse 
  pensare che sia un compito molto difficile. In effetti, se sei un 
  novizio di Linux � dura, ma se sei un un utente stagionato non puoi
  non leggere questo documento subito :-) Avrai bisogno di conoscere 
  dei rudimenti di programmazione Unix, ma certamente non occorrer� che
  tu sia un mago della programmazione.
  
  <p>Versioni aggiornate di questo documento sono disponibili
  all'indirizzo
  <url name="http://www.debian.org/doc/maint-guide" id="http://www.debian.org/doc/maint-guide">
  e nel pacchetto `maint-guide'.

  <sect id="needprogs">Programmi necessari per lo sviluppo

  <p>Prima di iniziare, dovresti assicurarti di avere correttamente
  installati alcuni pacchetti addizionali, necessari per lo sviluppo
  del software. Osserva che la lista non contiene alcun pacchetto
  etichettato `essential' o `required' - ci aspettiamo che tu li abbia
  gi� installati.

  <p>Questo documento � stato scritto quando la distribuzione 2.1 `slink' 
  era la versione stabile ufficiale di Debian, e la 2.2 `potato' era 
  in sviluppo, perci� i pacchetti qui citati sono principalmente quelli
  della `potato'.

  <p>I pacchetti seguenti fanno parte della installazione standard della
  Debian 2.1, per cui probabilmente li hai gi� installati (insieme ai
  pacchetti addizionali dai quali dipendono). Comunque dovresti
  controllare con `dpkg -s &lt;package&gt;'.

  <list>
  <item><em>binutils</em> - questi programmi sono usati per compilare e
  linkare i file oggetto - con i quali sono costituiti i programmi. (vedi 
  `info binutils')

  <item><em>cpp</em> - il preprocessore del C. (vedi <manref name="cpp" section="1">)

  <item><em>cpio</em> - un programma di archiviazione come tar o zip. (vedi
  <manref name="cpio" section="1">)

  <item><em>dpkg-dev</em> - il pacchetto contiene gli strumenti necessari
  per spacchettare, costruire e caricare i pacchetti di sorgenti Debian.
  (vedi <manref name="dpkg-source" section="1">)

  <item><em>file</em> - questo comodo programma pu� stabilire la
  tipologia di un file.
  (vedi <manref name="file" section="1">)

  <item><em>gcc</em> - il compilatore GNU C. La maggior parte dei
  programmi Linux sono scritti in C. Tuttavia, se il tuo programma
  � scritto in qualche altro linguaggio di programmazione come C++,
  Fortran, Pascal, dovresti avere g++, g77 o gpc rispettivamente.
  (vedi <manref name="gcc" section="1">,
  <manref name="g++" section="1">, <manref name="g77" section="1">,
  <manref name="gpc" section="1">)

  <item><em>libc6-dev</em> - le librerie e i file header che il gcc
  richiede per la compilazione e il link dei file oggetto. Sebbene
  alcuni programmi raccomandino ancora o usino la libc5, sei incoraggiato a
  utilizzare la versione pi� recente (libc6). (vedi `info libc')

  <item><em>make</em> - generalmente la creazione di programmi richiede
  una serie di passi. Piuttosto di riscrivere continuamente gli stessi
  comandi, puoi utilizzare questo programma per automatizzare il
  processo, creando dei `Makefile'. Alcuni programmi usano anche `imake'
  e `xmkmf', programmi utilizzati per generare Makefile da insiemi 
  di macro funzioni. Molti programmi recenti usano script di
  configurazione e Makefile con l'aiuto di programmi come autoconf
  e automake, cos� potresti avere bisogno anche di questi. (vedi
  `info make', <manref name="imake" section="1">,
  <manref name="xmkmf" section="1">, <manref name="autoconf" section="1">,
  <manref name="automake" section="1">)

  <item><em>patch</em> - questo programma di utilit� molto comodo utilizza un file
  contenente una lista di differenze (prodotta dal programma diff) e
  la applica al file originale, per produrre una versione corretta.
  (vedi <manref name="patch" section="1">)

  <item><em>perl5</em> - Perl � uno dei linguaggi per script
  interpretati pi� utilizzati sui moderni sistemi un*x, spesso definito
  come "il coltellino svizzero di Unix". 
  (vedi <manref name="perl" section="1">)
  </list>

  <p>Dalla sezione `devel' della distribuzione avrai probabilmente
  bisogno di installare quanto segue tu stesso:
  
  <list>
  <item><em>dh-make</em> e <em>debhelper</em> - dh-make � necessario per 
  creare lo skeleton del nostro pacchetto di esempio, e utilizzer� alcuni
  strumenti di debhelper per creare i pacchetti. Non sono essenziali per la
  creazione di pacchetti, ma sono <strong>altamente</strong> raccomandati
  per i nuovi maintainer. Questo rende l'intero processo molto pi�
  semplice da iniziare e controllare successivamente. (vedi
   <manref name="dh_make" section="1">,
  <manref name="debhelper" section="1">, /usr/share/doc/debhelper/README)

  <item><em>devscripts</em> - questo pacchetto contiene alcuni utili
  script che possono essere di aiuto per il maintainer, ma anche questi
  non sono strettamente necessari per la creazione di pacchetti. (vedi
  /usr/share/doc/devscripts/README.gz)

  <item><em>fakeroot</em> - questa programma di utilit� permette di emulare i
  privilegi di root necessari per alcune parti del processo di
  creazione.
  (vedi <manref name="fakeroot" section="1">)

  <item><em>lintian</em> - questo � il verificatore dei pacchetti Debian,
  che permette di scoprire errori comuni dopo la costruzione del
  pacchetto e spiega gli errori trovati. (vedi
  <manref name="lintian" section="1">, /usr/share/doc/lintian/lintian.html/index.html)
  </list>

  <p>Infine, i pacchetti <em>molto importanti</em> che seguono, fanno 
  parte della sezione `doc' della distribuzione:

  <list>
  <item><em>debian-policy</em> - include la struttura e i contenuti
  dell'archivio, una serie di indicazioni sul disegno del sistema operativo, 
  lo standard della gerarchia del filesystem, e la cosa che (per te) �
  pi� importante � 
  che descrive gli obblighi che ogni pacchetto deve soddisfare per
  essere incluso nella distribuzione. (vedi 
  /usr/share/doc/debian-policy/policy.html/index.html)

  <item><em>developers-reference</em> - contiene tutto il materiale non
  specificatamente relativo ai dettagli tecnici della pacchettizzazione,
  come la struttura dell'archivio, come rinominare, rendere orfano o 
  prendere in carico un pacchetto, come fare gli NMU, come gestire 
  i bug, quando e dove fare i caricamenti, ecc.
  (vedi /usr/share/doc/developers-reference/developers-reference.html/index.html)
  </list>

  <p>Avrai anche bisogno di un pacchetto di crittografazione, PGP
  (i pacchetti pgp-*) oppure GPG (il pacchetto gnupg), per 
  <em>firmare</em> elettronicamente il tuo pacchetto. Questo �
  particolarmente importante se vuoi distribuirlo ad altri (e certamente
  accadr� quando il tuo lavoro sar� incluso in una distribuzione Debian).
  Tuttavia a causa di una legge sull'esportazione degli Stati Uniti
  piuttosto stupida (dai primi di settembre del 2000 questo non � pi�
  vero per�, il software crittografico � liberamente distribuibile fuori
  e dentro gli USA, N.d.T.), non puoi semplicemente scaricare questi
  pacchetti dal pi� vicino sito FTP Debian. Tuttavia Debian fornisce
  questi pacchetti attraverso un sito che non � fisicamente localizzato
  in USA, chiamato non-US.debian.org (ftp://non-us.debian.org/debian-non-US/). 
  Il tuo sito FTP avr� un file dal nome README.non-US, 
  che ti dir� dove trovare il pi� vicino mirror di quel sito.

  <p>Le brevi note date sino a questo punto servono solo come
  introduzione a cosa ciascun pacchetto fa. Prima di continuare, leggi
  approfonditamente la documentazione di ogni programma, almeno per
  un uso standard. Potr� sembrarti molto pesante farlo adesso, ma 
  pi� avanti sarai <em>lietissimo</em> di averlo fatto.
  
  Nota: <em>debmake</em> � un pacchetto che contiene alcuni programmi
  con funzioni simile a dh-make, ma il suo specifico uso
  <strong>non</strong> � illustrato in questo documento.
  Si rimanda al <url name="manuale di Debmake"
  id="http://www.debian.org/~jaldhar/"> per maggiori informazioni.

  <sect id="otherinfo">Altre informazioni

  <p>Ci sono due tipi di pacchetti che puoi creare, sorgente e binario.
  Un pacchetto sorgente contiene codice che puoi compilare in un
  programma. Un pacchetto binario contiene il solo programma finito.
  Non confondere il sorgente di un programma con i sorgenti del pacchetto
  del programma! Leggi gli altri manuali se hai necessit� di avere
  maggiori dettagli sulla terminologia.
  
  <p>In Debian, il termine `maintainer' � utilizzato per la persona che 
  crea pacchetti, `upstream author' per chi ha realizzato il programma,
  e  `upstream maintainer' per la persona che correntemente  manutiene
  quel programma, al di fuori di Debian. Generalmente author e upstream
  maintainer sono la stessa persona - e talvolta anche il maintainer
  � la stessa persona. Se hai realizzato un programma, e vuoi che faccia
  parte di Debian, sentiti libero di sottomettere la richiesta per
  diventare un maintainer.
  
  <p>Una volta creato il pacchetto (o mentre lo fai), dovrai diventare
  un maintainer Debian ufficiale, se vuoi che il tuo programma vada a
  far parte della prossima distribuzione (se il programma � utile
  perch� no?). La procedura � spiegata nella Guida di Riferimento
  per lo Sviluppatore. Ti invitiamo a leggerla.
  
  <chapt id="first">Primi passi

  <p>Mentre la documentazione all'indirizzo <url name="Angolo dello sviluppatore" id="http://www.debian.org/devel/">
  non � cos� chiara su da dove e come i nuovi maintainer dovrebbero
  partire con il loro lavoro, questo documento spiega ogni piccolo
  (sulle prime forse irrilevante) passo, e ti aiuta a creare il tuo primo
  pacchetto, facendoti fare una certa esperienza per poter creare le 
  successive versioni di questo e forse di altri pacchetti, pi� in l�.
  
  <sect id="choose">Scegli il tuo programma

  <p>Probabilmente avrai gi� scelto un pacchetto che vuoi costruire, 
  ma qui di seguito trovi alcune indicazioni, per te che sei un
  principiante:
  
  <list>
  <item>controlla se il pacchetto � gi� in distribuzione. Se usi una 
  distribuzione `stable', forse � meglio che vai alla
  <url name="pagina di ricerca dei pacchetti" id="http://www.debian.org/distrib/packages.html">.
  Se usi la distribuzione <strong>corrente</strong> `unstable',
  controlla con questi comandi:
  <example>
  dpkg -s programma
  dpkg -l '*programma*'
  </example>

  <item>consulta la <url name="pagina WNPP" id="http://www.debian.org/devel/wnpp/">
  e gli archivi della mailing list debian-devel per vedere se qualcun
  altro sta creando lo stesso pacchetto. 
  Se cos� fosse, contatta il maintainer corrente se pensi che occorra.
  Altrimenti, trova un altro programma interessante che nessuno 
  ha in mantenimento.
  </item>

  <item>il programma <strong>deve</strong> avere una licenza, 
  se possibile free, in accordo con le 
  <url name="Linee Guida per il Software Libero Debian" id="http://www.debian.org/social_contract.html#guidelines">.
  Se non � conforme a qualcuna di tali regole, pu� ancora essere incluso.
  Se non sei sicuro di dove debba essere incluso chiedi su <email/debian-legal@lists.debian.org/.
  </item>

  <item>il programma in questione certamente <strong>non</strong> dovrebbe girare
  come setuid root, o anche meglio, non dovrebbe richiedere di essere
  setuid o setgid a nessun utente.</item>

  <item>il programma non dovrebbe essere un daemon, o qualcosa che 
  debba essere installato nelle directory */sbin.
  </item>

  <item>il programma dovrebbe essere in forma di binario eseguibile,
  non provare ancora con delle librerie.
  </item>

  <item>dovrebbe essere ben documentato, o almeno comprensibile (a
  chiunque).
  </item>

  <item>dovresti contattare l'autore o gli autori del programma per
  controllare che siano d'accordo con la sua pacchettizzazione.
  � importante essere in grado di consultarsi con l'autore/i sul
  programma nel caso di problemi specifici del programma, per cui
  non provare a pacchettizzare prodotti software non in manutenzione. 
  </item>

  <item>infine, cosa non meno importante, dovresti essere sicuro che
  il programma funziona e averlo provato per un po'.
  </item>
  </list>

  <p>
  Ovviamente queste cose sono solo misure di sicurezza, intese per
  salvarti dall'ira degli utenti se fai qualcosa di sbagliato in 
  qualche daemon setuid...
  Una volta acquisita qualche esperienza nella pacchettizzazione, sarai
  anche in grado di creare quel tipo di pacchetti, ma anche lo
  sviluppatore pi� esperto consulta la mailing list debian-devel quando 
  ha qualche dubbio. E i partecipanti saranno lieti di darti una mano.

  <p>Per maggiori informazioni su queste cose, consulta la Guida di 
  Riferimento per lo Sviluppatore.

  <sect id="getit">Prendi il programma e provalo

  <p>La prima cosa da fare � trovare e scaricare il pacchetto originale.
  Si suppone che tu abbia gi� i file dei sorgenti recuperati dalla 
  homepage dell'autore. I sorgenti per programmi free Linux sono
  generalmente in formato tar/gzip (tarball), 
  con estensione .tar.gz, contengono
  una subdirectory dal nome programma-versione e tutti i sorgenti sotto
  di essa. Se il sorgente � in qualche altro formato di archiviazione
  (per esempio, il nome del file finisce in ".Z" o ".zip") scompattalo
  con i programmi appropriati, o chiedi a un esperto Debian se non sei
  sicuro su come scompattarlo correttamente (suggerimento: usa il comando
  `file archivio.estensione').

  <p>A titolo di esempio, utilizzer� un programma dal nome `gentoo', 
  un file manager per X11 basato su GTK+. Osserva che il programma in
  questione � gi� pacchettizzato ed ha subito sostanziali modifiche
  dal momento in cui questo testo � stato inizialmente scritto.

  <p>Crea una sottodirectory nella tua home dal nome `debian' o `deb'
  o un altro nome che ritieni appropriato (per es. anche ~/gentoo/
  sarebbe adatto in questo caso). Sposta l'archivio scaricato in essa
  e scompattalo (con `tar xzf gentoo-0.9.12.tar.gz'). Assicurati che
  non ci siano errori, anche qualcuno "irrilevante," perch� potrebbe
  probabilmente dare problemi di spacchettamento sul sistema di altri,
  i cui programmi di scompattazione potrebbero o meno ignorare tali
  anomalie.
  
  <p>A questo punto hai un'altra sottodirectory, dal nome
  `gentoo-0.9.12'. Spostati sotto tale directory e leggi
  <strong>approfonditamente</strong> la documentazione fornita.
  Generalmente ci sono file come README*, INSTALL*, *.lsm o *.html. 
  Devi trovare le istruzioni su come compilare correttamente e
  installare il programma (molto probabilmente, si assume che tu voglia
  installare sotto /usr/local/bin; non lo farai, ma trovi altro su
  questo argomento pi� in l� in <ref id="destdir">).

  <p>La procedura cambia da programma a programma, ma molti dei
  programmi pi� recenti hanno uno script `configure' che configura 
  i sorgenti sotto il tuo sistema e ti assicura che il sistema sia
  nella condizioni di compilarli. Dopo la configurazione (con
  il comando `./configure'), i programmi sono generalmente compilati
  con `make'. Alcuni supportano il comando `make check' per lanciare
  dei controlli automatici inclusi. L'installazione nelle directory
  destinazione viene generalmente fatta con `make install'.
  
  <p>Adesso prova a compilare ed eseguire il programma, per essere sicuro
  che lavori correttamente e niente sia andato male durante
  l'installazione o l'esecuzione.
  
  <p>Puoi anche lanciare generalmente `make uninstall' per rimuovere i
  file installati, e `make clean' (o meglio ancora `make distclean') per
  ripulire la directory di compilazione. 

  <sect id="namever">Operazioni che precedono `dh_make'

  <p>Dovresti iniziare la pacchettizzazione con una directory di
  sorgenti completamente ripulita, o semplicemente partendo da una
  nuova scompattazione dei sorgenti.

  <p>Per costruire correttamente il pacchetto, dovresti modificare il nome
  del programma originale in minuscolo (se gi� non lo fosse), e
  rinominare la directory in &lt;pacchetto&gt;-&lt;versione&gt;.
  
  <p>Se il nome del programma consiste di pi� di una parola, contrailo
  in una sola parola, o fanne una abbreviazione. Per esempio, il
  pacchetto del programma "John's little editor for X" potrebbe essere
  chiamato johnledx o jle4x, o qualsiasi altra cosa tu decida in modo
  da stare sotto un numero ragionevole di caratteri (per es. 20).

  <p>Controlla anche l'esatta versione del programma (che deve 
  essere inclusa nella versione del pacchetto). Se il programma non �
  numerato con versioni quali X.Y.Z, ma con qualche tipo di data, sei
  libero di utilizzare tale data come numero di versione, con un
  prefisso "0.0." (giusto nel caso in cui un upstream, un giorno, decida
  di rilasciare una versione pi� comoda come "1.0"). Cos� se la data 
  di rilascio fosse il 19 Dicembre 1998, potresti usare la stringa
  di versione 0.0.19981219. Alcuni programmi non hanno affatto una
  numerazione, nel qual caso dovresti contattare l'upstream maintainer,
  per vedere se viene usato qualche altro metodo di revisione.

  <sect id="dh_make">Esecuzione di `dh_make'

  <p>Assicurati di trovarti nella directory dei sorgenti del programma 
  e lancia il comando seguente:

  <p><example>
  dh_make -e tuo@indirizzo -f ../gentoo-0.9.12.tar.gz
  </example>

  <p>Ovviamente, sostituisci alla stringa "tuo@indirizzo" il tuo 
  indirizzo e-mail da includere come voce del changelog e in altri
  file, e al nome del file il nome originale del tarball dei sorgenti.
  Vedi <manref name="dh_make" section="1"> per dettagli.
 
  <p>Verranno visualizzate alcune informazioni. Ti verr� chiesto che 
  genere di pacchetto vuoi creare. Gentoo � un singolo pacchetto binario
  - crea un solo binario, e perci� un solo file .deb - per cui
  selezionerai la prima opzione con il tasto `s', e controllerai le 
  informazioni sullo schermo, confermando la scelta con &lt;enter&gt;. 
    
  <p>Come nuovo maintainer non sei incoraggiato a creare pacchetti con
  binari multipli o librerie, come spiegato prima. Non � difficile,
  effettivamente, ma richiede un po' di conoscenze ulteriori, per
  cui non descriveremo tutto questo nel seguito.
    
  <p>Osserva che dovresti lanciare dh_make <strong>una sola volta</strong>,
  perch� non avrebbe un comportamento corretto se lo eseguissi nuovamente
  nella stessa directory gi� "debianizzata". Questo significa anche che
  userai un metodo diverso per rilasciare una nuova revisione o una
  nuova versione del tuo pacchetto, in futuro. Leggi altro in merito in
  <ref id="update"> 
  
  <chapt id="modify">Modificare i sorgenti

  <p>Normalmente, i programmi si auto-installano in sottodirectory di /usr/local
  I pacchetti Debian invece non usano quella directory, dal momento che
  � riservata agli amministratori (o utenti) del sistema per uso
  privato. Questo significa che dovrai dare una occhiata al sistema 
  di compilazione del programma, partendo generalmente dal Makefile.
  Questo script sar� utilizzato da <manref name="make" section="1"> per
  creare automaticamente il programma. Per maggiori dettagli sui
  Makefile dai una occhiata a <ref id="rules">.

  <p>Osserva che se il tuo programma utilizza l'utilit� GNU
  <manref name="automake" section="1">
  e/o <manref name="autoconf" section="1">, questo significa che i
  sorgenti includono un Makefile.am e/o Makefile.in rispettivamente, e
  avrai bisogno di modificare questi ultimi file, poich� ogni esecuzione
  di automake provoca la riscrittura di Makefile.in con informazioni
  generate a partire dal suo file Makefile.am, e ogni esecuzione di 
  ./configure far� lo stesso con il corrispondente Makefile, con i dati
  ricavati dal file Makefile.in. Modificare i file Makefile.am richiede
  qualche conoscenza di automake - del quale puoi leggere la relativa
  documentazione in formato info - mentre modificare 
  Makefile.in � molto simile a
  modificare i Makefile, in pi� ponendo attenzione alle
  variabili, ovvero qualsiasi stringa di caratteri compresa fra `@',
  come ad esempio @CFLAGS@ or @LN_S@, che viene sostituita con
  l'effettivo valore ad ogni invocazione di ./configure.
  
  <p>Nota anche che in questo documento, non c'� spazio sufficiente
  per entrare in tutti i dettagli di come fare le modifiche, ma di
  seguito ecco alcuni problemi che spesso si incontrano.
  
  <sect id="destdir">Installazione in una sotto-directory

  <p>
  La maggior parte dei programmi ha una qualche maniera di installarsi 
  in una struttura di directory pre-esistente del tuo sistema,
  in modo che i binari vengano inclusi nel $PATH, e si possano trovare
  le pagine di manuale e i programmi in locazioni comuni. Dovrai 
  assicurarti che lo facciano correttamente, ma dovrai fare in modo
  che si installino in una sotto-directory temporanea che essi creeranno
  sotto la directory debian/, generalmente dal nome <tt>debian/tmp</tt>,
  dalla quale dli strumenti di manutenzione costruiranno un pacchetto .deb
  operativo. Ogni file contenuto in tale directory sar� installato
  sul sistema dell'utente, quando questi installa il tuo pacchetto. La
  sola differenza � che dpkg installer� i file a partire dalla radice.

  <p>
  Fondamentalmente avrai bisogno che il programma venga installato
  in debian/tmp, ma funzioni correttamente quando piazzato nella radice,
  cio� quando viene installato a partire dal pacchetto .deb. 
  Con programmi che
  usano GNU autoconf, questo � piuttosto semplice, perch� dh_make
  fornir� i comandi per fare tutto questo automaticamente, per cui
  potresti saltare la lettura di questa sezione. Invece con altri
  programmi, dovrai probabilmente esaminare e modificare i Makefile.
  
  <p>Questa � la parte rilevante del Makefile di gentoo:

  <p><example>
  # Where to put binary on 'make install'?
  BIN     = /usr/local/bin
  # Where to put icons on 'make install'? Note: if you change this,
  # gentoo will not find the icons as it starts up. You're going to
  # have to alter gentoo's icon path (in the config window, "Paths"
  # tab) to get it work.
  ICONS   = /usr/local/lib/gentoo/
  </example>

  <p>Prima di tutto questo, dovresti inserire due nuove righe che dicono:

  <p><example>
  # Edited for Debian GNU/Linux.
  DESTDIR =
  </example>
  poich� il processo di creazione le richiede (sar� spiegato pi� avanti in
  <ref id="rules">).

  <p>Successivamente il Makefile menziona la locazione finale del
  binario. Modifica semplicemente in:

  <p><example>
  # Where to put binary on 'make install'?
  BIN     = $(DESTDIR)/usr/X11R6/bin
  </example>

  <p>Ma perch� in quella directory e non in qualche altra? Perch� Debian
  ha definito alcune regole su dove i programmi devono essere
  installati. Questo � specificato nello Standard della Gerarchia del
  Filesystem (vedi /usr/share/doc/debian-policy/fhs/).
  Cos� dovremmo installare il binario in /usr/X11R6/bin invece che 
  in  /usr/local/bin e le pagine di manuale (non esistono in questo
  caso, ma quasi ogni programma ne ha una, per cui ne faremo una dopo)
  in  /usr/share/man/man1 invece che in /usr/local/man/man1.

  <p>Dopo di questo, abbiamo una situazione un po' pi� complessa. Se
  modifichi una riga in:
  <p><example>
  ICONS   = $(DESTDIR)/usr/share/gentoo/
  </example>
  che � conforme a tale politica, dovrai modificare alcuni sorgenti C.
  Ma dove e cosa cercare? Puoi trovare quanto occorre col comando:
  <p><example>
  grep -n usr/local/lib *.[ch]
  </example>
  (in ogni sotto-directory che contiene file con estensione .c e .h).
  Grep estrarr� il nome dei file e la linea in ciascuno, dove trova
  una occorrenza. A questo punto, edita questi file e in quelle righe
  sostituisci usr/local/lib con usr/share - e questo � tutto.
  Semplicemente sostituisci  usr/local/lib con la tua locazione, e fallo
  con accortezza, in modo da non sconvolgere il resto del codice, se non
  ne sai molto di programmazione C :-)

  <p>Dopo di questo, dovresti trovare il target install (cerca la riga
  che inizia con  `install:') e rinomina tutti i riferimenti a directory
  diverse da quelle definite all'inizio del Makefile. In precedenza,
  il target install di gentoo diceva:

  <p><example>
  # ----------------------------------------- Installation

  # You're going to have to be root to do this!
  install:        gentoo
                  install ./gentoo $(BIN)
                  install icons $(ICONS)
                  install gentoorc-example $(HOME)/.gentoorc
  </example>

  <p>Dopo la modifica invece:
  <example>
  # ----------------------------------------- Installation

  # You're going to have to be root to do this!
  install:        gentoo-target
                  install -d $(BIN) $(ICONS) $(DESTDIR)/etc
                  install ./gentoo $(BIN)
                  install -m644 icons/* $(ICONS)
                  install -m644 gentoorc-example $(DESTDIR)/etc/gentoorc
                  install -d $(DESTDIR)/usr/share/doc/gentoo/html
                  cp -a docs/* $(DESTDIR)/usr/share/doc/gentoo/html
  </example>

  <p>Se sei un lettore attento, avrai notato che ho modificato  `gentoo' in
  `gentoo-target' nella riga `install:'. Questo � quello che si
  definisce un bug fix :-)

  <p>Qualora effettuassi delle modifiche che non sono specificatamente 
  legate alla pacchettizzazione Debian, assicurati di inviarle
  all'upstream maintainer, in modo che possa includerle nella prossima
  revisione del programma. Nota che non devi inviare i file debian/* 
  all'upstream, ma dovresti farlo con ogni altra patch. E prova a 
  essere collaborativo con l'upstream, rendendo i tuoi fix non specifici
  per Debian o Linux (o anche Unix), prima di inviarli.
  
  <sect id="difflibs">Distinguere le librerie

  <p>C'� un altro problema comune: le librerie sono spesso diverse 
  da piattaforma a piattaforma. Per esempio, il Makefile pu� contenere
  un riferimento a una libreria che non esiste in Debian o anche in
  Linux. In tal caso occorre modificarlo in una libreria che esiste
  su Debian, e serva allo stesso scopo. Il modo migliore � commentare
  le righe relative perch� potrebbero esserci altri che proveranno 
  a compilare su piattaforme diverse, e in questo modo potrebbero ottenere un
  suggerimento su quali possano essere i problemi.
  
  <p>Cos�, se c'� una riga nel Makefile del programma (o nel
  Makefile.in) che dice qualcosa del tipo (e il programma non compila):

  <p><example>
  LIBS = -lcurses -lsomething -lsomethingelse
  </example>

  <p>Modificala come segue, e molto probabilmente funzioner�:
  <p><example>
  LIBS = -lncurses -lsomething -lsomethingelse
  #LIBS = -lcurses -lsomething -lsomethingelse
  </example>

  <chapt id="dreq">Materiale richiesto sotto debian/

  <p>C'� adesso una nuova sotto-directory nella directory principale
  del programma (`gentoo-0.9.12'), il cui nome � `debian'. Ci sono un certo
  numero di file in questa directory. Andremo a modificarli allo scopo
  di adattare il comportamento del pacchetto. I pi� importati fra essi
  sono `control', `changelog', `copyright' e 'rules', 
  che sono richiesti per tutti i pacchetti.

  <sect id="control">Il file `control' 

  <p>Questo file contiene vari valori che dpkg e dselect useranno per 
  la gestione del pacchetto. Questo � il file control che dh_make crea
  per noi.

  <p><example>
  1  Source: gentoo
  2  Section: unknown
  3  Priority: optional
  4  Maintainer: Josip Rodin &lt;jrodin@jagor.srce.hr&gt;
  5  Standards-Version: 3.0.1
  6
  7  Package: gentoo
  8  Architecture: any
  9  Depends: ${shlibs:Depends}
  10 Description: &lt;insert up to 60 chars description&gt;
  11  &lt;insert long description, indented with spaces&gt;
  </example>
  (I numeri di riga sono aggiunti.)

  <p>Le righe 1-5 sono le informazioni di controllo per il pacchetto 
  sorgente. La riga 1 � il nome del pacchetto sorgente.

  <p>
  La riga 2 � la sezione della distribuzione in cui il pacchetto �
  incluso. Come ti sarai reso conto, Debian � diviso in sezioni: main
  (il software free), non-free (il software non esattamente free)
  e contrib (software free che dipende da software non free). Al di
  sotto di queste ci sono delle sotto-sezioni logiche che descrivono
  in breve di che genere di pacchetto si tratta. Cos� abbiamo `admin'
  per programmi da amministratore, `base' per gli strumenti di base, `devel'
  per gli strumenti per programmatori, `doc' per la documentazione, `libs' per
  le librerie, `mail' per programmi e demoni di posta elettronica, `net'
  per applicazioni e demoni di rete, `x11' per programmi specifici per
  X11, e molte altre.

  <p>Modifichiamo quindi la sezione in x11.

  <p>La riga 3 descrive quanto sia importante che l'utente installi tale
  pacchetto. Sezioni e priorit� sono usati effettivamente solo da
  dselect quando ordina i pacchetti e seleziona i default, e possono
  essere modificate dai maintaineri dell'archivio FTP 
  (e molto probabilmente lo saranno).
  Leggi il manuale della Policy per una guida su come configurare questi
  campi.
  
  <p>Dal momento che si tratta di un pacchetto a priorit� normale,
  lasciamo il campo al valore optional.

  <p>La riga 4 � nome e e-mail del maintainer.

  <p>La riga 5 � la versione degli standard di Debian Policy che questo
  pacchetto segue (le due versioni maggiori del pacchetto debian-policy
  installato.)

  <p>Se � richiesto qualche compilatore non standard o qualche altro
  strumento per creare il pacchetto, devi aggiungerlo qui alla riga `Build-Depends'
  ed elencare i pacchetti necessari. Per maggiori informazioni leggi il
  Packaging Manual (sezione 8.7) e la documentazione del pacchetto
  `build-essential'.

  <p>La riga 7 � il nome del pacchetto binario.

  <p>La riga 8 descrive l'architettura di CPU per la quale il pacchetto
  binario � stato compilato. Possiamo lasciare il valore "any" perch� 
  <manref name="dpkg-gencontrol" section="1"> lo riempir� con il valore
  appropriato per qualsiasi macchina sulla quale questo pacchetto �
  stato compilato (vedi La Guida di Riferimento per lo Sviluppatore per
  una spiegazione di cosa sia il porting di un pacchetto). Se il tuo
  pacchetto � indipendente dalla architettura (per esempio, uno script
  di shell o Perl, o un documento) modifica questo campo in "all", e
  leggi oltre in <ref id="rules"> sull'uso del metodo `binary-indep'
  invece di `binary-arch' nel costruire un pacchetto.
  
  <p>La riga 9 mostra una della pi� potenti caratteristiche del sistema
  di pacchettizzazione Debian. I pacchetti possono far riferimento 
  l'uno all'altro in vari modi. Oltre a Depends:, altri campi di 
  relazione sono Recommends:, Suggests:, Pre-Depends:, Conflicts:, 
  Provides:, e Replaces: .

  <p>Gli strumenti di gestione dei pacchetti come dpkg, dselect o APT (e i suoi 
  front-end) generalmente si comportano nello stesso modo quando
  trattano di queste relazioni; se cos� non fosse viene spiegato nel seguito.
  (vedi <manref name="dpkg" section="8">, <manref name="dselect" section="8">,
  <manref name="apt" section="8">, <manref name="console-apt" section="8">,
  <manref name="gnome-apt" section="8">)

  <p>Questo � ci� che in genere significano:

  <p><list>
  <item>Depends:
  <p>Il pacchetto non sar� installato sino a quando i pacchetti da cui
  dipende non lo sono. Usa questo valore se il tuo programma non funziona
  affatto (o causa un serio malfunzionamento) quando un pacchetto
  particolare non � gi� presente.</item>

  <item>Recommends:
  <p>Dselect non installer� il tuo pacchetto a meno che non lo siano
  i pacchetti che esso raccomanda. Dpkg e APT lo lasciano installare,
  invece. Usa questo valore per pacchetti che non sono strettamente
  necessari, ma tipicamente usati con il tuo programma.</item>

  <item>Suggests:
  <p>Quando un utente installa il tuo programma, dselect chiede se deve
  installare ogni pacchetto suggerito. Dpkg e APT non se ne curano
  molto. Usa questo valore per pacchetti che lavorano insieme al tuo
  programma, ma non sono affatto necessari. </item>

  <item>Pre-Depends:
  <p>Questo � pi� stringente di Depends:. Il pacchetto non sar�
  installato a meno che i pacchetti da cui pre-dipende non siano
  installati e  <em>correttamente configurati</em>. Usa questo valore
  con  <strong>molta</strong> prudenza, e solo dopo averne discusso
  nella mailing list debian-devel. Leggi: non usarlo affatto. :-)</item>

  <item>Conflicts:
  <p>Il pacchetto non sar� installato sino a quando tutti i pacchetti 
  con i quali va in conflitto non saranno stati rimossi.
  Usa questo valore se il tuo programma assolutamente non pu� girare
  (o causa un serio danno) se un particolare pacchetto �
  presente.</item>
  
  <item>Provides:
  <p>Per alcuni tipi di pacchetti dove ci sono alternative multiple
  sono stati definiti dei nomi virtuali. Puoi trovarne una lista 
  completa nel file
  /usr/share/doc/debian-policy/virtual-package-names-list.text.gz.
  Usa questo valore se il tuo programma fornisce una funzione di un
  pacchetto virtuale esistente .</item>

  <item>Replaces:
  <p>Usa questo valore quando il tuo programma sostituisce i file 
  di un altro pacchetto o sostituisce completamente un altro pacchetto
  (usato congiuntamente a Conflicts:). I file dei suddetti pacchetti
  saranno rimossi prima dell'installazione dei tuoi.
  </item>
  </list>

  <p>Tutti questi campi hanno una sintassi uniforme. Sono una lista di
  nomi di pacchetti separati da virgole. Questi nomi di pacchetti
  possono anche essere liste di nomi di pacchetti alternativi, separati
  da una barra verticale <tt>|</tt> (simbolo di pipe). Questi campi
  possono restringere la propria applicabilit� a una particolare 
  versione di ciascun pacchetto. Tali versioni sono elencate in 
  parentesi dopo ogni nome di pacchetto, e dovrebbero contenere una 
  relazione fra le possibili qui in elenco, seguita da un numero di
  versione. Le relazioni consentite sono:  <tt>&lt;&lt;</tt>,
  <tt>&lt;=</tt>, <tt>=</tt>, <tt>&gt;=</tt> e
    <tt>&gt;&gt;</tt> che stanno per strettamente precedente, precedente
    o uguale, esattamente uguale, successiva o uguale e strettamente
    successiva, rispettivamente.
  
  <p>L'ultima caratteristica che hai necessit� di conoscere �
  $(shlibs:Depends). Questa verr� automaticamente generata da  <manref
  name="dh_shlibdeps" section="1"> e riempita da  <manref
  name="dh_gencontrol" section="1"> con i nomi delle librerie condivise 
  che usa il tuo programma, quali libc6 o xlib6g, in modo che tu non
  debba stare a specificarle da solo. Detto ci� possiamo lasciare la 
  riga 9 come �.
  
  <p>La riga 10 contiene la lista dei suggerimenti. Qui c'� solo `file',
  perch� gentoo pu� usare alcune funzionalit� fornite da quel
  programma/pacchetto.

  <p>La riga 11 � una breve descrizione. Gli schermi di molte persone
  sono larghi 80 colonne, per cui non dovrebbe essere di pi� di 60
  caratteri. Modificherai tale campo in "A fully GUI configurable GTK+
  file manager".
  
  <p>La riga 12 contiene una descrizione estesa. Dovrebbe essere un 
  paragrafo dove vengono dati pi� dettagli sul pacchetto. La colonna 1
  di ogni riga dovrebbe essere vuota. Non ci devono essere righe
  vuote in mezzo, ma puoi mettere un . (punto) in una colonna, per simularle. 
  Inoltre, non ci deve essere pi� di una riga vuota dopo la descrizione.
  
  <p>Questo � il file control aggiornato:

  <p><example>
  1  Source: gentoo
  2  Section: x11
  3  Priority: optional
  4  Maintainer: Josip Rodin &lt;jrodin@jagor.srce.hr&gt;
  5  Standards-Version: 3.0.1
  6
  7  Package: gentoo
  8  Architecture: any
  9  Depends: ${shlibs:Depends}
  10 Suggests: file
  11 Description: A fully GUI configurable GTK+ file manager
  12  gentoo is a file manager for Linux written from scratch in pure C. It
  13  uses the GTK+ toolkit for all of its interface needs. gentoo provides
  14  100% GUI configurability; no need to edit config files by hand and re-
  15  start the program. gentoo supports identifying the type of various
  16  files (using extension, regular expressions, or the 'file' command),
  17  and can display files of different types with different colors and icons.
  18  .
  19  gentoo borrows some of its look and feel from the classic Amiga file
  20  manager "Directory OPUS" (written by Jonathan Potter).
  </example>
  (Ho aggiunto i numeri di riga.)

  <sect id="copyright">Il file `copyright'

  <p>Questo file contiene le informazioni sui riferimenti, copyright
  e licenza del pacchetto upstream. Il suo formato non � dettato dalla 
  Policy, ma i contenuti lo sono (sezioni 6.5). Dh_make ne ha creato
  uno di default, quello di seguito:

  <p><example>
  1  This package was debianized by Josip Rodin &lt;jrodin@jagor.srce.hr&gt; on
  2  Wed, 11 Nov 1998 21:02:14 +0100.
  3
  4  It was downloaded from &lt;fill in ftp site&gt;
  5
  6  Upstream Author(s): &lt;put author(s) name and email here&gt;
  7
  8  Copyright:
  9
  10 &lt;Must follow here&gt;
  </example>
  (Ho aggiunto i numeri di riga.)

  <p>Le cose importanti da aggiungere a questo file sono l'indirizzo
  da cui il pacchetto � stato preso e l'effettiva nota di copyright e
  licenza. Devi includere la licenza completa, a meno che non sia una delle 
  comuni licenze di free software, come la GNU GPL o LGPL, la BSD o
  l'Artistic, nel quale caso puoi semplicemente fare riferimento
  all'opportuno file in /usr/share/common-licenses/ che esiste su tutti
  i sistemi Debian. Gentoo � rilasciato sotto la GNU General Public
  License, cos� modificheremo come segue il file:

  <p><example>
  1  This package was debianized by Josip Rodin &lt;jrodin@jagor.srce.hr&gt; on
  2  Wed, 11 Nov 1998 21:02:14 +0100.
  3
  4  It was downloaded from: ftp://ftp.obsession.se/gentoo/
  5
  6  Upstream author: Emil Brink &lt;emil@obsession.se&gt;
  7
  8  This software is copyright (c) 1998-99 by Emil Brink, Obsession
  9  Development.
  10
  11 You are free to distribute this software under the terms of
  12 the GNU General Public License.
  13 On Debian systems, the complete text of the GNU General Public
  14 License can be found in /usr/share/common-licenses/GPL file.
  </example>
  (Ho aggiunto i numeri di riga.)

  <sect id="changelog">Il file `changelog'

  <p>Questo � un file obbligatorio, che ha un formato speciale descritto
  nel Packaging Manual (sezione 3.2.3). Tale formato � usato da dpkg e
  altri programmi per ricavare il numero di versione, revisione,
  distribuzione e livello di urgenza del tuo pacchetto.
  
  <p>Per te � ugualmente importante dal momento che � una buona 
  cosa avere documentato tutte le modifiche apportate. Questo aiuter� 
  chi scarica il tuo pacchetto a vedere velocemente se ci sono problemi 
  non risolti con il pacchetto, che dovrebbe sapere. Sar� salvato come
  `/usr/share/doc/gentoo/changelog.Debian.gz' nel pacchetto binario.
  
  <p>Dh_make ne crea uno di default, che appare cos�:

  <p><example>
  1  gentoo (0.9.12-1) unstable; urgency=low
  2
  3   * Initial Release.
  4
  5  -- Josip Rodin &lt;jrodin@jagor.srce.hr&gt; Wed, 11 Nov 1998 21:02:14 +0100
  6
  7  Local variables:
  8  mode: debian-changelog
  9  End:
  </example>
  (Ho aggiunto i numeri di riga.)

  <p>La riga 1 � il nome del pacchetto, versione, distribuzione e
  livello di urgenza. Il nome deve corrispondere al nome del pacchetto
  sorgente, la distribuzione dovrebbe essere `unstable' o `experimental'
  (per ora), e il livello non dovrebbe essere modificato in qualcosa
  maggiore di `low'. :-).

  <p>Le righe 3-5 sono voci di log, dove documenti le modifiche fatte 
  nella revisione del pacchetto (non le modifiche di upstream - c'� un 
  file speciale a tale scopo, creato dall'autore di upstream, installato
  come /usr/share/doc/gentoo/changelog.gz). Le nuove righe devono essere
  inserite prima della riga pi� in alto, che inizia con un asterisco
  (`*'). Puoi farlo con <manref name="dch" section="1">, <manref
  name="emacs" section="1"> (le righe 7-9 contengono informazioni di
  modalit� per l'editor Emacs), o qualsiasi altro text editor. Devi
  metterci qualcosa di questo genere:
  
  <p><example>
  1  gentoo (0.9.12-1) unstable; urgency=low
  2
  3   * Initial Release.
  4   * This is my first Debian package.
  5   * Adjusted the Makefile to fix $DESTDIR problems.
  6
  7  -- Josip Rodin &lt;jrodin@jagor.srce.hr&gt; Wed, 11 Nov 1998 21:02:14 +0100
  8
  9  Local variables:
  10  mode: debian-changelog
  11 End:
  </example>
  (Ho aggiunto i numeri di riga.)

  <p>Quando rilasci una nuova revisione, devi incrementare il numero di
  versione. Puoi farlo con un semplice  `dch -i' o esplicitamente con
  `dch -v &lt;version&gt;-&lt;revision&gt;'  e quindi inserire i
  commenti utilizzando il tuo editor preferito. Suggerimento: come fare
  a scrivere facilmente la data nel formato richiesto? Usa `822-date', o
  `date -R'.
  
  <p>Informazioni sulla nuova versione sono aggiunte all'inizio del file
  changelog. Il changelog appare in questo modo, subito dopo:

  <p><example>
  1  gentoo (0.9.12-2) unstable; urgency=low
  2
  3   * Fixed a glitch in the menu file.
  4
  5  -- Josip Rodin &lt;jrodin@jagor.srce.hr&gt; Wed, 11 Nov 1998 22:15:39 +0100
  6
  7  gentoo (0.9.12-1) unstable; urgency=low
  8
  9   * Initial Release.
  10  * This is my first Debian package.
  11  * Adjusted the Makefile to fix $DESTDIR problems.
  12
  13 -- Josip Rodin &lt;jrodin@jagor.srce.hr&gt; Wed, 11 Nov 1998 21:02:14 +0100
  14
  15 Local variables:
  16 mode: debian-changelog
  17 End:
  </example>
  (Ho aggiunto i numeri di riga.)

  <p>Puoi leggere di pi� sulle nuove versioni/revisioni dei pacchetti
  pi� avanti in <ref id="update">.

  <sect id="rules">Il file `rules'

  <p>Ora occorre dare una occhiata alle regole esatte che 
  <manref name="dpkg-buildpackage" section="1"> user� per creare
  effettivamente il pacchetto. Questo file � in effetti un altro
  Makefile, dato che � eseguito con `make -f', ma diverso da quello
  dei sorgenti upstream.
  
  <p>Tutti i file `rules', come ogni Makefile, consistono di diverse
  regole che specificano come gestire i sorgenti. Ogni regola consiste
  di target e nomi di file o nomi di azione che devono essere intraprese
  (per es. `build:' o `install:'.) Le regole che tu vuoi siano eseguite
  sono invocate come argomenti a riga di comando (per esempio,
  `./debian/rules build' o `make -f rules install'.) Dopo il nome del
  target, puoi fornire i nomi delle dipendenze, il programma o file da
  cui dipende quella regola. A seguire, ci pu� essere un qualsiasi
  numero di comandi (indentati con  &lt;tab&gt;!), finch� si trova
  una riga vuota. Da quel punto inizia un'altra regola. Righe vuote
  multiple e linee che iniziano con `#' (hash) sono trattate come
  commenti e ignorate

  <p>Sarai probabilmente confuso ora, ma sar� tutto pi� chiaro dopo
  l'esame del file  `rules' che dh_make fornisce come default. Dovresti
  anche leggere la voce `make' in info per maggiori informazioni.

  <p>La cosa importante da capire, a proposito del file rules creato da dh_make,
  � che si tratta solo di un suggerimento. Funzioner� per semplici
  pacchetti, ma per i pi� complicati non avere remore nell'aggiungere o togliere
  qualcosa ad esso, per accomodarlo alle tue necessit�. L'unica cosa che
  non devi modificare sono i nomi delle regole, perch� gli strumenti usano tutti
  gli stessi nomi, come richiesto dal  Packaging Manual.
  
  <p><example>
  1  #!/usr/bin/make -f
  2  # Made with the aid of dh_make, by Craig Small
  3  # Sample debian/rules that uses debhelper. GNU copyright 1997 by Joey Hess.
  4  # Some lines taken from debmake, by Christoph Lameter.
  5
  6  # Uncomment this to turn on verbose mode.
  7  #export DH_VERBOSE=1
  8
  9  # This is the debhelper compatability version to use.
  10 export DH_COMPAT=1
  11
  12 build: build-stamp
  13 build-stamp:
  14	dh_testdir
  15
  16	# Add here commands to compile the package.
  17	$(MAKE)
  18
  19	touch build-stamp
  20
  21 clean:
  22	dh_testdir
  23	dh_testroot
  24	rm -f build-stamp
  25
  26	# Add here commands to clean up after the build process.
  27	-$(MAKE) clean
  28
  29	dh_clean
  30
  31 install: build-stamp
  32	dh_testdir
  33	dh_testroot
  34	dh_clean -k
  35	dh_installdirs
  36
  37	# Add here commands to install the package into debian/tmp.
  38	$(MAKE) install DESTDIR=`pwd`/debian/tmp
  39
  40 # Build architecture-independent files here.
  41 binary-indep: build install
  42 # We have nothing to do by default.
  43
  44 # Build architecture-dependent files here.
  45 binary-arch: build install
  46 #	dh_testversion
  47	dh_testdir
  48	dh_testroot
  49 #	dh_installdebconf
  50	dh_installdocs
  51	dh_installexamples
  52	dh_installmenu
  53 #	dh_installemacsen
  54 #	dh_installpam
  55 #	dh_installinit
  56	dh_installcron
  57	dh_installmanpages
  58	dh_installinfo
  59 #	dh_undocumented
  60	dh_installchangelogs
  61	dh_link
  62	dh_strip
  63	dh_compress
  64	dh_fixperms
  65	# You may want to make some executables suid here.
  66	dh_suidregister
  67 #	dh_makeshlibs
  68	dh_installdeb
  69 #	dh_perl
  70	dh_shlibdeps
  71	dh_gencontrol
  72	dh_md5sums
  73	dh_builddeb
  74
  75 binary: binary-indep binary-arch
  76 .PHONY: build clean binary-indep binary-arch binary install
  </example>
  (Ho aggiunto i numeri di riga.)

  <p>Hai probabilmente familiarit� con righe come la prima, dagli
  script di shell e Perl. Essa dice al sistema operativo che questo file
  deve essere processato usando /usr/bin/make. 
  
  <p>Le righe dalla 12 alla 19 descrivono la regola `build' (e la figlia
   `build-stamp') che lanciano il Makefile della applicazione per
   compilare il programma.
  
  <p>La regola `clean', come specificata nelle righe 21-29, ripuliscono
  ogni binario non necessario e file autogenerati, lasciati in giro
  dalla creazione del pacchetto. Questa regola deve lavorare tutte le
  volte (anche quando l'albero dei sorgenti � gi� ripulito!) per cui usa
  le opzioni di forzatura (per es. per rm, cio� -f), oppure ignora i
  valori di ritorno (con un `-' prima del nome del comando.)
  
  <p>Il processo di installazione, la regola `install', inizia a riga 31.
  Fondamentalmente lancia la regola `install' del Makefile del programma,
  ma installa in  `pwd`/debian/tmp - questo � il motivo per cui abbiamo
  specificato $(DESTDIR) come directory root per l'installazione nel
  Makefile di gentoo.
  
  <p>Come suggeriscono i commenti, la regola `binary-indep', alla riga
  41, � usata per costruire i pacchetti indipendenti dalla architettura.
  Dal momento che non ne abbiamo, non verr� fatto niente in questo caso. Se il
  tuo pacchetto fosse del tipo `Architecture: all', avresti bisogno di
  includere tutti i comandi per costruire i pacchetti sotto tale regola,
  e lasciare la regola successiva (`binary-arch') vuota, invece.
  
  <p>Fino alla prossima regola in `binary-arch', dalla riga 45 alla 73,
  lanciamo una serie di piccoli programmi di utilit� dal pacchetto debhelper che
  svolgono varie operazioni sui file del tuo pacchetto per renderlo
  conforme alla Policy.
  
  <p>I nomi iniziano con dh_, e il resto � la descrizione di cosa fa
  effettivamente il programma di utilit�. � tutto abbastanza auto esplicativo, ma ecco
  qualche spiegazione addizionale:
  
  <list>
  <item><manref name="dh_testdir" section="1"> controlla di trovarsi 
  	nella giusta directory (cio� la directory superiore dei
	sorgenti),
  <item><manref name="dh_testroot" section="1"> controlla che tu abbia
  	i privilegi di root che sono necessari per i target  binary*, e
	effettua operazioni di pulizia,
  <item><manref name="dh_installmanpages" section="1"> 
  	copia tutte le pagine di man che pu� trovare nell'albero 
	dei sorgenti del pacchetto (attenzione, questo � DWIM),
  <item><manref name="dh_strip" section="1">
  	elimina le intestazioni per il debugging dagli eseguibili e
	librerie, per renderli pi� piccoli,
  <item><manref name="dh_compress" section="1"> comprime pagine di 
  	man e documentazioni pi� grandi di 4kB,
  <item><manref name="dh_installdeb" section="1"> copia i file legati
  	al pacchetto (per es. gli script da maintainer) sotto la 
	directory debian/tmp/DEBIAN,
  <item><manref name="dh_shlibdeps" section="1"> calcola le dipendenze
  	da librerie condivise di librerie ed eseguibili,
  <item><manref name="dh_gencontrol" section="1"> aggiorna e installa 
  	il file control,
  <item><manref name="dh_md5sums" section="1"> genera i codici di
  	controllo MD5 per tutti i file del pacchetto.
  </list>

  <p>Per informazioni pi� complete su cosa fanno tutti questi script
  dh_*, e quali sono le loro altre opzioni, leggi le rispettive pagine di
  manuale. Ci sono alcuni altri, alle volte utili, script dh_*, che non
  sono menzionati qui. Se ne avessi bisogno, leggi la documentazione
  di debhelper.
  
  <p>La sezione binary-arch � quella dove dovresti effettivamente
  commentare qualsiasi riga che richiama funzionalit� che non occorrono.
  Per gentoo, commenter� tutte le righe con testversion, emacsen, pam, 
  init, cron, manpages, info,
  undocumented, suidregister, makeshlibs e perl, semplicemente perch�
  gentoo non le richiede. Inoltre alla linea 60, avr� bisogno di
  aggiungere `FIXES', che � il nome del file di changelog dell'upstream. 

  <p>Le ultime due righe (insieme con le altre non spiegate qui) sono
  solo cose pi� o meno necessarie, delle quali puoi leggere nel manuale
  del make e nel  Packaging Manual. Al momento, non � essenziale 
  conoscerle.
  
  <chapt id="dother">Altri file sotto debian/

  <p>Vedrai che ci sono altri file nella sottodirectory debian/, molti dei
  quali con suffisso `.ex', che sta a indicare degli esempi. Se volessi
  usarli o avessi necessit� di farlo, esaminali insieme alla
  documentazione relativa (suggerimento: il Policy Manual), rinominali
  per eliminare il suffisso `.ex', e modificali insieme al file rules
  se necessario. Alcuni di questi file, quelli pi� comunemente usati, sono
  spiegati nelle sezioni seguenti.
  
  <sect id="readme">README.Debian

  <p>Qualsiasi dettaglo extra o discrepanza fra il pacchetto originale
  e la versione debianizzata, deve essere documentata qui. Dh_make 
  ne crea uno di default, che appare come segue:

  <example>
  gentoo for Debian
  ----------------------

  &lt;possible notes regarding this package - if none, delete this file&gt;

  Josip Rodin &lt;jrodin@jagor.srce.hr&gt;, Wed, 11 Nov 1998 21:02:14 +0100
  </example>

  <p>Poich� non dobbiamo aggiungere altro qui, � possibile cancellare
  questo file.

  <sect id="conffiles">conffiles

  <p>Una delle esperienze pi� tedianti con il software, capita quando si passa 
  parecchio tempo a configurare con tutti gli sforzi un programma, per vedersi
  poi cancellate tutte le modifiche effettuate, a seguito di un aggiornamento.
  Debian risolve questo problema marcando i file di configurazione in modo
  che quando si aggiorna un pacchetto venga richiesto se si vogliono
  conservare i vecchi file di configurazione, o meno. 
  Farai questo inserendo il path completo di ciascun file di
  configurazione (generalmente in /etc), uno per riga, in un file che si
  chiama conffiles.

  <p>Gentoo ha un file di configurazione, /etc/gentoorc, e lo inseriremo
  nel file `conffiles'. Non � in effetti necessario avere conffiles se 
  il tuo programma non ha file di configurazione.

  <sect id="dirs">dirs

  <p>Questo file specifica le directory che occorrono, ma che la normale 
  procedura di installazione (make install), per qualche motivo, non crea.

  Per default, contiene:
  <p><example>
  usr/bin
  usr/sbin
  </example>

  <p>Osserva che lo slash prefisso non � incluso. Cambieremo normalmente
  tale file come segue:
  <p><example>
  usr/X11R6/bin
  usr/X11R6/man/man1
  </example>
  
  ma queste directory sono gi� create nel Makefile, per cui non ci serve
  neanche tale file, e possiamo cancellarlo.

  <sect id="manpage">manpage.1.ex

  <p>I file che finiscono in *.ex, sono esempi di come aggiungere un
  certo tipo di supporto al pacchetto. Per usarne uno, modificalo e
  rimuovi l'estensione .ex. Se non intendi usarlo, cancellalo
  semplicemente.

  <p>Il tuo programma dovrebbe avere una pagina di man. Se non ce l'ha
  questo file contiene lo scheletro di una pagina che puoi riempire. 
  Vedi la pagina di manuale relativa a <manref name="man" section="7">,
  per una breve descrizione di come creare una pagina man. Assicurati
  di rinominare tale file come il programma, ed usare come estensione la 
  sezione di manuale di cui deve far parte. Ecco una breve lista:
  
  <p><example>
  Sezione |     Descrizione      |     Note
     1     User commands          Comandi e script eseguibili
     2     System calls           Funzioni del kernel
     3     Library calls          Funzioni delle librerie di sistema
     4     Special files          File di /dev
     5     File formats           Per es. formato di /etc/passwd
     6     Games                  O programmi frivoli 
     7     Macro packages         Come le macro di man.
     8     System administration  Programmi usati da root.
     9     Kernel routines        Chiamate non standard e interne
  </example>
  
  <p>Cos� la manpage di gentoo dovrebbe chiamarsi gentoo.1, o gentoo.1x
  visto che � un programma X11. Non c'era nessuna pagina man nei sorgenti
  originali, per cui ne ho scritta una, usando le informazioni
  dell'esempio e la documentazione dall'upstream.

  <sect id="menu">menu.ex

  <p>Gli utenti di X Window generalmente hanno un window manager con un
  menu che pu� essere adattato per lanciare programmi. Se � stato installato  
  il pacchetto "menu", verr� creato un insieme di menu per ciascun
  programma del sistema. Non � richiesto dalla Policy Debian, ma gli
  utenti lo apprezzeranno sicuramente. Possiamo aggiungere Gentoo ai
  menu modificando questo file. Questo � quello che di default dh_make
  crea:
  
  <p><example>
  ?package(gentoo):needs=X11|text|vc|wm section=Apps/see-menu-manual\
    title="gentoo" command="/usr/bin/gentoo"
  </example>

  <p>Il primo campo specifica di che tipo di interfaccia il programma
  ha bisogno (per es. testuale o X11). Il successivo specifica la voce
  di menu e sottomenu dove dovrebbe apparire. L'elenco corrente delle
  sezioni si trova in:
  /usr/share/doc/debian-policy/menu-policy.html/ch2.html#s2.1
  Il terzo campo � il nome del programma. Il quarto � il testo che
  effettivamente appare nel menu. Infine, il sesto campo � la riga di comando
  che lancia il programma.
  
  <p>Adesso, cambieremo la voce di menu in questo:
  <p><example>
  ?package(gentoo):needs=X11 section=Apps/Misc \
    title="Gentoo" command="/usr/X11R6/bin/gentoo"
  </example>

  <p>Vedi <manref name="menufile" section="5">, <manref name="update-menus" section="1">
  e /usr/share/doc/debian-policy/menu-policy.html/ per maggiori informazioni.

  <sect id="watch">watch.ex

  <p>Puoi usare questo file insieme ai programmi 
  <manref name="uscan" section="1">
  e <manref name="uupdate" section="1"> (nel pacchetto devscripts)
  per controllare il sito da dove hai recuperato il sorgente originale.
  Questo � quello che vi ho inserito:

  <p><example>
  # watch control file for uscan
  # Site		Directory	Pattern			Version	Script
  ftp.obsession.se	/gentoo		gentoo-(.*)\.tar\.gz	debian	uupdate
  </example>

  <p>Suggerimento: collegati a Internet, 
  e prova a eseguire "uscan" nella directory del programma, dopo avere
  creato il file. E leggi le pagine di manuale.

  <sect id="doc-base">ex.doc-base

  <p>Se il tuo pacchetto ha pagine HTML o qualsiasi altra documentazione (a
  parte le pagine man e i documenti info), dovresti usare il file
  `doc-base' per registrarle, in modo che l'utente possa trovarle, con
  <manref name="dhelp" section="1"> o <manref name="dwww" section="1"> per 
  esempio.

  <p>Il file doc-base di gentoo appare come segue:

  <p><example>
  Document: gentoo
  Title: Gentoo Manual
  Author: Emil Brink
  Abstract: This manual describes what Gentoo is, and how it can be used.
  Section: Apps/Tools

  Format: HTML
  Index: /usr/share/doc/gentoo/html/index.html
  Files: /usr/share/doc/gentoo/html/*.html
  </example>

  <p>Per informazioni sul formato del file, vedi 
  <manref name="install-docs" section="8">
  e il manuale di doc-base, in /usr/doc/doc-base/doc-base.html/index.html.

  <sect id="maintscripts">postinst.ex, preinst.ex, postrm.ex, prerm.ex

  <p>Questi file sono chiamati script del maintainer e sono posti
  nell'area di controllo del pacchetto e lanciati da dpkg quando il 
  pacchetto � installato, aggiornato o rimosso.

  <p>Per il momento, dovresti evitare qualsiasi modifica manuale degli
  script, se possibile, perch� sono complicati. Per maggiori
  informazioni guarda il  Packaging Manual alla sezione 6, e dai una
  occhiata a questi file di esempio forniti da dh_make.
  
  <p>A questo punto, dovresti essere pronto a creare il pacchetto.

  <chapt id="final">Passi finali

  <sect id="build">Costruzione del pacchetto

  <p>Spostati nella directory principale del programma e lancia il
  comando:

  <p><example>
  dpkg-buildpackage -rfakeroot
  </example>

  <p>Questo far� tutto il necessario per te, dovrai solo inserire la
  tua chiave PGP segreta, due volte. Fatto ci�, vedrai quattro nuovi
  file nella directory solita (~/debian/):   
  <p><list>
  <item><em>gentoo_0.9.12-1_i386.deb</em>
  <p>Questo � il pacchetto binario completo. Puoi usare dpkg o
  dselect per installarlo e rimuoverlo, come per ogni altro pacchetto.

  <item><em>gentoo_0.9.12.orig.tar.gz</em>
  <p>Questo � il codice sorgente originale raccolto qui in modo che
  se qualcun'altro volesse ricreare il pacchetto da zero, potrebbe
  farlo. O anche, se non stesse usando il sistema di pacchettizzazione
  Debian, ma avesse bisogno di scaricare il sorgente e compilare
  manualmente.
  
  <item><em>gentoo_0.9.12-1.dsc</em>
  <p>� un sommario del contenuto del codice sorgente. Questo file �
  generato dal file gentoo-0.9.12/debian/control, ed � usato
  quando si scompatta il sorgente con  <manref name="dpkg-source"
  section="1">. Questo file � firmato con PGP, in modo che si possa 
  essere sicuri che effettivamente � fatto da te. 
  
  <item><em>gentoo_0.9.12-1.diff.gz</em>
  <p>Questo file compresso contiene ogni singola modifica fatta al
  codice sorgente originale, in una forma nota come "diff unificata".
  Viene creata e usata da <manref name="dpkg-source" section="1">.

  <item><em>gentoo_0.9.12-1_i386.changes</em>
  <p>Questo file descrive tutte le modifiche fatte nella revisione
  corrente del pacchetto, ed � usata dai programmi di mantenimento
  dell'archivio FTP di Debian per installare i pacchetti binari 
  e sorgenti da l�. � parzialmente generato dal contenuto del file
  gentoo-0.9.12/debian/changelog e dal file .dsc.

  <p>Quando lavori sul pacchetto, cambieranno le modalit� di
  funzionamento e nuove funzionalit�
  potranno essere aggiunte. Quelli che scaricano il tuo pacchetto, possono
  quardare questo file per vedere velocemente quali sono i cambiamenti.
  Le lunghe stringhe di numeri sono codici di controllo MD5 per i file
  menzionati. Chi scarica questi file, pu� controllarli con <manref
  name="md5sum" section="1"> e se i numeri non corrispondessero
  saprebbe che il file relativo � corrotto, o � stato alterato. Questo file
  � firmato in PGP in modo che si possa essere sicuri che �
  effettivamente tuo.
  </list>

  <p>Con un grosso pacchetto, potresti non voler ricostruire tutto da zero,
  ogni volte che modifichi un dettaglio in debian/rules. Per motivi
  di testing puoi creare un file .deb, ricostruendo i sorgenti upstream
  come segue:
  
  <p><example>
  fakeroot debian/rules binary
  </example>

  <p>Assicurati che la tua regola `install' <strong>non</strong> abbia
  una regola figlia `install-stamp' (questo � il default attualmente),
  per essere sicuro che `dh_clean -k' sia lanciato ogni volta. Una
  volta finito con le operazioni di pulizia, ricorda di ricostruire
  usando la giusta procedura, per essere in grado di caricare il
  pacchetto correttamente.

  <sect id="checkit">Controllare il pacchetto per errori

  <p>Lancia <manref name="lintian" section="1"> sul tuo file .changes;
  questo programma fa una verifica in merito a molti comuni errori di
  pacchettizzazione. Il comando �:
  
  <p><example>
  lintian -i gentoo_0.9.12-1_i386.changes
  </example>
  
  <p>Ovviamente, sostituisci il nome del file con il nome del file
  changes generato per il tuo pacchetto. Se sembra che ci siano errori
  (le righe che iniziano con E:), leggi la spiegazione (le righe con
  N:), correggi e ricostruisci come descritto in <ref id="build">.  
  Se ci sono righe che iniziano con  W:, si tratta di warning, per cui
  puoi essere ragionevolmente sicuro che il pacchetto � ok 
  (ma molto probabilmente ha bisogno di qualche aggiustamento).
  
  <p>Osserva che puoi costruire il pacchetto con dpkg-buildpackage e
  lanciare lintian in un unico comando con <manref name="debuild"
  section="1">.

  <p>Guarda all'interno del pacchetto usando un file manager come 
  <manref name="mc" section="1">, o spacchettalo in una posizione
  temporanea usando <manref name="dpkg-deb" section="1">.
  Stai in guardia per file extra non necessari nel pacchetto binario 
  e sorgente, nel caso qualcosa vada male e un po' di robaccia non
  venga cancellata. Suggerimento: `zgrep ^+++ ../gentoo_0.9.12-1.diff.gz'
  ti dar� una lista di modifiche/aggiunte ai file sorgenti, e 
  `dpkg-deb -c gentoo_0.9.12-1_i386.deb' elencher� tutti i file nel pacchetto.
  
  <p>Installa il pacchetto per testarlo tu stesso, per esempio usando il
  comando <manref name="debi" section="1"> come root. 
  
  <p>Prova a installarlo e lanciarlo su una macchina che non sia la tua, e 
  verifica qualsiasi errore o warning durante l'installazione o l'esecuzione.

  <p>Pi� avanti, quando avrai creato una nuova versione, dovresti fare
  quanto segue per assicurare la aggiornabilit� di base del pacchetto:

  <list>
  <item>aggiorna dalla versione precedente (e dalla versione dell'ultimo rilascio di Debian),
  <item>torna indietro di versione,
  <item>installa il pacchetto come nuovo (cio�, senza una versione precedente installata),
  <item>disinstalla, installa di nuovo e quindi eliminalo.
  </list>

  <sect id="upload">Caricamento del pacchetto

  <p>Una volta testato il nuovo pacchetto approfonditamente, avrai necessit�
  di caricare questi file su master.debian.org, usando <manref name="dupload" section="1">.
  Per prima cosa devi creare il file di configurazione di dupload,
  ~/.dupload.conf . Scrivici dentro qualcosa come:

  <p><example>
  package config;
  $default_host = "master";
  
  $cfg{"master"}{"method"} = "scpb";
  $cfg{"master"}{"login"} = "joy";
  $cfg{"master"}{"visibleuser"} = "jrodin";
  $cfg{"master"}{"visiblename"} = "jagor.srce.hr";
  $cfg{"master"}{"fullname"} = "Josip Rodin";
  
  $cfg{"non-us"}{"method"} = "scpb";
  $cfg{"non-us"}{"login"} = "joy";
  $cfg{"non-us"}{"visibleuser"} = "jrodin";
  $cfg{"non-us"}{"visiblename"} = "jagor.srce.hr";
  $cfg{"non-us"}{"fullname"} = "Josip Rodin";
  
  1;
  </example>

  <p>Ovviamente, modifica le mie informazini personali con le tue, e 
  leggi la pagina man <manref name="dupload.conf" section="5"> per
  capire cosa significa ciascuna opzione.

  <p>A questo punto connettiti al tuo provider Internet, e scrivi
  questo comando:
  
  <p><example>
  dupload --to master gentoo_0.9.12-1_i386.changes
  </example>

  <p>Dupload verifica che i codici di controllo MD5 dei file siano
  coerenti con quelli del file .changes, per cui ti avvertir� di 
  ricreare il pacchetto come descritto in 
  <ref id="build">, per caricare appropriatamente il pacchetto.

  <p>Dupload ti chieder� la password su master.debian.org, caricher� 
  il pacchetto e far� un breve annuncio del tuo caricamento su
  <email/debian-devel-changes@lists.debian.org/ se necessario.

  <p>Se vivi in Europa, potrai usare qualche altra coda di caricamento
  invece di master. Per dettagli, guarda in
  <manref name="dupload" section="1">,
  <manref name="dupload.conf" section="5"> e nella Guida di
  Riferimento per lo sviluppatore.

  <sect id="update">Aggiornamento del pacchetto

  <p>Supponiamo che sia stato segnalato un bug del tuo pacchetto,
  la #54321, e che si riferisca a un problema che sei in grado di risolvere.
  Per creare una nuova revisione Debian del pacchetto, hai bisogno di:

  <list>
  <item>Correggere il problema nel pacchetto sorgente, ovviamente.

  <item>Aggiungere un nuova revisione nel file changelog Debian, con 
  `dch -i', includere una breve descrizione del bug e la soluzione,
  seguita da: "Closes: #54321". In questo modo, la sottomissione del
  bug sar� automaticamente chiusa dal software di mantenimento, nel 
  momento in cui il tuo pacchetto sar� accettato nell'archivio Debian.
  
  <item>Ripeti quanto fatto in <ref id="build">, <ref id="checkit">,
  e <ref id="upload">. La differenza � che questa volta il sorgente
  originale non sar� incluso, dal momento che non � stato modificato
  e gi� esiste nell'archivio Debian.
  </list>

  <p>Adesso consideriamo una situazione differente, un po' pi�
  complicata - una nuova versione upstream � stata rilasciata, e 
  ovviamente vuoi pacchettizzarla. Avrai bisogno di fare quanto segue:
  
  <list>
  <item>Scarica i nuovi sorgenti e sposta il relativo archivio (per
  es. dal nome `gentoo-0.9.13.tar.gz') nella directory al di sopra 
  del vecchio albero di sorgenti (per es. ~/debian/).

  <item>Spostati nella vecchia directory di sorgenti e lancia:

  <example>
  uupdate -u gentoo-0.9.13.tar.gz
  </example>

  Ovviamente, sostituisci questo nome di file con il nome
  dell'archivio dei sorgenti del tuo programma.  
  <manref name="uupdate" section="1"> rinominer� in modo appropriato
  quell'archivio, prover� ad applicare tutte le modifiche dal tuo 
  precedente file .diff.gz, e aggiorner� il nuovo file
  debian/changelog.

  <item>Portati nella directory `../gentoo-0.9.13', il nuovo albero
  di sorgenti del pacchetto, e ripeti quanto fatto in 
  <ref id="build">, <ref id="checkit">, e <ref id="upload">.
  </list>

  <p>Osserva che se hai configurato il file `debian/watch' come descritto
  in <ref id="watch">, puoi lanciare <manref name="uscan" section="1"> 
  per cercare automaticamente i sorgenti aggiornati, scaricarli e
  lanciare update.

  <sect id="helpme">Dove chiedere aiuto

  <p>Prima di deciderti a fare una domanda in qualche area pubblica,
  sei pregato di leggere i dannati manuali. 
  Questo include la documentazione in 
  /usr/share/doc/dpkg,
  /usr/share/doc/debian, i file /usr/share/doc/package/*  e le pagine 
  man/info di tutti i programmi menzionati in questo articolo.
  Quando ricevi una segnalazione di bug (s�, effettive segnalazioni
  di bug) saprai che � il momento di fare fare riferimento al
  <url name="Sistema Debian di tracciamento dei bug" id="http://www.debian.org/Bugs/">
  e leggere la documentazione l�, per essere in grado di gestire le 
  segnalazioni in modo efficiente.
  
  <p>Iscrivendoti alla mailing list dei Debian Mentor all'indirizzo 
  <email/debian-mentors@lists.debian.org/
  puoi cercare collaborazione con sviluppatori Debian esperti che
  ti aiuteranno con le richieste che potresti ricevere.
  Puoi iscriverti a tale lista inviando una e-mail a
  <email/debian-mentors-request@lists.debian.org/ 
  con la parola `subscribe' nel soggetto del messaggio.

  <p>Se ancora hai delle domande, chiedi sulla mailing list degli 
  sviuppatori Debian all'indirizzo
  <email/debian-devel@lists.debian.org/. Puoi iscriverti ad essa
  inviando una e-mail a 
  <email/debian-devel-request@lists.debian.org/ 
  con la parola `subscribe' nel soggetto del messaggio.
  Se sei gi� uno sviluppatore Debian, dovresti essere comunque iscritto
  ad essa.

  <p>Anche se tutto funziona bene, � venuto il momento di iniziare
  a pregare. Perch�? Perch� in poche ore (o giorni), gli utenti di
  tutto il mondo inizieranno a usare il pacchetto, e se hai commesso
  qualche errore critico, sarai bombardato dalle mail di numerosi 
  utenti Debian arrabbiati... sto scherzando :-)

  <p>Rilassati e sii pronto per le segnalazioni dei bug, perch� 
  c'� molto lavoro da fare prima di essere completamente in linea
  con le politiche Debian
  (ancora una volta, leggi la <em>documentazione reale</em> per dettagli).
  Buona fortuna!
 </book>

</debiandoc>