Le Blog Utux

HTTP 200 GET /

Merci Terraform 0.12 :)

Rédigé par uTux 2 commentaires

J'ai une relation d'amour et de haine avec Terraform. Cet outil est formidable pour discuter avec les providers de cloud et faire de la remédiation, en revanche je me casse régulièrement les dents sur le langage hcl que je trouve extrêmement limité et frustrant. Trois exemples :

  • Les variables : Toute variable doit être déclarée, typée et contenir une valeur, même si on ne s'en sert pas. Une variable ne peut pas être égale à une autre. Pas de dictionnaire.
  • Pas de if, pas de loop : On doit ruser avec count mais on perd grandement en souplesse et en lisibilité.
  • pas DRY: (Don't Repeat Yourself) on ne peut pas utiliser du code commun et envoyer des variables en fonction de l'environnement, donc on duplique pas mal de code. Ce problème est réglé par Terragrunt que je recommande.
Logo Terraform
C'est principalement pour ces deux raisons que je considère qu'il est très difficile voire impossible de faire du code générique sur Terraform. On ne peut pas créer un module qui gère tous les cas possibles à l'aide des variables, on devra obligatoirement imposer des choix.

Terraform 0.12 est une version qui était très attendue depuis près de 1 an car promettant de lever pas mal de limitations du hcl. Et en effet la nouvelle version du langage nous apporte des nouveautés très appréciables. Mes 3 préférées sont :

  • First-class expression syntax :
    • ${var.foo} devient var.foo
    • ${var.foo["key"]} devient var.foo.key
    • ${var.foo[count.index]} devient var.foo (mon préféré)
  • Generalized type system :Les variables peuvent être des "object" composés de clés de différents types. Les objets eux-mêmes peuvent faire partie d'une liste: exemple. C'est peut-être le plus gros progrès de cette version.
  • Iteration constructs : Arrivée des boucles for et des boucles dynamiques, semble en pratique plus limité que ce qu'on pourrait croire mais c'est bon à prendre. Exemple.

Terraform 0.12 couplé à Terragrunt offre une plus grande souplesse et évite de se répéter. J'ai entamé la migration de mes projets pour profiter de ces nouveautés, et j'en suis très content. Merci Terraform :)

Toy Story 4 (no spoil)

Rédigé par uTux Aucun commentaire

Une des raisons pour laquelle j'adore les Toy Story est qu'ils ont un double niveau de lecture. Le premier c'est bien entendu l'univers des jouets qui vivent leur vie quand personne ne les regarde, l'humour, l'aventure, la classe internationale de Buzz l'éclair. Le second niveau de lecture comporte toujours une réflexion et une morale apprise par les protagonistes au cours du film.

Avertissement : Si vous n'avez pas vu les films Toy Story arrêtez-vous là, car je spoile allègrement les thèmes des 3 premiers. Je vais éviter de spoiler le 4, mais en donnant mon avis je livre forcément des éléments, vous êtes donc prévenus !

  • Toy Story 1 parle d'amitié. En voulant chasser son rival, Woody se retrouve dans une situation qui l'oblige à travailler avec lui et tous deux vont devenir amis face à l'adversité.
  • Toy Story 2 parle de la famille. Woody découvre qu'il est le produit dérivé d'une vieille série télévisée et trouve Jessie, Pile Poil et le Prospecteur qui font eux aussi partie du show. Il doit choisir de rester avec sa nouvelle "famille" ou revenir chez Andy avec les autres jouets.
  • Toy Story 3 parle de la transmission. Andy part à l'université et ne joue plus avec ses jouets, qui ont peur de partir à la poubelle. Finalement ceux-ci seront donnés à Bonnie, une petite fille qui prendra la relève pour s'amuser avec les jouets. Cela constitue une séparation autant pour Andy que pour les jouets.

Je suis content que la saga des Toy Story continue à vivre, et j'étais très impatient de voir le 4. Quels vont être les jouets présents ? Quelle aventure vont-ils vivre ? Et surtout quel thème va être abordé ?

Toy Story 4 Affiche

Verdict ? Il n'y a aucune raison de ne pas aller voir ce film, il s'agit comme d'habitude d'un excellent Toy Story. Si le thème de départ peut sembler un peu redondant (l'obsolescence des jouets) il évolue rapidement en quelque chose d'intéressant et d'inédit. Si comme toujours le film consiste à perdre des jouets dans la nature pour les voir ensuite regagner leur maison, il évoque le début et la fin des jouets. Sans vouloir trop spoiler l'histoire, certains jouets sans propriétaires cherchent à se faire adopter par un enfant, tandis que d'autres réalisent que leur mission est terminée et cherchent un autre but. J'ai adoré le personnage de la bergère (Bo) qui nous livre un numéro à la Mad Max ainsi qu'une perspective nouvelle à propos des jouets.

Le film n'est pas exempt de défauts. Le plus gros est probablement le doublage, avec le ton monocorde de Angèle, et Jamel qui fait toujours le même numéro de pitre, épuisé depuis bientôt 20 ans tout ça pour doubler un personnage totalement inutile. En revanche le doublage de Duke Caboom est tout simplement hilarant. L'autre défaut est que les personnages secondaires historiques sont mis en arrière plan, même Buzz l'éclair, à la limite de l'inutile. Et enfin je trouve le démarrage du film laborieux, avec Fourchette qui est un personnage exaspérant !

Dans l'ensemble le film est excellent et tient la route. C'est à mon sens un excellent successeur et je ne peux que vous encourager à aller le voir.

Seal of approval

How to remove server_tokens in Azure Application Gateway

Rédigé par uTux Aucun commentaire

In Azure, the Application Gateway is basically a reverse proxy, passing traffic to some backends. While testing the SSL certificate of a listener with ssllabs, I have been surprised by the "HTTP server signature" field: Nexus/2.14.10-01. Indeed, the backend was a Nexus service, but I was expecting to see the server signature of the Application Gateway (which is Nginx), or nothing, but not the backend.

Turns out the HTTP response contains the following header:

< HTTP/1.1 200 OK
< Server: Nexus/2.14.10-01
[...]

Many sysadmins and organizations consider this as a security issue, giving attackers information about the server. While I do not totally agree with this statement (Obfuscation), I often disable this information. This is simple with Nginx and Apache, but what about Azure Application Gateway?

Application Gateway -> Your application gateway -> Rewrites -> + Rewrite set

Name and Association
  • Name: give a name to your rewrite set. Ie: DisableServerTokens.
  • Associated routing rules: Select the rule associated to your backend(s)
Rewrite rule configuration
  • Rewrite rule name: give a name to your rewrite rule name. Ie: DisableServerHeader.
  • Action type: Delete
  • Header type: Response
  • Header name: Common header
  • Common header: Server

Then Save your modifications. This should remove the "Server" HTTP header.

Monter ses partages à la demande avec Autofs

Rédigé par uTux 2 commentaires

Je me connecte régulièrement avec mon laptop à des partages Samba/CIFS de mon NAS. Pour cela j'utilise la commande suivante à chaque démarrage:

$ sudo mount -t cifs //192.168.1.1/partage /mnt/partage/ -o user=utux,vers=3.0

J'aimerai que ce soit automatique. Le problème est que je ne peux pas utiliser le /etc/fstab car au moment où il est exécuté le réseau n'est pas prêt (wifi ou client openvpn). Il existe bien l'option _netdev mais elle n'a jamais fonctionné pour moi. Ce cas d'usage montre bien les limites des montages Linux qui ne sont pas adaptés à la mobilité et aux environnements dynamiques.

Bonne nouvelle, il existe une alternative: autofs qui s'appuie sur automount. Contrairement à mount, il connecte le partage lorsqu'on y accède (et pas au démarrage) et le déconnecte si on ne l'utilise pas. Il a aussi de nombreuses autres fonctionnalités:

  • Un système de templates utile quand on a de nombreux partages.
  • Support de plusieurs protocoles (cifs, nfs, raw...).
  • Auto-découverte des partages.
  • Consommation de ressources moindre (déconnecte les partages non utilisés)
  • Meilleure tolérance aux coupures réseau.

Installation sous Debian / Ubuntu:

$ sudo apt install autofs

Créer/éditer le /etc/auto.master:

/mnt	/etc/auto.nas --timeout 300 --browse

Créer/éditer le /etc/auto.nas:

partage -fstype=cifs,credentials=/home/utux/.autofs_creds,user=utux,vers=3.0 ://192.168.1.1/partage

Créer le fichier /home/utux/.autofs_creds:

username=utux
password=secret

Mettre le /home/utux/.autofs_creds en chmod 0600:

$ chmod 0600 /home/utux/.autofs_creds

Mettre le /etc/auto.nas en chmod 0644

$ sudo chmod 0644 /etc/auto.nas

Démarrer le service:

$ sudo systemctl start autofs

Tester:

$ ls /mnt/partage

Si cela ne fonctionne pas:

$ sudo systemctl stop autofs
$ sudo automount -f –v

Notez que cela ne fonctionnera pas si le /etc/auto.nas est exécutable:

$ sudo chmod -x /etc/auto.nas

Autofs est génial et solutionne mes problèmes de montage de partages en mobilité.

Gitlab, bien mais gourmand

Rédigé par uTux 10 commentaires

J'adore gitlab, alternative libre à github installable chez soi ou utilisable en tant que service. Il a énormément de fonctionnalités: gestion du https avec letsencrypt, embarque sa BDD Postgresql, du CI avec des runnners, des issues, un registry Docker, et même de la métrologie... le tout avec une interface graphique intuitive et bien léchée.

Le problème de gitlab, c'est qu'il est monolithique et gourmand. Trop gourmand. J'ai installé une instance de gitlab-ce sur un serveur équipé de 2G de RAM, et au bout de quelques jours des erreurs 502 sont apparues. En me connectant sur le serveur j'ai constaté qu'il était quasi saturé: 1,7G ! Et en effet, après avoir consulté la page des requirements, j'a rapidement compris. Le minimum du minimum, c'est 4G de RAM + 4G de swap! Et la recommandation est de 8G!

Pour un usage perso, il est quand même ennuyeux de devoir louer un VPS à 8G de RAM, c'est pas donné, on tape dans la dizaine d'euros par mois voire plus. J'ai essayé quelques optimisations, comme diminuer le nombre de workers, le cache Postgresql, la métrologie... et après un redémarrage je suis à 1,5G de RAM.

Memoire Gitlab

Moui, ce n'est pas une franche réussite. Au moindre pic de consommation le serveur va ookill des processus. Gitlab est cool mais c'est un peu une usine à gaz en terme de ressources.

Même si je suis toujours fan de Gitlab et le recommande pour les entreprises et les organisations, je vais me mettre en recherche d'une alternative plus propice aux usages persos.

Fil RSS des articles