Projet

Général

Profil

Samba » Historique » Version 23

Joël Cuissinat, 12/04/2019 16:03

1 1 Joël Cuissinat
h1. Compilation de Samba
2 1 Joël Cuissinat
3 7 Joël Cuissinat
{{toc}}
4 7 Joël Cuissinat
5 1 Joël Cuissinat
h2. État des lieux
6 1 Joël Cuissinat
7 2 Joël Cuissinat
Lors de la rédaction de cet article, la version de samba sur EOLE 2.7.0 et 2.7.1 (bionic) était la 4.9.2 et le but était de passer en 4.9.5 (compilée par "Debian":https://packages.debian.org/sid/samba) avec les patches (CVE) de la "4.9.6":https://www.samba.org/samba/history/samba-4.9.6.html.
8 1 Joël Cuissinat
9 1 Joël Cuissinat
Ceci tout en conservant nos deux patches actuels :
10 3 Joël Cuissinat
* 0035-workaround-bug-when-demoting-RODC.patch
11 3 Joël Cuissinat
* 0036-dlz-bind-zone-transfer-restriction.patch
12 3 Joël Cuissinat
13 3 Joël Cuissinat
h2. Dépôts Samba
14 3 Joël Cuissinat
15 3 Joël Cuissinat
https://dev-eole.ac-dijon.fr/projects/samba/repository
16 4 Joël Cuissinat
17 4 Joël Cuissinat
Sur la forge EOLE, on retrouve le dépôt samba ainsi que des dépôts pour chacune les librairies associées :
18 4 Joël Cuissinat
*    cmocka 
19 4 Joël Cuissinat
*    ldb 
20 4 Joël Cuissinat
*    talloc 
21 4 Joël Cuissinat
*    tdb 
22 5 Joël Cuissinat
*    tevent
23 5 Joël Cuissinat
24 5 Joël Cuissinat
h3. Dépôts distants
25 5 Joël Cuissinat
26 5 Joël Cuissinat
Pour Samba, plusieurs dépôts sont disponibles.
27 5 Joël Cuissinat
Il est recommandé de commencer par cloner le dépôt Debian (salsa) afin que la branche master pointe vers celui-ci puis de déclarer les autres dépôts distants :
28 5 Joël Cuissinat
<pre>
29 5 Joël Cuissinat
git clone https://salsa.debian.org/samba-team/samba.git
30 23 Joël Cuissinat
cd samba
31 5 Joël Cuissinat
git remote add dev-eole https://dev-eole.ac-dijon.fr/git/samba.git
32 5 Joël Cuissinat
git remote add samba https://git.samba.org/samba.git
33 5 Joël Cuissinat
</pre>
34 5 Joël Cuissinat
35 5 Joël Cuissinat
Une fois ces opérations réalisées, on doit obtenir la configuration suivante :
36 5 Joël Cuissinat
<pre>
37 5 Joël Cuissinat
# git remote -v 
38 5 Joël Cuissinat
dev-eole	ssh://git@dev-eole.ac-dijon.fr/samba.git (fetch)
39 5 Joël Cuissinat
dev-eole	ssh://git@dev-eole.ac-dijon.fr/samba.git (push)
40 5 Joël Cuissinat
origin	https://salsa.debian.org/samba-team/samba.git (fetch)
41 5 Joël Cuissinat
origin	https://salsa.debian.org/samba-team/samba.git (push)
42 5 Joël Cuissinat
samba	https://git.samba.org/samba.git (fetch)
43 5 Joël Cuissinat
samba	https://git.samba.org/samba.git (push)
44 5 Joël Cuissinat
</pre>
45 5 Joël Cuissinat
46 5 Joël Cuissinat
NB : Le dépôt officiel de Samba n'a pas été utilisé dans les manipulation réalisées ce jour ;)
47 5 Joël Cuissinat
48 5 Joël Cuissinat
h3. Branches distantes
49 5 Joël Cuissinat
50 5 Joël Cuissinat
Les branches que nous utilisons sont les suivantes :
51 6 Joël Cuissinat
* @master@ : branche de packaging Debian
52 14 Joël Cuissinat
* @upstream_4.9@ : sources samba-4.9 importées par Debian (NB : dans cette branche les patches sont déjà appliqués)
53 6 Joël Cuissinat
* @pristine-tar@ : upstream tarball au format "pristine"
54 15 Joël Cuissinat
* @dist/eole/2.7.0/master@ : branche de packaging EOLE (NB : dans cette branche les patches sont déjà appliqués)
55 7 Joël Cuissinat
56 8 Joël Cuissinat
NB : Pour forcer l'utilisation du dépôt "origin" pour la branche @pristine-tar@, la commande suivante pourra être utilisée :
57 8 Joël Cuissinat
<pre>
58 8 Joël Cuissinat
git checkout -b pristine-tar origin/pristine-tar
59 8 Joël Cuissinat
</pre>
60 8 Joël Cuissinat
61 11 Joël Cuissinat
h2. Préparer le paquet
62 1 Joël Cuissinat
63 11 Joël Cuissinat
h3. Fusionner les modifications
64 11 Joël Cuissinat
65 9 Joël Cuissinat
Pour commencer, mettre toutes les branches à jour :
66 7 Joël Cuissinat
<pre>
67 9 Joël Cuissinat
git pull
68 1 Joël Cuissinat
</pre>
69 9 Joël Cuissinat
70 11 Joël Cuissinat
À titre informatif, il est possible de lister tous les commits ajoutés depuis le dernier paquet EOLE à l'aide des tags (exemple) :
71 1 Joël Cuissinat
<pre>
72 11 Joël Cuissinat
git log debian/2%4.9.2+dfsg-2-8-ga9af810f873..debian/2%4.9.5+dfsg-3
73 11 Joël Cuissinat
</pre>
74 11 Joël Cuissinat
75 11 Joël Cuissinat
Se positionner sur la branche de packaging EOLE et fusionner le tag souhaité (le dernier en général) :
76 11 Joël Cuissinat
<pre>
77 1 Joël Cuissinat
git checkout dist/eole/2.7.0/master
78 11 Joël Cuissinat
git merge debian/2%4.9.5+dfsg-3
79 11 Joël Cuissinat
</pre>
80 11 Joël Cuissinat
81 11 Joël Cuissinat
Cela entraîne généralement quelques conflits mais pas trop complexes :
82 11 Joël Cuissinat
83 11 Joël Cuissinat
* @debian/changelog@: move EOLE entries at the proper place in history
84 11 Joël Cuissinat
* @debian/patches/series@: keep EOLE/MTES patches
85 11 Joël Cuissinat
86 16 Joël Cuissinat
NB : dans notre exemple la lecture du changelog Debian a montré que les patches de sécurité (CVE) samba-4.9.6 étaient déjà appliqués sur la version 4.9.5 packagée par Debian.
87 16 Joël Cuissinat
88 11 Joël Cuissinat
h3. Vérifier/Corriger les dépendances
89 11 Joël Cuissinat
90 12 Joël Cuissinat
Pour vérifier les dépendances de compilation, il est possible d'utiliser la commande indiquée dans le fichier README.sources :
91 12 Joël Cuissinat
<pre>
92 21 Joël Cuissinat
grep ^VERSION lib/{talloc,tdb,tevent,ldb}/wscript
93 12 Joël Cuissinat
</pre>
94 1 Joël Cuissinat
95 12 Joël Cuissinat
Mais il faut également analyser en détail les versions (et les noms) des paquets mentionnés dans la section @Build-Depends@ du fichier @debian/control@.
96 13 Joël Cuissinat
Les pièges sont nombreux comme des noms de paquets différents entre Debian et Ubuntu (ex : libglusterfs-dev), des paquest re-numérotés avec le mot clé "really" (ex : ldb), ...
97 13 Joël Cuissinat
98 13 Joël Cuissinat
Ceci dit, si on en rate, on s'en apercevra très vite dans les étapes qui suivent ;)
99 13 Joël Cuissinat
100 13 Joël Cuissinat
NB : La bionic est en retard sur la @Standards-Version@ requise mais ce n'est pas bloquant.
101 13 Joël Cuissinat
102 13 Joël Cuissinat
h3. Valider les modifications
103 13 Joël Cuissinat
104 13 Joël Cuissinat
Une fois qu'on a réglé les conflits et que le fichier @debian/control@ nous semble correct, il est possible de réaliser un commit pour finaliser le merge.
105 13 Joël Cuissinat
106 13 Joël Cuissinat
Il est conseillé de vérifier toutes les modifications à l'aide de la commande suivante :
107 13 Joël Cuissinat
<pre>
108 13 Joël Cuissinat
git diff HEAD~..HEAD
109 13 Joël Cuissinat
</pre>
110 13 Joël Cuissinat
111 19 Joël Cuissinat
Si l'on est satisfait, on ajoute une nouvelle entrée dans le changelog avec le numéro de version souhaité et on commite.
112 19 Joël Cuissinat
113 19 Joël Cuissinat
Puis exporter le "upstream tarball" :
114 19 Joël Cuissinat
115 19 Joël Cuissinat
<pre>
116 19 Joël Cuissinat
gbp export-orig
117 19 Joël Cuissinat
</pre>
118 19 Joël Cuissinat
119 20 Joël Cuissinat
Cela crée une archive : orig.tar.xz
120 20 Joël Cuissinat
121 13 Joël Cuissinat
h2. Compilation du paquet samba
122 13 Joël Cuissinat
123 17 Joël Cuissinat
h3. Préparation du serveur de compilation
124 17 Joël Cuissinat
125 17 Joël Cuissinat
Pour compiler, le plus simple est d'installer un Eolebase et de lui ajouter les dépôts samba-4.9 et les dépôts sources Ubuntu.
126 17 Joël Cuissinat
<pre>
127 17 Joël Cuissinat
FIXME :à détailler
128 17 Joël Cuissinat
apt update
129 17 Joël Cuissinat
</pre>
130 22 Joël Cuissinat
131 22 Joël Cuissinat
Copier l'archive et sources (branche dist/eole/2.7.0/master du dépôt)