Description

Cette page décrit un petit tutoriel vous guidant dans l'ajout d'un service à bcfg2.

Je suppose dans ce tutoriel qu'on dispose d'un serveur bcfg2 opérationnel et que bcfg2 est correctement configuré sur les clients.

Voir ici pour plus de détails.

Introduction

Dans ce tuto on se propose de mettre en place un serveur ntp et on va mettre la configuration dans bcfg2.

1ère étape: les groupes

On va commencer par créer les groupes nécessaires. On suit le style décrit ici.

On va donc créer deux groupes qui indiquent qu'une machine doit avoir un serveur ntp, et/ou un client ntp. Ceci ce fait dans le fichier /var/lib/bcfg2/Metadata/groups.xml :

 <Group name="ntp" 
         comment="client ntp">
     <Group name="ntp-backend"/>
  </Group>

  <Group name="ntp-server"
         comment="un serveur ntp">
     <Group name="ntp"/>
  </Group>

On va maintenant indiquer quel backend on utilise pour ça, ici on utilise openntpd :

 <Group name="ntp-backend"> 
     <Group name="openntpd"/>
  </Group>

Et maintenant on va définir le groupe concret pour openntpd, qui contient le blundle qui décrira la gestion de openntpd:

 <Group name="openntpd" 
         category="ntp-backend>
     <Bundle name="openntpd"/>
  </Group>

À noter que l'on a ajouté le tag category au groupe qui permet de s'assurer qu'un client ne possède qu'un seul groupe de catégorie ntp-backend.

Maintenant on va ajouter les groupes ntp et ntp-server aux profiles:

 <Group name="toto" 
         profile="true">
     <Group name="crans"/>
     ...
     <Group name="ntp"/>
  </Group>

  <Group name="titi"
         profile="true">
     <Group name="crans"/>
     ...
     <Group name="ntp-server"/>
  </Group>

  ...

2e étape: le bundle

Il faut maintenant gérer tous les éléments relatifs à openntpd, à savoir:

  • Le paquet openntpd
  • Le service openntpd
  • Les fichiers de configurations /etc/default/ntpdate et /etc/openntpd/ntpd.conf

On va donc mettre tous ça dans un même bundle openntpd, ce qui va permettre de gérer les dépendances lors de la mise à jour de l'un des éléments.

Le bundle ressemble à ça:

<Bundle name="openntpd" version="2.0"> 
  <Package name="openntpd"/>
  <Service name="openntpd"/>
  <ConfigFile name="/etc/default/ntpdate"/>
  <ConfigFile name="/etc/openntpd/ntpd.conf"/>
</Bundle>

On le met dans /var/lib/bcfg2/Bundler/openntpd.xml.

3e étape: la configuration littérale

On va maintenant associer la configuration littérale à chacun de ces éléments.

Pour le paquet et le service on utilise le plu-gin Rules. On ajoute dans un fichier .xml dans /var/lib/bcfg2/Rules les définitions suivantes:

 <Package name="openntpd" version="3.9p1-3"/> 
  <Service name="openntpd" status="on"/>

Reste maintenant à gérer les fichiers de configuration. On va utiliser pour ça le plug-in Python.

On crée deux fichiers /etc/default/ntpdate et /etc/openntpd/ntpd.conf, qui sont en fait des scripts python.

/etc/default/ntpdate:

# -*- mode: python; coding: utf-8 -*- 

header()

@# Le serveur sur lequel se synchroniser
if has("ntp-server"):
   # Pour le serveur on utilise un ntp externe
   server = "pool.ntp.org"
else:
   # Pour les clients on utilise le serveur local
   server == "ntp.adm.crans.org"
print 'NTPSERVERS="%s"' % server

# Autres options
#NTPOPTIONS="-v"
NTPOPTIONS="-u"

/etc/openntpd/ntpd.conf:

# -*- mode: python; coding: utf-8 -*- 

include("ip")
header("fichier de configuration de openntpd")

if has("ntp-server"):
    listenon = [pubip(), admip(), "127.0.0.1"]
else:
    listenon = []

for i in listenon:
    print 'listen on %s' % i

if has("ntp-server"):
    @# synchronisation avec des serveurs externes
    print "servers pool.ntp.org"
else:
    @# synchronisation avec le serveur local
    print "server ntp.adm.crans.org"

4e étape: on test et on met en production

Cf. Bases


CatégoriePagePublique