17 Déc 2018

Consul du pauvre via /etc/hosts pour infrastructure multi-machines sous Terraform

Category: Administration de serveur,Tutorielscduv @ 03:43

Si vous montez une infrastructure de plusieurs machines communiquant en réseau (micro-services, cluster de base de données, frontend et backend, etc.) il faut que chacune connaisse l'adresse IP de ses "collègues".

Globalement, dans la vie de tous les jours, l'adresse IP a été "remplacée" par des FQDN (noms de domaine). Et même dans une infrastructure non publique et entièrement sous contrôle, l'adresse IP devient rapidement problématique pour différentes raisons :

  • Elle n'est pas toujours parlante : On peut faire une erreur à la saisie et ne pas le remarquer ("server-sql.myapp.net" est mieux que 10.3.45.9... Oups, c'était 10.3.85.9 en réalité)
  • Elle est relativement figée : Si une nouvelle machine vient à remplacer une précédente (ou si un composant change de machine), généralement la nouvelle ne peut pas récupérer l'adresse IP de l'ancienne et donc les composants de l'infrastructure qui utilisant l'ancienne adresse doivent être modifiés pour leur donner la nouvelle adresse IP.

A mon avis, toute infrastructure de plus de 3 composants devrait dépendre de FQDN.

Une solution simple est le fichier texte /etc/hosts (C:\Windows\System32\drivers\etc\hosts sous Windows) qui permet d'associer une adresse IP à un FQDN.
L'autre solution est d'utiliser un serveur DNS, qu'il soit public (celui de votre registraire/registrar ) ou interne (BIND, Dnsmasq, ...) que les composants requêterons. Il existe des logiciels de Service Discovery tel que Apache ZooKeeper, Consul et etcd qui font exactement ça (mais en plus pratique).

Quand on débute un petit projet, on a pas forcément envie de faire appel à ce genre d'outil aussi pertinents soient-ils (pour des raisons de temps, de coût, de simplicité, etc.).

Si vous utilisez Terraform pour monter cette infrastructure, je vais vous montrer une petite astuce pour remplir le fichier /etc/hosts de tout vos composants de manière automatique. Poursuivre la lecture"Consul du pauvre via /etc/hosts pour infrastructure multi-machines sous Terraform"


03 Oct 2016

Enlever les annotations SVN "@version $Id$" de son code source

Category: Développementcduv @ 18:26

Avant vous utilisiez SVN et marquiez chaque version de vos fichiers d'un pratique @version $Id$ ?
Mais voilà, ça fait un moment que vous avez délaissé SVN pour mieux autre chose (par exemple Git sur GitLab) et ces annotations n'ont plus lieu d'être ?

Vous les apercevez du coin de l’œil mais n'y faites plus trop attention parce que elles font partie du paysage mais surtout parce que ça vous prendrait trop de temps de toutes les retirer.
Vous vous dites que, petit à petit, les collègues qui seront amenés à travailler sur ces fichiers annotés vont retirer ce vestige du passé au passage ?

Et bien non : ils ne vont pas le faire, car s'ils modifient le fichier c'est pour bugfixer ou rajouter des features pas nettoyer les annotations et qu'un :

--- a/setup.php
+++ b/setup.php
@@ -1,6 +1,5 @@
 <?php
 /*
- * @version $Id$
[...]
dans leur commit ferait tâche (personne ne fait devrait faire ça, hein ?)

Alors si vous êtes propres vous avez une issue quelque part (comprendre « Priorité "very-low" »), mais la flemme de passer sur tout les fichiers ou de chercher la commande qui ira bien.

Voici deux commandes pour trouver puis nettoyer vos fichiers source (ici en PHP, CSS et JS mais vous saurez facilement adapter) :

# List occurences of "* @version $Id$" or "* @version $Id .... $" except the one in vendor/ or .git directories
grep -RIi '^\s*\*\s*@version\s\+\$Id.*\$$' | grep -v -e "^vendor/" -e "^.git/"
# Removes "* @version $Id$" and "* @version $Id .... $" (using sed) from
# .php, .phtml, .css and .js files
# except the one from vendor/ or .git directories
find . \
    -type f \
    \( -iname "*.php" -or -iname "*.phtml" -or -iname "*.css" -or -iname "*.js" \) -and \
    \( -not -path "./vendor/*" -and -not -path "./.git/*" \) \
    -exec sed --in-place --regexp-extended '/^\s*\*\s*@version\s+\$Id.*\$$/d' {} \;

Y'a plus qu'à faire votre

git add -u && git commit -m 'Removes Version $Id$ SVN annotations'
ou similaire

.

Étiquettes :


24 Oct 2015

Blend Web Mix 2015 à Lyon : Demandez Téléchargez le programme (ICS) !

Category: Développement,Lyon/Villeurbannecduv @ 21:18

Le Blend Web Mix 2015 c'est bientôt : les mercredi et jeudi 28 et 29 octobre 2015 et le programme des conférences a enfin été dévoilé au complet.

Mais si je vous en parle ça n'est pas pour souligner cette nouvelle édition de ce salon du web (lyonnais) mais plutôt pour parler technique. En fait, autant la page du programme est lisible et permet de filtrer par catégorie de sujet, de niveaux autant la fonction d'export ICS est pauvre (même si elle a le mérite d'exister) :

  • Elle n'exporte qu'une seule conférence, il faut donc exporter chaque conférence individuellement
  • (L'(unique) événement du fichier ICS ne donne ni le lieu ni le détails de la conférence

Cela souffre, par exemple, de la comparaison avec l'outil de planification du PHP Tour de l'AFUP qui permet de faire son propre planning (en choisissant les conférences qui nous intéresse) et de l'imprimer.

Bref, je voulais avoir un fichier ICS complet pour pouvoir consulter de manière simple le planning, et aussi l'avoir sur mon smartphone : j'ai donc créer un script pour ça...

Poursuivre la lecture"Blend Web Mix 2015 à Lyon : Demandez Téléchargez le programme (ICS) !"


05 Août 2015

Déterminer l'Extension ID d'une extension Firefox / Thunderbird à partir de son fichier XPI

Category: GNU/Linuxcduv @ 12:25

Il peut parfois être utile de récupérer l'extension ID d'une extension de Firefox, de Thunderbird, etc. en n'ayant sous la main que son fichier .xpi, notamment pour une installation automatisée.
Il faut donc un moyen automatique de connaître cet ID.

Poursuivre la lecture"Déterminer l'Extension ID d'une extension Firefox / Thunderbird à partir de son fichier XPI"


25 Sep 2014

Shellshock : Faille de sécurité CVE-2014-6271 dans Bash

Category: Administration de serveur,GNU/Linuxcduv @ 15:31

Ces derniers jours une faille de sécurité a été découverte dans l’interpréteur de commande shell Bash.
Identifiée CVE-2014-6271 et surnommée Shellshock.
Assez grave, et même considérée plus importante que Heartbleed (datant de début 2014) par certains, ce bug peut déjà être exploité pour accéder à un shell sur vos serveurs à distance (en passant par votre serveur Web par exemple).

Poursuivre la lecture"Shellshock : Faille de sécurité CVE-2014-6271 dans Bash"

Étiquettes : , , ,


21 Juin 2014

Créer ses propres images de base pour Docker

Category: Administration de serveur,Tutorielscduv @ 03:37

Si vous utilisez Docker, il y a de fortes de chances que les images de bases présentes sur le Hub Docker vous convienne (debian, ubuntu, centos, etc.).
Mais il se peut également que vous ne trouviez pas l'image avec l'OS dont vous avez besoin (Mandrake, . Ou alors que les normes de sécurité de votre activité vous impose de construire vous même vos images afin d'être sûr du contenu.

Je vais vous montrer comment créer sa propre image Docker à partir de rien (sans FROM)

Poursuivre la lecture"Créer ses propres images de base pour Docker"

Étiquettes :


12 Juin 2014

Notification par SMS chez Free Mobile via API avec un client Shell

Category: Administration de serveur,Domotiquecduv @ 01:16

Hier, l'opérateur Free Mobile a annoncé un nouveau service gratuit pour ses abonnés : le service d'envoi de SMS via une API.

Pratique et réclamé depuis un moment (même payant) ce service permet d'envoyer des SMS à son propre numéro d'abonné Free Mobile (et uniquement à celui-ci) depuis des appareils connectés tels que les lapin Karotz, un NAS, un serveur (de domotique par exemple).

Poursuivre la lecture"Notification par SMS chez Free Mobile via API avec un client Shell"


22 Sep 2013

Lightning 2.6 sur SeaMonkey 2.21 : erreur d'accès aux calendriers CalDAV

Category: Non classécduv @ 17:25

Suite à la récente mise à jour de SeaMonkey en version 2.21, mon gestionnaire de calendrier (l'extensions Lightning) s'est également mise à jour en version 2.6. Sauf que depuis cet instant mes calendriers CalDAV ne sont plus accessibles car j'obtiens l'erreur suivante dès le lancement de SeaMonkey Mail :

(NS_ERROR_XPC_CI_RETURNED_FAILURE) [nsIJSCID.createInstance]" nsresult: "0x80570015 (NS_ERROR_XPC_CI_RETURNED_FAILURE)" location: "JS frame :: resource://calendar/modules/calUtils.jsm -> file:///..../SeaMonkey/extensions/%7Be2fda1a4-762b-4020-b5ad-a41df1933103%7D/calendar-js/calCalendarManager.js :: cmgr_createCalendar :: line 474" data: no]

Poursuivre la lecture"Lightning 2.6 sur SeaMonkey 2.21 : erreur d'accès aux calendriers CalDAV"

Étiquettes : , , , ,


21 Sep 2013

logrotate : Erreur "gzip: stdin: file size changed while zipping"

Category: Administration de serveur,Debiancduv @ 00:16

Après avoir installé et configuré logrotate sur son serveur il peut arriver de recevoir des courriels de cron contenant le message (visiblement d'erreur) suivant :

/etc/cron.daily/logrotate:
gzip: stdin: file size changed while zipping

N'arrivant pas à chaque fois et sans vraiment plus d'informations que ça : on recevra ce message encore quelques fois avant de se décider à faire quelque chose...

Poursuivre la lecture"logrotate : Erreur "gzip: stdin: file size changed while zipping""

Étiquettes : , ,


23 Mai 2013

Plusieurs serveurs virtuels Apache par nom (host-based) en SSL

Category: Administration de serveur,GNU/Linuxcduv @ 13:27

Les serveurs virtuels Apache permettent d'héberger, sur une même machine (et sur une même installation d'Apache) plusieurs sites Internet différents (ayant chacun leur propre FQDN). Il existe deux variantes de ce système bien pratique pour économiser sur les serveurs web :

  • Par IP (IP-based) : Apache recherche le <VirtualHost> ayant le couple adresse IP et port (généralement 80) du client (le navigateur)
  • Par nom (host-based, name-based) : Le serveur regarde l'entête Host (eg. Host: domaine.tld) reçue du client et recherche le <VirtualHost> où figure ce FQDN (soit dans ServerName, soit dans ServerAlias). Cette technique peut être combiné avec un choix par IP, mais généralement on utilise le wildcard * (eg. <VirtualHost *:80>) pour fonctionner avec n'importe quelle adresse IP)

Voir la documentation Apache pour plus d'informations ce sujet, notamment la manière dont Apache décide quel serveur virtuel va traiter la demande.
C'est souvent la variante par nom qui est utilisée car plus simple (pas besoin d'ajouter des interfaces réseau au serveur pour avoir de nouvelles adresses IP : l'aiguillage se passe au niveau DNS), plus souple (il est assez facile de configurer/modifier une zone DNS) et moins onéreux (l'achat d'adresses IP est plus cher qu'un nom de domaine -qu'on devra de toutes façon acquérir-, d'autant plus si c'est des IPv4).

En revanche, le host-based pose problème lors de l'hébergement de sites en https:// car l'entête Host n'est pas envoyé au serveur avant d'avoir établi une connexion sécurisée, or la négociation SSL préalable à cette connexion requiert un certificat, un certificat qui dépend du FQDN du site (il faut qu'il corresponde au CN du certificat) : c'est un peu l'histoire de la poule et de l’œuf où l'on a besoin de l'un pour avoir et l'autre de l'autre pour avoir l'un...

Je vais vous montrer comment faire, sous Apache 2.2.12 et avec OpenSSL 0.9.8f (minimums requis pour gérer le Server Name Indication (SNI) qui pallie l'absence d'entête Host) pour avoir plusieurs VHost par nom (name-based) en HTTPS, sur une seule adresse IP et sans avoir l'avertissement "_default_ VirtualHost overlap on port 443, the first has precedence"

Poursuivre la lecture"Plusieurs serveurs virtuels Apache par nom (host-based) en SSL"

Étiquettes : , ,


Page suivante »