<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Archives des Système - Alain ARDITI&#039;s blog</title>
	<atom:link href="https://alain.arditi.fr/category/system/feed/" rel="self" type="application/rss+xml" />
	<link>https://alain.arditi.fr/category/system/</link>
	<description>Aide mémoire informatique</description>
	<lastBuildDate>Tue, 30 Apr 2024 20:38:26 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.3</generator>

<image>
	<url>https://alain.arditi.fr/wp-content/uploads/2020/04/cropped-ARDITI_Alain_20200326_512x512-32x32.jpg</url>
	<title>Archives des Système - Alain ARDITI&#039;s blog</title>
	<link>https://alain.arditi.fr/category/system/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Tester Exim 2/2</title>
		<link>https://alain.arditi.fr/2024/04/12/tester-exim-2-2/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 12 Apr 2024 08:44:12 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Exim]]></category>
		<category><![CDATA[Exim4]]></category>
		<category><![CDATA[mail]]></category>
		<category><![CDATA[SMTP]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1181</guid>

					<description><![CDATA[<p>Une fois qu&#8217;on a vérifié les émetteurs et les destinataires (partie 1/2), on peut faire des essais d&#8217;envoi. L&#8217;envoi consiste à créer un email et à l&#8217;envoyer à sa destination en utilisant le protocole SMTP. La destination est fournie par le champ MX de l&#8217;enregistrement DNS du domaine du destinataire. Pour créer un email, on&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2024/04/12/tester-exim-2-2/">Poursuivre la lecture <span class="screen-reader-text">Tester Exim 2/2</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2024/04/12/tester-exim-2-2/">Tester Exim 2/2</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Une fois qu&rsquo;on a vérifié les émetteurs et les destinataires (partie 1/2), on peut faire des essais d&rsquo;envoi. L&rsquo;envoi consiste à créer un email et à l&rsquo;envoyer à sa destination en utilisant le protocole SMTP. La destination est fournie par le champ MX de l&rsquo;enregistrement DNS du domaine du destinataire.</p>



<p>Pour créer un email, on peut utiliser la commande exim, avec l&rsquo;option -v pour voir l&rsquo;échange entre le client du mail, exim dans le cas présent, et le serveur SMTP distant, aspmx.l.google.com, pour le domaine tohero.fr </p>



<p>Lorsqu&rsquo;on lance le programme exim comme ci-dessous, on se retrouve dans le dialogue SMTP directement. Pour définir le sujet du mail, il faut taper « Subject: mon sujet » et un retour à la ligne, puis saisir le message. Pour terminer la saisie du message, il faut taper . et retour à la ligne ou Ctrl+D</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# exim -v aa2@tohero.fr
Subject: test

Bonjour
.
LOG: MAIN
  &lt;= alain@arditi.fr U=root P=local S=332
delivering 1rvBpA-0002z1-5b
R: dnslookup for aa2@tohero.fr
T: remote_smtp for aa2@tohero.fr
Connecting to aspmx.l.google.com [142.251.168.27]:25 ... connected
  SMTP&lt;&lt; 220 mx.google.com ESMTP v3-20020adfebc3000000b003460665686fsi1845359wrn.1051 - gsmtp
  SMTP&gt;&gt; EHLO arditi-host3.arditi.net
  SMTP&lt;&lt; 250-mx.google.com at your service, [51.159.28.23]
         250-SIZE 157286400
         250-8BITMIME
         250-STARTTLS
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250-CHUNKING
         250 SMTPUTF8
  SMTP&gt;&gt; STARTTLS
  SMTP&lt;&lt; 220 2.0.0 Ready to start TLS
  SMTP&gt;&gt; EHLO arditi-host3.arditi.net
  SMTP&lt;&lt; 250-mx.google.com at your service, [51.159.28.23]
         250-SIZE 157286400
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250-CHUNKING
         250 SMTPUTF8
  SMTP&gt;&gt; MAIL FROM:&lt;alain@arditi.fr&gt; SIZE=1365
  SMTP&gt;&gt; RCPT TO:&lt;aa2@tohero.fr&gt;
         will write message using CHUNKING
  SMTP&gt;&gt; BDAT 342 LAST
  SMTP&lt;&lt; 250 2.1.0 OK v3-20020adfebc3000000b003460665686fsi1845359wrn.1051 - gsmtp
  SMTP&lt;&lt; 250 2.1.5 OK v3-20020adfebc3000000b003460665686fsi1845359wrn.1051 - gsmtp
  SMTP&lt;&lt; 250 2.0.0 OK v3-20020adfebc3000000b003460665686fsi1845359wrn.1051 - gsmtp
  SMTP&gt;&gt; QUIT
  SMTP(close)&gt;&gt;
LOG: MAIN
  =&gt; aa2@tohero.fr R=dnslookup T=remote_smtp H=aspmx.l.google.com [142.251.168.27] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="CN=mx.google.com" K C="250 2.0.0 OK v3-20020adfebc3000000b003460665686fsi1845359wrn.1051 - gsmtp"
LOG: MAIN
  Completed

arditi-host3:~#</pre></div>



<p>Le détail de l&rsquo;échange SMTP nous permet de voir exactement comment l&#8217;email est envoyé. Les lignes</p>



<p>SMTP>> indiquent les messages émis par le serveur local<br>SMTP&lt;&lt; indiquent les messages reçus du serveur distant</p>



<p>On peut voir qui est le destinataire « RCPT TO: », qui est l&rsquo;émetteur « MAIL FROM: », qui est le serveur SMTP distant: « Connecting to aspmx.l.google.com », comment se présente le serveur local: « EHLO arditi-host3.arditi.net ». Le message « completed » indique que le mail a été envoyé au serveur SMTP distant.</p>



<p>Les lignes « LOG: MAIN » sont les lignes qu&rsquo;on retrouve dans le fichier de log d&rsquo;Exim /var/log/exim4/mainlog qui contient le détail de tous les envois/réception d&#8217;email</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# tail /var/log/exim4/mainlog
2024-04-12 09:31:18 Start queue run: pid=7666
2024-04-12 09:31:18 End queue run: pid=7666
2024-04-12 09:58:54 1rvBo6-0002yh-50 &lt;= alain@arditi.fr U=root P=local S=333
2024-04-12 09:58:54 1rvBo6-0002yh-50 =&gt; aa2@tohero.fr R=dnslookup T=remote_smtp H=aspmx.l.google.com [142.251.168.27] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="CN=mx.google.com" K C="250 2.0.0 OK dd12-20020a0560001e8c00b0034557e685a1si1823281wrb.34 - gsmtp"
2024-04-12 09:58:54 1rvBo6-0002yh-50 Completed
arditi-host3:~#</pre></div>



<p>« 1rvBo6-0002yh-50 » est l&rsquo;identifiant Exim du message.</p>



<p>Avec ce test, on peut détecter de suite les divers problèmes, comme un refus de connexion, un port 25 bloqué, un blocage par la politique anti-spam du destinataire, une boîte aux lettres inexistante, etc&#8230;</p>



<h3 class="wp-block-heading">bsd-mailx pour tester</h3>



<p>bsd-mailx est un client mail un peu plus évolué que Exim ou Sendmail qui permet de voir plus simplement les échanges. C&rsquo;est une petite surcouche&#8230; Il suffit d&rsquo;installer le paquet « bsd-mailx » pour l&rsquo;utiliser. On peut l&rsquo;appeler par la commande mail :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# mail -v aa2@tohero.fr
Subject: Test
Bonjour
.
Cc: 
LOG: MAIN
  &lt;= alain@arditi.fr U=root P=local S=442
delivering 1rvCQu-0003Bg-6R
R: dnslookup for aa2@tohero.fr
T: remote_smtp for aa2@tohero.fr
Connecting to aspmx.l.google.com [66.102.1.26]:25 ... connected
  SMTP&lt;&lt; 220 mx.google.com ESMTP y18-20020a5d6152000000b0033ec3e493ccsi1863889wrt.179 - gsmtp
  SMTP&gt;&gt; EHLO arditi-host3.arditi.net
  SMTP&lt;&lt; 250-mx.google.com at your service, [51.159.28.23]
         250-SIZE 157286400
         250-8BITMIME
         250-STARTTLS
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250-CHUNKING
         250 SMTPUTF8
  SMTP&gt;&gt; STARTTLS
  SMTP&lt;&lt; 220 2.0.0 Ready to start TLS
  SMTP&gt;&gt; EHLO arditi-host3.arditi.net
  SMTP&lt;&lt; 250-mx.google.com at your service, [51.159.28.23]
         250-SIZE 157286400
         250-8BITMIME
         250-ENHANCEDSTATUSCODES
         250-PIPELINING
         250-CHUNKING
         250 SMTPUTF8
  SMTP&gt;&gt; MAIL FROM:&lt;alain@arditi.fr&gt; SIZE=1479
  SMTP&gt;&gt; RCPT TO:&lt;aa2@tohero.fr&gt;
         will write message using CHUNKING
  SMTP&gt;&gt; BDAT 456 LAST
  SMTP&lt;&lt; 250 2.1.0 OK y18-20020a5d6152000000b0033ec3e493ccsi1863889wrt.179 - gsmtp
  SMTP&lt;&lt; 250 2.1.5 OK y18-20020a5d6152000000b0033ec3e493ccsi1863889wrt.179 - gsmtp
  SMTP&lt;&lt; 250 2.0.0 OK y18-20020a5d6152000000b0033ec3e493ccsi1863889wrt.179 - gsmtp
  SMTP&gt;&gt; QUIT
  SMTP(close)&gt;&gt;
LOG: MAIN
  =&gt; aa2@tohero.fr R=dnslookup T=remote_smtp H=aspmx.l.google.com [66.102.1.26] X=TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256 CV=yes DN="CN=mx.google.com" K C="250 2.0.0 OK y18-20020a5d6152000000b0033ec3e493ccsi1863889wrt.179 - gsmtp"
LOG: MAIN
  Completed
arditi-host3:~#</pre></div>



<p>A noter que notre client, bsd-mailx ou Exim, communique directement avec le serveur SMTP cible. Il n&rsquo;y a pas de connexion sur le serveur Exim local. Exim est en mode client.</p>
<p>L’article <a href="https://alain.arditi.fr/2024/04/12/tester-exim-2-2/">Tester Exim 2/2</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tester Exim 1/2</title>
		<link>https://alain.arditi.fr/2024/04/11/tester-exim/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Thu, 11 Apr 2024 08:34:18 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Exim]]></category>
		<category><![CDATA[Exim4]]></category>
		<category><![CDATA[SMTP]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1176</guid>

					<description><![CDATA[<p>L&#8217;intérêt du serveur de mail Exim est, entre autres, sa capacité à être testé. Dans cet article, comme dans le précédent, on va tester les emails sortants. Tester les destinataires Pour vérifier comment Exim envoie un email, on utilise le mode test, c&#8217;est la commande exim4 -bt adresse Pour une boîte aux lettres existante :&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2024/04/11/tester-exim/">Poursuivre la lecture <span class="screen-reader-text">Tester Exim 1/2</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2024/04/11/tester-exim/">Tester Exim 1/2</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>L&rsquo;intérêt du serveur de mail Exim est, entre autres, sa capacité à être testé. Dans cet article, comme dans le précédent, on va tester les emails sortants.</p>



<h3 class="wp-block-heading">Tester les destinataires</h3>



<p>Pour vérifier comment Exim envoie un email, on utilise le mode test, c&rsquo;est la commande exim4 -bt adresse</p>



<p>Pour une boîte aux lettres existante :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# exim4 -bt alain@arditi.fr
R: dnslookup for alain@arditi.fr
alain@arditi.fr
  router = dnslookup, transport = remote_smtp
  host aspmx.l.google.com      [173.194.76.26]  MX=5
  host alt1.aspmx.l.google.com [142.251.9.26]   MX=10
  host alt2.aspmx.l.google.com [142.250.150.27] MX=10
  host aspmx2.googlemail.com   [142.250.153.26] MX=20
  host aspmx3.googlemail.com   [142.251.9.27]   MX=20
  host aspmx5.googlemail.com   [142.250.157.26] MX=20
  host aspmx4.googlemail.com   [74.125.200.27]  MX=20
arditi-host3:~#</pre></div>



<p>Dans le cas d&rsquo;une boîte aux lettres réelle, il n&rsquo;y a pas trop de surprise. C&rsquo;est plus intéressant de faire le test sur une boîte aux lettres locale, puisqu&rsquo;on voit la réécriture de l&rsquo;adresse et l&rsquo;envoi :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# exim4 -bt root
R: system_aliases for root@arditi-host3.arditi.net
R: dnslookup for alain@arditi.fr
alain@arditi.fr
    &lt;-- root@arditi-host3.arditi.net
  router = dnslookup, transport = remote_smtp
  host aspmx.l.google.com      [108.177.15.27]  MX=5
  host alt2.aspmx.l.google.com [142.250.150.27] MX=10
  host alt1.aspmx.l.google.com [142.250.153.27] MX=10
  host aspmx4.googlemail.com   [74.125.200.26]  MX=20
  host aspmx3.googlemail.com   [142.250.150.26] MX=20
  host aspmx2.googlemail.com   [142.251.9.26]   MX=20
arditi-host3:~#</pre></div>



<p>On voit la reécriture de root, utilisateur local en alain@arditi.fr conformément à ce qu&rsquo;on a déclaré dans le fichier /etc/aliases. On voit également que Exim4 récupère le champ Gecos dans /etc/passwd pour donner le nom root@arditi-host3.arditi.net à l&rsquo;utilisateur root.</p>



<h3 class="wp-block-heading">Tester les émetteurs</h3>



<p>Pour vérifier quel est le signataire d&rsquo;un email, il faut utiliser la commande « exim4 -brw adresse » qui affiche le détail de la réécriture des adresses. Pour une boîte aux lettres existante, il n&rsquo;y a pas de surprises :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# exim4 -brw alain@arditi.fr
  sender: alain@arditi.fr
    from: alain@arditi.fr
      to: alain@arditi.fr
      cc: alain@arditi.fr
     bcc: alain@arditi.fr
reply-to: alain@arditi.fr
env-from: alain@arditi.fr
  env-to: alain@arditi.fr
arditi-host3:~#</pre></div>



<p>Pour une boîte aux lettres locale, on voit la transformation :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# exim4 -brw root
  sender: alain@arditi.fr
    from: alain@arditi.fr
      to: root@arditi-host3.arditi.net
      cc: root@arditi-host3.arditi.net
     bcc: root@arditi-host3.arditi.net
reply-to: alain@arditi.fr
env-from: alain@arditi.fr
  env-to: root@arditi-host3.arditi.net
arditi-host3:~#</pre></div>



<p>Là aussi, on voit qu&rsquo;Exim utilise le contenu des fichiers /etc/aliases, /etc/email-addresses et /etc/passwd pour compléter les informations liées au compte root</p>
<p>L’article <a href="https://alain.arditi.fr/2024/04/11/tester-exim/">Tester Exim 1/2</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Configuration Exim</title>
		<link>https://alain.arditi.fr/2024/02/24/configuration-exim/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sat, 24 Feb 2024 18:49:29 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[Exim]]></category>
		<category><![CDATA[Exim4]]></category>
		<category><![CDATA[SMTP]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1154</guid>

					<description><![CDATA[<p>Exim est le serveur SMTP packagé par défaut de la distribution Debian. Il y a beaucoup de supporters de Postfix, mais dans la pratique, pour envoyer des emails depuis la crontab ou depuis une application Web, Exim fait très bien l&#8217;affaire et surtout il est « facile » à tester lors de la mise au point des&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2024/02/24/configuration-exim/">Poursuivre la lecture <span class="screen-reader-text">Configuration Exim</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2024/02/24/configuration-exim/">Configuration Exim</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Exim est le serveur SMTP packagé par défaut de la distribution Debian. Il y a beaucoup de supporters de Postfix, mais dans la pratique, pour envoyer des emails depuis la crontab ou depuis une application Web, Exim fait très bien l&rsquo;affaire et surtout il est « facile » à tester lors de la mise au point des configurations. </p>



<p>Le serveur SMTP est souvent la dernière roue du carrosse sur les serveurs de l&rsquo;Internet. Aussi, il arrive souvent qu&rsquo;au login sur le serveur, on voit passer un message signalant qu&rsquo;on a reçu des emails. Beaucoup d&rsquo;utilisateurs ignorent le message qui est souvent la marque d&rsquo;un serveur SMTP non configuré.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2@apollo:~ $ ssh arditi-host3.arditi.net
Linux arditi-host3 4.19.0-24-amd64 #1 SMP Debian 4.19.282-1 (2023-04-29) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Fri Feb 23 10:43:40 2024 from 68.201.202.129
You have new mail
arditi-host3:~#</pre></div>



<p>Si on décide de regarder ce qu&rsquo;il y a dans la boîte aux lettres, on a souvent une surprise de ce type :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# mail
Mail version 8.1.2 01/15/2001.  Type ? for help.
"/var/mail/root": 1812 messages 1812 new
&gt;N  1 root@localhost     Fri Feb 23 10:43   19/657   Cron &lt;root@localhost&gt; [ -x /usr/sbin/filetraq ] &amp;&amp; /usr/sbin/filetraq
 N  2 root@localhost     Fri Feb 23 10:45   19/657   Cron &lt;root@localhost&gt; [ -x /usr/sbin/filetraq ] &amp;&amp; /usr/sbin/filetraq
 N  3 root@localhost     Fri Feb 23 10:53   19/593   Cron &lt;root@localhost&gt; [ -x /usr/sbin/filetraq ] &amp;&amp; /usr/sbin/filetraq
 N  4 root@localhost     Fri Feb 23 10:54   19/593   Cron &lt;root@localhost&gt; [ -x /usr/sbin/filetraq ] &amp;&amp; /usr/sbin/filetraq
 N  5 root@localhost     Fri Feb 23 10:55   18/642   *** SECURITY information for localhost ***
 N  6 root@localhost     Fri Feb 23 10:55   18/675   *** SECURITY information for localhost ***
&amp;</pre></div>



<p>On voit que le serveur émet des alertes, qui, tant qu&rsquo;on n’a pas ouvert la boîte aux lettres, sont ignorées. D&rsquo;autre part, le fichier qui contient tous ces emails « /var/mail/root » ne fait que grossir&#8230;.</p>



<p>C&rsquo;est dommage, car les messages des crons permettent souvent de diagnostiquer un problème rapidement.</p>



<p>Exim est particulièrement simple à configurer pour faire le minimum, c&rsquo;est à dire permettre l&rsquo;envoi des emails administratifs. Pour les emails applicatifs, il est souvent préférable d&rsquo;avoir un service externalisé d&rsquo;envoi d&#8217;emails pour éviter d&rsquo;avoir à gérer tous les problèmes de rejets d&#8217;emails et de whitelisting auprès des grands acteurs du mail, comme Gmail, Hotmail, Free, Orange, La Poste, etc&#8230;</p>



<h2 class="wp-block-heading">Préliminaires</h2>



<p>L&rsquo;outil dpkg-reconfigure permet d&rsquo;initialiser la configuration d&rsquo;Exim de manière interactive en quelques écrans. </p>



<p>Avant de lancer la configuration, il faut s&rsquo;assurer que la machine a un nom FQDN correct, c&rsquo;est à dire que la commande « hostname -f » renvoie le nom complet de la machine. Lors de l&rsquo;installation le nom fourni se retrouve dans le fichier /etc/hostname. C&rsquo;est le nom court de la machine. Le nom long provient du fichier /etc/hosts dans lequel on doit retrouver le nom court.</p>



<p>Si /etc/hostname contient arditi-host3, dans /etc/hosts on doit retrouver une ligne avec le nom FQDN suivi du nom court.</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">127.0.0.1       localhost 
51.159.28.23    arditi-host3.arditi.net arditi-host3

# The following lines are desirable for IPv6 capable hosts 
::1     localhost ip6-localhost ip6-loopback 
ff02::1 ip6-allnodes 
ff02::2 ip6-allrouters</pre></div>



<p> Ici, on déclare l&rsquo;IP du serveur lui-même, mais on peut aussi utiliser une IP locale : 127.0.1.1 pour déclarer le FQDN. On a un fichier de la forme</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">127.0.0.1     localhost
127.0.1.1     arditi-host3.arditi.net arditi-host3

# The following lines are desirable for IPv6 capable hosts
::1     localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters</pre></div>



<p></p>



<p>Et la commande répond : </p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# hostname -f
arditi-host3.arditi.net
arditi-host3:~#</pre></div>



<p>Une fois cette étape réalisée, on peut lancer la configuration d&rsquo;Exim avec la commande dpkg-reconfigure exim4-config</p>



<p>Dans les écrans qui suivent, on indique qu&rsquo;on va envoyer et recevoir des emails sur Internet, mais comme on mettre 127.0.0.1 en IP d&rsquo;écoute, aucun mail ne pourra arriver depuis l&rsquo;extérieur. On est donc dans une configuration qui ne peut qu&rsquo;envoyer des emails vers l&rsquo;Internet. On verra dans un autre article l&rsquo;utilisation d&rsquo;un relais (smarthost). Dans le nom du système, on met le nom FQDN de la machine.</p>



<figure class="wp-block-image size-full"><img fetchpriority="high" decoding="async" width="886" height="502" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-1.png" alt="" class="wp-image-1156" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-1.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-1-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-1-768x435.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<figure class="wp-block-image size-full"><img decoding="async" width="886" height="502" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-2.png" alt="" class="wp-image-1157" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-2.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-2-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-2-768x435.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="886" height="502" data-id="1158" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-3.png" alt="" class="wp-image-1158" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-3.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-3-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-3-768x435.png 768w" sizes="(min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>
</figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="502" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-4.png" alt="" class="wp-image-1159" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-4.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-4-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-4-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="886" height="502" data-id="1160" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-5.png" alt="" class="wp-image-1160" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-5.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-5-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-5-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>
</figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-3 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="886" height="502" data-id="1161" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-6.png" alt="" class="wp-image-1161" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-6.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-6-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-6-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>
</figure>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-4 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="502" data-id="1163" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-8.png" alt="" class="wp-image-1163" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-8.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-8-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-8-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>
</figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="502" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-9.png" alt="" class="wp-image-1164" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-9.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-9-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-9-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="886" height="502" src="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-10.png" alt="" class="wp-image-1165" srcset="https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-10.png 886w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-10-300x170.png 300w, https://alain.arditi.fr/wp-content/uploads/2024/02/dpkg-reconfigure_exim4-10-768x435.png 768w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<h2 class="wp-block-heading">Configuration des alias et des adresses</h2>



<p>Dernier point pour que les emails administratifs fonctionnent, c&rsquo;est la configuration des alias. En effet, les emails administratifs sont pour la plupart des emails provenant de tâches planifiées (cron), qui sont adressés à « root » par défaut. On va donc donner à root une véritable adresse email grâce au fichier /etc/aliases, c&rsquo;est la dernière ligne du fichier :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# cat /etc/aliases 
# /etc/aliases
mailer-daemon: postmaster
postmaster: root
nobody: root
hostmaster: root
usenet: root
news: root
webmaster: root
www: root
ftp: root
abuse: root
noc: root
security: root
root: alain@arditi.fr
arditi-host3:~#</pre></div>



<p>Pour signer les emails administratifs, et en particulier s&rsquo;ils bouncent, il faut une boîte aux lettres réelle pour les émetteurs. Ainsi les bounces vont pouvoir revenir sur une boîte aux lettres plutôt que d&rsquo;être perdus dans le « goulp » ! On déclare ces emails dans le fichier /etc/email-addresses</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# cat /etc/email-addresses
# This is /etc/email-addresses. It is part of the exim package
#
# This file contains email addresses to use for outgoing mail. Any local
# part not in here will be qualified by the system domain as normal.
#
# It should contain lines of the form:
#
#user: someone@isp.com
#otheruser: someoneelse@anotherisp.com
root: alain@arditi.fr
www-data: alain@arditi.fr
arditi-host3:~#</pre></div>



<p>A noter que j&rsquo;ai déclaré une adresse pour www-data, car c&rsquo;est l&rsquo;utilisateur qui va envoyer les emails lorsqu&rsquo;on utilise un serveur Apache pour une application Web.</p>



<p>Pour terminer, afin de donner un nom à l&rsquo;émetteur, on peut modifier le fichier /etc/password et mettre à jour le champ Gecos de l&rsquo;utilisateur</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">arditi-host3:~# cat /etc/passwd
root:x:0:0:root-arditi-host3.arditi.net:/root:/bin/bash
....
www-data:x:33:33:Wordpress Contact:/var/www:/usr/sbin/nologin
....</pre></div>



<p>La ligne root contient le nom long, comme ça on voit d&rsquo;où vient l&#8217;email sans avoir à regarder les en-têtes SMTP.</p>



<p>Un email reçu depuis cette machine sera de la forme :</p>



<figure class="wp-block-table"><table><tbody><tr><td colspan="2">from:</td><td colspan="2">root-arditi-host3.arditi.net&nbsp;&lt;alain@arditi.fr&gt;</td></tr><tr><td colspan="2">to:</td><td colspan="2">root@arditi-host3.arditi.net</td></tr><tr><td colspan="2">date:</td><td colspan="2">Feb 23, 2024, 12:01 PM</td></tr></tbody></table></figure>



<p>On voit dans cet exemple, la différence entre le destinataire du message qui est root et l&rsquo;adresse de l&rsquo;enveloppe, alain@arditi.fr qui permet à l&#8217;email de sortir sur Internet et d&rsquo;arriver dans la boîte aux lettres.</p>
<p>L’article <a href="https://alain.arditi.fr/2024/02/24/configuration-exim/">Configuration Exim</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Nginx comme proxy SSL</title>
		<link>https://alain.arditi.fr/2023/03/22/nginx-authentification-page-de-maintenance/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Wed, 22 Mar 2023 17:06:40 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1138</guid>

					<description><![CDATA[<p>Beaucoup de sites Web basés sur PHP utilisent Nginx pour faire tourner PHP-fpm par exemple. Comme de plus on rajoute souvent un accélérateur Varnish dans la pile des composants, on se retrouve avec un Nginx qui gère la connexion des clients Web sur les ports 80 et 443 et le même Nginx qui gère le&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2023/03/22/nginx-authentification-page-de-maintenance/">Poursuivre la lecture <span class="screen-reader-text">Nginx comme proxy SSL</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2023/03/22/nginx-authentification-page-de-maintenance/">Nginx comme proxy SSL</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Beaucoup de sites Web basés sur PHP utilisent <a href="https://nginx.org/" target="_blank" rel="noreferrer noopener">Nginx</a> pour faire tourner <a href="https://php-fpm.org" target="_blank" rel="noreferrer noopener">PHP-fpm</a> par exemple. Comme de plus on rajoute souvent un accélérateur Varnish dans la pile des composants, on se retrouve avec un Nginx qui gère la connexion des clients Web sur les ports 80 et 443 et le même Nginx qui gère le lien avec PHP-fpm sur le port 8080 par exemple. On peut découper la configuration du serveur Nginx en 2 voire 3 parties distinctes :</p>



<ol class="wp-block-list">
<li>la partie port 80, qui gère le lien avec les navigateurs et les redirigent vers le port 443 (SSL)</li>



<li>la partie port 443, qui fait office de proxy SSL</li>



<li>la partie port 8080, qui fait office de proxy pour PHP-fpm</li>
</ol>



<p>Ici on va s&rsquo;intéresser en particulier au deux premières parties qui gèrent la connexion avec les Internautes, car on va pouvoir y intégrer des règles qui permettent d&rsquo;ajouter une authentification ou une page de maintenance. L&rsquo;authentification est typiquement utilisée pour les sites de préproduction ou de recette et la page de maintenance est utilisée pour les mises en production ou lors d&rsquo;incidents de production.</p>



<h2 class="wp-block-heading">Port 80</h2>



<p>La configuration sur le port 80 a pour seul objectif de renvoyer l&rsquo;Internaute vers une connexion sécurisée SSL sur le port 443. Ca ne doit pas être une généralité, car pour des sites qui ne gèrent pas de login, il n&rsquo;y a aucun intérêt à faire du SSL, même si Google souhaite le contraire. On s&rsquo;aperçoit que forcer le SSL de manière généralisée, quelque soient les contenus, consomme de la CPU et détruit les ressources de la planète.</p>



<p>Néanmoins, voici une configuration de serveur Nginx pour forcer le SSL !</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">server {
        listen 80 default_server;
        listen [::]:80 default_server;

        # prend tous les noms de serveurs
        server_name _;

        # reecriture en HTTPS
        rewrite ^(.*) https://$host$1 permanent;
}</pre></div>



<h2 class="wp-block-heading">Port 443</h2>



<p>La configuration du port 443 a pour objectif de présenter le certificat SSL et de faire le proxy vers l&rsquo;application. C&rsquo;est donc à ce niveau, qu&rsquo;on peut faire des filtres en fonction des noms DNS, des URLs, des IP des clients, etc&#8230;</p>



<p>Une configuration simple du proxy qui renverrait tout le trafic entrant vers un Varnish sur le port 6081 aurait cette syntaxe :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">server {

    listen 443 ssl;
    listen [::]:443 ssl;

    # le nom ou les noms DNS gérés dans le certificat
    server_name mon_serveur;

    # le certificat SSL
    ssl_certificate         /etc/letsencrypt/live/mon_serveur/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/mon_serveur/privkey.pem;

    access_log /var/log/nginx/proxy-ssl-access.log;
    error_log /var/log/nginx/proxy-ssl-error.log;

    location / {
        proxy_pass http://127.0.0.1:6081;
        include /etc/nginx/proxy_params;
    }
}</pre></div>



<h2 class="wp-block-heading">Authentification pour un environnement de recette</h2>



<p>Une fois que Nginx est configuré comme proxy SSL, il est assez simple d&rsquo;ajouter une authentification pour tout un site.</p>



<p>Voici un exemple de configuration :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">server {

    listen 443 ssl;
    listen [::]:443 ssl;

    # le nom ou les noms DNS gérés dans le certificat
    server_name mon_serveur;

    # le certificat SSL
    ssl_certificate         /etc/letsencrypt/live/mon_serveur/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/mon_serveur/privkey.pem;

    access_log /var/log/nginx/proxy-ssl-access.log;
    error_log /var/log/nginx/proxy-ssl-error.log;

    # Protection de toutes les pages
    auth_basic "Restricted access";
    auth_basic_user_file /etc/nginx/htpassword;

    location / {
        proxy_pass http://127.0.0.1:6081;
        include /etc/nginx/proxy_params;
    }
}</pre></div>
<p>L’article <a href="https://alain.arditi.fr/2023/03/22/nginx-authentification-page-de-maintenance/">Nginx comme proxy SSL</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</title>
		<link>https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Wed, 22 Feb 2023 15:42:16 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Varnish]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1122</guid>

					<description><![CDATA[<p>La plupart des outils de gestion de sites Internet, comme les CMS ou les solutions d’e-commerce peuvent intégrer dans leur architecture logicielle le composant Varnish pour cacher des pages ou des éléments de pages Web. La gestion du cache Varnish est alors intégrée à l’outil. C’est à dire que l’outil va générer un en-tête du&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Poursuivre la lecture <span class="screen-reader-text">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La plupart des outils de gestion de sites Internet, comme les CMS ou les solutions d’e-commerce peuvent intégrer dans leur architecture logicielle le composant <a href="https://varnish-cache.org/" target="_blank" rel="noreferrer noopener nofollow">Varnish</a> pour cacher des pages ou des éléments de pages Web.</p>



<p>La gestion du cache Varnish est alors intégrée à l’outil. C’est à dire que l’outil va générer un en-tête du type TTL (expires ou autre) qui va permettre à Varnish d’appliquer la politique de cache de l’outil. Quand les éléments de sites contiennent des hash dans les URLs, généralement les TTL sont très grands (une année, voire plus). A chaque nouvelle version de cet élément l’outil va modifier le hash, et les utilisateurs pourront ainsi récupérer la nouvelle version sans qu’il n’y ait eu de purge de l’ancienne, puisque l’élément a un nouveau nom&nbsp;!</p>



<p>Dans le cas où les éléments ne changent pas de nom, la home page par exemple, ou des pages Web avec des permaliens, c’est l’outil qui va envoyer une requête de purge à Varnish (généralement une requête HTTP de type PURGE), qui va ainsi rafraîchir son cache et envoyer la nouvelle version.</p>



<p>Ces technologies sont relativement bien rodées sauf dans quelques cas où une extension ne gère pas le cache Varnish ou bien quand on insère dans blocs dans une page ou qu’on fait de l’ESI par exemple.</p>



<p>Dans ces cas, on peut toujours rafraîchir le cache Varnish en ligne de commande avec l’outil d’administration varnishadm ou bien en forgeant une requête de type PURGE, mais ces techniques dépassent souvent les permissions accordés aux webmestres ou leur compétences.</p>



<p>Il reste une solution assez simple d&rsquo;utilisation, c’est de déclencher une purge Varnish quand l’utilisateur demande une version de la page qui ne provient pas du cache, c’est à dire avec le header HTTP « Cache-Control: no-cache »</p>



<p>C&rsquo;est le header envoyé par les navigateurs quand on demande le rafraîchissement d&rsquo;une page. Selon les OS et les navigateurs, le rafraîchissement s&rsquo;obtient par les raccourcis claviers suivants :</p>



<ul class="tw-mt-0 tw-mb-0 wp-block-list">
<li>Windows: <code>Ctrl</code> + <code>F5</code></li>



<li>Mac: <code>Command</code> + <code>Shift</code> + <code>R</code></li>



<li>Linux: <code>Ctrl</code> + <code>Shift</code> + <code>R</code></li>
</ul>



<p></p>



<p>Dans le livre <a href="https://info.varnish-software.com/resources/varnish-6-by-example-book" target="_blank" rel="noreferrer noopener nofollow">Varnish 6 by example</a>, il est écrit&nbsp;:<br>« How Varnish deals with Cache-Control<br>First things first: Varnish doesn’t respect the Cache-Control as a request header, only as a response header. »</p>



<p>Effectivement l&rsquo;objectif de Varnish ce n&rsquo;est pas que les utilisateurs contournent le cache et le vide sans arrêt. L&rsquo;idée de la mise en place du rafraîchissement par un navigateur, c&rsquo;est de filtrer les IP qui ont le droit de de procéder au rafraîchissement.</p>



<p>On trouve des articles des années 2010 sur Internet qui indiquent comment faire et qui proposent des élément de configuration des fichiers VCL de Varnish datant de Varnish 3 ou 4&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">acl CTRLF5 {
   "127.0.0.1";
}

sub vcl_hit {

  if (client.ip ~ CTRLF5) {
    if (req.http.pragma ~ "no-cache" || req.http.Cache-Control ~ "no-cache")
    {
      set obj.ttl = 0s;
      return(pass);
    }
    else { return(deliver); }
  }
  else { return(deliver); }
}</pre></div>



<p>Bref, quand on travaille sur Varnish 6 avec des CDN ou des proxy SSL type Nginx, on ne risque pas de faire fonctionner le rafraîchissement avec le code ci-dessus !</p>



<p>La configuration actualisée pour Varnish 6 serait du type&nbsp;:</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag"># VCL version 5.0 is not supported so it should be 4.0 even though actually used Varnish version is 6
vcl 4.0;
import std;
...

# Declaration des IP autorisées à purger les pages
purge {
  "localhost";
  "127.0.0.1";
  "::1";
  "78.201.202.159"; # IP de ma maison
  "90.63.253.70";   # toHero (Orange)
  "212.114.18.211"; # toHero (Free)
}
...

sub vcl_hit {
    # Comme on est derrière Nginx, client.ip est l'IP du proxy pour tous les clients !!!
    # Si on se basait sur client.ip, il n'y aurait aucun filtrage...
    # On utilise X-Real-IP, sauf si la requête provient de localhost
    if ((req.http.X-Real-IP) &amp;&amp; (std.ip(req.http.X-Real-IP) ~ purge) ||
            client.ip ~ purge) {
        if (req.http.pragma ~ "no-cache" || req.http.Cache-Control ~ "no-cache")
        {
          ban("obj.http.X-Req-URL ~ " + req.url);
          return (restart);
        }
    }
...</pre></div>



<p>Une fois cette configuration installée, on peut procéder à quelques tests !</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">aa2@apollo:~$ curl -s -k -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 14:51:19 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 24
X-Cache: HIT
Accept-Ranges: bytes

aa2@apollo:~$

# On force le rafraichissement
aa2@apollo:~$ curl -s -k -H "Cache-control: no-cache" -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 14:51:25 GMT
Content-Type: text/html; charset=UTF-8
Transfer-Encoding: chunked
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 0
X-Cache: MISS
Accept-Ranges: bytes

aa2@apollo:~$
aa2@apollo:~$ curl -s -k -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 15:33:08 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 31761
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 14
X-Cache: HIT
Accept-Ranges: bytes

aa2@apollo:~$ 

# Test depuis une IP qui n'est pas dans l'access list "purge" :
arditi-host3:~# curl -s -k -H "Cache-control: no-cache" -D - -o /dev/null "https://alain.arditi.fr/"
HTTP/1.1 200 OK
Server: nginx
Date: Wed, 22 Feb 2023 15:35:23 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 31761
Connection: keep-alive
Last-Modified: Sun, 06 Nov 2022 21:39:44 GMT
Vary: Accept-Encoding
Age: 149
X-Cache: HIT
Accept-Ranges: bytes

arditi-host3:~#</pre></div>



<p>…..</p>
<p>L’article <a href="https://alain.arditi.fr/2023/02/22/forcer-le-rafraichissement-du-cache-varnish-avec-ctrlf5/">Forcer le rafraichissement du cache Varnish avec Ctrl+F5 !</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Linux efficace ou les 10 commandes à connaître</title>
		<link>https://alain.arditi.fr/2022/09/01/linux-efficace-ou-les-10-commandes-a-connaitre/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Thu, 01 Sep 2022 15:46:37 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Debian]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1105</guid>

					<description><![CDATA[<p>La très grande majorité des cours, des tutoriels ou des livres sur Linux sont des énoncés des commandes du système avec moult détails sur la syntaxe des options…On arrive vite à des succédanés du man avec des exemples en plus.Si on ne connaît rien, on obtient donc une information relativement brute et si on connaît&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2022/09/01/linux-efficace-ou-les-10-commandes-a-connaitre/">Poursuivre la lecture <span class="screen-reader-text">Linux efficace ou les 10 commandes à connaître</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2022/09/01/linux-efficace-ou-les-10-commandes-a-connaitre/">Linux efficace ou les 10 commandes à connaître</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>La très grande majorité des cours, des tutoriels ou des livres sur Linux sont des énoncés des commandes du système avec moult détails sur la syntaxe des options…<br>On arrive vite à des succédanés du man avec des exemples en plus.<br>Si on ne connaît rien, on obtient donc une information relativement brute et si on connaît déjà la commande on retrouve les exemples et les options qu&rsquo;on connait déjà. Quand on sait ce qu&rsquo;on cherche, on valide ainsi la syntaxe et éventuellement le sens de la commande.<br>Dans la très grande majorité des cas, quand on apprend Linux, on se retrouve un peu perdu par la quantité de commandes et la quantité d&rsquo;options de chacune d&rsquo;elles !<br>Si on cherche plutôt un tutoriel pour démarrer l&rsquo;apprentissage, on reste parfois sur sa faim, car soit on trouve des commandes utilisées de manière très précise, soit à l&rsquo;autre extrême on retrouve toutes les manières d&rsquo;utiliser les commandes de façon linéaire sans savoir s&rsquo;il vaut mieux utiliser celle-ci ou celle-là.</p>



<p>Bref, on est confronté, comme souvent sur Internet, à l&rsquo;énorme quantité d&rsquo;informations qu&rsquo;il faut savoir trier.&nbsp;<br>C&rsquo;est au lecteur de se faire une idée et de construire son savoir.<br>Et quand on travaille seul, on se pose souvent des questions qui restent sans réponse.</p>



<p>Si on travaille en équipe, ça relève de la technique des fourmis, celui qui a trouvé la bonne manière de faire va diffuser l&rsquo;information aux collègues. Encore faut-il que ce soit effectivement la bonne manière de faire. J&rsquo;ai vu de nombreux informaticiens utiliser des options qui ne faisaient pas ce qu&rsquo;ils pensaient…</p>



<p>L&rsquo;objectif de ce document est de vous exposer ma manière de faire, c&rsquo;est-à-dire les commandes de base que j&rsquo;utilise au quotidien dans mon travail d&rsquo;administrateur système.<br>Ce n&rsquo;est pas la meilleure manière ni la plus complète, c&rsquo;est la mienne. Elle est probablement différente de celle des autres administrateurs, chacun ayant ses propres trucs.<br>Je vous livre ma manière d&rsquo;utiliser la ligne de commande, à vous d&rsquo;y piocher ce qui vous paraît pertinent.</p>



<p>La manière dont je travaille est le résultat d&rsquo;un long processus qui a pris des années et des années. J&rsquo;ai commencé à travailler sous Unix en 1988…. J&rsquo;ai eu la chance de croiser beaucoup d&rsquo;autres utilisateurs sous Unix ou Linux, dans mon travail quotidien comme lors d' »install parties » ou des salons.</p>



<p>Chacun a sa propre manière d&rsquo;utiliser la ligne de commande.<br>Chacun a son propre jeu d&rsquo;instructions, certains en utilisent beaucoup, d&rsquo;autres moins. Enfin, certains qui ne veulent pas s&rsquo;immerger dans Linux, en utilisent le minimum.&nbsp;</p>



<p>Ce document s&rsquo;adresse à des débutants, puisqu&rsquo;on y retrouve les commandes de base et, dans la très grande majorité, dans une utilisation simple.<br>Mais si on veut comprendre le sens de ces commandes, ou plutôt pour quelle raison il vaut mieux utiliser une commande sous cette forme plutôt qu&rsquo;une autre, il vaut mieux avoir déjà une expérience de la ligne de commande. Et c&rsquo;est le sujet de ce partage : la recherche de sens.</p>



<p>C&rsquo;est comme l&rsquo;apprentissage du piano. Si votre professeur vous dit de mettre les doigts comme ça, vous le faîtes parce que vous êtes persuadé qu&rsquo;il faut faire ainsi. Si vous avez déjà fait des années de piano, vous allez comprendre pour quelle raison il fallait le faire ainsi.</p>



<p>Lorsqu&rsquo;on apprend l&rsquo;informatique, on est souvent confronté à une problématique de transmission de savoir. On va vous dire que si vous ne connaissez pas une commande, il faut regarder le « man » ou bien chercher sur Internet. Les cours que j&rsquo;ai eu l&rsquo;occasion de donner ou de voir sur la ligne de commande, sont soit minimalistes pour les débutants qui n&rsquo;ont jamais vu une console, soit un partage de syntaxe spécifiques pour des élèves avancés. Dans ce dernier cas, on arrive souvent à l&rsquo;énumération des options de la commande, qui pour la plupart sont peu utiles au quotidien. On retombe facilement dans la paraphrase du « man ».<br>Alors, les bons professeurs, lorsqu&rsquo;ils paraphrasent le man illustrent souvent leur propos avec des exemples. Sinon, ils diraient à leurs élèves : lisez la doc !<br>C&rsquo;est d&rsquo;ailleurs ce qu&rsquo;on peut critiquer à l&rsquo;esprit du RTFM.</p>



<p>Si on illustre toutes les options, on se dit que les élèves auront au moins entendu une fois dans leur vie le contenu de cette documentation et s&rsquo;en rappelleront au moment opportun. C&rsquo;est ce qu&rsquo;on se dit tous, en imaginant qu&rsquo;en lisant l&rsquo;exhaustivité de cette documentation on va trouver une option magique qu&rsquo;on n&rsquo;avait jamais utilisée jusqu&rsquo;à présent.</p>



<p>A mon avis, il vaut mieux se concentrer sur les bonnes options à retenir et savoir ce qu&rsquo;elles font exactement plutôt que de connaître vaguement le sens de toutes les options.<br>Comme souvent en informatique, il faut supprimer le « vague » ou l' »à peu près » de sa manière de penser.</p>



<p>Certains de mes collègues en arrivant dans l&rsquo;équipe m&rsquo;expliquaient qu&rsquo;ils utilisaient toujours rsync avec les options -trolpg. Soit !<br>Moi j&rsquo;utilise les options -av ou -avz, les autres options sont des cas particuliers.</p>



<p>On est dans une situation où pour comprendre la manière de faire, il faut déjà avoir un certain bagage. Et des cours où on explique la manière de faire, je n&rsquo;en connais pas. C&rsquo;est très souvent en échangeant avec un autre admin qu&rsquo;on se dit que sa manière d&rsquo;utiliser telle commande est plus efficace que la nôtre.<br>Des fois à la lecture d&rsquo;un article on se dit quelle « cool feature » cette option ! Et on se l&rsquo;approprie.</p>



<p>La difficulté comme souvent dans l&rsquo;apprentissage étant de transmettre le maximum d&rsquo;informations sans noyer les élèves. Si on dit juste qu&rsquo;il faut utiliser telle commande de cette manière, on restreint souvent très fortement les fonctionnalités de la commande.</p>



<p>Mais c&rsquo;est mon parti pris : limiter le nombre de commandes et leurs options.</p>



<p>Ce qui ne veut pas dire qu&rsquo;avec l&rsquo;expérience, il ne faudra pas aller creuser les autres options ou les autres commandes. D&rsquo;ailleurs, je remarque que la très grande majorité des administrateurs ont une connaissance encyclopédique des commandes et de leurs options. Cette connaissance, il faudra l&rsquo;avoir un jour ou l&rsquo;autre. Même si on utilise certaines options une fois par an !</p>



<p>Alors, le jeu de commandes que j&rsquo;utilise au quotidien est relativement simple. C&rsquo;est un compromis entre l&rsquo;efficacité des commandes et ma capacité à mémoriser les syntaxes.&nbsp;&nbsp;</p>



<p>Afin d&rsquo;avoir une démarche rationnelle, j&rsquo;ai extrait quelques statistiques de mes historiques de ligne de commande.<br>Les échantillons que j&rsquo;ai utilisés pour extraire les commandes les plus utilisées sont les suivants :</p>



<figure class="wp-block-table is-style-regular"><table><thead><tr><th>Source de l&rsquo;historique</th><th class="has-text-align-right" data-align="right">Nombre de commandes</th><th>Durée entre la première et la dernière commande de l&rsquo;historique</th></tr></thead><tbody><tr><td>Serveur physique Debian</td><td class="has-text-align-right" data-align="right">4 428</td><td>2 ans et 6 mois</td></tr><tr><td>Mac OS en bash</td><td class="has-text-align-right" data-align="right">24 212</td><td>2 ans et 3 mois</td></tr><tr><td>Mac OS en zsh</td><td class="has-text-align-right" data-align="right">35 274</td><td>5 ans</td></tr><tr><td>VM WordPress</td><td class="has-text-align-right" data-align="right">1 086</td><td>2 mois</td></tr><tr><td>Serveur DNS</td><td class="has-text-align-right" data-align="right">1 030</td><td>2 ans et 6 mois</td></tr></tbody></table></figure>



<h3 class="wp-block-heading">Top 10 des commandes de base que j&rsquo;utilise</h3>



<p>Note : j&rsquo;ai pris uniquement la première commande après le prompt sans tenir compte des commandes qui suivent un pipe.</p>



<figure class="wp-block-table"><table><thead><tr><th>Rang</th><th>Nombre d&rsquo;occurrences</th><th>Commande</th></tr></thead><tbody><tr><td>1</td><td>7213</td><td>cd</td></tr><tr><td>2</td><td>5841</td><td>ls</td></tr><tr><td>3</td><td>1916</td><td>rsync</td></tr><tr><td>4</td><td>1530</td><td>sudo</td></tr><tr><td>5</td><td>1166</td><td>history</td></tr><tr><td>6</td><td>1032&nbsp;</td><td>grep</td></tr><tr><td>7</td><td>947&nbsp;</td><td>rm</td></tr><tr><td>8</td><td>843&nbsp;</td><td>less</td></tr><tr><td>9</td><td>799&nbsp;</td><td>find</td></tr><tr><td>10</td><td>549</td><td>cat</td></tr><tr><td>11</td><td>365</td><td>man</td></tr></tbody></table></figure>



<p>Quelques commentaires</p>



<ol class="wp-block-list"><li>Les commandes ci-dessus sont essentiellement des commandes d&rsquo;administration système. C&rsquo;est de la recherche d&rsquo;information pour la réutiliser ou pour la modifier.</li><li>la commande sudo provient de mes historiques de postes personnels sur lequel je travaille avec un compte utilisateur. Pour les serveurs, je travaille sous root, il n&rsquo;y a donc pas de sudo. Sauf pour lancer une commande avec l&rsquo;environnement spécifique à un utilisateur.</li><li>Si on l&rsquo;élimine la commande sudo, la commande man arrive en 10<sup>ème</sup> position !</li><li>Une commande particulièrement utile qui n&rsquo;apparaît pas dans cette liste est « pwd » (Print Working Directory). Comme l&rsquo;invite de commande (le prompt) affiche le répertoire courant, inutile d&rsquo;utiliser pwd !</li><li>Les deux premières commandes cd et ls reflètent l&rsquo;exploration de l&rsquo;arborescence des fichiers. Il faut ajouter la commande pwd qui est implicite car affichée dans le prompt. Le triplet de commandes « cd ls pwd » est l&rsquo;équivalent des explorateurs de fichiers en mode graphique. On se déplace dans les répertoires en cliquant sur le répertoire qui montre alors les fichiers qui s&rsquo;y trouvent.</li><li>rsync arrive en 3<sup>ème</sup> position. C&rsquo;est la commande qui permet de copier un fichier ou une arborescence. Je n&rsquo;utilise plus ou quasiment plus ni cp, ni scp.</li><li>history est la commande qui permet d&rsquo;afficher les commandes qu&rsquo;on a déjà saisies. C&rsquo;est l&rsquo;aide mémoire de la ligne de commande, suivi très souvent de la commande grep afin de rechercher une commande en particulier. L&rsquo;objectif étant de réutiliser au maximum ce qu&rsquo;on a déjà fait !</li><li>la commande grep apparaît ici dans le cas où elle est la première commande de la ligne. Elle correspond à des recherches de chaînes dans des fichiers et non pas derrière un pipe. En fait je l&rsquo;utilise énormément derrière les pipes suite à un history, mais je n&rsquo;ai pas comptabilisé ce mode d&rsquo;utilisation.</li><li>la commande rm (remove), pour supprimer des fichiers ou des arborescences arrive haut dans le listing. 2000 rsync pour 1000 rm, c&rsquo;est le signe du nettoyage des fichiers obsolètes. Une partie du travail d&rsquo;administration système consiste à déplacer ou à recopier des arborescences. Il faut ensuite supprimer les fichiers inutiles, ça relève des bonnes pratiques.</li></ol>



<p></p>



<h3 class="wp-block-heading">Détail des options de ls</h3>



<p>Voici plus en détail l&rsquo;utilisation que je fais de la commande ls, d&rsquo;après mes historiques :</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="511" height="715" src="https://alain.arditi.fr/wp-content/uploads/2022/09/historique_ls-1.png" alt="" class="wp-image-1117" srcset="https://alain.arditi.fr/wp-content/uploads/2022/09/historique_ls-1.png 511w, https://alain.arditi.fr/wp-content/uploads/2022/09/historique_ls-1-214x300.png 214w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>Les 2 principales options sont :</p>



<ul class="wp-block-list"><li>ls -l (long) pour avoir le détail de chaque fichier listé par ordre alphabétique</li><li>ls -ltr (long time reverse) pour avoir le fichier le plus récent en bas du listing. C&rsquo;est la commande qui permet de connaître les fichiers « chauds », donc ceux qui bougent, dans les logs ou les répertoires de configuration par exemple.</li></ul>



<h3 class="wp-block-heading">Détail des options de rsync</h3>



<p>Voici les options que j&rsquo;utilise le plus souvent</p>



<figure class="wp-block-table"><table><tbody><tr><td>1916</td><td>rsync toutes syntaxes confondues</td><td></td><td></td><td></td></tr><tr><td>dont</td><td>1214</td><td>-av</td><td></td><td></td></tr><tr><td></td><td>dont</td><td>161</td><td>-avz</td><td></td></tr><tr><td></td><td></td><td>88</td><td>&#8211;delete</td><td></td></tr><tr><td></td><td></td><td>65</td><td>-P</td><td></td></tr><tr><td></td><td></td><td>59</td><td>-n</td><td></td></tr><tr><td></td><td></td><td>43</td><td>-c</td><td></td></tr><tr><td></td><td></td><td>19</td><td>-u</td><td></td></tr><tr><td></td><td>618</td><td>exécutions de quelques scripts de synchro</td><td></td><td></td></tr></tbody></table></figure>



<p>Le bilan pour les rsync tapés en ligne de commande font que les plus simples sont de la forme<br>rsync -av source destination<br>et les plus compliqués sont de la forme<br>rsync -avz &#8211;delete -P source destination<br>L&rsquo;option -n (dry-run) permet de lancer la commande pour voir ce qu&rsquo;elle ferait.<br>L&rsquo;option -P permet de « voir » la progression du rsync<br>L&rsquo;option -c permet de comparer les fichiers source et destination par un checksum. Par defaut rsync considère qu&rsquo;un fichier est identique sur la source et la destination si la taille et la date de modification sont identiques. Avec -c on peut contrôler une arborescence suite à une intrusion ou limiter le listing des fichiers modifiés&#8230;.</p>



<p>Les scripts de synchro utilisent principalement des exclusions et parfois l&rsquo;option &#8211;numeric-ids</p>



<p>En voici deux exemples :</p>



<pre class="urvanov-syntax-highlighter-plain-tag">rsync -av $DRY --delete \
--exclude=@eaDir/ \
--exclude=&quot;.DS_Store&quot; \
--exclude=&quot;.TemporaryItems/&quot; \
$SOURCE $DEST</pre>



<pre class="urvanov-syntax-highlighter-plain-tag">rsync -avz \
--numeric-ids \
--delete \
--exclude=&quot;var/cache/&quot; \
--exclude=&quot;var/run/&quot; \
--exclude=&quot;tmp/&quot; \
--exclude=&quot;dev/&quot; \
--exclude=&quot;etc/network/&quot; \
--exclude=&quot;run/utmp&quot; \
$SRV:/mnt/disk1/$VM/ /mnt/disk1/$VM/</pre>



<p>Le &#8211;numeric-ids permet de conserver les id utilisateurs et groupes lors du rsync. C&rsquo;est utile pour manipuler des VM LXC depuis un host sans perturber les permissions de la VM guest qu&rsquo;on vient de copier.</p>
<p>L’article <a href="https://alain.arditi.fr/2022/09/01/linux-efficace-ou-les-10-commandes-a-connaitre/">Linux efficace ou les 10 commandes à connaître</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tests de charge : le plugin jp@gc Concurrency Thread Group</title>
		<link>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/</link>
					<comments>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sun, 03 Apr 2022 17:24:10 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1097</guid>

					<description><![CDATA[<p>Lors de tests de charge avec JMeter, il est courant d’utiliser le plugin jp@gc Concurrency Thread Group (https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/), qui permet de faire monter la charge par marche d’escalier. Les marches d’escalier quand elles sont suffisamment longues par rapport à la fréquence des prises de mesures du côté de l’infrastructure, permettent de faire une corrélation directe&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Poursuivre la lecture <span class="screen-reader-text">Tests de charge : le plugin jp@gc Concurrency Thread Group</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Tests de charge : le plugin jp@gc Concurrency Thread Group</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Lors de tests de charge avec JMeter, il est courant d’utiliser le plugin jp@gc Concurrency Thread Group (<a href="https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/" target="_blank" rel="noreferrer noopener">https://jmeter-plugins.org/wiki/ConcurrencyThreadGroup/</a>), qui permet de faire monter la charge par marche d’escalier.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh5.googleusercontent.com/B9olHiSkBPQ2w3WvFYegBqMTObxnoVjyYMAA11cJk5Yv4xvxp3hdp1HwgYyX-PMOUO4cfnzjlFvtLs654CLmDZxiXe0M1FFpV3pQwexKJ6MeUw3joCLo7QHyaYyBnMClIbhZ1hQq" alt="JMeter logo"/></figure>



<p>Les marches d’escalier quand elles sont suffisamment longues par rapport à la fréquence des prises de mesures du côté de l’infrastructure, permettent de faire une corrélation directe entre la charge et le comportement de la plateforme. En effet, la plateforme va consommer des ressources en fonction de l&rsquo;injection et on pourra visualiser les marches d’escalier du côté des graphiques de l’infrastructure.</p>



<span id="more-1097"></span>



<p>A condition que la durée des marches, ou plus précisément la durée des paliers, permette d’avoir suffisamment de points de mesure côté infrastructure. Si la fréquence de la métrologie est de 5 minutes, par exemple, qui est la valeur courante des logiciels de métrologie, il faut au moins des paliers de 15 à 20 minutes pour avoir 3 à 4 mesures et visualiser ainsi le palier.</p>



<p>Dans l’exemple suivant, on peut voir l’utilisation du plugin “Concurrency Thread Group” avec des paliers de 20 minutes.</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/2nQJkcMBYSxMnF36TP43CihgrFAOMJjJ5ZtCcHElEMzbmAMwryDCE-wyMY28PG0wKSbZ4tTYEOcxEkpMcPqH4t-NDDVgS81Nt0Ph_gfoXZSMW5w2GAnkDxj0U-nHSy94XwNX0Lkn" alt=""/></figure>



<p>Du côté de l’infrastructure, sur le graphe du débit réseau on retrouve les paliers :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/kOuUPKzgvJhlC5EpSTXOkmQqKq4T0f0gyZdvSdQYs5j2ZbscmoIfoJ95k5r_bdPSPmUj2SkPJ6gleVTi5bGsOuYkU4gvGcXLcG3aQeKNbxseN4A_F7N4tiUGPLb6jnOuTjVTpAu5" alt=""/></figure>



<p>On peut ainsi faire la correspondance entre le nombre de threads et la charge de la plateforme.</p>



<p>On peut dire qu’à 60 threads, au 3<sup>ème</sup> palier, le débit de la plateforme est de 60 Mbps et qu&rsquo;au 8<sup>ème</sup> et dernier palier, à 150 threads, le débit est de 150Mbps.</p>



<p>Même si les paliers de la métrologie ne sont pas plats, on retrouve bien l’évolution de l’injecteur, et dans ce cas précis, on peut même conclure sans trop se tromper que le débit augmente de 1 Mbps par thread.</p>



<p>Par contre, on n’en déduit pas facilement le nombre de parcours ou de sessions simultanées à chaque palier.</p>



<p>Un moyen assez simple d’extrapoler les résultats pour avoir des métriques marketing, est de spécifier des valeurs judicieuses dans le plugin “Concurrency Thread Group”, comme on va le voir dans le graphique ci-dessous :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh6.googleusercontent.com/Cti5CG10tspGS_UmmaEWmhdsTsY18i3_RQtBOQtN-n76TKT_SFjP9LHiDT4dR3UPmDafmR06jwVzteGgw9bd-l78xqQ7qnH0WPYBjN0pZGFLKWv4uyYE7YM9BYMJIVCiNYSztNxc" alt=""/></figure>



<p>Ici, on a des marches d’escalier de 20 minutes avec 20 threads supplémentaires à chaque marche. On remarque que les surfaces sous les marches augmentent d’une unité de surface (4 carreaux) par marche.</p>



<p>Ainsi la surface sous la dernière marche vaut 5 fois la surface sous la première marche.</p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-1024x722.png" alt="" class="wp-image-1100" width="610" height="430" srcset="https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-1024x722.png 1024w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-300x212.png 300w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers-768x542.png 768w, https://alain.arditi.fr/wp-content/uploads/2022/04/Screenshot-2021-12-16-at-10.50.20_escaliers.png 1534w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>Comme les threads travaillent de manière uniforme, on peut en déduire que s’ils parcourent n scénarios pendant les 20 première minutes, c’est à dire pendant la première marche, ils en parcourent 5 fois plus lorsque JMeter atteint les 100 threads, c’est à dire à la dernière marche.</p>



<p>Comme JMeter fournit le nombre total de scénarios qu’il a exécutés à la fin du tir, en détaillant le nombre d’exécution par URL, on peut en déduire facilement le nombre de visites.</p>



<p>Pour connaître le nombre de scénarios exécutés pendant les 20 premières minutes, on part de l’hypothèse que nombre de scénarios est proportionnel à la surface sous les marches.</p>



<p>La surface totale de l’escalier de 5 marches, qu’on appellera S<sub>tot</sub>, est de 1+2+3+4+5 = 5&#215;6/2 = 15. Donc S<sub>tot</sub> = 15.</p>



<p>Si le nombre total de scénarios exécutés par JMeter, donc le nombre de visites, est V<sub>tot</sub>, alors pendant les 20 premières minutes (durée de la première marche), JMeter a exécuté&nbsp; V<sub>tot</sub> / S<sub>tot</sub> visites.</p>



<p>Et pendant les 20 dernières minutes, à la 5<sup>ème</sup> marche, il aura exécuté (V<sub>tot</sub> / S<sub>tot</sub> * 5) visites, puisque la surface sous la 5eme marche est 5 fois plus grande que la surface de la première.</p>



<p>En prenant les usages du Web qui comptabilisent les sessions comme toute visite après 30 minutes d’inactivité, si on extrapole le nombre de visites du dernier palier de 20 minutes à 30 minutes, on obtient (V<sub>tot</sub> / S<sub>tot</sub> * 5) * 3/2 sessions simultanées lorsqu’on atteint 100 threads.</p>



<p>On voit que ce calcul s’applique quel que soit le nombre de threads et la durée des paliers, sur la base des éléments fournis par JMeter, et se fait de manière simple, pour peu qu’on choisisse bien les paramètres du plugin “Concurrency Thread Group”.</p>



<p>En faisant la corrélation avec les graphes de l’infrastructure, on peut en déduire facilement le nombre de sessions simultanées qu’elle peut supporter !</p>



<p>Une fois qu&rsquo;on connaît le nombre de sessions simultanées, on peut extrapoler les nombre de visite à l&rsquo;heure, puis par jour et enfin le nombre de visites mensuelles, en jetant un oeil sur l&rsquo;article : <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a></p>
<p>L’article <a href="https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/">Tests de charge : le plugin jp@gc Concurrency Thread Group</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2022/04/03/tests-de-charge-le-plugin-jpgc-concurrency-thread-group/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Test de charge : Comment extrapoler le nombre de visites ?</title>
		<link>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/</link>
					<comments>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Sat, 02 Apr 2022 10:17:54 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1092</guid>

					<description><![CDATA[<p>Le test de charge a pour objectif d’avoir une idée de l’audience que pourra supporter le site testé. Sauf que le test est généralement fait sur une durée relativement courte avec des scénarios plus ou moins réalistes. A partir de là, on va essayer d’extrapoler l’audience produite par le test en un nombre de visites&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Poursuivre la lecture <span class="screen-reader-text">Test de charge : Comment extrapoler le nombre de visites ?</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Le test de charge a pour objectif d’avoir une idée de l’audience que pourra supporter le site testé. Sauf que le test est généralement fait sur une durée relativement courte avec des scénarios plus ou moins réalistes. A partir de là, on va essayer d’extrapoler l’audience produite par le test en un nombre de visites par mois, par jour, en nombre de sessions simultanées et en nombre de conversions à l’heure quand il s’agit de boutiques en ligne.&nbsp;</p>



<span id="more-1092"></span>



<p>On va s’intéresser à l’audience d’un site de commerce en ligne. Avant de passer une commande sur un site de commerce en ligne, un internaute va peut-être passer 20 minutes à naviguer sur le site pour parcourir le catalogue et remplir son panier. Ensuite, il va passer la commande, créer son compte, saisir son adresse de livraison, effectuer le paiement, et éventuellement vérifier sa commande sur le site. Il aura passé 30 minutes sur le site.</p>



<p>Afin de simuler l’audience, nous utilisons l’outil JMeter (<a href="https://jmeter.apache.org" target="_blank" rel="noreferrer noopener nofollow">https://jmeter.apache.org</a>).</p>



<figure class="wp-block-image size-full"><img loading="lazy" decoding="async" width="521" height="177" src="https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo.png" alt="JMeter logo" class="wp-image-1093" srcset="https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo.png 521w, https://alain.arditi.fr/wp-content/uploads/2022/04/JMeter_logo-300x102.png 300w" sizes="auto, (min-width: 1280px) 1240px, (min-width: 822px) calc(100vw - 120px), (min-width: 482px) calc(100vw - 80px), calc(100vw - 40px)" /></figure>



<p>Si on veut simuler une audience équivalente à 600 commandes à l’heure, il faudra lancer notre scénario 600 fois en une heure. Comme il dure 30 minutes, il faudra lancer 300 threads en parallèle qui vont chacun effectuer 2 scénarios. On aura bien nos 600 commandes en une heure, sauf qu’on imagine que les passages de commande vont se trouver plutôt à la fin des 30 minutes, on aura donc un biais par rapport à la réalité.</p>



<p>Si on veut supprimer ce biais, il faudrait que l’injecteur soit dans un rythme de croisière nominal, avant la prise des mesures, afin que les aléas temporels du scénario permettent de distribuer les commandes. Ca veut dire, qu’il faudra lancer les 300 threads quelques heures auparavant et au moins 30 minutes après l’heure de mesure.</p>



<p>Et si le site de commerce en ligne à un taux de conversion de 5%, c’est à dire le nombre de visiteurs qui vont passer une commande, il faut multiplier par 20 le nombre de scénarios exécutés par l’injecteur, sachant que 95% pourcents d’entre eux ne doivent pas passer de commande. En conservant des scénarios de 30 minutes, il faudra 6000 threads pour simuler l’audience et faire durer le test un bon paquet d’heures&#8230;.</p>



<p>Bref, dans ces conditions, la simulation de la réalité devient très difficile en pratique, car la durée des tests est prohibitive !</p>



<p>Afin de permettre la réalisation des tests dans des durées acceptables, on va raccourcir la durée du parcours d’un visiteur.</p>



<p>On va faire la supposition que lancer 300 threads qui jouent un scénario de 30 minutes pendant 1 heure, c’est équivalent pour le site qui reçoit les visites à 30 threads qui jouent un scénario de 3 minutes pendant 1 heure.</p>



<p>Dans les 2 cas, on aura exécuté 600 scénarios en 1 heure. Le site aura répondu aux mêmes sollicitations sauf que dans le deuxième cas, le rythme de croisière sera atteint dix fois plus rapidement, facilitant du même coup la réalisation du test qui pourra durer 10 fois moins longtemps !</p>



<p>Si finalement, le scénario est accéléré pour durer 30 secondes, avec un enchaînement de 20 à 40 requêtes HTTP et des aléas temporels de quelques centaines de millisecondes entre les requêtes, on obtient l’équivalent de la charge précédente avec 5 threads pendant 30 secondes.</p>



<p>Si on fait durer ce dernier test 10 minutes, chaque thread aura fait 20 boucles. On n’est pas loin d’un rythme de croisière avec suffisamment d’aléa pour le considérer comme représentatif d’une audience de 600 commandes à l’heure.</p>



<p>Une manière simple de créer des tirs sur JMeter simulant une charge données est d’utiliser les paramètres “Number of Threads” et “Ramp-up period” dans l&rsquo;objet “Thread Group”&nbsp;&nbsp;</p>



<p>Dans l’exemple ci dessous :</p>



<p><img loading="lazy" decoding="async" src="https://lh5.googleusercontent.com/QbgnVRD_W9-NnDcVzy763VtKfRgtOb83ZA7g9qG_VifKW5VYDwq41TUSOnfzLRK0-a0ss498gAmxwpfN9vkbhpWRk18TQv878s4pMiUUsh90sPhwu0YApniEby2rdhlk_nj_sEiI" width="602" height="275"></p>



<p>les 30 threads seront atteint après une période de 20 minutes, pendant laquelle, JMeter va graduellement augmenter le nombre de threads pour passer de 1 à 30, puis il va continuer avec ce nombre de threads pendant 10 minutes, jusqu’à l’arrêt du test.</p>



<p>Le graphique du nombre de threads en fonction du temps est le suivant :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh4.googleusercontent.com/uK9jR8hX9NboPImyiOynbeKQUvBurOCfZmE2J-aeZkpQIFGia2GU4KICp2DKFK56UWfhbOXzrl47twBPWwoTrT6JvO3_r6PHMMRYIDhDu9mbaYjPSeeqDt0ll04jGk10Xc21Cqgi" alt=""/></figure>



<p>On peut remarquer que si la durée du “Ramp-up” fait les ⅔ de la durée totale, alors les surfaces A et B ci-dessous sont égales :</p>



<figure class="wp-block-image"><img decoding="async" src="https://lh3.googleusercontent.com/lfu_rEX2v8kyF8JEyG2eIPCVD4-lpqNhBwJcFpZd5fFlEOQJ1KiSHXlfOP_UaRPs2jhFqf8gAqkbPOVbzSlkS2cgtlEwKcaYl1AvLyTiiGjDOuM7lCQhCFuOUQgS980PWWx_L4QL" alt=""/></figure>



<p>Si le nombre de conversion réalisées par JMeter pendant toute la durée du tir vaut N, alors, le nombre de conversions effectuées pendant la période nominale, ici, les 10 dernières minutes, vaut la moitié, soit N/2.</p>



<p>On peut dire que le nombre de conversions à l’heure vaut N/2&#215;6, soit 3N conversions à l’heure.</p>



<p>Si les statistiques de la boutique indiquent un taux de conversion de 5%, alors, en ajoutant des scénarios sans conversion et en multipliant le nombre de threads par 20, on simulerait l’audience de la boutique.</p>



<p>Pour calculer l’audience équivalente au tir ci-dessus, on peut dire qu’on a 3Nx20 visiteurs à l’heure. Comme une session dans les usages du Web est comptabilisée après 30 minutes d’inactivité, on peut dire qu’on a un équivalent de 2x3Nx20 sessions simultanées.</p>



<p>Comment estimer le trafic quotidien et mensuel ?</p>



<p>La réponse dépend largement du type du site et des habitudes de fréquentation.</p>



<p>On peut se lancer dans un calcul à la louche, sachant qu’on obtient des ordres de grandeur et qu’il faut adapter le calcul en fonction des statistiques du site.</p>



<p>Si on estime que l’heure du pic d’affluence représente 20% du trafic de la journée, dans notre cas 3Nx20 visiteurs, pour la journée on en aurait 5 fois plus, soit Nx300 visites par jour.</p>



<p>Reste à extrapoler au mois. Si on considère que le jour le plus chargé représente 10% des visites du mois, on aurait Nx3000 visites par mois !</p>



<p>Si N vaut 100, notre tir produirait une charge équivalente à :</p>



<ul class="wp-block-list"><li>300 commandes à l’heure,</li><li>30 000 visites par jour,</li><li>300 000 visites par mois.</li></ul>
<p>L’article <a href="https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/">Test de charge : Comment extrapoler le nombre de visites ?</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2022/04/02/test-de-charge-comment-extrapoler-le-nombre-de-visites/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Rsync où comment transférer des fichiers</title>
		<link>https://alain.arditi.fr/2021/11/23/rsync-ou-comment-transferer-des-fichiers/</link>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Tue, 23 Nov 2021 16:40:49 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[rsync]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1080</guid>

					<description><![CDATA[<p>rsync est un outil de transfert de fichiers. On pourrait dire comme Filezilla. Voilà, tout est dit ! Pourtant c&#8217;est un outil incontournable de l&#8217;administration système. A tel point que je n&#8217;utilise que très rarement la commande cp (copy). A l&#8217;origine rsync a été développé pour transférer des fichiers ou plutôt des arborescences sur des&#8230; </p>
<div class="more-link-container"><a class="more-link" href="https://alain.arditi.fr/2021/11/23/rsync-ou-comment-transferer-des-fichiers/">Poursuivre la lecture <span class="screen-reader-text">Rsync où comment transférer des fichiers</span></a></div>
<p>L’article <a href="https://alain.arditi.fr/2021/11/23/rsync-ou-comment-transferer-des-fichiers/">Rsync où comment transférer des fichiers</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>rsync est un outil de transfert de fichiers. On pourrait dire comme Filezilla. Voilà, tout est dit !</p>



<p>Pourtant c&rsquo;est un outil incontournable de l&rsquo;administration système. A tel point que je n&rsquo;utilise que très rarement la commande cp (copy).</p>



<p>A l&rsquo;origine rsync a été développé pour transférer des fichiers ou plutôt des arborescences sur des liaisons lentes. Voir <a href="http://rsync.samba.org" target="_blank" rel="noreferrer noopener nofollow">http://rsync.samba.org</a> On imagine le nombre d&rsquo;utilisateurs qui se sont arrachés les cheveux en transférant une arborescence de site Web à l&rsquo;époque des modems ADSL !</p>



<p>En effet, à chaque coupure de la liaison, on relançait la copie de l&rsquo;arborescence même si la destination avait reçu 80% des fichiers.</p>



<p>D&rsquo;ailleurs ce problème existe toujours pour les copies d&rsquo;arborescences locales sur tous les outils de gestion de fichiers, comme l&rsquo;Explorateur Windows, le Finder Mac ou les outils graphiques divers sous Linux. Si vous copiez une arborescence contenant des milliers de fichiers et qu&rsquo;au bout d&rsquo;une heure vous arrêtez le programme, car vous ne savez pas si la copie va durer toute la nuit, vous êtes bon pour refaire l&rsquo;opération. Sauf que la première copie a laissé l&rsquo;arborescence cible dans un certain état et vous ne connaissez pas le delta ! Donc, la seule manière simple de refaire la copie est de supprimer la destination et lancer la copie ensuite. Vous êtes reparti pour un tour ! (ou répondre que vous écrasez les fichiers identiques).</p>



<p>rsync répond parfaitement à la problématique des miroirs de l&rsquo;Internet.</p>



<p>rsync permet de transférer des fichiers entre 2 machines ou sur<br>la même machine, selon la notation utilisée. C&rsquo;est comme cp + rcp !</p>



<p>La puissance de rsync tient dans les points suivants :</p>



<ul class="wp-block-list">
<li>respect des arborescences, des droits, des liens, des ACL, etc&#8230;.</li>



<li>copie uniquement des fichiers modifiés entre 2 arborescences</li>



<li>transfert uniquement des morceaux (chunks) modifiés d&rsquo;un fichier</li>



<li>possibilité de compresser les fichiers pour accélérer le transfert</li>
</ul>



<p>Notez quand même, que selon les OS sur lesquels se trouvent la source et la destination (Unix/Windows, Windows/Mac, etc&#8230;), les droits et les ACL ou attributs ne vont pas pouvoir être transférés correctement.</p>



<p>La préservation des droits, etc&#8230; existe avec cp ou rcp. En local, c&rsquo;est le « cp -a &#8230; ». Mais un deuxième « cp -a &#8230; » recopie tout une deuxième fois. Alors que l&rsquo;équivalent « rsync -a &#8230; » lancé une deuxième fois ne transfère plus rien, car la source et la destination sont identiques !</p>



<p>Par défaut pour comparer les différences entre la source et la cible, rsync compare la taille et la date des fichiers. S&rsquo;ils ces informations sont identique pour un fichier, il ne le transfère pas, car il considère qu&rsquo;ils sont identiques. On peut forcer le contrôle en calculant les signatures des chunks (CRC) avec l&rsquo;option -c (check). En fait, le CRC est calculé par morceaux de fichier de manière à trouver les différence à l&rsquo;intérieur du fichier et ne transférer que ces morceaux.<br><br>D&rsquo;autre part, pour reconstituer le fichier cible, il crée une copie du fichier cible.<br>Ainsi pour mettre à jour un fichier de 1Go, on a besoin d&rsquo;1Go d&rsquo;espace libre en plus du fichier cible, même s&rsquo;il n&rsquo;y a que quelques octets transférés. Ca veut dire que si vous transférez un unique fichier de 8Go et que le transfert est coupé, le fichier destination temporaire est effacé, et le rsync suivant va recommencer le transfert depuis le début.</p>



<p>C&rsquo;est pour cette raison, qu&rsquo;il vaut toujours mieux découper les gros fichiers en petits morceaux avec la commande split, transférer tous les morceaux avec rsync, puis les reconstruire avec cat !</p>



<p>Exemple : </p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">$ split -b 100m mon_film.mp4 monfilm.mp4.
$ rsync -av monfilm.mp4.* alain.arditi.fr:/tmp/
puis sur l'ordinateur alain.arditi.fr on reconstitue la source 
alain.arditi.fr $ cat monfilm.mp4.* &gt; monfilm.mp4
Pour plus de sécurité, on peut gzipper les morceaux,
comme ça on ajoute le contrôle de l'intégrité des morceaux.
Ou bien on lance un dernier rsync de contrôle :
$ rsync -av -c monfilm.mp4 alain.arditi.fr:/tmp/</pre></div>



<p>L&rsquo;option -n permet de lancer rsync sans effectuer les opérations (dry run). Avec l&rsquo;option -v (verbose), on peut comparer deux arborescences pour « voir » les différences. Si on est pointilleux, on peut ajouter le -c, qu&rsquo;on pourra utiliser pour comparer des arborescences suite à une intrusion&#8230;.</p>



<p></p>



<p>Le dernier intérêt de rsync, c&rsquo;est qu&rsquo;il utilise un tuyau ssh pour pour les fichiers distants. Ainsi, lorsqu&rsquo;on a une clé SSH sur l&rsquo;ordinateur cible, pas besoin de saisie de mot de passe&#8230;. On peut lancer ses synchronisations d&rsquo;arborescences dans des tâches planifiées (cron) !</p>
<p>L’article <a href="https://alain.arditi.fr/2021/11/23/rsync-ou-comment-transferer-des-fichiers/">Rsync où comment transférer des fichiers</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Tests de charge : Un peu d’histoire</title>
		<link>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/</link>
					<comments>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/#respond</comments>
		
		<dc:creator><![CDATA[Alain ARDITI]]></dc:creator>
		<pubDate>Fri, 23 Jul 2021 16:23:28 +0000</pubDate>
				<category><![CDATA[Système]]></category>
		<category><![CDATA[Test de Charge]]></category>
		<category><![CDATA[JMeter]]></category>
		<category><![CDATA[Tests de charge]]></category>
		<guid isPermaLink="false">https://alain.arditi.fr/?p=1065</guid>

					<description><![CDATA[<p>Ou plutôt pourquoi je me suis remis à faire des tests…..<br />
En 1996, lorsque j’ai travaillé sur le premier site Web bancaire français, j'ai mis au point mon premier outil de test car il n’y avait aucun produit pour accomplir cette tâche....</p>
<p>L’article <a href="https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/">Tests de charge : Un peu d’histoire</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Ou plutôt pourquoi je me suis remis à faire des tests…..</p>



<p>Il y a deux objectifs dans ma démarche :</p>



<ol class="wp-block-list"><li>améliorer les sites de nos clients. Les tests de charge permettent d’apprécier le comportement d’un site lors de fortes audiences et de détecter les éventuelles contentions.</li><li>développer la maîtrise du Web chez les développeurs. A travers la mise au point des scénarios, on apprend comment un navigateur dialogue avec un site Web. C’est une brique essentielle dans la fabrication des sites Web.</li></ol>



<h3 class="wp-block-heading">Un sujet récurrent depuis le début du Web</h3>



<p>On connaît tous l’importance des temps de réponse et les problématiques d&rsquo;audience des sites Web.</p>



<p>En 1996, lorsque j’ai travaillé sur le premier site Web bancaire français, j&rsquo;ai mis au point mon premier outil de test car il n’y avait aucun produit pour accomplir cette tâche. J’ai utilisé l’inoxydable Telnet pour simuler des connexions, des scénarios et des tests de charge !</p>



<p>A cette époque, Telnet sur HP-UX permettait d’injecter des requêtes HTTP avec un pipe.</p>



<p>Ca donnait des commandes de ce type :</p>



<div class="wp-block-urvanov-syntax-highlighter-code-block"><pre class="urvanov-syntax-highlighter-plain-tag">$ echo -n “GET / HTTP/1.0\n\n” | telnet tohero.fr 80
Trying 92.222.234.216...
Connected to tohero.fr.
Escape character is '^]'.
HTTP/1.1 301 Moved Permanently
Server: nginx/1.10.3 (Ubuntu)
Date: Mon, 12 Jul 2021 09:19:03 GMT
Content-Type: text/html
Content-Length: 194
Connection: close
Location: https://www.tohero.fr/actualites

&lt;html&gt;
&lt;head&gt;&lt;title&gt;301 Moved Permanently&lt;/title&gt;&lt;/head&gt;
&lt;body bgcolor="white"&gt;
&lt;center&gt;&lt;h1&gt;301 Moved Permanently&lt;/h1&gt;&lt;/center&gt;
&lt;hr&gt;&lt;center&gt;nginx/1.10.3 (Ubuntu)&lt;/center&gt;
&lt;/body&gt;
&lt;/html&gt;
Connection closed by foreign host.
$</pre></div>



<p>Grâce à la simplicité du protocole HTTP, ça devenait (plus ou moins) facile d’injecter des requêtes POST, de stocker des cookies et de jouer un scénario avec des Shell scripts. C’est ainsi que j’ai commencé les tests de charge sur le site que j’étais en train de construire.&nbsp; J’avais baptisé ce petit programme de tests “Gator”. On s’en servait également pour les tests systèmes, fonctionnels de bout en bout. On avait déjà un ancêtre de Sélénium pour les recettes.</p>



<p>Malheureusement, la grande majorité des “Telnet” ne supportaient pas le pipe. J’ai donc réécrit Gator en Perl, ce qui a donné naissance à gator.pl</p>



<p>Cette fois le script Perl était bien plus évolué et prenait en entrée des scénarios de test sous forme de fichiers.</p>



<p>Au début des années 2000, on n’envoyait pas beaucoup d’informations dans les headers et le JavaScript ne posait pas trop de problèmes. On était capable de créer nos tests sans sniffer le trafic Web, uniquement avec la connaissance des pages à tester.</p>



<p>Néanmoins, la mise au point de ce type de tests n’était&nbsp; possible que par les développeurs. Et les années passant, je me suis dit que les scripts Perl étaient trop compliqués à maintenir et je me suis tourné vers un produit. Comme à l’époque je programmais en Java et j’utilisais <a href="https://tomcat.apache.org/" target="_blank" rel="noreferrer noopener">Tomcat</a> comme serveur applicatif, je me suis naturellement tourné vers <a href="https://jakarta.apache.org/" target="_blank" rel="noreferrer noopener">Jakarta JMeter</a>, qui faisait partie de la même suite logicielle que Tomcat, pour faire les tests de charge.</p>



<h3 class="wp-block-heading">Les RFC</h3>



<p>L’intérêt de travailler sur la mise au point des scénarios de tests de charge est de comprendre le dialogue entre un client (navigateur) et un serveur Web. Ce dialogue a été formalisé pour la première fois dans un « Request For Comment », la <a href="https://datatracker.ietf.org/doc/rfc1945/" target="_blank" rel="noreferrer noopener">RFC 1945</a> écrite en partie par Tim Berners Lee qui détaille le protocole HTTP. Par la suite d&rsquo;autres RFC , comme la <a href="https://datatracker.ietf.org/doc/rfc2068/" target="_blank" rel="noreferrer noopener">RFC 2068</a> ont complété cette documentation au fur et à mesure que le protocole s&rsquo;est enrichi. Depuis, il y a eu bien d’autres RFC qui illustrent la complexité  du dialogue entre le client Web et le serveur.</p>



<p>Depuis quelques années, cette communication est au cœur de l’optimisation de l’expérience client. Tout le monde s&rsquo;y intéresse et des logiciels comme <a href="https://developers.google.com/speed/pagespeed/insights/?hl=fr">Google PageSpeed</a> qui font aujourd’hui le bonheur des agences digitales, décortiquent en détail cette communication. On parle ici des <strong>performances d’un site</strong>. </p>



<p>Les tests de charge supposent idéalement que le site est déjà performant. On constate en pratique qu’un site performant supporte mieux la charge qu’un site peu performant. Ça veut dire que les équipes qui ont travaillé sur le projet étaient déjà sensibles à la performance. </p>



<p>Pour autant les tests de charges vont permettre de trouver des optimisations liées aux pics d&rsquo;audience. C’est leur objectif premier, mais on peut trouver bien d’autres contentions ou imperfections avec ce type de tests !</p>
<p>L’article <a href="https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/">Tests de charge : Un peu d’histoire</a> est apparu en premier sur <a href="https://alain.arditi.fr">Alain ARDITI&#039;s blog</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://alain.arditi.fr/2021/07/23/tests-de-charge-un-peu-dhistoire/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
