Projet

Général

Profil

Samba » Historique » Version 63

Joël Cuissinat, 15/11/2019 15:46

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