Installation de razor (ainsi que puppet, postgresql, tftp et dhcp)
Il y a quelques années, j'avais mis en place un serveur d'installation Linux. C'était basé sur le classique dhcp, tftp et kickstart. Un de mes collègues m'a parlé dernièrement d'un projet relativement intéressant : razor. C'est un projet qui est toujours en cours de développement mais est tout à fait utilisable.
Son principe est assez simple : il se base sur des briques classiques pour gérer la partie boot réseau (DHCP + TFTP + kickstart) et utilise un serveur JBoss couplé à postgresql pour la partie gestion de la configuration.
Pour mémoire, l'installation se fera sur une CentOS 6.5 mais devrait s'adapter très facilement sur une autre distribution.
Mais trêve de bavardage, passons à la mise en oeuvre.
yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
L'installation de postgresql à proprement parlé se fait ensuite simplement avec yum :
yum install postgresql93-server
De là, il nous faut initialiser le contenu de la base avec la commande suivante :
/etc/init.d/postgresql93 initdb
Ceci fait, nous pouvons démarrer la base :
/etc/init.d/postgresql93 start
Enfin, nous allons créer notre utilisateur ainsi que notre schéma :
psql
create user razor;
create database razor_prd owner razor;
\\password razor
Modifier ensuite le fichier /var/lib/pgsql/9.3/data/pg_hba.conf afin de faire apparaître la ligne suivante (vers la fin du fichier) :
local all all 127.0.0.1/32 md5
Un arrêt/relance de postgresql plus tard :
/etc/init.d/postgresql restart
Nous voici prêt pour la suite.
puppet module install puppetlabs-razor
Vous devriez voir le résultat suivant si tout se passe bien :
Notice: Preparing to install into /etc/puppet/modules ...
Notice: Downloading from https://forge.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/etc/puppet/modules
└─┬ puppetlabs-razor (v0.11.0)
├─┬ puppetlabs-java (v1.0.1)
│ └── puppetlabs-stdlib (v4.1.0)
└─┬ puppetlabs-tftp (v0.2.1)
└── puppetlabs-xinetd (v1.2.0)
Son principe est assez simple : il se base sur des briques classiques pour gérer la partie boot réseau (DHCP + TFTP + kickstart) et utilise un serveur JBoss couplé à postgresql pour la partie gestion de la configuration.
Pour mémoire, l'installation se fera sur une CentOS 6.5 mais devrait s'adapter très facilement sur une autre distribution.
Mais trêve de bavardage, passons à la mise en oeuvre.
Installation et configuration de postgres
Pour faire fonctionner razor, nous allons avoir besoin d'une version très récente de posgresql (la 9.3). Le repository pour RHEL/CentOS contenant cette version de postgres s'installe avec la commande suivante :yum install http://yum.postgresql.org/9.3/redhat/rhel-6-x86_64/pgdg-centos93-9.3-1.noarch.rpm
L'installation de postgresql à proprement parlé se fait ensuite simplement avec yum :
yum install postgresql93-server
De là, il nous faut initialiser le contenu de la base avec la commande suivante :
/etc/init.d/postgresql93 initdb
Ceci fait, nous pouvons démarrer la base :
/etc/init.d/postgresql93 start
Enfin, nous allons créer notre utilisateur ainsi que notre schéma :
psql
create user razor;
create database razor_prd owner razor;
\\password razor
Modifier ensuite le fichier /var/lib/pgsql/9.3/data/pg_hba.conf afin de faire apparaître la ligne suivante (vers la fin du fichier) :
local all all 127.0.0.1/32 md5
Un arrêt/relance de postgresql plus tard :
/etc/init.d/postgresql restart
Nous voici prêt pour la suite.
Installation de puppet
Par la suite, je m'appuierai énormément sur puppet pour mettre en oeuvre le produit. Je vous invite donc à l'installer avec la série de commandes suivante :
yum install http://yum.puppetlabs.com/puppetlabs-release-el-6.noarch.rpm
yum install puppet
Installation de razor
Le plus simple et de se servir de puppet pour faire le gros du travail. Pour se faire, lançons l'installation du module razor :puppet module install puppetlabs-razor
Vous devriez voir le résultat suivant si tout se passe bien :
Notice: Preparing to install into /etc/puppet/modules ...
Notice: Downloading from https://forge.puppetlabs.com ...
Notice: Installing -- do not interrupt ...
/etc/puppet/modules
└─┬ puppetlabs-razor (v0.11.0)
├─┬ puppetlabs-java (v1.0.1)
│ └── puppetlabs-stdlib (v4.1.0)
└─┬ puppetlabs-tftp (v0.2.1)
└── puppetlabs-xinetd (v1.2.0)
Passons maintenant à l'installation de razor :
export FACTER_server=ADDRESSE_IP_RAZOR
puppet apply -e "include razor"
Au bout d'un petit moment, vous devriez avoir un process Java JBoss pour héberger l'application razor ainsi qu'un serveur tftpboot fonctionnel (ou presque).
Rendez-vous maintenant dans le répertoire /opt/razor afin de recopier le fichier config.yam.sample en config.yaml :
cd /opt/razor
cp config.yaml.sample config.yaml
Adapter ensuite le contenu du fichier config.yaml à votre plateforme et lancer la commande suivante :
razor-admin -e production migrate-database
De là, il ne nous reste plus qu'à installer une version valide du client razor avec la commande suivante :
puppet resource package razor-client provider=gem ensure=latest
Si vous avez un parefeu sur votre machine, il vous faudra ouvrir le port 8080.
Configuration du tftp
Rien de particulier à signaler si ce n'est de bien faire attention d'ouvrir le port udp 69 sur votre parefeu.
Récupération du microkernel
Nous allons déposer le micro kernel dans un sous répertoire de razor (/var/lib/razor/repo-store). Ci-dessous les commandes à lancer pour le faire :
wget http://links.puppetlabs.com/razor-microkernel-003.tar
tar xfv razor-microkernel-003.tar -C /var/lib/razor/repo-store
Configuration du serveur DHCP
Il existe un fichier d'exemple dans le module puppet que vous pouvez récupérer avec la commande suivante :
cp /etc/puppet/modules/razor/examples/isc-dhcpd-example.conf /etc/dhcp/dhcpd.conf
Reste ensuite à adapter le fichier /etc/dhcp/dhcpd.conf et démarrer notre serveur dhcp en s'assurant qu'il soit démarrer au lancement de la machine :
puppet resource service dhcpd ensure=running enable=true
Nous allons pouvoir commencer quelques tests ...
Installation d'une CentOS 6.5
Création d'un broker par défaut
Avec razor, il est possible de faire tout un tas de chose en post installation. Dans notre cas, on va se contenter quelque chose de simple avant d'aller plus loin :
razor create-broker --name=noop --broker-type=noop
Création d'un repository
Nous allons récupérer un repository CentOS. Cette opération se fait avec la commande razor create-repo :
razor create-repo --name centos-6.5 --iso-url=http://.../CentOS-6.5-x86_64-minimal.iso
Nous pouvons ensuite vérifier la présence de notre repository avec la commande razor repos :
# razor repos
From http://192.168.122.3:8080/api/collections/repos:
id: "http://...:8080/api/collections/repos/centos-6.5"
name: "centos-6.5"
spec: "/razor/v1/collections/repos/member"
Ainsi que le détail du repos en ajoutant son nom :
# razor repos centos-6.5
From http://192.168.122.3:8080/api/collections/repos/centos-6.5:
id: "http://...:8080/api/collections/repos/centos-6.5"
name: "centos-6.5"
spec: "/razor/v1/collections/repos/member"
iso_url: "http://.../CentOS-6.5-x86_64-minimal.iso"
Création d'un tag
Nous allons procéder à la création d'un tag testant si la machine est virtuelle ou non. Pour se faire, alimenter le fichier virtual.json avec le contenu suivant :
# cat virtual.json
{
"name": "virtual",
"rule": ["=", ["fact", "is_virtual"], "true"]
}
Donnons ça à manger à razor avec la commande razor create-tag :
# razor create-tag --json virtual.json
From http://192.168.122.3:8080/api:
id: "http://localhost:8080/api/collections/tags/virtual"
name: "virtual"
spec: "/razor/v1/collections/tags/member"
Création d'une policy
Alimentons maintenant le fichier centos-6.5.json avec le contenu suivant :
# cat centos-6.5.json
{
"name": "centos-6.5",
"repo": { "name": "centos-6.5" },
"task": { "name": "centos" },
"broker": { "name": "noop" },
"enabled": true,
"hostname": "host${id}.local",
"root_password": "ChangezMoi",
"max_count": "100",
"rule_number": "100",
"tags": [{ "name": "virtual"}]
}
Le contenu du fichier va donner un minimum d'information pour l'installation à savoir :
- Le nom de la police (centos-6.5) ;
- Le nom du repository (idem) ;
- Le type de tâche d'installation (ici une CentOS). Pour connaître la liste complète, on peut utiliser la commande razor tasks ;
- Le type de broker : Il s'agit d'une espèce de post install. Pour l'instant, l'installation s'arrête là ;
- Enabled : pour savoir si la police est active ou non ;
- Un template pour le nom de la machine ;
- Le mot de passe root ;
- Le nombre max de création et son numéro ;
- Enfin, les tags sur lesquels cette police s'appliquera (ici virtual).
Donnons ça à manger à notre ami razor avec la commande razor create-policy :
razor create-policy --json centos-6.5.json
Dès que nous démarrerons une machine virtuelle sur notre réseau, cette dernière commencera son installation. Si vous aviez une machine en attente, cette dernière redémarrera et commencera son installation.
Le mot de la fin
Vous l'avez vu, il s'agit vraiment d'une aide pour mettre en oeuvre razor le plus rapidement possible sans forcément chercher à personnaliser les choses.
J'essaierai dans un second temps de revenir avec un nouvel article pour vous présenter le mécanisme permettant de personnaliser vos installations.
A noter que le produit est en pleine refonte et que certaines parties de ce document vont sûrement être amené à évoluer ou devenir un peu obsolète. Je vous laisse ci-dessous une bibliographie m'ayant permis de mettre en oeuvre le produit.
Bon courage et bon déploiement !
Bibliographie
http://technodrone.blogspot.com/2013/11/installing-razor-yes-new-version.html
http://technodrone.blogspot.com/2013/11/installing-razor-client-and-creating.html