P3ter.fr https://p3ter.fr/ fr Logiciel libre, musique & jeu vidéo Sat, 23 Jan 2021 21:10:00 +0100 PluXml La supervision décentralisée avec Monit https://p3ter.fr/article96/monit https://p3ter.fr/article96/monit <img src="https://p3ter.fr/data/medias/2020/20201223-monit-3.jpg" alt="" title="" /><p>Monit est une application de supervision décentralisée. A l'heure ou les Nagios, Centreon et autre Shinken, ont une approche centralisée, Monit est un outil standalone qui s'installe directement sur chacunes de vos machines. Fonctionnant de manière isolée, nous verront comment déployer autant d'instance de Monit que nous avons de serveur grâce à un playbook Ansible.</p><p>Monit est un <a href="https://bitbucket.org/tildeslash/monit/src/master/" target="_blank">logiciel libre développé en C</a>. Vous trouverez toute la documentation nécessaire à son utilisation sur <a href="https://www.mmonit.com/monit/" target="_blank">le site officiel</a>.</p> <h2>Installation</h2> <p>Monit est disponible dans les dépôts de la plupart des distributions Linux, ce qui en simplifie l'installation.</p> <p>Sous Debian :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"><code>printf "%sn" "deb http://ftp.de.debian.org/debian buster-backports main" | sudo tee /etc/apt/sources.list.d/buster-backports.list<br /> sudo apt update</code><br /> <code>sudo apt install -t buster-backports monit </code></div> <p>Sous Ubuntu et Raspbian :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo apt install monit</div> <p>Sous CentOS, Red Hat, Fedora :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo dnf install monit</div> <p>Vérifions l'installation de Monit en lançant la commande ci-dessous :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">monit -V</div> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2020/20201223-monit-1.jpg" style="width: 674px; height: 58px;" /></p> <p>Enfin, activons Monit au démarrage :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo systemctl enable monit</div> <h2>Configuration et usage</h2> <p>Lancez la commande ci-dessous pour obtenir un rapport sur l'état du système :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo monit status</div> <p>Si vous obtenez l'erreur ci-dessous, alors il est nécessaire de modifier la configuration de Monit, afin d'activer l'interface web. En effet, celle-ci est nécessaire pour utiliser&nbsp;<em>monit status</em>, car le client <em>monit</em> utilise l'interface http pour communiquer avec le démon Monit.</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">Monit: the monit HTTP interface is not enabled, please add the 'set httpd' statement and use the 'allow' option to allow monit to connect</div> <p>Le fichier de configuration de Monit étant <em><code>/etc/monit/monitrc</code></em>, vous pouvez directement modifier ce fichier, mais dans le cadre de l'utilisation d'Ansible, nous allons plutôt créer un fichier&nbsp;<em><code>/etc/monit/conf.d/monit.conf</code></em>. Ainsi nous ne seront pas impactés par les mises à jours de Monit et nous pourront gérer nos différents fichiers <em>.conf</em> dans un outil de versionning de code tel que Git. Vérifiez au préalable la présence d'une ligne <em><code>include</code></em> dans le fichier <code>monitrc</code> qui permettra de charger tous les fichiers présents dans le répertoire <em><code>/etc/monit/conf.d/</code></em>.</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">set httpd port 2812 and<br /> &nbsp;&nbsp;&nbsp; allow localhost</div> <p>Puis, relancez Monit pour prendre en compte le changement de configuration.</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo monit reload<br /> sudo monit status</div> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2020/20201223-monit-2.jpg" style="width: 517px; height: 231px;" /></p> <h2>Configurer des alertes</h2> <p>Pour chaque alerte que l'on souhaite configurer nous allons créer un fichier spécifique dans le répertoire <em><code>/etc/monit/conf.d/</code></em>, ce qui nous permettra de déployer uniquement les alertes nécessaires en fonction du type de service que l'on souhaite monitorer. Je vous propose deux exemples simples dans cet article, mais je vous invite à aller sur le site officiel de Monit qui regorge d'exemples : <a href="https://mmonit.com/wiki/Monit/ConfigurationExamples">https://mmonit.com/wiki/Monit/ConfigurationExamples</a>.</p> <p>Les alertes s'affichent en rouge avec la commande : <code>sudo monit status</code>.</p> <h3>Surveiller l'espace disque</h3> <p>Ajouter les lignes ci-dessous dans le fichier <code>/etc/monit/conf.d/disk.conf</code></p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">check filesystem disk with path /<br /> &nbsp;&nbsp;&nbsp; if space usage &gt; 80 then alert</div> <p>Monit va ainsi surveiller le chemin / et provoquer une alerte si l'espace occupé dépasse les 80%.</p> <h3>Surveiller un service distant</h3> <p>Ajouter les lignes ci-dessous au fichier <code>/etc/monit/conf.d/monsiteweb.conf</code></p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">check host pluxml.org address www.monsiteweb.fr<br /> &nbsp;&nbsp;&nbsp; if failed ping timeout 15 seconds then alert</div> <p>Dans cet exemple, Monit va surveiller que l'adresse <em>www.monsiteweb.fr</em> répond au travers du protocole HTTP. En cas d'erreur, Monit lancera un ping et au délà des 15 secondes de timeout une alerte sera créée.</p> <h2>Activer les notifications par e-mail</h2> <p>Monit permet également d'envoyer les alertes par e-mail. Vous pouvez utiliser le service mail présent en local (postfix, exim4, ...), en ajouter les lignes ci-dessous dans&nbsp;<em><code>/etc/monit/conf.d/monit.conf</code></em> :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">set mailserver localhost</div> <p>Si vous n'avez pas ce type de service, vous pouvez utiliser un serveur mail tiers. Pour cela ajouter les lignes ci-dessous dans le fichier <em><code>/etc/monit/conf.d/monit.conf</code></em> (à adapter en fonction du service tiers utilisé) :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"> <p>set mailserver mail.domain.net port 465<br /> &nbsp;&nbsp;&nbsp; username noreply@domain.net password "PassWord"<br /> &nbsp;&nbsp;&nbsp; using SSL with timeout 30 seconds</p> </div> <p>Il est également possible de modifier le template de mail ainsi :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;"> <p>set mail-format {<br /> &nbsp; from:&nbsp;&nbsp;&nbsp; Monit &lt;monit@domain.net&gt;<br /> &nbsp; subject: monit alert --&nbsp; $EVENT $SERVICE<br /> &nbsp; message: $EVENT Service $SERVICE<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Date:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $DATE<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Action:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $ACTION<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Host:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; $HOST<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Description: $DESCRIPTION</p> <p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Your faithful employee,<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Monit<br /> }</p> </div> <p>Enfin, définissez le destinataire des alertes avec la ligne ci-dessous :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">set alert alert@domain.net</div> <p>Puis, relancez Monit pour prendre en compte le changement de configuration.</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo monit reload</div> <h2>Déploiement de Monit avec Ansible</h2> <p>Comme nous l'avons vu, la configuration de Monit se réalisant au travers de simples fichiers, le déploiement de Monit sur d'autres serveurs peux se faire facilement en copiant ces fichiers directement sur la machine distante. Vous trouverez ci-dessous un exemple de playbook Ansible pour Debian permettant d'installer, puis de copier les fichiers de configuration. Pensez seulement à remplacer <em>&lt;username&gt;</em> par le nom d'utilisateur à utiliser pour la connexion SSH sur l'hôte distant, ainsi que&nbsp;<em>&lt;/chemin/vers/fichiers/monit/&gt;</em> par le chemin contenant vos fichiers de configuration pour Monit.</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">- name: Install Monit for web servers on Debian<br /> &nbsp; hosts: all<br /> &nbsp; remote_user: &lt;username&gt;<br /> &nbsp; become: true<br /> &nbsp; become_method: sudo<br /> &nbsp;<br /> &nbsp; tasks:<br /> &nbsp; - name: Add backports repository<br /> &nbsp;&nbsp;&nbsp; apt_repository:<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; repo: deb http://ftp.de.debian.org/debian buster-backports main<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state: present<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; filename: buster-backports<br /> &nbsp; - name: Monit installation<br /> &nbsp;&nbsp;&nbsp; apt:<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: monit<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; autoclean: yes<br /> &nbsp; - name : Monit configuration files deploy<br /> &nbsp;&nbsp;&nbsp; copy:<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; src: &lt;/chemin/vers/fichiers/monit/&gt;<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; dest: /etc/monit/conf.d/<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; owner: root<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; group: root<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; mode: '0644'<br /> &nbsp; - name: Restart Monit<br /> &nbsp;&nbsp;&nbsp; service:<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; name: monit<br /> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; state: restarted</div> <p>&nbsp;</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Sat, 23 Jan 2021 21:10:00 +0100 P3ter Activer le HTTPS sur son site web avec un certificat signé par Let's Encrypt https://p3ter.fr/article90/activer-le-https-sur-son-site-web-avec-un-certificat-signe-par-let-s-encrypt https://p3ter.fr/article90/activer-le-https-sur-son-site-web-avec-un-certificat-signe-par-let-s-encrypt <img src="https://p3ter.fr/data/medias/2016/20170504-letsencrypt-vignette.jpg" alt="" title="" /><p>L'ennui avec HTTPS, c'est que pour obtenir le fameux cadenas vert à gauche de l'url de son site, il faut un certificat signé par une Autorité de Certification connue de son navigateur Internet. Et c'est là qu'intervient Let's Encrypt. Dans cette article, je vous explique comment j'ai pu mettre en place le HTTPS sur ce blog, obtenir mon certificat et le maintenir à jour, le tout gratuitement et de manière automatique. Vous verrez également comment paramétrer NGINX pour faire fonctionner le tout avec PluXml.</p><p>HTTPS est l'accronyme qui désigne l'utilisation des protocoles SSL au sein du protocole HTTP. Il vous permet de chiffrer la communication entre votre navigateur et le site web que vous consultez. Imaginez-vous sur un site de e-commerce. Vous devez saisir votre numéro de carte bancaire ainsi que les autres informations nécessaires au paiement. Sans HTTPS, toutes ces données sont transmises au site en clair. Cela signifie, qu'elles vont circuler sur le réseau local et sur Internet de manière totalement lisible par d'autres. Ainsi une personne tierce qui "lit" ce qui passe sur le réseau, peut récupérer les informations de votre carte bancaire. Il en va de même pour les logins et mots de passe de votre webmail ou encore lorsque vous communiquez via une messagerie instantanée ou bien sur un forum il est possible d'intercepter les messages. Une connexion chiffrée permet d'éviter ces problèmes, en rendant illisible tout ce que vous envoyez depuis votre navigateur. De plus, le chiffrement de vos communications permet de garantir l'intégrité des échanges, vous êtes ainsi assuré que les données n'ont pas été modifiée par un tiers au cours de leur tranversée du réseau. Le passage à HTTPS peut également être motivés par trois autres facteurs : depuis 2014<em> </em><a href="https://security.googleblog.com/2014/08/https-as-ranking-signal_6.html">Google favorise le référencement des sites web qui proposent du HTTPS</a> ; les navigateurs Chrome et Firefox à partir de janvier 2017 affichent des messages d'alertes directement dans les formulaires (login, mot de passe, carte de crédit) des pages HTTP ; Enfin, le protocole HTTP/2 a pour prérequis d'utiliser HTTPS. Ainsi, depuis 2017 bon nombre sites, dont mon blog, proposent par défaut le https.</p> <hr /> <h2>Les deux font la paire</h2> <p>Avant de mettre en place ce fameux HTTPS,&nbsp; il faut d'abord comprendre comment ça fonctionne. SSL utilise trois éléments. Un système de chiffrement asymétrique (RSA, par exemple) qui permet de générer une paire de clés (une clé privée et une clé publique), un système de chiffrement symétrique pour les données (AES , par exemple) et enfin un système de signature (SHA, par exemple), pour vérifier l'intégrité des données. Lorsque que le client et le serveur (le navigateur et le site web) veulent communiquer via HTTPS, ils choisissent les systèmes communs qu'ils vont utiliser. Il est d'ailleurs possible d'en voir la liste en cliquant sur le cadenas du navigateur.</p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20170504-letsencrypt-img1.jpg" style="width: 479px; height: 279px;" /></p> <p>Dernier point de la chaîne, le certificat. Celui-ci est fourni au visiteur par le site web. Il permet de s'assurer que le serveur qui vous répond est bien celui qu'il prétend être. Le certificat fourni un ensemble d'information dont les PKI. Ce sont des clés publics fournis par des autorités de certification dont la liste est enregistrée dans la navigateur. C'est là qu'intervient Let's Encrypt, une autorité de certification qui fournies gratuitement et de manière automatique des certificats. Avec l'aide de Mozilla, l'Electronic Frontier Foundation (EFF) et l'université du Michigan, Let's Encrypt utilise une implémentation serveur et client sous licence libre. Tout le projet est disponible sous Github, facilitant les démarches d'audits et laissant la place à un travail collaboratif d'amélioration continue. En pratique, pour fonctionner sur tous les navigateurs, Let's Encrypt va signer vos certificats avec un certificat intermédiaire. Celui-ci, est lui même signé par le certificat racine de Let's Encrypt, mais aussi par le certificat racine de l'Autorité de Certification <em>IdenTrust</em> qui est connue de tous les navigateurs Internet.</p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20170504-letsencrypt-img2.jpg" style="width: 783px; height: 751px;" /></p> <hr /> <h2>La clé du succès</h2> <p>Commençons directement par l'obtention de notre certificat. Pour cela les développeurs de Let's Encrypt ont créé le protocole ACME. Il permet entre autre, au travers de messages JSON échangés en HTTPS avec l'autorité de certification, de créer votre compte, d'enregistrer votre nom de domaine et d'obtenir votre certificat.</p> <p>Let's Encrypt recommande d'utiliser un client ACME développé par l'Electronic Frontier Foundation : <a href="https://certbot.eff.org/">Certbot</a>. Une liste de clients est disponibles ici : <a href="https://letsencrypt.org/docs/client-options/">https://letsencrypt.org/docs/client-options/</a></p> <p>L'installation de Certbot, passe par la copie du dépôt git.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">git clone https://github.com/certbot/certbot.git<br /> cd certbot</div> <p>Pour dialoguer avec notre autorité de certification, nous allons utiliser le script : <em>certbot-auto</em>. La commande ci-dessous va nous permettre de créer un compte, de vérifier que le nom domaine nous appartient bien, puis de créer le certificat.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo ./certbot-auto certonly --webroot --webroot-path /srv/web/p3ter.fr --domains p3ter.fr,www.p3ter.fr --agree-tos --text --email contact@p3ter.fr</div> <p><em>--webroot</em> : l'authentification de votre site sera réalisée par un challenge ACME<em>.</em> Un fichier fourni par Let's Encrypt sera temporairement déposé sur votre serveur web.<br /> <em>--webroot-path</em> : nécessaire pour le challenge ACME, il s'agit du chemin absolu vers le répertoire contenant votre site (généralement <em>/var/www/</em>).<br /> -- domains : le ou les noms de domaines qui seront couvert par le certificat (séparés par des virgules).<br /> -- adree-tos : permet d'accepter automatiquement les conditions d'utilisation de l'autorité de certification.<br /> --text : lancer la commande en mode texte et non en mode graphique.<br /> --email : l'adresse mail qui sera nécessaire en cas de perte du compte.</p> <p>Si la commande à réussi, vous avez désormais un certificat et la clé privée associée. Ils sont disponibles dans le répertoire ci-dessous :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo tree /etc/letsencrypt/live</div> <p><em>cert.pem</em> : le certificat.<br /> <em>privkey.pem</em> : la clé privée.<br /> <em>chain.pem</em> : le certificat intermédiaire.<br /> <em>fullchain.pem</em> : le certificat racine et intermédiaire.</p> <p>La prochaine étape consiste à paramétrer le serveur web pour utiliser le HTTPS, ainsi que le certificat et sa clé privée. Pour cela je vous recommande <a href="http://p3ter.fr/securiser-un-service-web-avec-https-et-nginx.html">cet article</a> sur ce même blog. Dans mes exemples j'utilise le serveur web NGINX, l'opération consiste à modifier le virtualhost, pour rediriger le traffic http vers https, et pour fournir le certificat et sa clé privée. Les paramètres supplémentaires <em>ssl_protocols</em> et <em>ssl_ciphers</em>, permettent de restreinte la liste des protocoles mis à disposition des visiteurs dans le but de s'appuyer sur les protocoles les plus fiables.</p> <p>Ci-dessous un extrait de virtualhost pour NGINX, qui permet de rediriger les requêtes HTTP vers du HTTPS et qui utilise notre clé et son certificat Let's Encrypt. C'est la configuration minimale en terme de sécurité.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">server {<br /> &nbsp; listen 80;<br /> &nbsp; server_name mon.site.fr;<br /> &nbsp; return 301 https://$server_name$request_uri;<br /> }<br /> server {<br /> &nbsp; listen 443 ssl;<br /> &nbsp; (...)<br /> <br /> &nbsp; ssl&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; on;<br /> &nbsp; ssl_certificate&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /etc/letsencrypt/live/mon.site.fr/cert.pem;<br /> &nbsp; ssl_certificate_key&nbsp;&nbsp;&nbsp;&nbsp; /etc/letsencrypt/live/mon.site.fr/privkey.pem;<br /> &nbsp; ssl_protocols&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; TLSv1.2 TLSv1.1 TLSv1;<br /> &nbsp; ssl_ciphers&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ALL:!aNULL:!eNULL:!LOW:!EXP:!RC4:!3DES:+HIGH:+MEDIUM;<br /> &nbsp; ssl_prefer_server_ciphers&nbsp;&nbsp; on;<br /> <br /> &nbsp; (...)<br /> }</div> <p>Ensuite il suffit de redémarrer son serveur web, pour prendre en compte ces modifications.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo systemctl restart nginx</div> <p>L'autre force de Let's Encrypt et de Certbot c'est la possibilité de renouveler automatiquement le certificat. En effet, celui-ci après 90 jours arrivera à expiration et affichera un joli message d'alerte sur le navigateur. Pour éviter ça, nous allons créer un script qui sera lancé automatiquement une fois par mois, en utilisant Cron (<a href="https://doc.ubuntu-fr.org/cron">plus d'info</a>).</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo vim /etc/cron.mounthly/certbot.sh</div> <p>Ce script est très basique et ne fera que lancer certbot avec les mêmes paramètres que précédemment, mais en ajoutant <em>--renew-by-default</em> pour seulement renouveler le certificat.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">#!/bin/bash<br /> cd /home/pedro/git/certbot<br /> ./certbot-auto certonly --webroot --webroot-path /srv/web/p3ter.fr --domains p3ter.fr,www.p3ter.fr --agree-tos --text --email contact@p3ter.fr --renew-by-default</div> <p>Ensuite il suffit de donner les droits d'exécution au script, pour que Cron puisse le lancer.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo chmod u+x /etc/cron.mounthly/certbot.sh</div> <hr /> <h2>Savoir garder un secret</h2> <p>En guise de conclusion, je souhaite simplement attirer votre attention sur le fait que, comme dans la vrai vie, on ne confit pas un secret à n'importe qui. Dans le cadre du chiffrement c'est la même chose : votre clé privée doit rester un secret bien gardé. Par exemple, lorsqu'on utilise un service de mail hébergé par un tier, au hasard Google, c'est bien lui qui est propriétaire de la clé privée. Toute une conversation par mails chiffrée avec PGP peut tout à fait être lue par le tiers qui a fourni la clé de chiffrement.</p> <p>Il existe en revanche des solutions décentralisées basées sur le protocole Tor, qui apportent une protection bien meilleur, dont j'espère vous parler prochainement sur ce blog.</p> <p>Pour finir, j'aimerais vous recommander le blog de <a href="https://twitter.com/aeris22">Aeris</a> (membre de l'équipe de Cozy Cloud) et fin spécialiste du chiffrement. Vous y trouverez : un article sur <a href="https://blog.imirhil.fr/2015/12/12/letsencrypt-joie-deception.html">les limites de Let's Encrypt</a>, un article pour approfondir <a href="https://blog.imirhil.fr/2015/09/02/cryptcheck-verifiez-implementations-tls.html">les systèmes de chiffrements et les comparer</a>, et enfin un outil qui vous permettra de <a href="https://tls.imirhil.fr/">tester le niveau de sécurité d'un site web</a> à partir de son URL. Du coté de Mozilla il existe <a href="https://observatory.mozilla.org/">Observatory</a> un autre outil d'audit de la sécurité de votre site.</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Thu, 04 May 2017 15:55:00 +0200 P3ter Debian, Ubuntu : eth0 c'est fini https://p3ter.fr/article86/debian-ubuntu-eth0-c-est-fini https://p3ter.fr/article86/debian-ubuntu-eth0-c-est-fini <img src="https://p3ter.fr/data/medias/2016/20160824-eth0_cest_fini-vignette.jpg" alt="" title="" /><p>Mon serveur inaccessible par le web, après une migration d'Ubuntu 14.04 vers Ubuntu 16.04, j'ai redécouvert les joies du KVM d'OVH. Et oui, depuis Ubuntu 15.10 les interfaces réseau ne sont plus nommées de la même manière. <em>eth0</em> est mort, vive <em>enp3s0</em> !</p><hr /> <p><strong>Mise à jour 28/08/2016 :</strong> <em>Après vérification, la nomenclature ifname est déjà utilisée sur Fedora depuis la version 15. Bien sûr, Archlinux est également concerné.</em></p> <p><strong>Mise à jour 04/02/2018 :</strong> Correction du champ à éditer dans le fichier <em>/etc/default/grub</em>. Merci à Lukeze pour <a href="https://p3ter.fr/debian-ubuntu-eth0-c-est-fini.html#c0086-41">son commentaire</a>.</p> <hr /> <p>Je l'ignorais au moment de mettre à jour ma version d'Ubuntu. Ca m'a valu une belle frayeur, au redémarrage du serveur, lorsque celui-ci n'était plus accessible via Internet. Me voila obligé de passer par le KVM d'OVH pour ouvrir une session directement sur la machine. Effectivement, plus aucune connexion réseau n'est active.</p> <hr /> <h2>Un nouveau nom pour les interfaces réseaux</h2> <p>Je vérifie que le fichier <em>/etc/network/interfaces</em> est bien paramétré. Il l'est. Je lance un <em>ifconfig</em>, rien, aucune interface active (hormis <em>lo</em>). J'essaie<em> ifconfig -a</em>, espérant retrouver mon interface <em>eth0</em> inactive, et je tombe sur une interface <em>enp3s0</em>.</p> <p>Après quelques recherche sur le net, je découvre que depuis Ubuntu 15.10, le package <em>udev 220-6ubuntu2</em> intègre une implémentation du <em>Stateless Persistent Network Interface Names</em>. Puis, avec le passage d'<em>InitV</em> à <em>Systemd</em>, les interfaces réseau sont automatiquement renommées selon cette nouvelle nomenclature.</p> <p>Une simple modification dans le fichier <em>/etc/network/interfaces</em> (remplacement de <em>eth0</em> par <em>enp3s0)</em> suivi d'un redémarrage du service réseau (<em>sudo systemctl restart networking.service</em>), m’a permis de retrouver ma connexion au réseau.</p> <hr /> <h2><em>Stateless Persistent Net</em>... quoi ?</h2> <p>En cherchant sur le net, je suis tombé sur <a href="https://lists.ubuntu.com/archives/ubuntu-devel/2015-May/038761.html">un message de Martin Pitt</a>, un développeur Debian et Ubuntu, sur la mailing list <em>ubuntu-devel</em>. Martin explique que depuis 2013, <em>udev</em> intègre trois solutions permettant de nommer les interfaces réseau. Depuis, une dizaine d'année c'est la solution appelée <em>mac</em> qui est utilisée. C'est à elle que l'on doit le fameux <em>eth0</em>. Selon Martin cette solution comporte plusieurs inconvénients :</p> <ul> <li>Le nom d'une interface est défini par le noyau, sans qu'on puisse le connaître à l'avance.</li> <li>L'ordre dans lequel les interfaces sont nommées est instable.</li> <li>Il faut des droits d'écritures sur le dossier <em>/etc/udev/rules.d</em>, pour rendre persistant le nom d'une interface (sur la base de l'adresse MAC), ce qui n'est pas souhaité pour Ubuntu Touch, la version mobile de l'OS.</li> <li>Cette solution permettant de rendre persistant le nom d'une interface est incompatible avec le fonctionnement des machines virtualisées, puisque l'interface physique peut changer entre deux redémarrage de la VM. <em>eth0</em> deviendrait <em>eth1</em>, puisque la règle ajoutée dans <em>/etc/udev/rules.d/</em> serait fausse (adresse MAC différente).</li> <li>Depuis 2013 les développeurs de <em>udev</em> ne fournissent plus de support pour la solution <em>mac.</em></li> </ul> <p>C'est la qu'intervient la solution appelée <em>ifnames</em>. Implémentée dans <em>udev</em> depuis 2013, celle-ci permet de donner un nom persistant à un équipement, en se basant sur les informations fournis par le BIOS et/ou le firmware, tel que le numéro d'index, le nom du slot PCI, etc. Cette solution permet également de s'affranchir d'écrire dans un fichier les règles d'associations entre l'équipement physique et son nom (solution <em>mac</em>), ce qui a un fort intérêt pour la version mobile d'Ubuntu.</p> <p>Ainsi, avec cette solution les noms ressemblent à <em>enp3s0</em> pour une carte Ethernet, et <em>wlp4s1</em> pour une carte WiFi. Il s'agit ici d'exemples, ces noms peuvent varier en fonction des machines, mais commenceront toujours de la même façon : "e" pour Ethernet" et "w" pour WiFi.</p> <p>Cette solution sera également activée par défaut dans Debian 9 ("Stretch"), dont la date de sortie n'est pas encore définie.</p> <hr /> <h2>Revenir à eth0</h2> <p>Si vous avez des scripts, des applis, des fichiers de conf, etc, qui s'appuient sur le nom "eth0" pour identifier votre interface réseau, afin de vous éviter de les modifier, il est possible de désactiver <em>ifnames</em> et de revenir à l'ancienne nomenclature. Pour cela, il faut&nbsp;:</p> <ol> <li>Récupérer son adresse MAC via la commande <em>ifconfig</em><br /> &nbsp;</li> <li>Créer un fichier de règles : <em>/etc/udev/rules.d/10-network.rules</em> et y ajouter la ligne ci-dessous : <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="aa:bb:cc:dd:ee:ff", NAME="eth0"</div> Remplacer la valeur du paramètre <em>ATTR </em>par l'adresse MAC récupérée précédemment<br /> &nbsp;</li> <li>Désactiver <em>ifnames</em> en éditant le fichier <em>/etc/default/grub</em> et en ajoutant la valeur ci-dessous au paramètre GRUB_CMDLINE_LINUX <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">net.ifnames=0</div> &nbsp;</li> <li>Mettre à jour <em>grub</em> avec cette modification, en lançant la commande : <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo update-grub2</div> &nbsp;</li> <li>Redémarrer</li> </ol> <p>Il est bien sûr possible d'ajouter d'autres règles dans le fichier <em>/etc/udev/rules.d/10-network.rules</em>, par exemple, si vous avez plusieurs interfaces réseau, et bien entendu vous pouvez les nommer comme bon vous semble en modifiant le paramètre <em>NAME=</em>.</p> <p><em>Photo par <a href="https://www.flickr.com/photos/clefty/">Clefty</a> (sous licence&nbsp;<a href="https://creativecommons.org/licenses/by-nc/2.0/">CC BY-NC v2</a>).</em></p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Thu, 25 Aug 2016 13:51:00 +0200 P3ter Mise à jour de Fedora 20 à 23 et nouveau gestionnaire de paquets https://p3ter.fr/article82/mise-a-jour-de-fedora-20-a-23-et-nouveau-gestionnaire-de-paquets https://p3ter.fr/article82/mise-a-jour-de-fedora-20-a-23-et-nouveau-gestionnaire-de-paquets <img src="https://p3ter.fr/data/medias/2016/20160624-upgrade_fedora-vignette.jpg" alt="" title="" /><p>Avec la sortie de Fedora 23, il était temps pour moi de mettre à jour mon PC portable, tournant encore sous la version 20 de cette distribution Linux. Comme je le craignais, rattraper trois versions d'OS ne fut pas aussi triviale que prévus, mais ça m'a permis de découvrir le nouveau gestionnaire de paquets, introduit avec la version 21 de Fedora.</p><p>Naïvement, j'ai commencé par rechercher comment passer directement à Fedora 23. Je tombe sur une doc qui mentionne l'outil "dnf" qui n'est autre que le nouveau gestion de paquet de Fedora. Disponible depuis Fedora 18, il remplace yum en tant que gestionnaire de paquet par défaut, avec la sortie de Fedora 22.&nbsp;L'utilisation de "dnf" est la méthode recommandée pour les montées de version à partir de Fedora 21. Je décide donc de commencer par mettre à jour mon OS vers cette version et par la même occasion de découvrir ce nouvel outil.</p> <hr /> <h2>Mise à jour de Fedora 20 vers 21</h2> <p>Nous allons utiliser un outil intégré avec Fedora 17 : <em>fedup</em>. Ce dernier va réaliser la mise à jour de l'OS. Commençons par l'installer avec la commande ci-dessous :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">yum install fedup</div> <p>Une fois installer, il suffit de lancer la commande ci-dessous pour démarrer la mise à jour.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">fedup --network 21 --product=workstation</div> <p><em>&nbsp;--network</em> : réaliser la mise à jour depuis les dépôts en ligne<br /> <em>21</em> : mettre à jour vers la version 21<br /> <em>--product</em> : permet de spécifier qu'elle image de Fedora on souhaite installer (workstation pour un usage bureautique, server pour un serveur et cloud pour la version de Fedora intégrant OpenStack).</p> <p><a href="http://doc.fedora-fr.org/wiki/FedUp_:_Passer_%C3%A0_la_version_sup%C3%A9rieure_de_Fedora">Documentation sur <em>fedup</em></a>.</p> <p>Lorsque fedup a terminé, il faut redémarrer l'ordinateur. Une nouvelle entrée fait son apparition dans le menu de Grub. Sélectionnez cette option pour terminer l'installation de Fedora 21.</p> <hr /> <h2>Un nouveau gestionnaire de paquet</h2> <p>dnf en tant que fork de yum, n'est pas très différent, à l'usage, de son prédécesseur. Conçu pour des architectures et des standards récents, dnf offre de meilleurs performance que yum. Mais sont intérêt principale actuellement est de proposer une API, qui permet une meilleur intégration dans des applications tiers, telle que l'interface graphique "Logiciels" (gnome-software).</p> <p>En attendant la mise à jour de mon article <a href="http://p3ter.fr/syntaxe-des-gestionnaires-de-paquets.html">Syntaxe des gestionnaires de paquets</a>, la documentation de dnf sur fedora-fr.org est <a href="http://doc.fedora-fr.org/wiki/DNF,_le_gestionnaire_de_paquets_de_Fedora">disponible ici</a>.</p> <hr /> <h2>Mise à jour de Fedora 21 vers 23</h2> <p>Continuons la mise à jour de Fedora en utilisant le plugin <em>dnf-plugin-system-upgrade</em>. Il faut commencer par installer le plugin, puis par demander à dnf de télécharger la version 23 de Fedora, et enfin de lancer la mise à jour.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">dnf install dnf-plugin-system-upgrade<br /> dnf system-upgrade download --releasever=23<br /> dnf system-upgrade reboot</div> <p>Le système va alors redémarrer pour réaliser la mise à jour, puis redémarrer une nouvelle fois.</p> <p>Me voilà sur Fedora 23 !</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Fri, 24 Jun 2016 16:18:00 +0200 P3ter Edito du 26/05/2016 https://p3ter.fr/article88/edito-du-26-05-2016 https://p3ter.fr/article88/edito-du-26-05-2016 <img src="https://p3ter.fr/data/medias/" alt="" title="" /><p>Salut à tous !</p> <p>J'ai profité de quelques jours de congés pour mettre à jour mes PC et serveurs sous Linux, qui commençaient à avoir quelques versions d'OS de retard. Ainsi, je suis passé de Fedora 19 à 23 et d'Ubuntu 14.10 à 16.04. J'en ai également profité pour passer mon serveur web sous Nginx 1.10 et Php 7.0.</p> <p>Ces montées de versions ont apportées énormément de nouveautés : nouveaux gestionnaires de paquets (adieu "apt-get", et "yum"), migration de InitV à Systemd, etc. J'ai par ailleurs été obligé de migrer temporairement ce site sur un Raspberry Pi auto-hébergé, le temps de tout remettre d'aplomb sur le serveur dédié (d'ou <a href="http://p3ter.fr/gestion-du-dyndns-sous-linux-avec-ovh.html">mon article sur DynDNS</a>).</p> <p>Enfin, une mise à jour de Pluxml va me permettre de me séparer du plugin "vignette" dont la fonctionnalité est désormais gérée nativement (plus d'information sur la nouvelle version de PluXml <a href="http://www.pluxml.org/article76/sortie-de-pluxml-5-5">en cliquant ici</a>).</p> <p>Bref, tout ceci va me conduire à publier de nouveaux articles autour de toutes ces nouveautés très structurantes.</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Thu, 26 May 2016 19:16:00 +0200 P3ter Mémo : Gestion du DynDNS sous Linux avec OVH https://p3ter.fr/article83/gestion-du-dyndns-sous-linux-avec-ovh https://p3ter.fr/article83/gestion-du-dyndns-sous-linux-avec-ovh <img src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-vignette.jpg" alt="" title="" /><p>Le DynDNS est un service qui permet d'associer une adresse IP dynamique à un nom de domaine. C'est très utile lorsqu'on souhaite auto-héberger un service derrière une box Internet qui ne possède pas d'adresse ip statique. Dans cette article, vous verrez comment utiliser ce service avec Linux et OVH.</p><p>Pour cet article, j'ai utilisé un Raspberry Pi sous Raspbian, ainsi que le service DynDNS d'OVH.</p> <p>Mon Raspberry Pi est connecté à Internet derrière ma box Internet, sur laquelle j'ai paramétré une DMZ. Cette option permet de rediriger toutes les connexions entrantes vers une adresse IP du réseau local, en l'occurrence, celle du Raspberry Pi.</p> <p><em>Plus d'informations sur le Raspberry Pi <a href="http://p3ter.fr/tag/raspberry-pi">en cliquant ici</a>.</em></p> <p>Ainsi mon Raspberry est accessible depuis Internet via l'adresse IP public de ma box.</p> <hr /> <h2>Le Principe</h2> <p>Un nom de domaine (DNS) permet d'accéder à un service sans devoir utiliser l'adresse IP. OVH.com est l'un des sociétés permettant d'acheter des noms de domaine. Le problème est que mon FAI ne me fournit pas d'adresse IP statique à associer à mon nom de domaine, mais une adresse IP dynamique, qui se renouvelle automatiquement (au redémarrage de la box, par exemple).</p> <p>Afin d'éviter de rendre indisponible mon service auto-hebergé, et de voir mettre à jour systématiquement ma nouvelle adresse IP public sur les DNS d'OVH, j'ai la possibilité d'utiliser un service de "DNS dynamique".</p> <p>Le principe est simple, c'est mon Raspberry Pi qui va détecter l'adresse IP publique de ma box et l'envoyer automatiquement à OVH à chaque changement, pour mettre jour dynamiquement le couple IP-DNS.</p> <hr /> <h2>Activation et paramétrage du service DynDNS</h2> <p>Commençont par nous rendre sur le <a href="https://www.ovh.com/manager/web/">manager web d'OVH</a>, puis dans le menu de gauche, cliquez sur votre nom de domaine.</p> <p><strong>Première étape :</strong> il faut créer un login et un mot de passe, pour gérer l'authentification de l'outil qui viendra mettre à jour l'adresse IP. Cliquez sur "<em>DynHost</em>" puis sur "<em>Gérer les accès</em>" et enfin sur "<em>Créer un identifiant</em>". Cet identifiant est composé des éléments suivants : le login ("nomdedomaine.net-login"), un sous domaine ("dyn.nomdedomaine.net"), et d'un mot de passe ("dyndns").</p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img1.png" style="height: 179px; width: 742px;" /></p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img2.png" style="height: 179px; width: 742px;" /></p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img3.png" style="height: 564px; width: 558px;" /></p> <p><strong>Deuxième étape :</strong> il ne reste plus qu'à créer le DynHost. Cliquez sur "<em>Ajouter un DynHost</em>", saisissez le sous domaine paramétré précédement ("dyn.nomdedomaine.net") ainsi que l'adresse IP publique de votre box (nécessaire la première fois). Pour connaître votre IP publique, connectez vous sur l'interface d'administration de votre box (exemple : 192.168.1.1) ou sur <a href="http://www.monippublique.com/">monippublique.com</a>.</p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img4.png" style="height: 179px; width: 742px;" /></p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img5.png" style="height: 520px; width: 559px;" /></p> <p><strong>Dernière étape (facultatif) :</strong> avec ce paramétrage votre service auto-hébergé sera directement accessible par l'adresse <em>dyn.nomdedomaine.net</em>. Si vous le souhaitez, vous pouvez rendre votre service accessible directement par l'adresse <em>nomdedomaine.net, </em>sans utiliser de sous domaine. Pour cela il faut paramétrer une redirection de <em>nomdedomaine.net</em> vers <em>dyn.nomdedomaine.net</em>. Cliquez sur "<em>Zone DNS</em>", puis sur "<em>Ajouter une entrée</em>". Choisissez un champs DNS de type "<em>CNAME</em>" et saisissez le sous domaine "dyn.nomdedomaine.net." (champs "Cible"), attention, le "." à la fin du sous domaine est obligatoire. Gardez à l'esprit qu'une mise à jour de la zone DNS, peut mettre jusqu'à 24h pour être diffusez sur tous les serveurs DNS publiques. Il est donc possible que cette redirection ne fonctionne pas avant quelques heures.</p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img6.png" style="height: 510px; width: 554px;" /></p> <p style="text-align: center;"><img alt="" src="https://p3ter.fr/data/medias/2016/20160430-dyndns_ovh-img7.png" style="height: 445px; width: 553px;" /></p> <hr /> <h2>Installation et paramétrage du client</h2> <p>Il existe plusieurs outils qui permettent de dynamiser sont DNS. Je vous recommande <em>ddclient</em> qui est pour moi le plus simple à utiliser. Sous Raspbian ça donne :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo apt-get install ddclient</div> <p>Editez le fichier <em>/etc/ddclient.conf</em> afin d'y saisir les informations nécessaires à la mise à jour du couple IP/DNS. Ci-dessous, avec notre exemple pour OVH :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;"> <p># Configuration file for ddclient generated by debconf<br /> #<br /> # /etc/ddclient.conf</p> <p>protocol=dyndns2<br /> use=web, web=checkip.dyndns.com<br /> server=www.ovh.com<br /> login=nomdedomaine.net-login<br /> password='dyndns'<br /> dyn.nomdedomaine.net</p> </div> <p>Redémarrez <em>ddclient</em> pour prendre en compte les modifications :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo service ddclient restart</div> <p>Enfin, la commande ci-dessous, vous permettra de vérifier le bon fonctionnement de <em>ddclient</em> :</p> <div style="background:#eeeeee;border:1px solid #cccccc;padding:5px 10px;">sudo ddclient -daemon=0 -debug -verbose -noquiet</div> <p>&nbsp;</p> <p>Sources images : <a href="https://www.flickr.com/photos/npobre/">Norlando Pobre</a> (CCByv2) et <em>Guides OVH.com</em><br /> Documentation Ubuntu-fr pour ddclient : <a href="https://doc.ubuntu-fr.org/ddclient">https://doc.ubuntu-fr.org/ddclient</a></p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Sat, 30 Apr 2016 11:00:00 +0200 P3ter Installer un serveur git sur un Raspberry Pi https://p3ter.fr/article75/installer-un-serveur-git-sur-un-raspberry-pi https://p3ter.fr/article75/installer-un-serveur-git-sur-un-raspberry-pi <img src="https://p3ter.fr/data/medias/2016/20160701-gitphp-vignette.png" alt="" title="" /><p>Qui dit logiciel libre dit partage libre du code source. Pour cela il existe plusieurs plateformes en ligne, la plus célèbre étant Github. Joli paradoxe quand on sait que Github est un logiciel propriétaire, qui héberge lui même des logiciels libres. Dans cette article nous nous intéresserons à une alternative libres à Github, qui permet d'héberger son propre front web dédié à git.</p><hr /> <p><strong>Mise à jour 25/01/2018 :</strong> Le projet Gitphp ne semble plus maintenu par son créateur Xiphux. Le site web n'est plus disponible et les sources ont été supprimées de Github. En revanche, des forks sont disponibles (par exemple : <a href="https://github.com/john-peterson/gitphp">ici</a>).</p> <hr /> <p>Parmi ces alternatives il existe <a href="https://git.framasoft.org">Framagit</a>, qui est une instance du logiciel libre GitLab. Mais pour cet article j'ai installé&nbsp;un serveur git et un front web sur un Raspberry Pi, qui tourne sous l'OS Raspbian. Je n'ai pas fait le test, mais la procédure décrite ci-dessous devrait aussi fonctionner sous Debian et&nbsp;Ubuntu.</p> <p>J'utiliserai <a href="http://www.gitphp.org/">Gitphp</a> en tant que front web. Celui-ci n'a pas les fonctionnalités ni l'ergonomie d'un GitLab ou d'un GitHub, mais a&nbsp;l'avantage d'être très léger, ce qui est un prérequis important pour un Raspberry Pi. Néanmoins il est tout à fait adapté à une utilisation personnelle ou bien au sein d'une école ou d'une association.</p> <hr /> <div> <h2>Installation de NGINX</h2> <p>Avant toute chose, il faut commencer par installer un serveur web. Je recommande NGINX pour ses performances et sa légèreté. Pour simplifier l'installation de NGINX et de&nbsp;PHP-FPM, j'ai adapté pour le Raspberry Pi un script de <a href="http://blog.nicolargo.com">Nicolas HENNION</a>. Pour en connaître d'avantage sur ce script je vous invite à lire <a href="http://p3ter.fr/raspberry-pi-installer-nginx-automatiquement.html">cet article</a>. Si vous êtes sous Debian, récupérez <a href="http://blog.nicolargo.com/2011/01/installation-automatique-de-nginx-php-fpm-memcached-sous-debian.html">le script orginal</a> de Nicolas sur son Github. Si vous êtes sous Ubuntu, j'ai adapté <a href="https://git.p3ter.fr/?p=Server.git&amp;a=blob&amp;h=6770e9f6e3d28aec9813aff1d81c82e803ef9595&amp;hb=ba8c63f31275d713e55778340a8f9f738422117a&amp;f=ubuntuserver%2Fnginxautoinstall-ubuntuserver.sh">un autre fork</a>&nbsp;spécialement pour cette distribution.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">wget --no-check-certificate <a href="https://raw.github.com/P3ter/RaspberryPi/master/nginxautoinstall-raspbian.sh" target="_blank">https</a><a href="https://raw.github.com/P3ter/RaspberryPi/master/nginxautoinstall-raspbian.sh" target="_blank">://raw.github.com/P3ter/RaspberryPi/master/nginxautoinstall-raspbian.sh</a><br /> chmod a+x nginxautoinstall.sh<br /> sudo ./nginxautoinstall.sh<br /> sudo chmod 770 /var/www</div> <hr /> <h2>Prérequis</h2> <p>Une fois notre serveur web installé, nous devons installer git, créer un utilisateur, créer les répertoires qui vont&nbsp;accueillir les projets git et&nbsp;le client web, et enfin&nbsp;affecter l'ensemble des droits nécessaires au&nbsp;fonctionnement de l'ensemble.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo apt-get install git-core<br /> <br /> # création d’un user git et du répertoire qui contiendra les projets Git<br /> sudo adduser git<br /> mkdir /git<br /> chown git:git /git<br /> <br /> # on change le répertoire par défaut de l'utilisateur git<br /> usermod -d /git git<br /> <br /> #&nbsp;création du répertoire qui accueillera le client web<br /> sudo mkdir /var/www/gitphp<br /> sudo chown www-data:www-data /var/www/git<br /> sudo&nbsp;chmod&nbsp;770&nbsp;/var/www/git</div> <p>Ensuite, il est nécessaire de paramétrer php-fpm, comme indiqué ci-dessous.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">sudo vim /etc/php5/fpm/pool.d/www.conf<br /> &nbsp;# remplacer<br /> &nbsp;listen = /var/run/php5-fpm.sock<br /> &nbsp;# par<br /> &nbsp;listen = 127.0.0.1:9000</div> <hr /> <h2>Installation et configuration</h2> <p>Rentrons dans le vif du sujet. Ci-dessous j'ai décrit l'ensemble des commandes permettant d'installer et de configurer la partie serveur et la partie front. Toutes les commandes sont à réaliser sur le serveur.</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;"># installation du front (disponible ici :&nbsp;<a href="https://github.com/xiphux/gitphp/releases">https://github.com/xiphux/gitphp/releases</a>)<br /> cd /var/www/gitphp<br /> sudo wget <a href="https://github.com/xiphux/gitphp/releases/download/0.2.9.1/gitphp-0.2.9.1.tar.gz" target="_blank">https://github.com/xiphux/gitphp/releases/download/0.2.9.1/gitphp-0.2.9.1.tar.gz</a><br /> sudo tar zxvf gitphp-0.2.9.1.tar.gz<br /> sudo mv gitphp-0.2.9.1/* .<br /> cd config<br /> sudo cp gitphp.conf.php.example gitphp.conf.php<br /> sudo vim gitphp.conf.php<br /> <br /> # dans le fichier gitphp.conf.php décomenter et modifier la ligne ci-dessous<br /> $gitphp_conf['projectroot'] = '/git/';<br /> <br /> # affectation des droits et redémarrage sur serveur web<br /> sudo chown -R www-data:www-data /var/www/<br /> sudo chmod -R 770 /var/www/<br /> sudo service nginx restart<br /> <br /> # création d'un projet&nbsp;git<br /> su - git<br /> cd /git<br /> mkdir nom-projet.git<br /> cd nom-projet.git<br /> git --bare init</div> <hr /> <h2>Configuration SSH</h2> <p>Avant de commencer à pouvoir utiliser notre serveur&nbsp;git, il faut configurer SSH sur le serveur et sur l'ordinateur qui servira à vos&nbsp;développements (le client git). Ce paramètrage&nbsp;vous permettra d'envoyer vos modifications au serveur en vous authentifiant par échanges de clés, ce qui permet d'éviter la saisie systématique d'un mot de passe utilisateur.</p> <p>Sur le serveur, on crée le fichier qui contiendra les clé SSH des clients autorisés à se connecter :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">su - git<br /> touch /git/.ssh/authorized_keys</div> <p>Sur le client, on crée une clé SSH puis on l'envoie au serveur :</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">ssh-keygen -t rsa<br /> ssh-copy-id -i ~/.ssh/ma_cle.pub git@mon_serveur</div> <hr /> <h2>Ajout d'un dépôt&nbsp;git sur le client</h2> <p>Le serveur et le client web sont maintenant prêt.&nbsp;Les commandes ci-dessous sont à réaliser sur le client git. Elles permettent de créer un répertoire de travail qui pourra interagir avec le serveur&nbsp;git, ainsi qu'une branche "dev".</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">mkdir nom-projet<br /> cd nom-projet<br /> git init<br /> git remote add origin git@mon_serveur:nom-projet.git<br /> git add *<br /> git commit -a<br /> git push origin master<br /> <br /> # création d'une branche<br /> git branch dev<br /> git commit -a<br /> git push origin dev</div> <hr /> <h2>Modification du prompt</h2> </div> <p>Afin de rendre l'utilisation de git plus simple, il est possible de modifier le prompt dans le but d'afficher la branche&nbsp;git sur laquelle on développe. Pour cela il faut éditer le fichier <strong>.bashrc</strong> se trouvant à la racine du répertoire par défaut de l'utilisateur et ajouter la variable <strong>$(__git_ps1)</strong></p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">vim /home/nom_utilisateur/.bashrc<br /> <br /> # modification du paramètre PS1 sans la gestion des couleurs :<br /> PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w$(__git_ps1)\$ '<br /> <br /> # modification du paramètre PS1 avec la gestion des couleurs :<br /> PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\] \[\033[01;34m\]\w\[\033[00m\]\[\033[&nbsp;&nbsp;&nbsp; 0;31m\]$(__git_ps1)\[\033[00m\] \[\033[01;34m\]\$\[\033[00m\] '<br /> <br /> # quitter l'éditeur de texte et appliquer les changements :<br /> . /home/nom_utilisateur/.bashrc</div> <hr /> <h2>Thèmes</h2> <p>Il est possible d'avoir un rendu plus moderne du client web en installant&nbsp;un "thème", qui en réalité est une simple feuille de style CSS.</p> <p>Le thème que j'utilise est disponible ici :<a href="https://github.com/gitawego/gitphp-theme">https://github.com/gitawego/gitphp-theme</a></p> <p>Pour l'appliquer, il suffit de télécharger sur votre serveur web, le fichier <em>gitweb.css</em> et de la placer dans <em>/var/www/gitphp/css</em>. Ensuite il faut éditer le fichier <em>/var/www/gitphp/config/gitphp.conf.php</em> en ajoutant la ligne ci-dessous :&nbsp;</p> <div style="background:#eee;border:1px solid #ccc;padding:5px 10px;">$gitphp_conf['stylesheet'] = 'gitweb.css';</div> <p>&nbsp;</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Wed, 20 Jan 2016 15:15:00 +0100 P3ter Edito du 25/11/2015 https://p3ter.fr/article81/edito-du-25-11-2015 https://p3ter.fr/article81/edito-du-25-11-2015 <img src="https://p3ter.fr/data/medias/" alt="" title="" /><p>Allé,&nbsp;je me lance pour&nbsp;mon tout premier édito.</p> <p>Ce format se voudra court et me permettra&nbsp;de parler&nbsp;de sujets plus&nbsp;personnels ou qui ne nécessitent par un article à part entière. Par exemple, c'est l'occasion de vous dire que le blog est passé&nbsp;sous&nbsp;la <a href="http://www.pluxml.org/article75/sortie-de-pluxml-5-4">version 5.4 de&nbsp;PluXML</a>, dont la principale nouveauté&nbsp;est une nouvelle interface d'administration&nbsp;responsive. C'est aussi l'occasion&nbsp;de changer le thème&nbsp;du blog, qui je l'espère&nbsp;offrira un meilleur confort de lecture. Le <a href="http://pluxopolis.net/static1/themes">thème&nbsp;est développé par&nbsp;Stephane FERRARI</a>, responsable du projet&nbsp;PluXML, et utilise le <a href="http://plucss.pluxml.org/index.php">framework PluCSS</a>&nbsp;entièrement dédié à PluXML.</p><hr /> <p>Un article à retrouver sur <a href="http://p3ter.fr">P3ter.fr</a></p> Wed, 25 Nov 2015 14:46:00 +0100 P3ter