Utiliser Gitlab Pages comme repository Debian

Les Gitlab Pages (et Github Pages) permettent via un processus de construction d’artefact de publier un site web au travers d’un pipeline.

Un repository Debian étant simplement constitué de fichiers statiques, nous pouvons donc faire un rapprochement entre les pipelines de build et un repository Debian.

Pour réaliser notre repository Debian hébergé sur des gitlab pages nous aurons besoin:

  • Du conteneur docker debian:stretch
  • De GPG pour la signature du repository
  • De reprepro pour créer notre repository
  • D’un repository git hébergé sur un Gitlab

Continuer à lire

PostgreSQL: fermer toutes les connexions sur une base de données

PostgreSQL dispose d’une table d’état très utile appelée pg_stat_activity. Cette table est similaire au « SHOW PROCESSLIST » qu’on retrouve en MySQL, mais a le net avantage d’être requêtable et dispose d’informations plus précises que MySQL.

En voici un extrait:

Dans certains cas, il peut être utile de couper toutes les connexions à une base de données précise (par exemple des connexions dormantes en masse). Voici une simple requête SQL à jouer sur votre PostgreSQL (9.2 et plus) permettant de couper toutes les connexions: Continuer à lire

MySQL: tuer les requêtes trop longues

MySQL permet d’encaisser énormement de requêtes, mais dans certains cas, généralement des soucis externes (performances réseau/disque), il se peut que votre MySQL ait encaissé beaucoup de requêtes clientes qui ne soient plus légitimes et génèrent une forte charge sur votre service.

Je vous propose ci-dessous un petit script tout simple permettant de tuer toutes les requêtes supérieures à 180 secondes:

Archlinux: réinstaller tous les paquets

Archlinux est une distribution rolling release très stable et performante.

Si vous êtes un peu casse-cou, il se peut que vous ayez cassé par inadvertance la base de vôtre système en effectuant des actions un peu avancées (noyau linux ne démarrant plus, systemd en vrac…).

Pour réinstaller tous les paquets installés sur votre système sans effort il suffit de jouer une seule commande:

Cette commande va lister tous les paquets et les réinstaller. Attention néanmoins, si vous avez des paquets non officiels (AUR par exemple), cela ne fonctionnera pas, il faudra passer par yaourt par exemple.

Gitlab CI: Pipeline maven

Le Gitlab CI intègre depuis la version 8.8 de Gitlab la notion de pipeline. C’est une notion très à la mode permettant de pouvoir séparer son processus de build en plusieurs étapes distinctes, interdépendantes et parallélisables.

Nous allons prendre ici l’exemple d’une application SpringBoot utilisant Maven et créer un pipeline de construction de l’application ayant le cheminement suivant

  • Construction de l’application
  • Tests unitaires
  • Tests de qualité de code (sonar)
  • Déploiement Nexus (SNAPSHOT)
  • Déploiement Nexus (release, branche master uniquement)

Continuer à lire

Ansible: variables chiffrées hors d’un vault-file

Ansible dispose d’un moyen pour chiffrer les mots de passe appelé le vault. Les vaults sont des fichiers, généralement disposés au sein de l’inventaire ansible qui sont entièrement chiffrés.

Dans un système entièrement industrialisé, on retrouve généralement ansible accompagné d’un SCM comme git afin de versionner le code et l’inventaire de l’infrastructure.L’utilisation d’un ou plusieurs vault files pour les mots de passe pose un souci, les variables chiffrées (nom et valeurs) sont tous au sein du vault et donc tous chiffrés. Lors d’un changement sur un mot de passe unitaire au sein d’une vault, le différentiel du SCM montrera un changement global de la vault, et non le changement unitaire du mot de passe. Continuer à lire

Ansible: améliorer la sortie écran

Ansible est un très bon ordonnanceur, avec une sortie relativement claire, néanmoins il se peut que vous ayez envie de l’améliorer.

La sortie standard Ansible utilise le plugin CallbackModule présent dans le répertoire lib/ansible/plugins/callback/default.py. Nous allons ici bénéficier de la possibilité de définir nos propres callback plugins et de l’héritage objet Python pour pouvoir améliorer facilement la sortie Ansible. Continuer à lire

FreeBSD: poudriere cross compiling (ARM)

Poudriere permet de réaliser du cross compiling et donc de compiler des cibles d’une autre architecture. Nous allons ici prendre l’exemple d’une architecture amd64 cross-compilant vers ARM6 pour un Raspberry PI 2.

Préparation de la jail poudrière

Tout d’abord on va télécharger une image RPI2 viable depuis le miroir FreeBSD puis la décompresser

Continuer à lire

PostgreSQL: changer le owner de toutes les tables/séquences d’un schéma

Lors d’une restauration de base de données, parfois il se peut que vous ayez besoin de changer le propriétaire d’une table ou d’une séquence pour un autre user, par exemple si vous prenez une base de production pour la mettre sur votre intégration pour vos développeurs (anonymisées, bien sûr 😉 ).

Plutôt que de devoir faire fastidieusement un ALTER TABLE table par table, voici 2 requêtes SQL qui vont vous permettre de générer les SQL pour changer rapidement le owner de toutes les tables et séquences: Continuer à lire

PostgreSQL: supprimer toutes les tables d’un schéma rapidement

Parfois, il peut être utile de supprimer toutes les tables d’un schéma directement, notamment si vous souhaitez réimporter un backup depuis un autre environnement.

Il peut être fastidieux de faire des DROP TABLE unitaires, heureusement les schémas PostgreSQL respectent la norme SQL. Contrairement à MySQL qui mélange la notion de base de données et schéma, sur PostgreSQL les bases de données peuvent comporter plusieurs schémas.

Continuer à lire

Gestion de LetsEncrypt sous FreeBSD avec nginx et une jail

LetsEncypt est une autorité de certification utilisant une API basée sur des appels HTTP et un client côté serveur qui va générer des tokens lus par les serveurs LetsEncrypt.

Nous allons ici voir une architecture LetsEncrypt typique dans laquelle nous allons utiliser le client acme-client d’OpenBSD disponible dans les ports et les packages FreeBSD.

Installation

Dans un premier temps installez le client sur votre machine hôte (et pas votre jail web):

Continuer à lire

Optimisations BDD: indexes en doublon

Les indexes prennent de l’espace disque et de la mémoire. Les moteurs MySQL/MariaDB/PostgreSQL savent utiliser des indexes plus complexes afin de lire des données nécessitant un seul index donc les champs conditionnant sont inclus dans un index plus complexe.

Exemple ici avec 3 indexes

Si nous faisons une requête filtrant sur le champ id_1 uniquement (SELECT field1 FROM table1 where id_1 = 3), le moteur de BDD est capable d’utiliser 2 indexes: index_b, qui ne contient que id_1 et index_a qui contient id_1 puis id_2.

En revanche, si nous faisons une requête filtrant sur le champ id_2 uniquement (SELECT field1 FROM table1 where id_2 = 6), le moteur de BDD ne pourra utiliser que index_c.

Si nous reprenons index_a, il n’est pas valide car le moteur de BDD lira cet index en trouvant les records discriminants sur id_1 avant les records discriminant sur id_2. Ce n’est pas un chemin optimal pour trouver un résultat dépendant uniquement de id_2. L’ordre des champs d’un index est donc important.

Pour finir, index_a filtrant tout d’abord sur id_1 avant de filtrer sur id_2, il sait donc filtrer uniquement sur id_1 et donc index_b est inutile (il prend des ressources disque et mémoire inutiles). Supprimez donc index_b qui prend de l’espace disque et mémoire pour rien.