Plop, on va faire simple. J'avais besoin de gérer des dépôts de paquets RPM et aussi envie de faire mumuse avec python. Bah ça donne ça :
On a le script buildrpmrepo.py qui affiche une zolie aide :
$ ./buildrpmrepo.py --help
Usage: buildrpmrepo.py [options]
Options:
-h, --help show this help message and exit
--base=BASE base dir for everything
--version=VERSION version of distro
--arch=ARCH architecture
--repo=REPO repository for symlinks to rpm
--fake run fake remake
--real run real remake
--unsigned link unsigned packages
--verbose if an action is performed, say it
--report like verbose but makes a report of all actions
--cleanup clean old versions/release of a package. dont touch
signed packages unless --force-delete
--force-delete force deletion of old packages, event if signed. use with
CAUTION.
--wipe-repo wipe repository instead of just remake missing/invalid
symlinks to RPM
Un petit n'exemple (tiré du code source) :
How to use ?
/home/rpmuser/rpm <-- base dir
Where we have RPMs:
base
RHEL6 <-- version
noarch <-- unvalid version/arch
i686 <-- valid version/arch
x86_64 <-- valid version/arch
other_rpms <-- for rpms from « outside », arch automaticaly discovered
Where we have repositories:
base
www/RHEL6-x86_64/RPMS.test <-- repository's root/name
Have a look in __init__, for __www and __link_relative
Use example for previous tree:
./buildrpmrepo.py --base /home/racvision/rpm --version RHEL6 --arch x86_64 --repo RPMS.test --cleanup --unsigned --real --report
En français :
- pour les paquets de la distribution RHEL6-x86_64
- créer/mettre à jour le dépôt RPMS.test, nettoyer les anciens paquets non signés (--force-delete supprimera aussi les paquets signés)
- prendre les paquets non signés dans le dépôt (ne pas mettre cette option ne fera prendre que les paquets signés)
- faire réellement les actions demandées (--fake fait une simulation)
- afficher un rapport d'exécution à la fin. (--verbose affiches les actions au fil de l'exécution)
Et on obtient ce genre de chose :
$ ../br-racdev-rh6-64.sh
=> Working on repo RPMS.racdevel for RHEL6 on arch x86_64
=> Options:
* Take unsigned packages
* Keep valid symlinks
* Real mode
* Print report at the end
4/6 Deleting duplicated packages…
* check_mk
+ delete check_mk-1.2.0p2-201306051211.noarch.rpm signed: False
+ take check_mk-1.2.0p2-201306051410.noarch.rpm signed: False
6/6 Populating repo…
Spawning worker 0 with 1 pkgs
Workers Finished
Gathering worker results
Saving Primary metadata
Saving file lists metadata
Saving other metadata
Generating sqlite DBs
Sqlite DBs complete
+ delete old : check_mk-1.2.0p2-201306051211.noarch.rpm (signed: False)
+ removed symlink : check_mk-1.2.0p2-201306051211.noarch.rpm
+ linked : check_mk-1.2.0p2-201306051410.noarch.rpm
À partir de « spawning worker » jusqu'à « sqlite DBs complete », c'est createrepo --update qui prend le relais, pour tout le reste, c'est pyrpm-manage.
C'est sous licence BSD (histoire d'en avoir une) ça requière python 2.6/2.7, python-rpm et ça tourne sur RHEL/CentOS 6, Fedora et même Debian (unstable).
Have fun.



