Projet

Général

Profil

Samba » Historique » Version 68

Joël Cuissinat, 25/11/2021 12:43

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