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:

sudo pacman -Sy `pacman -Q | awk '{print $1}'`

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.

Apache: obtenir l’IP source depuis un en-tête conditionel dans les logs

Dans le cadre d'un environnement web haute disponibilité il y a généralement des répartiteurs de charge HTTP comme HAproxy ou des reverse proxies comme Apache ou Nginx en frontal qui vont s'occuper de répartir la charge et/ou filtrer une partie des requêtes pour ménager les serveurs d'application de backend.

Le principal problème rencontré dans ce type d'architecture est que, généralement, le service web de frontend va masquer l'IP source du client, réduisant la tracabilité de celui-ci sur les backends. Nous allons ici partir du principe que le service web de frontend retransmet l'IP au backend via un en-tête HTTP nommé X-Real-IP.

L'astuce que nous allons voir ici permet d'afficher l'adresse IP du client via l'en-tête X-Real-IP si celui-ci existe, auquel cas l'adresse IP source.

Dans un premier temps nous allons définir 2 LogFormat, _completerealip et complete, chacun ayant un paramétrage sur le champ 1 différent:

LogFormat "%{X-Real-IP}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\" %D" complete_realip
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Host}i\" %D" complete

Dans un second temps, nous allons nous servir du module _modsetenvif afin de vérifier l'existence de l'en-tête:

SetEnvIf X-Real-IP ^.+$ real_ip_exists

Enfin on définit une condition sur l'environnement afin de basculer le log d'un mode à l'autre suivant la requête entrante:

CustomLog /var/log/apache/myapp_access.log complete_realip env=real_ip_exists
CustomLog /var/log/apache/myapp_access.log complete env=!real_ip_exists

Conclusion

Votre serveur Apache va désormais basculer l'IP présentée dans ses logs dynamiquement en fonction de la présence ou non de l'en-tête X-Real-IP.

Note: Si vous utilisez un haproxy en frontend, la configuration à ajouter à vos backend haproxy est la suivante:

http-request set-header X-Real-IP %[src]

GIT: supprimer un submodule

Git dispose d'une fonctionnalité de sous modules très intéressante quand il s'agit de relier plusieurs projets entre eux. Cela permet ainsi de relier un répertoire à un autre repository git, par exemple pour une librairie C/C++ à intégrer en statique dans un projet principal.

L'intégration du sous module est assez simple en revanche la suppression des traces du sous module n'est pas forcément triviale, git ne disposant pas d'une commande git submodule rm .

Voici donc la solution, pour un sous module installé dans le répertoire _lib/customsubmodule.

git submodule deinit lib/custom_submodule
git rm lib/custom_submodule
rm -Rf .git/modules/lib/custom_submodule

Vous allez ici supprimer le lien vers le submodule du repository et ses références dans le repository local.

Si vous souhaitez intégrer nativement un sous module, copiez au préalable le répertoire lib/custom_submodule et après le git rm, replacez le à l'endroit initial puis ajoutez les fichiers au repository avec git add

Named: suppression d’enregistrements obsolètes

Astuce:

Si vous utilisez des enregistrements dynamiques, il se peut que votre DNS devienne polué par des enregistrements anciens obsolètes. Une directive globale existe permettant de définir un temps maximum avant suppression des enregistrements: cleaning-interval.

Cette directive prend un entier en paramètre (nombre de minutes). 0 désactive la fonction (par défaut), 40320 est son maximum (28 jours).

cleaning-interval 10080;

Cette directive est à mettre dans les options globales.