Projet

Général

Profil

Samba » Historique » Version 62

Benjamin Bohard, 13/11/2019 17:00

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 24 Joël Cuissinat
NB1 : 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 1 Joël Cuissinat
git checkout -b pristine-tar origin/pristine-tar
59 24 Joël Cuissinat
</pre>
60 24 Joël Cuissinat
61 24 Joël Cuissinat
NB2 : Pour d'obtenir (checkout) la branche @dist/eole/2.7.0/master@, il faut au préalable avoir exécuté :
62 24 Joël Cuissinat
<pre>
63 24 Joël Cuissinat
git fetch dev-eole
64 8 Joël Cuissinat
</pre>
65 8 Joël Cuissinat
66 11 Joël Cuissinat
h2. Préparer le paquet
67 1 Joël Cuissinat
68 11 Joël Cuissinat
h3. Fusionner les modifications
69 11 Joël Cuissinat
70 9 Joël Cuissinat
Pour commencer, mettre toutes les branches à jour :
71 7 Joël Cuissinat
<pre>
72 9 Joël Cuissinat
git pull
73 1 Joël Cuissinat
</pre>
74 9 Joël Cuissinat
75 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) :
76 1 Joël Cuissinat
<pre>
77 11 Joël Cuissinat
git log debian/2%4.9.2+dfsg-2-8-ga9af810f873..debian/2%4.9.5+dfsg-3
78 11 Joël Cuissinat
</pre>
79 11 Joël Cuissinat
80 11 Joël Cuissinat
Se positionner sur la branche de packaging EOLE et fusionner le tag souhaité (le dernier en général) :
81 11 Joël Cuissinat
<pre>
82 1 Joël Cuissinat
git checkout dist/eole/2.7.0/master
83 11 Joël Cuissinat
git merge debian/2%4.9.5+dfsg-3
84 11 Joël Cuissinat
</pre>
85 11 Joël Cuissinat
86 11 Joël Cuissinat
Cela entraîne généralement quelques conflits mais pas trop complexes :
87 11 Joël Cuissinat
88 11 Joël Cuissinat
* @debian/changelog@: move EOLE entries at the proper place in history
89 11 Joël Cuissinat
* @debian/patches/series@: keep EOLE/MTES patches
90 11 Joël Cuissinat
91 35 Joël Cuissinat
%{color:darkblue}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.%
92 16 Joël Cuissinat
93 11 Joël Cuissinat
h3. Vérifier/Corriger les dépendances
94 11 Joël Cuissinat
95 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 :
96 12 Joël Cuissinat
<pre>
97 21 Joël Cuissinat
grep ^VERSION lib/{talloc,tdb,tevent,ldb}/wscript
98 12 Joël Cuissinat
</pre>
99 1 Joël Cuissinat
100 54 Joël Cuissinat
%{color:darkblue}NB : Les versions actuellement disponibles dans le dépôt EOLE sont visibles dans le fichier "Packages":http://test-eole.ac-dijon.fr/samba/dists/samba-4.9/main/binary-amd64/Packages%
101 53 Joël Cuissinat
102 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@.
103 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), ...
104 13 Joël Cuissinat
105 41 Joël Cuissinat
%{color:purple}Si à cette étape, on s'aperçoit qu'une des librairies est à recompiler, aller voir [[Samba#Compilation-dune-librairie-exemple-ldb|Compiler et diffuser une librairie]] et revenez plus tard !%
106 41 Joël Cuissinat
107 13 Joël Cuissinat
Ceci dit, si on en rate, on s'en apercevra très vite dans les étapes qui suivent ;)
108 13 Joël Cuissinat
109 36 Joël Cuissinat
%{color:darkblue}NB : La bionic est en retard sur la @Standards-Version@ requise mais ce n'est pas bloquant.%
110 13 Joël Cuissinat
111 61 Benjamin Bohard
%{color:darkblue}NB : La bionic est en retard également sur les debhelper.%
112 60 Benjamin Bohard
113 62 Benjamin Bohard
%{color:darkblue}NB : La bionic est en retard également sur la version de python (impact sur les noms fichiers dans les .install notamment).%
114 62 Benjamin Bohard
115 13 Joël Cuissinat
h3. Valider les modifications
116 13 Joël Cuissinat
117 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.
118 13 Joël Cuissinat
119 13 Joël Cuissinat
Il est conseillé de vérifier toutes les modifications à l'aide de la commande suivante :
120 13 Joël Cuissinat
<pre>
121 13 Joël Cuissinat
git diff HEAD~..HEAD
122 13 Joël Cuissinat
</pre>
123 13 Joël Cuissinat
124 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.
125 19 Joël Cuissinat
126 25 Joël Cuissinat
Puis exporter le "upstream tarball" (nécessite le paquet @git-buildpackage@) :
127 19 Joël Cuissinat
128 19 Joël Cuissinat
<pre>
129 19 Joël Cuissinat
gbp export-orig
130 19 Joël Cuissinat
</pre>
131 19 Joël Cuissinat
132 27 Joël Cuissinat
Cela crée une archive au format @tar.xz@ (exemple : @samba_4.9.5+dfsg.orig.tar.xz@)
133 26 Joël Cuissinat
134 34 Joël Cuissinat
%{color:red}NB : comme par hasard, ça plante sous bionic (@XD3_INVALID_INPUT@) mais fonctionne sous Debian !%
135 20 Joël Cuissinat
136 38 Joël Cuissinat
h2. Compiler et diffuser le paquet samba
137 13 Joël Cuissinat
138 38 Joël Cuissinat
h3. Compiler le paquet
139 17 Joël Cuissinat
140 29 Joël Cuissinat
Pour compiler, le plus simple est d'installer un Eolebase, lui ajouter les dépôts samba-4.9 et les dépôts sources Ubuntu ainsi que le paquet build-essential :
141 1 Joël Cuissinat
<pre>
142 29 Joël Cuissinat
echo -e "deb [ arch=amd64 ] http://test-eole.ac-dijon.fr/samba samba-4.9 main\ndeb-src [ arch=amd64 ] http://test-eole.ac-dijon.fr/samba samba-4.9 main" > /etc/apt/sources.list.d/samba.list
143 29 Joël Cuissinat
sed -e 's/^deb/deb-src/' /etc/apt/sources.list >> /etc/apt/sources.list.d/samba.list
144 1 Joël Cuissinat
apt update
145 29 Joël Cuissinat
apt install build-essential
146 1 Joël Cuissinat
</pre>
147 1 Joël Cuissinat
148 29 Joël Cuissinat
Copier l'archive et sources (branche dist/eole/2.7.0/master du dépôt) :
149 29 Joël Cuissinat
<pre>
150 29 Joël Cuissinat
scp samba_4.9.5+dfsg.orig.tar.xz root@eolebase.ac-test.fr:
151 32 Joël Cuissinat
rsync -avz samba -e ssh root@eolebase.ac-test.fr:
152 1 Joël Cuissinat
</pre>
153 31 Joël Cuissinat
154 42 Joël Cuissinat
%{color:purple}NB : La copie des sources (dépôt) samba via ssh entraîne une erreur de liens symboliques par la suite !%
155 31 Joël Cuissinat
156 31 Joël Cuissinat
Vérifier/installer les dépendances de compilation :
157 31 Joël Cuissinat
<pre>
158 31 Joël Cuissinat
apt build-dep ./samba
159 1 Joël Cuissinat
</pre>
160 1 Joël Cuissinat
161 42 Joël Cuissinat
%{color:purple}Si à cette étape, on s'aperçoit qu'une des librairies est à recompiler, aller voir [[Samba#Compilation-dune-librairie-exemple-ldb|Compiler et diffuser une librairie]] et revenez plus tard !%
162 38 Joël Cuissinat
163 43 Joël Cuissinat
Compiler le paquet (%{color:purple}prévoir 40 minutes% une fois lancé)
164 31 Joël Cuissinat
<pre>
165 31 Joël Cuissinat
cd samba
166 31 Joël Cuissinat
dpkg-buildpackage -sa --no-sign
167 31 Joël Cuissinat
</pre>
168 31 Joël Cuissinat
169 33 Joël Cuissinat
* l'option @-sa@ permet d'inclure les sources. Il ne faut pas la mettre si les sources ont déjà été inclues.
170 33 Joël Cuissinat
* l'option @--no-sign@ évite d'avoir une erreur lors de la tentative de signature des paquets ;)
171 30 Joël Cuissinat
172 44 Joël Cuissinat
Une fois le paquet compilé on obtient les fichiers deb, changes et dsc dans le répertoire supérieur.
173 44 Joël Cuissinat
Il est possible de vérifier la liste de ce qui a été compilé en consultant le fichier *.changes.
174 44 Joël Cuissinat
175 1 Joël Cuissinat
h3. Signer le paquet
176 45 Joël Cuissinat
177 45 Joël Cuissinat
Sur la machine @bionic-builder@, créer un répertoire dédié (exemple @~/samba@) puis copier les fichiers générés dedans :
178 45 Joël Cuissinat
<pre>
179 57 Joël Cuissinat
scp *.*deb *.tar.xz *.dsc *.changes *.buildinfo buildd@bionic-builder.eole.lan:samba
180 45 Joël Cuissinat
</pre>
181 45 Joël Cuissinat
182 45 Joël Cuissinat
Sur la machine @bionic-builder@, signer les paquets à l'aide de la commande :
183 1 Joël Cuissinat
<pre>
184 57 Joël Cuissinat
cd samba
185 45 Joël Cuissinat
debsign -k eole *.changes
186 45 Joël Cuissinat
</pre>
187 30 Joël Cuissinat
188 30 Joël Cuissinat
h3. Publier le paquet
189 30 Joël Cuissinat
190 46 Joël Cuissinat
Sur la machine @castor@, créer un répertoire dédié (exemple @/srv/repository/samba/tmp/samba@) puis copier les paquets signés dedans :
191 46 Joël Cuissinat
<pre>
192 46 Joël Cuissinat
scp * repository@castor:/srv/repository/samba/tmp/samba
193 46 Joël Cuissinat
</pre>
194 46 Joël Cuissinat
195 46 Joël Cuissinat
Puis importer les paquets dans le dépôt :
196 46 Joël Cuissinat
<pre>
197 46 Joël Cuissinat
cd /srv/repository/samba
198 46 Joël Cuissinat
reprepro -v include samba-4.9 tmp/samba/*.changes
199 46 Joël Cuissinat
</pre>
200 46 Joël Cuissinat
201 46 Joël Cuissinat
Il est possible de vérifier les paquets disponible à l'aide de la commande :
202 46 Joël Cuissinat
<pre>
203 46 Joël Cuissinat
reprepro listfilter samba-4.9 '$Source (= samba)'
204 46 Joël Cuissinat
</pre>
205 46 Joël Cuissinat
206 30 Joël Cuissinat
h3. Finaliser le travail
207 1 Joël Cuissinat
208 47 Joël Cuissinat
Mettre à jour et pousser toutes les branches ...
209 47 Joël Cuissinat
FIXME
210 28 Joël Cuissinat
211 38 Joël Cuissinat
h2. Compiler et diffuser une librairie (exemple :ldb)
212 48 Joël Cuissinat
213 48 Joël Cuissinat
Les étapes pour compiler une des librairies sont similaires à celles nécessaires à la compilation de samba.
214 48 Joël Cuissinat
215 48 Joël Cuissinat
Pour le cas de @ldb@, il faut commencer par avoir clôné les dépôts :
216 48 Joël Cuissinat
<pre>
217 48 Joël Cuissinat
git clone https://salsa.debian.org/samba-team/ldb.git
218 48 Joël Cuissinat
cd ldb
219 48 Joël Cuissinat
git remote add dev-eole https://dev-eole.ac-dijon.fr/git/ldb.git
220 48 Joël Cuissinat
git remote add samba https://git.samba.org/ldb.git
221 48 Joël Cuissinat
</pre>
222 48 Joël Cuissinat
223 48 Joël Cuissinat
On retrouve les branches distantes suivantes :
224 48 Joël Cuissinat
* @master@ : branche de packaging Debian
225 48 Joël Cuissinat
* @upstream@ : sources importées par Debian (NB : dans cette branche les patches sont déjà appliqués)
226 48 Joël Cuissinat
* @pristine-tar@ : upstream tarball au format "pristine"
227 48 Joël Cuissinat
* @dist/eole/2.7.0/master@ : branche de packaging EOLE (NB : dans cette branche les patches sont déjà appliqués)
228 49 Joël Cuissinat
229 49 Joël Cuissinat
Il faut ensuite préparer le paquet comme expliqué dans [[Samba#Pr%C3%A9parer-le-paquet]] et terminer par la commande :
230 49 Joël Cuissinat
<pre>
231 49 Joël Cuissinat
gbp export-orig
232 49 Joël Cuissinat
</pre>
233 50 Joël Cuissinat
234 50 Joël Cuissinat
Cela crée une archive au format @tar.gz@ (exemple : @ldb_1.5.1+really1.4.6.orig.tar.gz@)
235 51 Joël Cuissinat
236 51 Joël Cuissinat
Il faut ensuite préparer la machine de compilation (cf. [[Samba#Compiler-et-diffuser-le-paquet-samba]] et envoyer l'archive et le dépôt (branche @dist/eole/2.7.0/master@) dessus.
237 52 Joël Cuissinat
238 52 Joël Cuissinat
Puis, vérifier/installer les dépendances de compilation et compiler :
239 52 Joël Cuissinat
<pre>
240 52 Joël Cuissinat
apt build-dep ./ldb
241 52 Joël Cuissinat
cd ldb
242 52 Joël Cuissinat
dpkg-buildpackage -sa --no-sign
243 52 Joël Cuissinat
</pre>
244 55 Joël Cuissinat
245 55 Joël Cuissinat
246 55 Joël Cuissinat
%{color:purple}NB : ça peut également être assez long surtout si le paquet contient beaucoup de tests unitaires !%
247 58 Benjamin Bohard
248 58 Benjamin Bohard
h3. Liste des dépôts pour les bibliothèques
249 58 Benjamin Bohard
250 58 Benjamin Bohard
* https://salsa.debian.org/debian/cmocka.git
251 58 Benjamin Bohard
* https://salsa.debian.org/samba-team/ldb.git
252 58 Benjamin Bohard
* https://salsa.debian.org/samba-team/talloc.git
253 58 Benjamin Bohard
* https://salsa.debian.org/samba-team/tdb.git
254 58 Benjamin Bohard
* https://salsa.debian.org/samba-team/tevent.git
255 59 Benjamin Bohard
256 59 Benjamin Bohard
h3. Ordre de compilation
257 59 Benjamin Bohard
258 59 Benjamin Bohard
Le jeu de dépendance impose un certain ordre de compilation :
259 59 Benjamin Bohard
260 59 Benjamin Bohard
<pre>
261 59 Benjamin Bohard
talloc <---- tevent <---- ldb <----- samba
262 59 Benjamin Bohard
tdb <-------------------’
263 59 Benjamin Bohard
cmocka <---------------’
264 59 Benjamin Bohard
</pre>