Dans la continuité de mes vibrants billets pense-bête concernant reprepro, en voici un nouveau.

Reprepro permet de copier des paquets d’une distribution à une autre (fonction désignée par “pull” dans le programme). Pour Medibuntu, je l’utilise pour copier tous les paquets de la dernière distribution stable vers la distribution en cours de développement lors de l’ouverture du dépôt (ex : karmic -> lucid). Jusqu’ici, c’est parfait.

En revanche, je l’utilise aussi pour copier des paquets de la zone de test (ex : karmic-staging) vers la zone dite stable (ex : karmic). Et c’est là que ça se corse, si plusieurs paquets sont en tests, et qu’on ne veut en déplacer qu’une partie vers la zone stable. J’ai finalement vaincu ma flemme pour trouver une solution foireuse (mais moins que d’attendre que tous les paquets soient testés pour tous les passer en même temps), en utilisant les filtres proposés. Il y a probablement plus rapide, ou si ça se trouve, la nouvelle version (4.x.x, je suis resté à la 3.x.x) permet de faire ceci plus simplement, mais tant pis…

Supposons que le dépôt de test contienne plusieurs paquets sources (skype et googleearth) et plusieurs paquets binaires (skype, skype-static, skype-common, googleearth et googleearth-data), et qu’on ne veuille déplacer que skype*. Pour simplifier, le dépôt contient deux distributions (conf/distributions) :

Codename: karmic
[…]
Pull: StagingToKarmic
Codename: karmic-staging
[…]

Le fichier qui liste les déplacements autorisés (conf/pulls) contient :

# Rule to copy from karmic-staging to karmic
Name: StagingToKarmic
From: karmic-staging
FilterFormula: source (== skype) | package (== skype)

La ligne FilterFormula lui dit de ne déplacer que les paquets qui contiennent la valeur “skype” pour le champ Source (donc les paquets binaires skype-static, skype-common et skype) ou qui contiennent la valeur “skype” pour le champ Package (donc, le paquet binaire skype et le paquet source skype). De la même façon, si on ne voulait copier que les paquets arch:all, il suffirait d’écrire architecture (== all).

Enfin, pour exécuter la copie :

# on n'est jamais trop prudent
$ reprepro checkpull karmic
# quand on est sûr de soi
$ reprepro pull karmic
# pour vérifier
$ reprepro list karmic

Et hop ! ;)