Samba » Historique » Version 47
Joël Cuissinat, 15/04/2019 14:27
| 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 | 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@. |
| 101 | 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), ... |
| 102 | 13 | Joël Cuissinat | |
| 103 | 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 !% |
| 104 | 41 | Joël Cuissinat | |
| 105 | 13 | Joël Cuissinat | Ceci dit, si on en rate, on s'en apercevra très vite dans les étapes qui suivent ;) |
| 106 | 13 | Joël Cuissinat | |
| 107 | 36 | Joël Cuissinat | %{color:darkblue}NB : La bionic est en retard sur la @Standards-Version@ requise mais ce n'est pas bloquant.% |
| 108 | 13 | Joël Cuissinat | |
| 109 | 13 | Joël Cuissinat | h3. Valider les modifications |
| 110 | 13 | Joël Cuissinat | |
| 111 | 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. |
| 112 | 13 | Joël Cuissinat | |
| 113 | 13 | Joël Cuissinat | Il est conseillé de vérifier toutes les modifications à l'aide de la commande suivante : |
| 114 | 13 | Joël Cuissinat | <pre> |
| 115 | 13 | Joël Cuissinat | git diff HEAD~..HEAD |
| 116 | 13 | Joël Cuissinat | </pre> |
| 117 | 13 | Joël Cuissinat | |
| 118 | 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. |
| 119 | 19 | Joël Cuissinat | |
| 120 | 25 | Joël Cuissinat | Puis exporter le "upstream tarball" (nécessite le paquet @git-buildpackage@) : |
| 121 | 19 | Joël Cuissinat | |
| 122 | 19 | Joël Cuissinat | <pre> |
| 123 | 19 | Joël Cuissinat | gbp export-orig |
| 124 | 19 | Joël Cuissinat | </pre> |
| 125 | 19 | Joël Cuissinat | |
| 126 | 27 | Joël Cuissinat | Cela crée une archive au format @tar.xz@ (exemple : @samba_4.9.5+dfsg.orig.tar.xz@) |
| 127 | 26 | Joël Cuissinat | |
| 128 | 34 | Joël Cuissinat | %{color:red}NB : comme par hasard, ça plante sous bionic (@XD3_INVALID_INPUT@) mais fonctionne sous Debian !% |
| 129 | 20 | Joël Cuissinat | |
| 130 | 38 | Joël Cuissinat | h2. Compiler et diffuser le paquet samba |
| 131 | 13 | Joël Cuissinat | |
| 132 | 38 | Joël Cuissinat | h3. Compiler le paquet |
| 133 | 17 | Joël Cuissinat | |
| 134 | 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 : |
| 135 | 1 | Joël Cuissinat | <pre> |
| 136 | 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 |
| 137 | 29 | Joël Cuissinat | sed -e 's/^deb/deb-src/' /etc/apt/sources.list >> /etc/apt/sources.list.d/samba.list |
| 138 | 1 | Joël Cuissinat | apt update |
| 139 | 29 | Joël Cuissinat | apt install build-essential |
| 140 | 1 | Joël Cuissinat | </pre> |
| 141 | 1 | Joël Cuissinat | |
| 142 | 29 | Joël Cuissinat | Copier l'archive et sources (branche dist/eole/2.7.0/master du dépôt) : |
| 143 | 29 | Joël Cuissinat | <pre> |
| 144 | 29 | Joël Cuissinat | scp samba_4.9.5+dfsg.orig.tar.xz root@eolebase.ac-test.fr: |
| 145 | 32 | Joël Cuissinat | rsync -avz samba -e ssh root@eolebase.ac-test.fr: |
| 146 | 1 | Joël Cuissinat | </pre> |
| 147 | 31 | Joël Cuissinat | |
| 148 | 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 !% |
| 149 | 31 | Joël Cuissinat | |
| 150 | 31 | Joël Cuissinat | Vérifier/installer les dépendances de compilation : |
| 151 | 31 | Joël Cuissinat | <pre> |
| 152 | 31 | Joël Cuissinat | apt build-dep ./samba |
| 153 | 1 | Joël Cuissinat | </pre> |
| 154 | 1 | Joël Cuissinat | |
| 155 | 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 !% |
| 156 | 38 | Joël Cuissinat | |
| 157 | 43 | Joël Cuissinat | Compiler le paquet (%{color:purple}prévoir 40 minutes% une fois lancé) |
| 158 | 31 | Joël Cuissinat | <pre> |
| 159 | 31 | Joël Cuissinat | cd samba |
| 160 | 31 | Joël Cuissinat | dpkg-buildpackage -sa --no-sign |
| 161 | 31 | Joël Cuissinat | </pre> |
| 162 | 31 | Joël Cuissinat | |
| 163 | 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. |
| 164 | 33 | Joël Cuissinat | * l'option @--no-sign@ évite d'avoir une erreur lors de la tentative de signature des paquets ;) |
| 165 | 30 | Joël Cuissinat | |
| 166 | 44 | Joël Cuissinat | Une fois le paquet compilé on obtient les fichiers deb, changes et dsc dans le répertoire supérieur. |
| 167 | 44 | Joël Cuissinat | Il est possible de vérifier la liste de ce qui a été compilé en consultant le fichier *.changes. |
| 168 | 44 | Joël Cuissinat | |
| 169 | 1 | Joël Cuissinat | h3. Signer le paquet |
| 170 | 45 | Joël Cuissinat | |
| 171 | 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 : |
| 172 | 45 | Joël Cuissinat | <pre> |
| 173 | 45 | Joël Cuissinat | scp *.*deb *.tar.xz *.dsc *.changes buildd@bionic-builder:samba |
| 174 | 45 | Joël Cuissinat | </pre> |
| 175 | 45 | Joël Cuissinat | |
| 176 | 45 | Joël Cuissinat | Sur la machine @bionic-builder@, signer les paquets à l'aide de la commande : |
| 177 | 45 | Joël Cuissinat | <pre> |
| 178 | 45 | Joël Cuissinat | debsign -k eole *.changes |
| 179 | 45 | Joël Cuissinat | </pre> |
| 180 | 30 | Joël Cuissinat | |
| 181 | 30 | Joël Cuissinat | h3. Publier le paquet |
| 182 | 30 | Joël Cuissinat | |
| 183 | 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 : |
| 184 | 46 | Joël Cuissinat | <pre> |
| 185 | 46 | Joël Cuissinat | scp * repository@castor:/srv/repository/samba/tmp/samba |
| 186 | 46 | Joël Cuissinat | </pre> |
| 187 | 46 | Joël Cuissinat | |
| 188 | 46 | Joël Cuissinat | Puis importer les paquets dans le dépôt : |
| 189 | 46 | Joël Cuissinat | <pre> |
| 190 | 46 | Joël Cuissinat | cd /srv/repository/samba |
| 191 | 46 | Joël Cuissinat | reprepro -v include samba-4.9 tmp/samba/*.changes |
| 192 | 46 | Joël Cuissinat | </pre> |
| 193 | 46 | Joël Cuissinat | |
| 194 | 46 | Joël Cuissinat | Il est possible de vérifier les paquets disponible à l'aide de la commande : |
| 195 | 46 | Joël Cuissinat | <pre> |
| 196 | 46 | Joël Cuissinat | reprepro listfilter samba-4.9 '$Source (= samba)' |
| 197 | 46 | Joël Cuissinat | </pre> |
| 198 | 46 | Joël Cuissinat | |
| 199 | 30 | Joël Cuissinat | h3. Finaliser le travail |
| 200 | 1 | Joël Cuissinat | |
| 201 | 47 | Joël Cuissinat | Mettre à jour et pousser toutes les branches ... |
| 202 | 47 | Joël Cuissinat | FIXME |
| 203 | 28 | Joël Cuissinat | |
| 204 | 38 | Joël Cuissinat | h2. Compiler et diffuser une librairie (exemple :ldb) |