Autres langues English ; français ; |
Contents
Introduction
Avant de valider toute modification dans perl-URPM (la liaison C librpm de bas niveau) ou dans urpmi, il est important d’exécuter leur testsuite (suite de validation) :
- lors de la modification de perl-URPM : lancer à la fois perl-URPM & urpmi testsuite
- lors de la modification d'urpmi : exécutez uniquement urpmi testsuite
Justification :
- perl-URPM comprend un testsuite minimal qui vérifie uniquement certains contrôles de base.
- urpmi testsuite est assez complet, testant à la fois rpm, perl-URPM et urpmi.
- Il détecte souvent des bogues dans les nouvelles versions de rpm qui n'ont pas été détectés par le testuite de rpm précédent (comme la régression de prise en charge de rpm v3, etc.)
Déboguer urpmi
S'il y a un problème lors de la validation d'urpmi, on peut faciliter le débogage d'urpmi en utilisant les options suivantes :
urpmi -vv
le rend plus bavard.urpmi --debug
apporte beaucoup d'informations de débogage (plus utile)urpmi --debug-librpm
rend librpm beaucoup plus explicite, utile lors du débogage d'un problème avec librpm (similaire à rpm -vv)urpmi --deploops
faire en sorte que librpm affiche des informations sur les boucles de dépendances (et où elles cassent les cycles de dépendances)
S'il y a un problème lors de l'exécution du testuite, on peut décommenter la ligne suivante dans t/helper.pm :
#$urpmi_debug_opt = '-v --debug'; |
Exécuter la suite de tests urpmi
Comme d'habitude avec tous les modules perl, la bonne façon d'exécuter perl-URPM ou urpmi testsuite est d'exécuter :
perl Makefile.PL make sudo make test |
Attention ! Les tests les plus intéressants doivent être exécutés en tant que root. D'où le |
La disposition du testsuite est :
t/ *.t the tests helper.pm common stuff for the tests data/ data for the tests SPECS/ spec files for generating test rpms rpm-*/ some old rpm v3 pkgs & some buggy rpms in order to check rpmlib itself media/ where test rpms & test repos are generated |
Urpmi testsuite plus rapide
perl-URPM testsuite est rapide à exécuter. urpmi testsuite se révèle assez lent en raison de ses tests approfondit. La partie la plus lente est la création proprement dite du jeu de données rpms (en t/media).
J'ai un petit script qui le rend plus rapide en :
- en évitant de recréer les RPM une fois créés (je m'assure de les recréer lors des tests avec une nouvelle version de RPM)
- utilisant
eatmydata
pour ignorer tous les appels sync() - exécutant des tests sur un montage tmpfs pour des E/S encore plus rapides
- pointant vers un serveur nginx local pour accélérer les tests de médias à distance
Le Script est (Masqué par défaut)
#!/bin/sh LOGS=../ULOG.14 export LC_ALL=C if systemctl status nginx.service; then echo "OK: nginx is good :-)" else echo "Not really relevant but…" echo "KO: nginx is down :-( !" echo "Please run sudo systemctl restart nginx.service " exit 1 fi [[ -f Makefile ]] || perl Makefile.PL # better not rebuild the packages...: if [[ -d t/media ]]; then mv -f t/02create_pkgs.t{,.i} elif [[ ! -e t/02create_pkgs.t ]]; then mv -f t/02create_pkgs.t{.i,} fi # Faster (no real writes or fsync()s): if ! df t|grep -q none; then # FIXME: use overlayfs instead? #mv t t2; mkdir t rm -fr t2; cp -al t t2 sudo mount -t tmpfs none t cp -a t2/* t fi # LOCAL MIRRORLIST (TODO: point to local api.mga.org instead): perl -pi -e 's!..MIRRORLIST!http://192.168.1.10/mageia/stable/x86_64!' t/superuser--mirrorlist.t # Even faster (no fsync() at all) AUTHOR_TESTING=1 sudo /usr/bin/time -v nohup eatmydata make test &> $LOGS #sudo /usr/bin/time -v nohup eatmydata strace -f make test &> $LOGS #sudo /usr/bin/time -v strace -e file,process -f nohup eatmydata make test &> $LOGS RC=$? echo "Logs are in $LOGS, exit code is $RC" exit $RC |
Bien sûr, l'URL doit être adaptée à votre miroir local (ou la commande "perl -pi -e" doit être commentée afin de pouvoir tester les serveurs Mageia).
Tests urpmi supplémentaires
Pour d'autres tests urpmi, je le télécharge sur CPAN en utilisant Pause, puis surveille tout dommage sur cpantesters. Actuellement, nous prenons en charge rpm-4.9 à 4.17, perl-5.8 à 5.34. Ainsi, le testsuite est exécutée sur diverses distributions Linux et FreeBSD, avec différentes versions de perl & rpm.
J'exécute habituellement perl-URPM & urpmi testsuite en utilisant echo test T/TV/TVIGNAUD/urpmi-v8.127.tgz | eatmydata cpan
moi-même sur des chroots mga[2-9]. (Cela nécessite de configurer l'agent cpan par rapport aux testeurs cpan)
On peut télécharger une version de test sur CPAN en basculant release_status => 'stable',
vers release_status => 'testing',
dans Makefile.PL.
Configuration du CPAN pour le téléchargement des rapports de test
Exécuter cpan
& accept local::lib si ce n'est pas root
Installez les dépendances nécessaires :
Sur Magia :
sudo urpmi 'perl(Term::ReadLine::Perl)' sudo urpmi 'perl(CPAN::Reporter)' perl-Metabase-Fact 'perl(Test::Reporter::Transport::Metabase)' |
Sur Fedora ou CentOS :
sudo yum install perl-File-HomeDir perl-File-Which-1.09-12.el7.noarch echo install CPAN::Reporter|eatmydata cpan 2>&1|tee LOG.CPAN-Reporter echo install Test::Reporter::Transport::Metabase cpan 2>&1|tee LOG.CPAN-Reporter2 echo install Metabase-Fact |cpan 2>&1|tee LOG.CPAN-Reporter3 echo install D/DA/DAGOLDEN/Metabase-Fact-0.025.tar.gz |cpan #echo 'force install Test::Reporter::Transport::Metabase'|cpan (as root or after chown -R tvignaud /usr/local) echo 'force install Config::Perl-V'|cpan echo 'install CPAN::Testers::Report'|cpan echo 'install Metabase::Client::Simple'|cpan cp -a ~/.cpan/build/Metabase-Fact-0.025-0/bin/metabase-profile /bin/ chmod +x /bin/metabase-profile |
Exécutez metabase-profile
et répondez avec votre nom et votre courriel. Exemple d'entrée :
Foo Bar foo.bar@gmail.com Foo Bar <foo.bar@gmail.com> |
metabase-profile mkdir ~/.cpantesters cp metabase_id.json ~/.cpantesters/ chmod 400 ~/.cpantesters/metabase_id.json |
Ensuite, configurez cpan correctement en exécutant cpan
et en tapant :
Les références
- urpmi doc nicely formated on CPAN (également disponible en ligne de commande avec
perldoc urpm
ou urpm::foobar) - perl-URPM doc nicely formated on CPAN (également disponible en ligne de commande avec
perldoc URPM
ou URPM::Resolve) - cpantesters: Getting Started
- cpantesters: QuickStart
- urpmi results on cpantesters.
- perl-URPM results on cpantesters.