notes·de·pit - Mot-clé - gitParfois j'apprends à pêcher à des gens qui n'aiment pas le poisson2023-06-13T11:41:09+02:00PiTurn:md5:45526db4e4cfb511098640352c276065DotclearInstallation de cachet, the open source status page systemurn:md5:c575078f1fc648cee85491e5b5835afc2017-11-09T11:20:00+01:002017-11-09T11:43:46+01:00PiTMes doigts dans le clavierdebianesigeekgitlogiciellibre<p><img src="https://blog.namok.be/public/images/divers/2017/jonathan-perez-409943-1200x.jpg" alt="jonathan-perez-409943-1200x.jpg" style="margin: 0 auto; display: block;" title="jonathan-perez-409943-1200x.jpg, nov. 2017" /></p>
<p><strong>Cachet</strong> est un système qui offre une page de statut de différents services
web. Il permet de reporter rapidement et de centraliser l'état des services
web d'une société / asbl / groupement…</p>
<p>Pour l'école, ça se trouve là:
<a href="http://status.esi-bru.be">http://status.esi-bru.be</a></p>
<p>L'installation de <strong>cachet</strong> se fait en suivant <a href="https://docs.cachethq.io/docs/installing-cachet">la documentation
officielle</a>… à quelques changements près.</p>
<p>Pour le début, je suis simplement le tuto.</p>
<pre>
cd /var/www/html
git clone https://github.com/cachethq/Cachet.git
cd Cachet
git tag -l
git checkout v2.3.13
cp .env.example .env
vim .env
</pre>
<p>Édition du fichier de configuration. Comme ce sera une BD <em>postgresql</em>, il
faut — l'installer si ce n'est fait — créer la BD et créer un utilisateur
dédié: <em>cachet</em>. Pour ce faire:</p>
<ol>
<li><p>création de la BD</p>
<pre>
sudo -u postgres createdb cachet
</pre></li>
<li><p>choisir un utilisateur</p>
<pre>
sudo -u postges createuser --interactive
</pre></li>
<li><p>lui attribuer un mot de passe — <code>pwgen 10 -1</code> fait bien l'affaire — que je peux reporter dans le fichier de configuration</p>
<p></p>
<pre>
psql (9.6.3)
Saisissez « help » pour l'aide.
postgres=# \password cachet
Saisissez le nouveau mot de passe :
Saisissez-le à nouveau :
postgres=# \q
</pre></li>
</ol>
<p>Pour l'installation de <em>composer</em>, je préfère faire confiance à mon
gestionnaire de paquets et faire un <code>apt install composer</code> disponible
depuis <em>stretch</em> sous <em>debian</em>. La génération de la clé nécessite que
<em>composer</em> soit installé. Ensuite, l'installation de <em>cachet</em> se passe sans
soucis.</p>
<pre>
composer install
php artisan key:generate
php artisan app:install
</pre>
<p>Il est temps d'ajouter le <em>vhost</em> <em>apache2</em> — ou <em>nginx</em> — et d'activer <em>mod
rewrite</em>.</p>
<pre>
a2enmod rewrite
</pre>
<pre>
<VirtualHost *:80>
ServerName status.example.org
ServerAlias www.status.example.org
ServerAdmin webmaster@example.org
DocumentRoot /var/www/html/cachet/public
<Directory "/var/www/html/cachet/public">
Require all granted
# Used by Apache 2.4
Options Indexes FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
</pre>
<p>À ce stade, <em>cachet</em> est installé… mais n'a que peu d'interêt. Il devient
utile s'il est capable de se mettre à jour sans intervention humaine. Après
lecture de <a href="https://docs.cachethq.io/reference">la documentation</a>, je comprends que <em>cachet</em> propose une API
et que je peux le mettre à jour via… un script <em>python</em> par exemple.</p>
<pre>
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
#
import requests
import json
url= "http://status.example.org/api/v1/ping"
response = requests.request("GET", url)
parsed = json.loads(response.text)
print json.dumps(parsed)
</pre>
<p>Pour aider à écrire les requêtes, j'utilise la librairie
<a href="https://github.com/dmsimard/python-cachetclient">python-cachetclient</a> qui s'installe par une des deux commandes suivantes:</p>
<pre>
pip3 install python-cachetclient
pip3 install git+https://github.com/dmsimard/python-cachetclient
</pre>
<p>Les <a href="https://github.com/dmsimard/python-cachetclient/blob/master/contrib/example.py">examples</a> sont clairs et j'utilise — comme version 1 — le script
à l'allure suivante:</p>
<pre>
#!/usr/bin/env python3
#
# Python script for status.example.org
#
# Author: Pierre BT
# Thanks to cahethq and python-cachetclient
#
import cachetclient.cachet as cachet
import json
import requests
ENDPOINT = 'http://status.example.org/api/v1'
API_TOKEN = '140if12345ABCDefghijkl'
SATUS_OK = 1
SATUS_PERF_ISSUES = 2
SATUS_PARTIAL_OUTAGE = 3
INCIDENT_INVESTIGATING = 1
INCIDENT_IDENTIFIED = 2
INCIDENT_WATCHING = 3
INCIDENT_FIXED = 4
SITEWEB = 'http://example.org'
SITEWEB_ID = 1
def ping_site_web(site, components_id, components, incidents):
""" Ping site web and update status
"""
try:
request = requests.get(site)
if request.status_code == 200:
components.put(id=components_id, status=SATUS_OK)
else:
components.put(id=components_id, status=SATUS_PERF_ISSUES)
incidents.post(
name='Erreur ' + str(request.status_code)
+ ' sur ' + site,
message=('Tout le monde est sur le pont pour régler ça…'
'et ce message est automatique.'),
status=INCIDENT_INVESTIGATING)
except Exception as e:
components.put(id=SITEWEB_ID, status=SATUS_PARTIAL_OUTAGE)
incidents.post(
name='Problème grave sur le ' + site,
message=('Tout le monde est sur le pont pour régler ça… '
'et ce message est automatique.'),
status=INCIDENT_INVESTIGATING)
#
# main method
#
components = cachet.Components(endpoint=ENDPOINT, api_token=API_TOKEN)
incidents = cachet.Incidents(endpoint=ENDPOINT, api_token=API_TOKEN)
ping_site_web(SITEWEB, SITEWEB_ID, components, incidents)
</pre>
<p>Il reste à ajouter ce script dans une tache <strong>cron</strong> et la première
automatisation — certes assez basique — est en place.</p>
<p>Enjoy et merci aux <em>devs</em> !</p>
<p><br/></p>
<p><em>Crédit photo chez <a href="http://unsplash.com">Unsplash</a>par <a href="https://unsplash.com/photos/6BzGt4OXzeM">Jonathan Perez</a>. Les
grincheux·ses pourraient dire que c'est facile d'utiliser une photo d'un
boite de cachets… mais ce sont des grincheux·ses non ?</em></p>
Nouveau certificat chez Gandi, confiance et giturn:md5:e9030e49ff42f3bd879904af38f42e492017-06-26T11:16:00+02:002017-07-15T12:27:30+02:00PiTCartable au dosdebianesigeekgit<p><img src="https://blog.namok.be/public/images/divers/2017/mac-laughtguy-408H-1200x.jpg" alt="mac-laughtguy-408H-1200x.jpg" style="margin: 0 auto; display: block;" title="mac-laughtguy-408H-1200x.jpg, juin 2017" /></p>
<p>Pour le serveur gitlab de l'école, je viens de renouveler les certificats chez
Gandi. Si l'on se connecte via son navigateur, on a un beau certificat un peu
plus récent:</p>
<p><code>TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384, 256 bits</code></p>
<p>Par contre, lorsque j'essaie un <em>git clone | pull | push</em> rien ne va plus car
l'autorité n'est pas reconnue par ma machine. Il faut que j'aille chercher le
certificat sur le serveur ou bien chez Gandi et que je l'ajoute à ma liste
de certificats.</p>
<p>Pour prendre le certificat <strong>sur le serveur</strong>, je fais donc:</p>
<p><code>echo -n | openssl s_client -showcerts -connect git.esi-bru.be:443</code></p>
<p>… et je mets les deux chaines entre <code>-----BEGIN CERTIFICATE----</code> et <code>-----END
CERTIFICATE-----</code> dans un fichier <code>MyGandi.crt</code></p>
<p>Si je préfère aller chercher le certificat <strong>chez Gandi</strong> directement, il se
trouve <a href="https://wiki.gandi.net/fr/ssl/intermediate">à cette page</a> et cette
commande devrait faire l'affaire</p>
<p><code>wget https://www.gandi.net/static/CAs/GandiStandardSSLCA2.pem</code></p>
<p>Une fois en possession du certificat, il faut le donner à votre machine via
ces deux commandes:</p>
<p><code>cp /elsewhere/GandiStandardSSLCA2.pem /usr/local/share/ca-certificates/GandiStandardSSLCA2.crt
update-ca-certificates</code></p>
<p>Notez qu'il est nécessaire de changer l'extension du fichier pour qu'il soit
pris en compte par <code>update-ca-certificates</code>. Cette deuxième commande va
concaténer tous les certificats présents dans <code>/etc/ssl/certs</code> et
<code>/usr/local/share/</code> pour les rassembler dans le fichier
<code>/etc/ssl/certs/ca-certificates</code>.</p>
<p>Et ça roule…</p>
<p><strong>Édité</strong></p>
<p>Bon, savoir reconnaitre ses erreurs… bla bla. Dans mon fichier <code>.pem</code>, quelques lettres s'étaient enfuies dans la bagarre et le fichier n'était pas correct. Cette manipulation n'est donc pas utile. Désolé pour les désagréments.</p>
<p><br/></p>
<p><em>Crédit photo chez <a href="http://gratisography.com/">Gratisography</a>.</em></p>
git en deux motsurn:md5:dfc0736df64ef89779e7c0bb7970aeea2014-01-31T12:26:00+01:002014-01-31T12:53:01+01:00PiTCartable au dos5slidesdiversesigeekgit<p>Dans la série « souvent il est nécessaire de présenter un outil, un concept, le résultat d'une recherche, … brièvement », aujourd'hui, je fais quelques slides pour présenter <strong>git</strong>.</p>
<p><img src="https://blog.namok.be/public/images/divers/2014/5slides-git/swissarmyknife-boboob.jpg" alt="swissarmyknife-boboob.jpg" style="margin: 0 auto; display: block;" title="swissarmyknife-boboob.jpg, janv. 2014" /></p>
<p>Comme il était difficile pour moi de faire ça en une seule fois, il y aura <strong>deux fois</strong> 5 slides ;-)</p>
<p><em>git</em> fait partie de la liste des <em><abbr title="version control system - système de contrôle de versions">vcs</abbr></em>, les logiciels permettant la gestion des différentes versions d'un « texte ». Les plus connus sont; <em>git</em> et <em>svn</em>.</p>
<p>Ces deux séries de slides se basent sur <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic">gitmagic de B Lynn</a>.</p>
<h2>git in 5 slides</h2>
<p><img src="https://blog.namok.be/public/images/divers/2014/5slides-git/in5slides-git-mozaic.png" alt="in5slides-git-mozaic.png" style="margin: 0 auto; display: block;" title="in5slides-git-mozaic.png, janv. 2014" /></p>
<p><strong>Slide 2</strong><br />
Qu'est-ce que <em>git</em> ?<br />
Quelle est son utilité et pourquoi, c'est bien de l'utiliser ?</p>
<ul>
<li>Gestion de ses versions et</li>
<li><em>git</em> est décentralisé. À l'inverse de <em>svn</em>, chaque dépôt contient l'archive complète du projet.</li>
</ul>
<p><strong>Slide 3</strong><br />
Utilisation basique de <em>git</em>. Cette utilisation simple permet de:</p>
<ul>
<li>créer un dépôt;</li>
<li>d'y ajouter ses fichiers et;</li>
<li>de faire son premier <strong>commit</strong></li>
</ul>
<p>C'est l'occasion de dire que la bonne pratique n'est pas d'utiliser la commande</p>
<pre><code>git commit -m "Petit commentaire"
</code></pre>
<p>mais d'utiliser la commande <code>git commit</code> qui ouvrira l'éditeur par défaut et permettra d'entrer un commentaire complet … c'est-à-dire compréhensible par le lecteur et certainement plus long.</p>
<p>La recommandation étant d'avoir un titre suivi d'un texte représentatif du commit. Le titre n’excèdera pas 50 caractères tandis que le texte tronquera ses lignes à 72 caractères … c'est la <a href="https://wiki.openstack.org/wiki/GitCommitMessages">règle des 50 / 72</a> pour les messages de commit.</p>
<p><strong>Slide 4</strong><br />
Chaque <em>commit</em> est représenté par une <a href="https://fr.wikipedia.org/wiki/SHA-1">empreinte SHA1</a> de 160 bits.</p>
<pre><code> commit af0d57b52307675be81b20f2754a4036c77fa794
</code></pre>
<p>c'est sur base de cette empreinte que l'on pourra revenir à une situation précédente.</p>
<p><strong>Slide 5/6</strong><br />
Jusque là, c'est bien !<br />
Un usage d'un <em><abbr title="version control system - système de contrôle de versions">vcs</abbr></em> est de pouvoir travailler ensemble sur un même projet. Je dois donc pouvoir mettre mes sources à disposition des autres ou bien accéder au dépôt de mon collaborateur.</p>
<p>La communication entre machines peut se faire par <code>ssh</code> ou bien en faisant tourner un <em>dæmon git</em>.</p>
<p>La commande permettant de récupérer le contenu d'une archive est <strong>pull</strong> dès lors que j'ai préalablement <em>cloné</em> (pris une copie locale) le dépôt.</p>
<p><strong>Slide7</strong><br />
Oui mais on aime quand même bien centraliser le dépôt histoire que l'on puisse y avoir accès « tout le temps » ou d'avoir un dépôt de référence ou d'offrir une visibilité au projet ou …</p>
<p>Il existe <a href="http://github.com">github</a> qui fait ce boulot (et d'autres, <a href="http://gitorious.org">gitorious</a>, <a href="http://repo.or.cz">repo</a>).<br />
<a href="http://github.com">github</a> est un site web centralisant le dépôt git … et offrant des outils tels que:</p>
<ul>
<li>une page web générée à partir du fichier README.md;</li>
<li>un système d'<em>issues</em> permettant de reporter les bugs;</li>
<li>un wiki par projet;</li>
<li>… </li>
</ul>
<p>bref de quoi donner de la visibilité à un projet et permettre la collaboration autour de celui-ci.</p>
<h2>git in 5 slides (advanced)</h2>
<p><a href="https://blog.namok.be/public/images/divers/2014/5slides-git/in5slides-git-advanced-mozaic.png" title="in5slides-git-advanced-mozaic.png"><img src="https://blog.namok.be/public/images/divers/2014/5slides-git/in5slides-git-advanced-mozaic.png" alt="in5slides-git-advanced-mozaic.png" style="margin: 0 auto; display: block;" title="in5slides-git-advanced-mozaic.png, janv. 2014" /></a></p>
<p>Pour aller un peu plus loin dans l'utilisation de git.</p>
<p><strong>Slide 2</strong><br />
Lorsque l'on développe un projet, plusieurs versions évoluent en parallèle. Parce que l'on décide de travailler sur des fonctionnalités différentes ou simplement parce que l'on travaille un peu par essais / erreurs.</p>
<p>Le projet se décompose en plusieurs <strong>branches</strong>.</p>
<p><strong>Slide 3/4</strong><br />
Exemple (issu de <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic">gitmagic</a>) de création de deux branches et illustration du passage d'une branche à l'autre.</p>
<p><strong>Slide 5</strong><br />
Il arrive un moment où les développements parallèles doivent être fusionnés (<strong>merge</strong>) et ce, sans perte et sans erreur.</p>
<p>Un « <strong>merge</strong> » permet de fusionner deux branches. <em>git</em> fusionne automatiquement les deux branches et prévient si il découvre un conflit.</p>
<p><strong>Slide 7</strong><br />
Présentation d'un <em>worflow</em> traditionnel. Ce <em>worflow</em> utilise les branches pour permettre de travailler et d'avancer sans soucis.</p>
<p><strong>Slide 8</strong><br />
La présentation se termine par des commandes <code>ammend</code> et <code>blame</code> que permettent, respectivement, de modifier un commit et de voir qui a fait les dernières modifications …</p>
<p>Merci à <a href="http://www-cs-students.stanford.edu/~blynn/gitmagic">gitmagic</a>.</p>
<p>Faites en bon usage …</p>
<h4>Liens / cédits</h4>
<ul>
<li><a href="http://www-cs-students.stanford.edu/~blynn/gitmagic">Gitmagic</a> par Ben Lynn</li>
<li><a href="https://wiki.openstack.org/wiki/GitCommitMessages">Git commit message best practice</a> 50 / 72 rules </li>
<li>Les sites « git »: <a href="http://github.com">Github</a>, <a href="http://gitorious.org">Gitorious</a> et <a href="http://repo.or.cz">repo.or.cz</a></li>
<li><p>Qu'est-ce qu'une empreinte SHA1 ? chez <a href="https://fr.wikipedia.org/wiki/SHA-1">Wikipedia</a></p></li>
<li><p>Crédit photo chez Flickr par <a href="http://www.flickr.com/photos/bob007/">Bob007</a></p></li>
<li>Ces slides chez <a href="http://fr.slideshare.net/PierreBETTENS">Slideshare</a>; <a href="http://fr.slideshare.net/PierreBETTENS/in5slides-git">git</a> et <a href="http://fr.slideshare.net/PierreBETTENS/git-advanced-in-5-slides">git (advanced)</a></li>
</ul>