The Foreman

Comme je commence à dépasser les 20 serveurs personnels, je me suis intéressé depuis 2 ans aux solutions d’automatisation.

J’ai utilisé avec plaisir Saltstack jusqu’à très récemment. Mais l’absence d’interface graphique dans la version communautaire aura eu raison de mon intérêt pour le produit : je me tape des lignes de commandes à longueur de journée, si je dois continuer à m’en faire à titre personnel, ça risque de me dégouter.

Ma société a investi récemment dans un Redhat Satellite, en version 6. En discutant avec l’intervenant qui est venu le mettre en place, il m’a dit que celui-ci est basé sur The Foreman (https://theforeman.org/) avec quelques plugins activés par défaut.

Je me suis donc attelé à l’installation d’un Foreman chez moi, pour gérer à la fois mes serveurs virtuels et physiques présents dans ma maison, mais aussi les quelques serveurs virtuels et physiques que je loue chez OVH.

L’installation

J’ai choisi d’avoir mon Foreman sur une centos, car je commence à vraiment m’habituer à cette distribution et à la préférer à Debian que j’utilise pourtant depuis des années.

J’ai donc déployé une VM Centos 7 (à priori The Foreman ne fonctionne pas bien sur la 8 donc je n’ai pas osé essayer) tout ce qu’il y’a de plus classique.

Ensuite, the Foreman est passé sur puppet pour l’installation, donc il faut installer Puppet.

Globalement, après un peu de trial and error, je suis arrivé à cette série de commandes pour obtenir un Foreman fonctionnel (il faut ABSOLUMENT éditer votre fichier /etc/hosts pour ajouter une ligne correspond à votre serveur sinon l’installeur vous enverra bouler) :

sudo yum -y install https://yum.puppet.com/puppet6-release-el-7.noarch.rpm
sudo yum -y install http://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
sudo yum -y install https://yum.theforeman.org/releases/2.1/el7/x86_64/foreman-release.rpm
sudo yum -y install foreman-release-scl
sudo yum -y install foreman-installer
sudo foreman-installer --enable-foreman-cli-ansible \
--enable-foreman-plugin-ansible \
--enable-foreman-proxy-plugin-ansible \
--enable-foreman-cli-remote-execution \
--enable-foreman-plugin-remote-execution \
--enable-foreman-proxy-plugin-remote-execution-ssh \
--enable-foreman-proxy-plugin-remote-execution-cockpit \
--enable-foreman-cli-openscap \
--enable-foreman-plugin-openscap \
--enable-foreman-proxy-plugin-openscap \
--puppet-dns-alt-names home.dyn.oupsman.fr

sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=67-69/udp
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --permanent --add-port=443/tcp
sudo firewall-cmd --permanent --add-port=3000/tcp
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --permanent --add-port=5910-5930/tcp
sudo firewall-cmd --permanent --add-port=5432/tcp
sudo firewall-cmd --permanent --add-port=8140/tcp
sudo firewall-cmd --permanent --add-port=8443/tcp
sudo firewall-cmd --reload

Au bout de quelques minutes, vous obtenez un Foreman fonctionnel. Vous noterez l’utilisation du paramètre –puppet-dns-alt-names pour préciser que Puppet doit répondre sur deux noms DNS.

J’ai aussi activé des plugins pour réaliser des tâches à distance via Ansible et des audits de sécurité avec Openscap (ces plugins sont actifs par défaut sur Satellite 6, c’est vraiment très facile à utiliser)

Une fois le Foreman installé, vous arrivez sur une interface un peu vide, vous n’avez qu’un seul serveur actif dessus, le foreman lui même.

Mais on va corriger ça très vite

Installer l’agent Puppet 6 sur votre serveur.

Sur Debian 10 :

# get https://apt.puppetlabs.com/puppet6-release-buster.deb
# dpkg -i puppet6-release-buster.deb
# apt update
# apt install -y puppet-agent

Déconnectez vous et reconnectez vous en tant que root

# puppet agent -td --server foreman.example.com
# puppet config set server foreman.example.com
# puppet agent

Sur Redhat/Centos 8, c’est à peu près identique, mis à part que vous passez les commandes suivantes pour installer l’agent Puppet :

# yum install -y https://yum.puppetlabs.com/puppet6/puppet6-release-el-8.noarch.rpm
# yum install -y puppet-agent

La dernière action (non obligatoire sauf si vous voulez exécuter des playbooks ansible à distance) est de recopier la clé publique de l’utilisateur foreman-proxy dans le fichier authorized_keys de l’utilisateur root de votre serveur.

Je ne vous ferai pas l’insulte de vous donner la commande pour le faire, mais si vous en avez besoin, n’hésitez pas à laisser des commentaires.

Intégration Ansible

Comme j’ai activé Ansible sur The Foreman (j’ai entendu dire que dans les futures versions de RH Satellite, puppet ne sera pas utilisé), j’ai donc commencé à jouer avec Ansible.

Pour ajouter des roles Ansible, il faut les placer dans le répertoire /etc/ansible/roles du serveur Foreman.

On peut les récupérer depuis Galaxy avec les commandes suivantes :

# ansible-galaxy install geerlingguy.ntp -p /etc/ansible/roles/

On peut ensuite affecter les rôles aux serveurs, ou bien aux groupes de serveurs :

Une fois qu’on a affecté ces rôles, on peut les exécuter. Depuis l’écran d’un hôte, on clique sur « Run Ansible Roles » :

Et là, les rôles affectés au serveur démarrent :

On peut ensuite planifier l’exécution de ces rôles en automatique. J’ai choisi ainsi de planifier l’ensemble des rôles à 1h00 du matin toutes les nuits. Ainsi, je suis certain que mes serveurs sont à jour, et supervisés via Zabbix.

The Foreman permet de faire bien plus que ce que j’en fait, en particulier en permettant le déploiement facilité de serveurs virtuels, et autres choses encore.

Mais l’utilisation que je vais en faire va se limiter principalement à la gestion des mises à jour et de l’état de mes serveurs. Je sais que c’est possible (et facile) avec Fedora/Centos/Redhat mais l’utilisation de Katello et Pulp sur Debian n’est pas aisé.

Je posterai des billets en fonction de mes découvertes, bien sûr.

 

OS X : Restaurer depuis la ligne de commande

Ok, Time Machine est un outil génial, qui existe depuis Leopard (2007).

Cet outil permet de gérer ses sauvegardes sur son Mac. Ca parait stupide dit comme cela, mais au final c’est un outil comme j’aime : on le paramètre et on l’oublie.

Quand j’ai acheté mon MacBook Pro, j’ai acheté en même temps une borne TimeCapsule de 1To. Donc mon backup n’est pas hébergé sur un disque dur externe branché sur mon Mac, ce qui ajoute un peu plus de sécurité encore.

Hier soir, j’ai fait une connerie, j’ai supprimé un répertoire dans ma copie de travail du site internet d’une amie. Comme je développe en PHP poru ce site, j’ai installé un subversion sur mon serveur personnel pour gérer les multiples versions des fichiers, et pouvoir revenir en arrière.

 

Or, je suis tombé sur un OS en voulant commiter la dernière version du site. J’ai suivi quelques tutoriels sur StackOverflow, mais du coup, j’ai foutu en l’air la copie de travail sur mon Mac : impossible de la synchroniser.

 

Pour le coup, j’ai voulu dégainer Time Machine pour restaurer le répertoire supprimé, mais las, c’est un répertoire commençant par un . et donc, il n’apparait pas dans le finder.

 

C’est là que la commande tmutil intervient. J’avais déjà utilisé cette commande pour désactiver les sauvegardes locales (une fonctionnalité apparue sur 10.8 et qui permet de faire des sauvegardes même si on est pas sur son réseau local). Mais grâce à cette fonction, on peut contrôler complètement TM, en particulier restaurer des fichiers.

Accrochez vous, la commande est étonnante de simplicité :

pc55:~ oupsman$ tmutil restore -v /Volumes/Copies\ de\ sauvegarde\ Time Machine/Backups.backupdb/MacBook\ Pro\ de\ Benoit\ SERRA/2014-05-26-193829/Macintosh\ HD/Users/oupsman/wordpress /Users/oupsman/Documents/

It’s that easy

Par fainéantise et pour tester la validité de mon procédé, j’ai restauré la totalité du répertoire de travail, alors que j’aurais pu restaurer uniquement le répertoire supprimé.

Dans ce cas, j’aurais juste tapé cette commande :

 

pc55:~ oupsman$ tmutil restore -v /Volumes/Copies\ de\ sauvegarde\ Time Machine/Backups.backupdb/MacBook\ Pro\ de\ Benoit\ SERRA/2014-05-26-193829/Macintosh\ HD/Users/oupsman/wordpress/.svn /Users/oupsman/Documents/

Vous notez que je ne restaure pas à l’emplacement d’origine des données. C’est une vieille habitude, et une bonne pratique, afin de s’assurer qu’on ne casse rien en restaurant.

 

BAN, PAN, WAN LAN et autres TLA

TLA = Three letters acronyms. Je vais essayer de démystifier ici les différents acronymes que l’on peut recontrer dans le monde du réseau.

Attention, article vulgaire. Enfin de vulgarisation, mais c’est presque pareil.

On voit beaucoup d’acronymes à trois lettres dans le domaine des réseaux. Après la lecture de cet article, les WAN, MAN et BAN n’auront plus de secrets pour vous.

On distingue donc 5 acronymes dans le réseau. Je passerais que les FLA (four letters acronyms) qui sont souvent des déclinaisons d’un TLA.

WAN

World Area Network. Ce terme barbare désigne un réseau dont l’étendue est le monde. Ainsi, votre accès Internet est un réseau WAN. Et c’est pour cela que vous branchiez votre box internet (ou votre modem) sur le port WAN de votre routeur.

MAN

Metropolitain Area Network. Ici, cela signifie que le réseau est à l’échelle de la ville. Une société qui a plusieurs sites répartis sur la même ville va souscrire une offre MAN chez un opérateur. Cela permet à plusieurs LAN (cf plus bas) de communiquer entre eux. Ainsi, un lien MAN est communément plus performant qu’un lien WAN.

LAN

Local Area Network. Réseau Local en français. Cela désigne un réseau d’ordinateurs répartis dans une petite zone géographique. On retient en règle général un réseau d’ordinateurs compris dans un rayon de 100 à 200 mètres. Mais on peut ponctuellement étendre un LAN via des liens fibre optiques (ou autre) pour atteindre jusqu’à un kilomètre environ

VLAN

Virtual Local Area Network. Cela désigne un réseau local virtuel. Cela permet d’isoler des périphériques réseaux (serveurs, postes clients, imprimantes et j’en passe) les uns des autres. Tous ces équipements sont raccordés physiquement sur les mêmes équipements actifs, mais ceux-ci sont capables de les séparer de manière logique.

 WLAN

Wireless Local Area Network. Un réseau local qui passe par des ondes radios. Du WiFi quoi.

PAN

Personnal Area Network. Cela désigne des réseaux personnels, c’est surtout utilisé pour du Bluetooth pour relier entre eux des équipements personnels. La portée est de 10 mètres en règle général, on est ainsi vraiment à l’échelle d’une pièce.

BAN

Body Area Network. Cela désigne des réseaux à l’échelle du corps. Exemple : le NFC, qui permet le paiement sans contact. Ou le RFID, pour par exemple votre badge pour accéder dans le bâtiment ou vous travaillez. Ou encore, la puce tatouage de votre animal de compagnie.

 

Evolution vs Révolution …

Et voilà, c’est fait.

La grand messe est dite.

Il faut arrêter de croire que d’un modèle à l’autre, il y’aura une révolution. Ce n’est pas comme ça que peut évoluer un marché aussi porteur que la téléphonie mobile.

On prend l’exemple d’Apple : la gamme a réellement commencé à être intéressante avec le 3Gs (enfin, disons que c’est à la sortie du 3Gs que j’ai commencé à m’y intéresser de près)

L’évolution entre le 3Gs et le 4 a été légère. Celle entre le 4 et le 4s a été tout aussi légère. De même que l’évolution entre le 4s et le 5, ou entre le 5 et le 5s (par charité, je n’évoquerais pas le cas du 5c, qui est selon moi un accident dans la gamme).

Mais regardez l’évolution entre le 3GS et le 5s (4 ans d’écart) : elle est énorme, on peut presque parler de révolution.

Apple se garanti donc de ne pas (trop) se mettre à dos les clients ayant renouvelés ou acquis leur iPhone dans les 2 dernières années.

De nombreux possesseurs de 3Gs vont renouveler, quelques possesseurs de 4 aussi, et peu des possesseurs du 4S ou du 5 sont sauter le pas. Et c’est NORMAL.

Imaginez, vous achetez à prix d’or un smartphone et 1 an après, le modèle qui sort l’explose complètement. Vous auriez la haine non ? Et aucune société ne peut pas le permettre.

On peut broder autant que l’on veut sur le manque d’innovation d’Apple, qui ne parvient plus à surprendre à chaque annonce, et bla et bla et bla.

Sauf que …

Les dernières annonces qui ont réellement surpris étaient l’iPad 1 et l’iPhone 1. C’est à dire, des produits différents, innovants, et pour lesquels les rumeurs étaient muettes, ou presque.

Car oui, si on n’est plus surpris des annonces Apple, c’est peut être tout simplement parce que les rumeurs dévoilent quasiment toutes les caractéristiques techniques des iDevices, avant même qu’ils ne sortent. N’est-ce pas dommage ?

Personnellement, je ne m’intéresse pas aux rumeurs, je préfère les faits concrets. Que cela soit pour les appareils photos ou pour le matériel « informatique ». Cela permet d’être agréablement surpris par les annonces, sachant que je n’attends rien de particulier coté matériel : je veux un truc qui marche.

Parce que oui, le principal reproche que je fais aux différentes marques, c’est qu’elles insistent beaucoup trop sur le hardware, ou sur telle ou telle fonctionnalité logicielle. Mais elles oublient un point important, c’est que la technologie doit s’effacer derrière l’utilisabilité de leur produit.

En fait, la technologie en tant que telle n’apporte rien. Elle doit porter des usages supplémentaires, ou améliorer l’usage existant. Changer de technologie pour la technologie n’est pas une finalité, et surtout ne doit pas l’être.

Savoir que l’iPhone 5s dispose d’une batterie de 1570 mAh ou d’une batterie de 1200 mAh, je m’en contre cogne. Par contre, savoir qu’il tient 10h en conversation, 4h en navigation GPS et 250h en veille (alors qu’un smartphone n’est JAMAIS en veille), ça cela m’intéresse.

Savoir qu’il dispose d’un processeur 64bits, je m’en fiche. Savoir par contre qu’il fait des photos nettes dans 99.999% [1] des cas, parce que le processeur dispose de suffisamment de puissance de calcul pour analyser finement les photos prises et corriger la netteté, ça, ça m’importe.

Savoir qu’il dispose d’un coprocesseur M7 pour gérer les capteurs sensoriels, ça m’en secoue une sans faire bouger l’autre. Par contre, comprendre que grâce à cette puce, iOS réveillera moins souvent le A7, très consommateur en énergie, est important. Que grâce à cette puce, le 5s analyse les conditions pour s’y adapter, et arrêter de scanner les réseaux environnants quand on est en voiture, et ainsi éviter de consommer de la batterie (pour la puce Wifi) et du temps CPU pour les calculs (et donc de la batterie, puisque l’activité CPU consomme de la batterie), ça c’est très bien. Que le smartphone analyse les mouvements et détecte que si il est immobile, il n’a pas besoin de réveiller les applis aussi souvent pour les accès réseaux, tout cela concourt à une meilleure autonomie et augmente l’utilisabilité du terminal.

Passons maintenant au logiciel.

iOS 7 semble prendre un chemin plus intéressant que les autres systèmes. La simplification et l’allègement de l’interface sont à l’ordre du jour. iOS 7 marque enfin la fin du skeumorphisme, ce qui est loin d’être un mal. La nouvelle interface de l’application Paypal m’a ainsi fait très plaisir à voir. On abandonne le splash screen imitation cuir bleu au lancement, pour un splash screen plus sobre. L’ensemble de l’application est aussi plus sobre à l’oeil.

Les premières captures d’écran d’iOS 7 montrent un système plus sobre à l’oeil, moins bling bling. Le multitâche semble enfin être géré correctement, même si le système limite toujours le nombre de tâches qui tournent en arrière plan. Ceci concourant à une meilleure autonomie.

Ce qui me semble être la bonne approche, au contraire des autres constructeurs, qui vantent les capacités de leur batterie, le nombre de coeurs de leur processeur ou la capacité RAM de leur téléphone. Mais oublient fort obligeamment de parler des utilisations possible pour ce concours de bitecette débauche de puissance.

Et c’est dommage, car il faudrait insister sur ce point.

A mon avis.

Mais il n’engage que moi.

[1] chiffre fictif et je me contrefous du chiffre réel : je n’ai qu’un usage point and shoot de mon iPhone. Quand je veux faire une photo parfaitement nette et piquée, je prend mon 5D Mark 2 avec mon flash et mon 24-105 L…