tag:linuxfr.org,2005:/users/ivoireLinuxFr.org : les contenus de Rémi Duraffort2024-03-27T08:27:49+01:00/favicon.pngtag:linuxfr.org,2005:News/419372024-03-27T08:27:49+01:002024-03-27T09:18:54+01:00TuxRun et le noyau LinuxLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Il y a quelques années, je vous avais présenté <a href="https://tuxmake.org">TuxMake</a>, un utilitaire pour faciliter la (cross-)compilation du noyau Linux supportant une grande variété de toolchains différentes : <a href="//linuxfr.org/news/tuxmake-et-le-noyau-linux">TuxMake et le noyau Linux</a>.</p>
<p>TuxMake facilitant la compilation du noyau Linux, nous nous sommes alors attaqués à rendre l’exécution de ces noyaux plus aisée : ainsi est né <a href="https://tuxrun.org">TuxRun</a>.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://tuxmake.org" hreflang="en" href="https://linuxfr.org/redirect/113602">TuxMake</a></li><li>lien nᵒ 2 : <a title="https://tuxrun.org" hreflang="en" href="https://linuxfr.org/redirect/113603">TuxRun</a></li><li>lien nᵒ 3 : <a title="https://www.qemu.org/" hreflang="en" href="https://linuxfr.org/redirect/113604">QEMU</a></li><li>lien nᵒ 4 : <a title="https://www.arm.com/products/development-tools/simulation/fixed-virtual-platforms" hreflang="en" href="https://linuxfr.org/redirect/113605">FVP</a></li><li>lien nᵒ 5 : <a title="https://linaro.org/" hreflang="en" href="https://linuxfr.org/redirect/113606">Linaro</a></li></ul><div><h2 id="toc-exemples">Exemples</h2>
<p>TuxRun propose une interface en ligne de commande simple pour exécuter un noyau dans QEMU. TuxRun se charge de fournir un environnement suffisant pour démarrer le noyau avec QEMU.</p>
<pre><code class="bash">tuxrun --device qemu-arm64 <span class="se">\</span>
--kernel https://example.com/arm64/Image</code></pre>
<p>TuxRun va alors télécharger le noyau et un système de fichier compatible avec ARM64 puis lancer <strong>qemu-system-arm64</strong> avec les bons arguments et afficher les logs du boot.</p>
<p>La ligne de commande de qemu générée par TuxRun est la suivante :</p>
<pre><code class="bash">/usr/bin/qemu-system-aarch64 <span class="se">\</span>
-cpu max,pauth-impdef<span class="o">=</span>on <span class="se">\</span>
-machine virt,virtualization<span class="o">=</span>on,gic-version<span class="o">=</span><span class="m">3</span>,mte<span class="o">=</span>on <span class="se">\</span>
-nographic -nic none -m 4G -monitor none -no-reboot -smp <span class="m">2</span> <span class="se">\</span>
-kernel /.../Image <span class="se">\</span>
-append <span class="s2">"console=ttyAMA0,115200 rootwait root=/dev/vda debug verbose console_msg_format=syslog systemd.log_level=warning earlycon"</span> <span class="se">\</span>
-drive <span class="nv">file</span><span class="o">=</span>/.../rootfs.ext4,if<span class="o">=</span>none,format<span class="o">=</span>raw,id<span class="o">=</span>hd0 <span class="se">\</span>
-device virtio-blk-device,drive<span class="o">=</span>hd0</code></pre>
<p>Il est également possible de lancer une suite de tests directement depuis la ligne de commande :</p>
<pre><code class="bash">tuxrun --device qemu-arm64 <span class="se">\</span>
--kernel https://example.com/arm64/Image <span class="se">\</span>
--tests ltp-smoke</code></pre>
<p>Les résultats de la suite de test seront analysés par TuxRun et la valeur de retour de TuxRun sera 0 uniquement si la suite de tests passe intégralement. Ceci permet d’utiliser TuxRun pour valider qu’une suite de tests donnée fonctionne toujours correctement sur un nouveau noyau.</p>
<h2 id="toc-architectures">Architectures</h2>
<h3 id="toc-qemu">QEMU</h3>
<p>Grâce à <a href="https://www.qemu.org/">QEMU</a>, TuxRun supporte de nombreuses architectures:<br>
- ARM: v5/v7/v7be/64/64be<br>
- Intel/AMD: i386/x86_64<br>
- MIPS: 32/32el/64/64el<br>
- PPC: 32/64/64le<br>
- RISCV: 32/64<br>
- sh4, sparc64, …</p>
<p>La liste complète est disponible dans la <a href="https://tuxrun.org/devices/#qemu-devices">documentation</a>.</p>
<h3 id="toc-fvp">FVP</h3>
<p>Il est également possible d’utiliser <a href="https://www.arm.com/products/development-tools/simulation/fixed-virtual-platforms">FVP</a>, le simulateur de ARM pour simuler un processeur ARMv9. FVP est un simulateur bien plus précis que QEMU au prix d’un temps d’exécution bien supérieur.</p>
<p>FVP permettant de configurer et simuler de nombreux composants du processeur, TuxRun propose une configuration permettant de démarrer et tester Linux dans un temps <em>raisonnable</em>.</p>
<pre><code class="bash">tuxrun --device fvp-aemva <span class="se">\</span>
--kernel https://example.com/arm64/Image <span class="se">\</span>
--tests ltp-smoke <span class="se">\</span>
--image tuxrun:fvp</code></pre>
<p>ARM ne permettant pas (pour le moment) de redistribuer les binaires FVP, il faut construire localement le container <em>tuxrun:fvp</em>.</p>
<h2 id="toc-système-de-fichiers">Système de fichiers</h2>
<p>Par défaut, TuxRun télécharge et utilise un système de fichier compatible avec l’architecture cible. TuxRun fournit donc 20 systèmes de fichiers différents, un pour chaque architecture disponible.</p>
<p>Ces systèmes de fichiers sont basés sur <a href="https://buildroot.org/">buildroot</a> et comportent les outils nécessaires pour faire tourner la majorité des suites de tests supportés par TuxRun. La liste complète est disponible dans la <a href="https://tuxrun.org/tests/#qemu-devices">documentation</a>.</p>
<p>Il est également possible d’utiliser un autre système de fichiers :</p>
<pre><code class="shell">tuxrun --device qemu-arm64 <span class="se">\</span>
--kernel https://example.com/Image <span class="se">\</span>
--rootfs https://example.com/rootfs.ext4.zst</code></pre>
<h2 id="toc-runtimes">Runtimes</h2>
<p>TuxRun télécharge et utilise un container que nous maintenons. Ce container inclut l’ensemble des binaires nécessaires ainsi que QEMU. Par défaut, TuxRun utilise toujours la dernière version du container disponible.</p>
<p>Il est cependant possible de spécifier une version particulière afin de reproduire plus facilement une erreur. Les nouvelles versions de QEMU introduisent quelques fois des régressions dans les suites de tests. Il est alors nécessaire d’utiliser exactement la même image pour reproduire le problème.</p>
<h2 id="toc-reproduire-un-test">Reproduire un test</h2>
<p>TuxRun est utilisé, via <a href="https://docs.tuxsuite.com">tuxsuite</a> notre service de compilation et de test dans le cloud, par le projet <a href="https://lkft.linaro.org">LKFT</a> (Linux Kernel Functional Testing) de Linaro. Lorsqu’une régression est détectée, il suffit de fournir la ligne de commande TuxRun pointant sur les artefacts utilisés pour pouvoir reproduire le problème.</p>
<p>Les développeurs du noyau sont alors à même de reproduire et de corriger les régressions détectées par LKFT. TuxRun simplifie ainsi énormément la reproduction du test.</p>
<p>Un exemple parmi tant d’autres : <a href="https://lkml.org/lkml/2023/3/7/86">selftests: sigaltstack: sas…</a></p>
<h2 id="toc-installation">Installation</h2>
<p>TuxRun étant un programme Python, il est possible de l’installer depuis pypi :</p>
<pre><code class="bash">python3 -m pip install tuxrun</code></pre>
<p>Nous fournissons également un <a href="https://tuxrun.org/install-deb/">paquet Debian</a>, et un <a href="https://tuxrun.org/install-rpm/">rpm</a>.</p>
<h2 id="toc-tuxmake-et-tuxrun">TuxMake et Tuxrun</h2>
<p>Dans un prochain article, je vous montrerai comment combiner TuxMake et TuxRun pour automatiquement trouver le commit responsable de la régression dans le noyau.</p>
</div><div><a href="https://linuxfr.org/news/tuxrun-et-le-noyau-linux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/135217/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/tuxrun-et-le-noyau-linux#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Benoît SibaudXavier TeyssierArkemhttps://linuxfr.org/nodes/135217/comments.atomtag:linuxfr.org,2005:News/409162022-03-09T23:49:29+01:002022-03-09T23:49:28+01:00TuxMake et le noyau LinuxLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>La compilation du noyau Linux est souvent présentée comme étant triviale : un appel à <code>make</code> et c’est réglé.</p>
<p>Cependant les choses se compliquent vite si l’on souhaite :</p>
<ul>
<li>cross-compiler</li>
<li>utiliser différentes toolchains (ou versions)</li>
<li>reproduire une compilation sur une autre machine</li>
<li>utiliser une toolchain non-supportée par sa distribution</li>
<li>…</li>
</ul>
<p>En connaissant bien le fonctionnement de sa distribution et les règles de compilations du noyau Linux, c’est tout à fait faisable même si cela reste fastidieux. D’ailleurs, beaucoup de développeurs du noyau possèdent un jeu de scripts maison pour cela.</p>
<p>Afin de rendre cela accessible à tous, Linaro a créé et maintient <a href="https://tuxmake.org">TuxMake</a>.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://tuxmake.org" hreflang="en" href="https://linuxfr.org/redirect/110073">TuxMake</a></li><li>lien nᵒ 2 : <a title="https://www.linaro.org/core-technologies/testing-and-ci/" hreflang="en" href="https://linuxfr.org/redirect/110074">Linaro</a></li><li>lien nᵒ 3 : <a title="https://podman.io/" hreflang="en" href="https://linuxfr.org/redirect/110075">Podman</a></li><li>lien nᵒ 4 : <a title="https://lkft.linaro.org/" hreflang="en" href="https://linuxfr.org/redirect/110076">LKFT</a></li><li>lien nᵒ 5 : <a title="https://lwn.net/Articles/841624/" hreflang="en" href="https://linuxfr.org/redirect/110077">Portable and reproducible kernel builds with TuxMake</a></li></ul><div><h2 id="toc-exemples">Exemples</h2>
<p>Grâce à TuxMake, il est maintenant très simple de cross-compiler :</p>
<pre><code>git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux/
tuxmake --runtime podman --target-arch=arm64 --toolchain=gcc-10
</code></pre>
<p>En une commande, nous venons de cross-compiler mainline avec GCC version 10 pour arm64. Les artefacts de la compilation sont disponibles dans <code>~/.cache/tuxmake/builds/<id>/</code>.</p>
<p>Il est également facile de définir une variable dans la configuration du noyau :</p>
<pre><code>tuxmake […] --kconfig-add CONFIG_KVM_GUEST=y
</code></pre>
<p>Ou encore utiliser un fichier de configuration qui sera ajouté au defconfig :</p>
<pre><code>tuxmake […] --kconfig-add https://git.buildroot.net/buildroot/plain/board/qemu/aarch64-sbsa/linux.config
</code></pre>
<p>En bonus, à la fin de la compilation, TuxMake fournit un ensemble de metadata à propos de la compilation, comme la durée de chaque étape, les tailles des différents binaires, la configuration exacte…</p>
<pre><code>cat ~/.cache/tuxmake/builds/<id>/metadata.json | jq
</code></pre>
<h2 id="toc-une-histoire-de-runtimes">Une histoire de runtimes</h2>
<p>Par défaut, TuxMake utilise les toolchains installés localement. Mais afin de diminuer le nombre de dépendances et de faciliter la reproduction d’une compilation d’une machine à une autre, TuxMake peut utiliser podman (ou docker). Dans ce cas, TuxMake télécharge une image contenant la toolchain sélectionnée et l’utilise pour la compilation. Pour des raisons de sécurité, nous recommandons d’utiliser podman en lieu et place de docker afin d’exécuter les images sans droits root (<a href="https://github.com/containers/podman/blob/main/docs/tutorials/rootless_tutorial.md">rootless containers</a>).</p>
<p>Les images de containers sont créées et maintenues par les développeurs de TuxMake. Celles-ci sont hébergées sur <a href="https://hub.docker.com/u/tuxmake">docker hub</a> et <a href="https://gallery.ecr.aws/tuxmake/">ECR</a>.</p>
<p>Chaque mois, les images sont automatiquement et intégralement recréées afin d’inclure les dernières mises à jour.</p>
<h2 id="toc-toolchains-et-targets">Toolchains et targets</h2>
<p>TuxMake supporte un grand nombre de toolchains :</p>
<ul>
<li>clang (10, 11, 12, 13, 14, Android, nightly)</li>
<li>gcc (8, 9, 10 et 11)</li>
<li>Rust (clang ou gcc)</li>
</ul>
<p>et d’architectures :</p>
<ul>
<li>arm et arm64</li>
<li>i386 et x86_64</li>
<li>mips, powerpc, riscv, s390, sh, sparc</li>
<li>hexagon, openrisc, parisc, UM (<a href="https://fr.wikipedia.org/wiki/User_Mode_Linux">User Mode Linux</a>)</li>
</ul>
<p>Évidement toutes les toolchains ne supportent pas toutes les architectures. La matrice de support complète est disponible :</p>
<pre><code>tuxmake --runtime podman --print-support-matrix
</code></pre>
<h3 id="toc-clang-nightly">Clang-nightly</h3>
<p>Clang-nightly est une toolchain particulière. Contrairement aux autres toolchains, celle-ci est reconstruite chaque jour et inclut la dernière version de clang et LLVM. Ceci permet à l’équipe de <a href="https://clangbuiltlinux.github.io/">ClangBuiltLinux</a>, qui utilise intensivement TuxMake, de valider que clang et LLVM sont à même de compiler le noyau Linux.</p>
<h3 id="toc-une-multitude-de-versions">Une multitude de versions</h3>
<p>TuxMake fournit des images pour un grand nombre de versions de chaque toolchains : 4 pour GCC et 7 pour clang. Cela est malheureusement nécessaire, car de nombreuses régressions sont trouvés en compilant le noyau linux avec différentes versions de la même toolchain.</p>
<h2 id="toc-reproduire-un-build">Reproduire un build</h2>
<p>Tuxmake est utilisé, via <a href="https://tuxsuite.com">TuxBuild</a> notre service de compilation dans le cloud, par le projet <a href="https://lkft.linaro.org">LKFT</a> (Linux Kernel Functional Testing) de Linaro. Lorsqu’une régression est détectée, il suffit de fournir :</p>
<ul>
<li>le répertoire git testé</li>
<li>le hash de HEAD</li>
<li>la commande TuxMake</li>
</ul>
<p>Les développeurs du noyau sont alors à même de reproduire et de corriger les régressions détectées par LKFT. Cela semble trivial mais reproduire une erreur de compilation est souvent compliqué car cela peut dépendre d’une version particulière d’une dépendance, par exemple <code>pahole</code>.</p>
<p>Un exemple parmi tant d’autres : <a href="https://lore.kernel.org/linux-next/11ec9f44-5e1c-c4cd-8d63-93d7538a12c8@opensource.wdc.com/T/">mips: cavium_octeon_defconfig</a>.</p>
<h2 id="toc-et-chez-moi">Et chez moi</h2>
<p>TuxMake étant un programme Python, il est possible de l’installer depuis <a href="https://pypi.org/project/tuxmake/">pypi</a> :</p>
<pre><code>python3 -m pip install tuxmake
</code></pre>
<p>Nous fournissons également un paquet <a href="https://tuxmake.org/install-deb/">Debian</a> et <a href="https://tuxmake.org/install-rpm/">rpm</a>.</p>
<h2 id="toc-présentations">Présentations</h2>
<p>Un article très complet a déjà été écrit sur <a href="https://lwn.net/Articles/841624/">LWN à propos de TuxMake</a>.<br>
Vous pouvez aussi voir la présentation faite par Antonio Terceiro, le créateur de TuxMake, au <a href="https://connect.linaro.org/resources/lvc21/lvc21-106/">Linaro Virtual Connect 21</a>.</p>
</div><div><a href="https://linuxfr.org/news/tuxmake-et-le-noyau-linux.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127127/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/tuxmake-et-le-noyau-linux#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Pierre JarillonJulien JorgeYsabeau 🧶 🧦https://linuxfr.org/nodes/127127/comments.atomtag:linuxfr.org,2005:News/397412020-03-18T21:13:41+01:002020-03-20T17:13:43+01:00KissCache un service de mise en cache KISSLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p><a href="https://git.lavasoftware.org/ivoire/kisscache/">KissCache</a> est un serveur de cache sous licence MIT pensé suivant le principe KISS : <em><strong>K</strong>eep <strong>I</strong>t <strong>S</strong>imple <strong>S</strong>tupid</em>.</p>
<p>Contrairement à un serveur mandataire (<em>proxy</em>) transparent comme <a href="https://www.squid-cache.org">Squid</a>, pour utiliser KissCache, il faut (et suffit) de préfixer l’adresse URL voulue par celle de l’instance locale de KissCache. KissCache va alors télécharger en arrière‑plan le fichier demandé et le transmettre au client. Si plusieurs clients demandent le même fichier au même moment, celui‑ci ne sera téléchargé qu’une seule fois. KissCache n’étant pas transparent, il peut tout à fait mettre en cache des fichiers disponibles via HTTPS.</p>
</div><ul><li>lien nᵒ 1 : <a title="https://git.lavasoftware.org/ivoire/kisscache/" hreflang="en" href="https://linuxfr.org/redirect/105931">Page du projet</a></li><li>lien nᵒ 2 : <a title="https://cache.lavasoftware.org/" hreflang="en" href="https://linuxfr.org/redirect/105932">Instance de demo</a></li></ul><div><h2 id="toc-cas-dusage">Cas d’usage</h2>
<p>Chez <a href="https://linaro.org">Linaro</a>, nous utilisons KissCache dans notre infrastructure de validation. En effet, les différents tests de validation vont tous utiliser les mêmes ressources (noyaux Linux, système de fichiers racine, dtb…) au même moment. Grâce à KissCache notre infrastructure de validation ne téléchargera chaque ressource qu’une seule fois, réduisant drastiquement la charge réseau.</p>
<p>Nous avons longtemps utilisé squid, mais nous n’avons jamais réussi à le configurer pour :</p>
<ul>
<li>télécharger une seule fois chaque fichier, même en cas de demande parallèle ;</li>
<li>mettre en cache les ressources disponibles via HTTPS.</li>
</ul>
<h2 id="toc-utilisation">Utilisation</h2>
<p>Pour installer une instance locale :</p>
<pre><code class="shell">git clone https://git.lavasoftware.org/ivoire/KissCache
<span class="nb">cd</span> KissCache
docker-compose build
docker-compose up</code></pre>
<p>L’instance sera disponible à l’adresse <code>http://localhost:8001</code>.</p>
<p>Il suffit maintenant de préfixer les adresses URL par celle de notre instance KissCache :</p>
<pre><code class="shell">curl <span class="s2">"http://localhost:8001/api/v1/fetch/?url=https://linuxfr.org"</span></code></pre>
<p>KissCache va alors télécharger la page pour vous et vous la transmettre.</p>
<h2 id="toc-configuration">Configuration</h2>
<h3 id="toc-ttl">TTL</h3>
<p>Par défaut, KissCache va garder chaque fichier pendant dix jours. Cette valeur par défaut peut être changée par l’administrateur ou via le paramètre <code>ttl</code> dans l’adresse URL.</p>
<pre><code class="shell">curl <span class="s2">"http://localhost:8001/api/v1/fetch/?ttl=1d&url=https://linuxfr.org"</span></code></pre>
<h3 id="toc-quota">Quota</h3>
<p>Par défaut, KissCache n’utilisera que 2 Gio d’espace disque et retournera un code d’erreur 507 (<em>Insufficient Storage</em>) pour toute requête supplémentaire. Il est, évidemment, possible de changer cette valeur ou même de supprimer tout quota.</p>
<h3 id="toc-accès">Accès</h3>
<p>L’accès à l’instance KissCache peut être restreint par adresse IP pour, par exemple, n’autoriser que les machines de validation. L’interface Web sera toujours accessible à tous, mais seules les adresses IP autorisées auront le droit d’utiliser le système de cache.</p>
<h2 id="toc-technique">Technique</h2>
<p>KissCache est une application <a href="https://fr.wikipedia.org/wiki/Django_(framework)">Django</a> qui utilise <a href="http://www.celeryproject.org/">Celery</a> pour la récupération des ressources en arrière‑plan.</p>
</div><div><a href="https://linuxfr.org/news/kisscache-un-service-de-mise-en-cache-kiss.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/119672/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/kisscache-un-service-de-mise-en-cache-kiss#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Davy DefaudNils RatusznikPierre Jarillonpatrick_gYsabeau 🧶 🧦https://linuxfr.org/nodes/119672/comments.atomtag:linuxfr.org,2005:News/356212014-08-27T13:21:38+02:002014-08-31T00:47:43+02:00Sortie de R.A.S. v0.5, alias RandoAmisSecoursLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Après quelques mois de développement, voici une nouvelle version de R.A.S. (alias RandoAmisSecours).</p>
<p>Pour rappel, R.A.S. est une application Web permettant de déclarer les sorties (montagne, canyon…) que l’on va effectuer. Chaque sortie étant assortie d’un horaire de fin et d’alerte. Si vous ne revenez pas à temps de votre sortie (par exemple à cause d’un accident), R.A.S. alertera vos contacts par courriel (et SMS). Je vous avais déjà parlé de ce projet dans <a href="//linuxfr.org/news/sortie-de-r-a-s-v0-4-alias-randoamissecours">cette dépêche sur la v0.4</a>.</p></div><ul><li>lien nᵒ 1 : <a title="https://randoamissecours.org" hreflang="fr" href="https://linuxfr.org/redirect/91324">RandoAmisSecours</a></li><li>lien nᵒ 2 : <a title="https://github.com/ivoire/RandoAmisSecours" hreflang="en" href="https://linuxfr.org/redirect/91325">Code source</a></li><li>lien nᵒ 3 : <a title="https://github.com/ivoire/SMSForward/" hreflang="en" href="https://linuxfr.org/redirect/91326">SMSForward</a></li><li>lien nᵒ 4 : <a title="https://github.com/ivoire/RandoAmisSecoursAndroid" hreflang="en" href="https://linuxfr.org/redirect/91327">RandoAmisSecours Android</a></li></ul><div><h2 id="améliorations">Améliorations</h2>
<h3 id="envoi-de-sms">Envoi de SMS</h3>
<p>De nombreuses personnes ont demandé à ce que R.A.S. puisse envoyer des SMS en plus des courriels. C’est maintenant possible pour les clients de Free Mobile, grâce à l’interface de programmation (API) mise en place en juin par l’opérateur.</p>
<p>Pour activer ce service, les utilisateurs concernés doivent indiquer qu’ils sont clients de Free Mobile et remplir le nom d’utilisateur et la clé d’accès au service.</p>
<p>Afin de supporter d’autres opérateurs éventuels, j’ai d’ailleurs écris une mini bibliothèque fournissant une seule API pour l’envoi de SMS : <a href="https://github.com/ivoire/SMSForward/">SMSForward</a>. Pour le moment seul Free Mobile est supporté, mais j’espère ajouter la prise en charge d’autres opérateurs lorsque ceux‐ci mettront une API à disposition.</p>
<h3 id="prise-en-charge-des-fuseaux-horaire">Prise en charge des fuseaux horaire</h3>
<p>Depuis la version 0.4, RandoAmisSecours est capable de gérer les fuseaux horaires correctement. Cependant ceux‐ci ne fonctionnent correctement que si chaque utilisateur a bien indiqué le fuseau horaire dans lequel il se trouve.</p>
<p>Avec la version 0.5, ce champ est devenu obligatoire. Les anciens utilisateurs sont donc automatiquement invités à mettre cette information à jour lors de la prochaine connexion.</p>
<p>Du code JavaScript détectant le fuseau horaire actuel du navigateur Web a été ajouté afin d’aider l’utilisateur à choisir le bon fuseau horaire.</p>
<h3 id="traductions">Traductions</h3>
<p>Une nouvelle traduction apparaît. Après l’anglais et le français, voici l’espagnol ! Merci beaucoup à <a href="https://github.com/sebbcn"><em>sebbcn</em></a> pour cette contribution.</p>
<h3 id="site-officiel">Site officiel</h3>
<p>J’ai migré le site officiel de R.A.S. vers un domaine dédié : <a href="https://randoamissecours.org"><em>randoamissecours.org</em></a>. J’en ai profité pour utiliser un certificat StartSSL. Celui‐ci est supporté pas la majorité des navigateurs Web et présente le gros avantage d’être gratuit.</p>
<p>J’ai profité de l’occasion pour améliorer le score du site au <a href="https://www.ssllabs.com/ssltest">SSL Test</a> en suivant les <a href="https://wiki.mozilla.org/Security/Server_Side_TLS">conseils de Mozilla sur la configuration Apache</a>.</p>
<h3 id="android">Android</h3>
<p>J’ai commencé le développement d’une application Android pour R.A.S. Pour le moment, l’application permet juste de se connecter au site et de lister ses sorties et celles de ses amis.</p>
<p>À terme, j’espère pouvoir ajouter les fonctionnalités suivantes :</p>
<ul>
<li>synchronisation régulière avec le serveur ;</li>
<li>affichage d’une alerte en cas de retard sur une sortie de l’utilisateur ;</li>
<li>clôture d’une sortie de l’utilisateur ;</li>
<li>affichage d’une alerte en cas de retard sur une sortie d’un ami de l’utilisateur ;</li>
<li>création d’une sortie.</li>
</ul><p>Cependant le développement Android est nouveau pour moi (autant le langage Java que l’API Android), donc l’application avance très lentement. Si une personne souhaite contribuer à ce projet, je suis très intéressé !</p>
<p>Le code source est disponible sur la page GitHub de <a href="https://github.com/ivoire/RandoAmisSecoursAndroid">RandoAmisSecours Android</a>.</p>
<h2 id="un-peu-de-technique">Un peu de technique</h2>
<p>Pour rappel, R.A.S. est développé en Python (2.6, 2.7, 3.3, 3.4 et <a href="https://fr.wikipedia.org/wiki/PyPy" title="Définition Wikipédia">PyPy</a>) et basé sur le célèbre cadriciel <a href="http://fr.wikipedia.org/wiki/Django_%28framework%29">Django</a> (version 1.6).</p>
<h3 id="travis-ci">Travis CI</h3>
<p>À chaque <em>push</em> sur GitHub, une suite de tests est lancée par <a href="https://travis-ci.org/ivoire/RandoAmisSecours/">Travis CI</a>.<br>
Ceci permet de détecter rapidement des régressions dans des configurations que je ne teste pas régulièrement : base de données PostgreSQL ou d’autres versions de Python.</p>
<h3 id="landscapeio">landscape.io</h3>
<p>J’ai récemment découvert <a href="https://landscape.io"><em>landscape.io</em></a>, qui permet de faire tourner plusieurs analyseurs statiques sur votre code Python. Les résultats sont visibles sur la page de <a href="https://landscape.io/github/ivoire/RandoAmisSecours/">R.A.S.</a>.<br>
Les résultats ne sont pas à la hauteur de ce que propose Coverity pour le language C/C++. Cependant, <em>landscape.io</em> permet de détecter un ensemble de mauvaises habitudes qu’il est bon de corriger.</p>
<h2 id="par-la-suite">Par la suite</h2>
<p>RandoAmisSecours commence à prendre un petit peu d’âge et est maintenant régulièrement utilisé par un petit groupe d’amis.</p>
<p>Ceux‐ci me demandent donc les améliorations suivantes :</p>
<ul>
<li>choix d’une personne référente (parmi vos amis) pour une sortie, qui sera alors la seule à recevoir les alertes, et qui doit au préalable accepter d’être le référent sur cette sortie ;</li>
<li>indiquer les amis participant à une même sortie, les alertes seront alors envoyées à tous les amis des utilisateurs participant à la sortie ;</li>
<li>création d’une liste de description type pour chaque activité. Pour la spéléologie par exemple, le Secours Spéléo attend un certain nombre d’informations lors de l’alerte qu’il serait bon de rappeler.</li>
</ul><p>Et bien d’autres améliorations, voir la <a href="https://github.com/ivoire/RandoAmisSecours/issues">page de suivi de problèmes de GitHub</a>.</p></div><div><a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-5-alias-randoamissecours.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/103112/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-5-alias-randoamissecours#comments">ouvrir dans le navigateur</a>
</p>
Rémi DuraffortDavy DefaudBenoît Sibaudpalm123NÿcoXavier TeyssierPierre Jarillonhttps://linuxfr.org/nodes/103112/comments.atomtag:linuxfr.org,2005:News/350772014-02-14T21:29:23+01:002014-02-14T21:29:23+01:00Sortie de R.A.S. v0.4, alias RandoAmisSecoursLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p>Il y a quelques mois sortait la première release (v0.1) de R.A.S. (aka RandoAmisSecours), sous <a href="https://github.com/ivoire/RandoAmisSecours/blob/master/LICENSE">licence AGPL v3</a></p>
<p>Pour rappel, R.A.S. est une application web permettant de déclarer les sorties (montagne, canyon, …) que l'on va effectuer. Chaque sortie étant assortie d'un horaire de fin. Si vous ne revenez pas à temps de votre sortie (par exemple à cause d'un accident), R.A.S. alertera vos contacts par mail. Je vous avais parlé de ce projet dans <a href="//linuxfr.org/news/sortie-de-r-a-s-v0-1">cette dépêche</a>. Suite aux nombreux retours, j'ai réalisé de (très) nombreux développements qui ont amené à la sortie de 3 releases, dont voici la dernière, la v0.4.</p></div><ul><li>lien nᵒ 1 : <a title="http://ivoire.dinauz.org/ras/" hreflang="fr" href="https://linuxfr.org/redirect/89429">RandoAmisSecours</a></li><li>lien nᵒ 2 : <a title="https://github.com/ivoire/RandoAmisSecours" hreflang="en" href="https://linuxfr.org/redirect/89430">GitHub</a></li><li>lien nᵒ 3 : <a title="https://github.com/ivoire/RandoAmisSecours/issues?state=open" hreflang="en" href="https://linuxfr.org/redirect/89431">Tracker GitHub</a></li></ul><div><h2 id="améliorations">Améliorations</h2>
<h3 id="confidentialité">Confidentialité</h3>
<p>Une des premières remarques que j'ai reçu concerne la confidentialité des données rentrées dans R.A.S. J'ai donc fortement limité l'accès aux données des utilisateurs. Vos sorties sont maintenant uniquement visibles à vos amis et ce même si vous êtes en retard.</p>
<h3 id="support-des-fuseaux-horaires">Support des fuseaux horaires</h3>
<p>Chaque utilisateur peux maintenant configurer le fuseau horaire dans lequel il se situe. Les horaires des sorties sont alors calculés en fonction de ce fuseau horaire. De plus toutes les sorties que cet utilisateur créera utiliseront ce fuseau horaire.</p>
<h3 id="documentation">Documentation</h3>
<p>Une (très) courte FAQ à été ajoutée afin de répondre aux premières questions des utilisateurs. Cette FAQ étant appelée à être augmentée au fur et à mesure.</p>
<h2 id="et-la-technique">Et la technique ?</h2>
<p>R.A.S. est toujours une application web écrite en Django (i.e. Python). J'ai par contre ajouté le support du Python 3 (version 3.3 uniquement) et de pypy. Nous avons donc :</p>
<ul>
<li>django (mis à jour vers 1.6)</li>
<li>python (2.6, 2.7, 3.3 et pypy)</li>
<li>bootstrap.css (mis à jours vers 3.0)</li>
<li>OpenStreetMap</li>
</ul><h3 id="tests-automatiques">Tests automatiques</h3>
<p>J'ai essayé de créer une suite de tests cohérente qui tourne à chaque commit par Travis-CI. Les résultats sont disponibles sur le site de <a href="https://travis-ci.org/ivoire/RandoAmisSecours/">Travis-CI</a>.</p>
<h3 id="api">API</h3>
<p>Une <a href="http://ivoire.dinauz.org/ras/">API expérimentale</a> a été mise en place et sera bientôt disponible. Cette API permet principalement de lister les sorties de l'utilisateur courant ainsi que celle de ces amis.</p>
<h2 id="la-suite">La suite</h2>
<p>Il reste encore de nombreuses fonctionnalités à ajouter à cette application, par exemple :</p>
<ul>
<li>enregistrement des point GPS au fur et à mesure de la sortie</li>
<li>amélioration de l'API</li>
<li>création d'une application Android utilisant l'API</li>
<li><a href="https://travis-ci.org/ivoire/RandoAmisSecours/">…</a></li>
</ul></div><div><a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-4-alias-randoamissecours.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/101261/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-4-alias-randoamissecours#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Florent Zaraclaudexhttps://linuxfr.org/nodes/101261/comments.atomtag:linuxfr.org,2005:News/350362014-02-05T10:07:22+01:002014-03-03T10:07:25+01:00CARE et la reproductibilité des exécutionsLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<div><p><a href="http://reproducible.io">CARE</a> (Comprehensive Archiver for Reproducible Execution) vient de sortir en version 2.1.</p>
<p>CARE est un outil permettant d'observer l'exécution d'une commande Linux (ls, gcc, vlc, …) et de créer une archive contenant l'intégralité des fichiers utilisés lors de l'exécution de cette commande. Il est alors possible d'extraire cette archive sur une autre machine afin de relancer la commande dans le système de fichiers d'origine.</p>
<p>Lors de la ré-exécution, la commande sera entièrement isolée dans l'archive et ne pourra accéder qu'aux fichiers et à l'environnement présent dans cette archive. Il est important de noter que les événements extérieurs (comme les entrées clavier, réseau, …) ne sont pas archivés et doivent, si nécessaire, être recréés par l'utilisateur.</p></div><ul><li>lien nᵒ 1 : <a title="http://reproducible.io" hreflang="en" href="https://linuxfr.org/redirect/89285">CARE</a></li><li>lien nᵒ 2 : <a title="http://proot.me" hreflang="en" href="https://linuxfr.org/redirect/89286">PRoot</a></li><li>lien nᵒ 3 : <a title="https://github.com/cedric-vincent/PRoot" hreflang="en" href="https://linuxfr.org/redirect/89287">GitHub</a></li><li>lien nᵒ 4 : <a title="https://github.com/cedric-vincent/PRoot/blob/care-v2.1/doc/care-changelog.txt" hreflang="fr" href="https://linuxfr.org/redirect/89288">Changelog v2.1</a></li></ul><div><h2 id="cas-dusage">Cas d'usage</h2>
<p>CARE peut être utile dans de nombreux cas :</p>
<ul>
<li>reproduire chez vous un bug provenant d'un utilisateur ;</li>
<li>archiver les fichiers nécessaires à une démonstration technique ;</li>
<li>archiver les fichiers nécessaires à la construction d'une release ;</li>
<li>créer un système de fichiers minimal permettant d'exécuter une application ;</li>
<li>créer une application portable.</li>
</ul><h3 id="reproduire-le-bug-dun-utilisateur">Reproduire le bug d'un utilisateur</h3>
<p>Il est souvent difficile de reproduire les bugs reportés par les utilisateurs du fait de différences dans les versions des bibliothèques installées sur les deux machines.<br>
Grâce à CARE, il est possible pour l'utilisateur d'archiver l'ensemble des bibliothèques (et autre ressources du système de fichiers) utilisées par une application et d'envoyer cette archive au développeur. Celui-ci peut alors plus facilement reproduire l'environnement d'exécution de l'utilisateur.</p>
<h2 id="usage">Usage</h2>
<p>La documentation du projet contient <a href="http://reproducible.io/#example">un exemple d'utilisation</a> et un <a href="https://github.com/cedric-vincent/PRoot/blob/master/doc/care-manual.txt">manuel</a> assez complet que je vous invite à consulter.</p>
<p>Prenons l'exemple d'un hypothétique problème avec un script Python 3.3</p>
<pre><code>user# care python3.3 foo.py
Hello world!
care info - run `./care-140204124406.bin` or `care -x care-140204124406.bin` to extract the output archive.
</code></pre>
<p>CARE a donc lancé le programme (<em>python3.3 foo.py</em> dans notre exemple) et archivé l'ensemble de fichiers accédés dans l'archive auto-extractible <em>care-140204124406.bin</em></p>
<p>Pour ré-exécuter le programme dans le même environnement mais sur une autre machine n'ayant pas cette version de Python, il suffit de télécharger l'archive sur cette machine et de l'extraire (l'archive est auto-extractible par défaut, mais CARE peut produire d'autres formats au besoin).</p>
<pre><code>user-bis# ./care-140204124406.bin
info: archive found: offset = 1332056, size = 6510234
[...]
info: extracted: care-140204124406/rootfs/usr/bin/python3.3
[...]
user-bis#./care-140204124406/re-execute.sh
Hello world!
</code></pre>
<h2 id="technique">Technique</h2>
<p>CARE est basé sur <a href="http://proot.me">PRoot</a>, un moteur d'instrumentation des processus au niveau des syscalls Linux.</p>
<p>Vous trouverez un exemple du fonctionnement de PRoot et de ses cas d'usage sur le <a href="http://proot.me">site officiel</a> et sur <a href="http://ivoire.dinauz.org/blog/post/2012/04/09/Born-to-be-PRoot">mon blog</a>. J'écrirai probablement une dépêche sur PRoot prochainement.</p></div><div><a href="https://linuxfr.org/news/care-et-la-reproductibilite-des-executions.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/101156/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/care-et-la-reproductibilite-des-executions#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Benoît SibaudZeroHeureFlorent ZaraXavier Teyssierhttps://linuxfr.org/nodes/101156/comments.atomtag:linuxfr.org,2005:News/346892013-10-13T11:43:14+02:002013-10-13T12:17:38+02:00Sortie de R.A.S. v0.1Licence CC By‑SA http://creativecommons.org/licenses/by-sa/3.0/deed.fr<div><p>Le logiciel RandoAmis.Secours (aka R.A.S.) vient de sortir en version 0.1, c'est donc la première release.</p>
<h2 id="quest-ce-donc">Qu'est ce donc ?</h2>
<p>R.A.S. est un site web permettant de déclarer les sorties (montagne, canyon, escalade, ski de rando, …) que vous allez faire prochainement. Pour chaque sortie, un descriptif de la sortie ainsi que la localisation sur la carte sont déterminé. De plus 3 horaires sont à définir :</p>
<ul>
<li>le début</li>
<li>la fin</li>
<li>l'alerte</li>
</ul><p>Si par malheur, vous ne rentrez pas de votre sortie (par exemple à cause d'un accident), R.A.S. enverra des courriels à vos contacts, dès la date d'alerte passée.</p>
<h2 id="pourquoi">Pourquoi ?</h2>
<p>Je me suis récemment rendu compte que lors de sorties en montagne, les seules personnes au courant de cette sortie sont généralement également présentes à cette sortie. En cas de problème, il n'y a donc personne capable d'alerter les secours de notre absence.<br>
Sachant que les téléphones portables ne passent souvent pas bien en montagne, il me fallait donc un système capable d'alerter mes proches en cas de problème.</p></div><ul><li>lien nᵒ 1 : <a title="http://ivoire.dinauz.org/ras/" hreflang="fr" href="https://linuxfr.org/redirect/88015">RandoAmisSecours</a></li><li>lien nᵒ 2 : <a title="http://github.com/ivoire/RandoAmisSecours" hreflang="en" href="https://linuxfr.org/redirect/88016">Github</a></li><li>lien nᵒ 3 : <a title="https://github.com/ivoire/RandoAmisSecours/issues?state=open" hreflang="en" href="https://linuxfr.org/redirect/88017">Tracker GitHub</a></li></ul><div><h2 id="ce-que-ras-nest-pas">Ce que R.A.S. n'est pas ?</h2>
<p>En aucun cas, l'équipe de R.A.S. n'appellera les secours. Ceci est du ressort de vos contacts qui auront reçu les courriels d'alerte.</p>
<p>Le but n'est pas de créer un système contactant les secours public (PGHM, CRS montagne, 15) au moindre retard mais plutôt de laisser une trace écrite à vos amis des sorties que vous faites. En cas de retard, ceux-ci pourront essayer de vous contacter et <strong>ensuite</strong> éventuellement alerter les secours.</p>
<h2 id="comment-tester">Comment tester ?</h2>
<p>Je vous invite à tester directement sur l'instance de R.A.S. hébergée sur mon serveur personnel et à l'utiliser si cela vous plait : <a href="http://ivoire.dinauz.org/ras/">http://ivoire.dinauz.org/ras/</a></p>
<p>Le site est également accessible en https. Il faut par contre installer le RootCA de <a href="http://www.cacert.org">CAcert</a></p>
<h2 id="et-la-technique">Et la technique ?</h2>
<p>C'est tout simplement:</p>
<ul>
<li>python (jamais testé en Python 3)</li>
<li>virtualenv</li>
<li>django (1.5)</li>
<li>bootstrap.css</li>
<li>un peu de jQuery</li>
<li>OpenStreetMap</li>
<li>une crontab</li>
</ul><p>Le tout étant hébergé via git sur GitHub.</p>
<h2 id="par-la-suite">Par la suite ?</h2>
<p>Je continu évidement à développer sur R.A.S. puisque la version actuelle est encore minimaliste (mais fonctionnelle). Une liste de fonctionnalités est disponible dans le <a href="https://github.com/ivoire/RandoAmisSecours/issues?state=open">tracker de GitHub</a>.<br>
Je compte ensuite développer une application Android permettant d'interagir avec le site beaucoup plus rapidement.</p>
<h2 id="si-le-projet-vous-intéresse">Si le projet vous intéresse ?</h2>
<p>Je vous invite à :</p>
<ul>
<li>vous en servir</li>
<li>me reporter les problèmes que vous avez rencontrés</li>
<li>en parler autour de vous</li>
<li>contribuer :D</li>
</ul></div><div><a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-1.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/99943/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/news/sortie-de-r-a-s-v0-1#comments">ouvrir dans le navigateur</a>
</p>
Rémi Duraffortpalm123Benoît SibaudNeoXclaudexhttps://linuxfr.org/nodes/99943/comments.atom