Compilation de Samba¶
- Compilation de Samba
Tableau des versions¶
- Releases Samba : https://www.samba.org/samba/history/
- Version des paquets samba chez Ubuntu : https://packages.ubuntu.com/search?keywords=samba&searchon=names&suite=all§ion=all
- Dépôts samba chez EOLE : http://eole.ac-dijon.fr/samba/dists/
Version EOLE | Version Ubuntu | Samba Ubuntu | Seth EOLE | Maintenance |
2.6.0 | xenial | 4.3.11 | 4.3.11 (ubuntu) | version obsolète |
2.6.1 | xenial | 4.3.11 | 4.7.12 (eole) #29404 | version obsolète |
2.6.2 | xenial | 4.3.11 | 4.7.12 (eole) | version obsolète |
2.7.0 | bionic | 4.7.6 | 4.9.18 (eole) | samba non maintenu |
2.7.1 | bionic | 4.7.6 | 4.9.18 (eole) | samba non maintenu |
2.7.2 | bionic | 4.7.6 | 4.13 (eole/focal) | OK |
2.8.0 | focal | 4.10.7 | 4.13 (ubuntu) | OK |
2.8.0 | focal | 4.10.7 | 4.13 (ubuntu) | OK |
État des lieux¶
Novembre 2020¶
- EOLE 2.6 basé sur Xenial Xerus 16.04 LTS n'est plus maintenu
- EOLE 2.7.0/2.7.1 : utilisent un Samba 4.9.18 recompilé par nos soins mais plus maintenu par aucune distribution
- EOLE 2.7.2 : utilise un Samba 4.11 (et maintenant 4.13 : #33398) rétro-porté d'Ubuntu 20.04 LTS (Focal Fossa)
- EOLE 2.8.0/2.8.1 : utilisent le samba 4.11 (maintenant 4.13) natif d'Ubuntu 20.04 LTS (Focal Fossa)
Avril 2009¶
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) avec les patches (CVE) de la 4.9.6.
Ceci tout en conservant nos deux patches actuels :- 0035-workaround-bug-when-demoting-RODC.patch
- 0036-dlz-bind-zone-transfer-restriction.patch
Dépôts Samba¶
https://dev-eole.ac-dijon.fr/projects/samba/repository
Sur la forge EOLE, on retrouve le dépôt samba ainsi que des dépôts pour chacune les librairies associées :- cmocka
- ldb
- talloc
- tdb
- tevent
Dépôts distants¶
Pour Samba, plusieurs dépôts sont disponibles.
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 :
git clone https://salsa.debian.org/samba-team/samba.git cd samba git remote add dev-eole https://dev-eole.ac-dijon.fr/git/samba.git git remote add samba https://git.samba.org/samba.git
Une fois ces opérations réalisées, on doit obtenir la configuration suivante :
# git remote -v dev-eole ssh://git@dev-eole.ac-dijon.fr/samba.git (fetch) dev-eole ssh://git@dev-eole.ac-dijon.fr/samba.git (push) origin https://salsa.debian.org/samba-team/samba.git (fetch) origin https://salsa.debian.org/samba-team/samba.git (push) samba https://git.samba.org/samba.git (fetch) samba https://git.samba.org/samba.git (push)
NB : Le dépôt officiel de Samba n'a pas été utilisé dans les manipulation réalisées ce jour ;)
Branches distantes¶
Les branches que nous utilisons sont les suivantes :master
: branche de packaging Debianupstream_4.9
: sources samba-4.9 importées par Debian (NB : dans cette branche les patches sont déjà appliqués)pristine-tar
: upstream tarball au format "pristine"dist/eole/2.7.0/master
: branche de packaging EOLE (NB : dans cette branche les patches sont déjà appliqués)
NB1 : Pour forcer l'utilisation du dépôt "origin" pour la branche pristine-tar
, la commande suivante pourra être utilisée :
git checkout -b pristine-tar origin/pristine-tar
NB2 : Pour d'obtenir (checkout) la branche dist/eole/2.7.0/master
, il faut au préalable avoir exécuté :
git fetch dev-eole
Préparer le paquet¶
Fusionner les modifications¶
Pour commencer, mettre toutes les branches à jour :
git pull
À titre informatif, il est possible de lister tous les commits ajoutés depuis le dernier paquet EOLE à l'aide des tags (exemple) :
git log debian/2%4.9.2+dfsg-2-8-ga9af810f873..debian/2%4.9.5+dfsg-3
Se positionner sur la branche de packaging EOLE et fusionner le tag souhaité (le dernier en général) :
git checkout dist/eole/2.7.0/master git merge debian/2%4.9.5+dfsg-3
Cela entraîne généralement quelques conflits mais pas trop complexes :
debian/changelog
: move EOLE entries at the proper place in historydebian/patches/series
: keep EOLE/MTES patches
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.
Vérifier/Corriger les dépendances¶
Pour vérifier les dépendances de compilation, il est possible d'utiliser la commande indiquée dans le fichier README.sources :
grep ^VERSION lib/{talloc,tdb,tevent,ldb}/wscript
NB : Les versions actuellement disponibles dans le dépôt EOLE sont visibles dans le fichier Packages
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
.
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), ...
Si à cette étape, on s'aperçoit qu'une des librairies est à recompiler, aller voir Compiler et diffuser une librairie et revenez plus tard !
Ceci dit, si on en rate, on s'en apercevra très vite dans les étapes qui suivent ;)
NB : La bionic est en retard sur la Standards-Version
requise mais ce n'est pas bloquant.
NB : La bionic est en retard également sur les debhelper.
NB : La bionic est en retard également sur la version de python (impact sur les noms fichiers dans les .install notamment).
Valider les modifications¶
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.
Il est conseillé de vérifier toutes les modifications à l'aide de la commande suivante :
git diff HEAD~..HEAD
Si l'on est satisfait, on ajoute une nouvelle entrée dans le changelog avec le numéro de version souhaité et on commite.
Puis exporter le "upstream tarball" (nécessite le paquet git-buildpackage
) :
gbp export-orig
Cela crée une archive au format tar.xz
(exemple : samba_4.9.5+dfsg.orig.tar.xz
)
NB : comme par hasard, ça plante sous bionic (XD3_INVALID_INPUT
) mais fonctionne sous Debian !
Compiler et diffuser le paquet samba¶
Compiler le paquet¶
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 :
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 sed -e 's/^deb/deb-src/' /etc/apt/sources.list >> /etc/apt/sources.list.d/samba.list apt update apt install build-essential
Copier l'archive et sources (branche dist/eole/2.7.0/master du dépôt) :
scp samba_4.9.5+dfsg.orig.tar.xz root@eolebase.ac-test.fr: rsync -avz samba -e ssh root@eolebase.ac-test.fr:
NB : La copie des sources (dépôt) samba via ssh entraîne une erreur de liens symboliques par la suite !
Vérifier/installer les dépendances de compilation :
apt build-dep ./samba
Si à cette étape, on s'aperçoit qu'une des librairies est à recompiler, aller voir Compiler et diffuser une librairie et revenez plus tard !
Compiler le paquet (prévoir 40 minutes une fois lancé)
cd samba dpkg-buildpackage -sa --no-sign
- l'option
-sa
permet d'inclure les sources. Il ne faut pas la mettre si les sources ont déjà été inclues. - l'option
--no-sign
évite d'avoir une erreur lors de la tentative de signature des paquets ;)
Une fois le paquet compilé on obtient les fichiers deb, changes et dsc dans le répertoire supérieur.
Il est possible de vérifier la liste de ce qui a été compilé en consultant le fichier *.changes.
Signer le paquet¶
Sur la machine bionic-builder
, créer un répertoire dédié (exemple ~/samba
) puis copier les fichiers générés dedans :
scp *.*deb *.tar.xz *.dsc *.changes *.buildinfo buildd@bionic-builder.eole.lan:samba
Sur la machine bionic-builder
, signer les paquets à l'aide de la commande :
cd samba debsign -k eole *.changes
Publier le paquet¶
Sur la machine castor
, créer un répertoire dédié (exemple /srv/repository/samba/tmp/samba
) puis copier les paquets signés dedans :
scp * repository@castor:/srv/repository/samba/tmp/samba
Puis importer les paquets dans le dépôt :
cd /srv/repository/samba reprepro -v include samba-4.9 tmp/samba/*.changes
Il est possible de vérifier les paquets disponible à l'aide de la commande :
reprepro listfilter samba-4.9 '$Source (= samba)'
Finaliser le travail¶
Mettre à jour et pousser toutes les branches ...
FIXME
Compiler et diffuser une librairie (exemple :ldb)¶
Les étapes pour compiler une des librairies sont similaires à celles nécessaires à la compilation de samba.
Pour le cas de ldb
, il faut commencer par avoir clôné les dépôts :
git clone https://salsa.debian.org/samba-team/ldb.git cd ldb git remote add dev-eole https://dev-eole.ac-dijon.fr/git/ldb.git git remote add samba https://git.samba.org/ldb.gitOn retrouve les branches distantes suivantes :
master
: branche de packaging Debianupstream
: sources importées par Debian (NB : dans cette branche les patches sont déjà appliqués)pristine-tar
: upstream tarball au format "pristine"dist/eole/2.7.0/master
: branche de packaging EOLE (NB : dans cette branche les patches sont déjà appliqués)
Il faut ensuite préparer le paquet comme expliqué dans Samba et terminer par la commande :
gbp export-orig
Cela crée une archive au format tar.gz
(exemple : ldb_1.5.1+really1.4.6.orig.tar.gz
)
Il faut ensuite préparer la machine de compilation (cf. Samba et envoyer l'archive et le dépôt (branche dist/eole/2.7.0/master
) dessus.
Puis, vérifier/installer les dépendances de compilation et compiler :
apt build-dep ./ldb cd ldb dpkg-buildpackage -sa --no-sign
NB : ça peut également être assez long surtout si le paquet contient beaucoup de tests unitaires !
Liste des dépôts pour les bibliothèques¶
- https://salsa.debian.org/debian/cmocka.git
- https://salsa.debian.org/samba-team/ldb.git
- https://salsa.debian.org/samba-team/talloc.git
- https://salsa.debian.org/samba-team/tdb.git
- https://salsa.debian.org/samba-team/tevent.git
Ordre de compilation¶
Le jeu de dépendance impose un certain ordre de compilation :
talloc <---- tevent <---- ldb <----- samba tdb <-------------------’ cmocka <---------------’