From Mageia wiki
Jump to: navigation, search


Drakconf multiflag.png
Autres langues
English ; français ;

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 sudo ci-dessus. Sinon, tous les tests t/super-*.t seront ignorés et les test vous enverra uniquement une confirmation que le code est sain et que rpmbuild fonctionne.

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 :

$ cpan
cpan> o conf init test_report -> yes, <enter>, Foo Bar <foo.bar@gmail.com>, <enter> x4 cpan> o conf commit cpan> force test CPAN::Reporter cpan> force test T/TV/TVIGNAUD/URPM-5.125.tgz cpan> force test TVIGNAUD/urpmi-8.127.tgz cpan> q

Les références