Pour rappel, Puppet est un outil, ultra professionnel, d’aide à la configuration automatique d’un serveur et à son suivi pendant toute sa durée de vie.
Voici ce mémo pour installer un serveur Puppet et Foreman.
Foreman permet est entre autre une interface graphique pour visualiser les rapports d’exécution Puppet. Il permet aussi de classifier les serveurs en utilisant des classes Puppet. Il permet d’autres choses mais j je n’utilise que le minimum.
1. Installation de la base du système
Je ne vais pas décrire cette partie. Il faut installer Debian 11 sur le serveur avec le minimum de service, simplement un serveur SSH, rien d’autre.
2. Configuration hosts et locales
2.1 Fichier /etc/hosts
Configurer le fichier /etc/hosts pour que l’adresse IP du serveur corresponde au nom complet. Ne pas mettre 127.0.0.1 mais l’IP réelle !
xxx.xxx.xxx.xxx puppet.example.com
La commande suivante doit afficher l’IP externe du serveur :
ping $(hostname -f)
2.2 Locales
Ajouter cette ligne dans /etc/locale.gen :
en_US.UTF-8 UTF-8
Puis lancer :
locale-gen
3. APT
Voici le Mémo officiel à garder de côté si besoin : https://theforeman.org/manuals/3.6/index.html#2.1Installation
3.1 Puppet 7
Installons Puppet 7 :
apt-get -y install ca-certificates
cd /tmp && wget https://apt.puppet.com/puppet7-release-bullseye.deb
apt-get install /tmp/puppet7-release-bullseye.deb
apt update
apt-get install puppetdb puppetdb-termini
3.2 Foreman
Installons Foreman :
wget https://deb.theforeman.org/foreman.asc -O /etc/apt/trusted.gpg.d/foreman.asc
echo "deb http://deb.theforeman.org/ bullseye 3.6" > /etc/apt/sources.list.d/foreman.list
echo "deb http://deb.theforeman.org/ plugins 3.6" >> /etc/apt/sources.list.d/foreman.list
apt-get update && apt-get -y install foreman-installer
4. INSTALL (puppetmaster + foreman)
L’installation se fait par l’outil foreman-installer qui enregistra le profil d’installation dans /etc/foreman-installer/scenarios.d/foreman-answers.yaml.
Remplacer les valeurs par les bonnes, adresse e-mail, nom du serveur, passerelle e-mail, quantité de mémoire java,…
foreman-installer --enable-foreman --enable-foreman-cli --enable-foreman-cli-puppet --enable-foreman-cli-remote-execution --enable-foreman-cli-ssh --enable-foreman-cli-tasks --enable-foreman-proxy --enable-puppet --enable-foreman-plugin-default-hostgroup --enable-foreman-plugin-puppet --enable-foreman-plugin-puppetdb --enable-foreman-plugin-remote-execution --enable-foreman-plugin-tasks --enable-foreman-proxy-plugin-remote-execution-script --foreman-initial-admin-email=xxx@example.com --foreman-initial-admin-username=admin --foreman-telemetry-prometheus-enabled=true --puppet-environment=production --puppet-server-jvm-max-heap-size=1536M --puppet-server-jvm-min-heap-size=1536M --puppet-server-max-active-instances=2 --puppet-server-reports "foreman,puppetdb" --puppet-server-storeconfigs=true --foreman-plugin-puppetdb-address=https://puppet.example.com:8081/pdb/cmd/v1 --puppet-autosign-content='*.example.com' --foreman-email-delivery-method=smtp --foreman-email-smtp-address=mail.example.com --foreman-email-smtp-domain=puppet.example.com --foreman-proxy-plugin-monitoring-enabled=false
Cette erreur pourrait apparaître :
Failed to open TCP connection to puppet.example.com:443
Dans ce cas, relancer apache :
systemctl restart apache2
5. PuppetDB
5.1 Configurer une base de données dans POTSGRESQL pour PuppetDB
Cette partie n’est pas faite par foreman. Il faut donc créer une base de données pour PuppetDB.
Générer un mot de passe pour puppetdb et l’utiliser ci-dessous :
sudo -u postgres sh
createuser -DRSP puppetdb
createdb -E UTF8 -O postgres puppetdb
psql puppetdb -c 'revoke create on schema public from public'
psql puppetdb -c 'grant create on schema public to puppetdb'
psql puppetdb -c 'create extension pg_trgm'
5.2 Configurer /etc/puppetlabs/puppetdb/conf.d/database.ini
Voici un exemple de fichier de configuration pour la connexion de puppetdb à sa base de données, mettre le bon mot de passe :
[database]
# Db connection
subname = //localhost:5432/puppetdb
username = puppetdb
password = xxxxxxxxxxxxxx
# How often (in minutes) to compact the database
gc-interval = 60
classname = org.postgresql.Driver
subprotocol = postgresql
syntax_pgs = true
node-ttl = 7d
node-purge-ttl = 14d
report-ttl = 14d
log-slow-statements = 10
conn-max-age = 60
conn-keep-alive = 45
conn-lifetime = 0
5.3 Activer la configuration SSL de PuppetDB
puppetdb ssl-setup
5.3 Relancer PuppetDB
systemctl restart puppetdb
6. Puppet Server
Créer un fichier /etc/puppetlabs/puppet/puppetdb.conf :
[main]
server_urls = https://puppet.example.com:8081
Relancer PuppetServer :
systemctl restart puppetserver
7. Vérification de fonctionnement depuis le serveur Puppet
puppet agent -t
8. Réglage SMTP SSL
- Aller sur l’interface foreman : https://puppet.example.com/settings
- Aller dans le menu Admin>Settings, Onglet E-mail et changer le paramètre “Mode de vérification SMTP OpenSSL” à “none“
L’installation est terminée.