Vagrant: création d'une box

À l'heure actuelle nous utilisons généralement une box de base officielle nommée "centos/7". Elle n'est malheureusement plus à jour (EOL juin 2024) et trop générique. Voyons comment faire ces mises à jour et la personnaliser un minimum pour répondre à certaines conventions internes, ceci afin qu'elle soit directement utilisable comme nouvelle box de base.

Modifications par rapport à une box officielle

Prérequis: vagrant + VirtualBox

Dans un répertoire dédié, on créé le Vagrantfile suivant :

 1# -*- mode: ruby -*-
 2# vi: set ft=ruby :
 3Vagrant.configure("2") do |config|
 4  # image de base publique issue du cloud à mettre à jour
 5  config.vm.box = "centos/7"
 6
 7  # à mettre à false pour la génération de l'image de base publique
 8  config.ssh.insert_key = false
 9
10  # nommage de la VM
11  config.vm.provider "virtualbox" do |v|
12    v.name = "box-building"
13  end
14end

On initialise la VM et on va dedans

1vagrant up
2vagrant ssh

Modification des mots de passe (mode interactif)

1sudo passwd root
2sudo passwd vagrant

Passage du clavier en français

De façon furtive

1loadkeys fr-mac # si clavier Mac
2loadkeys fr # si clavier PC

Ou de façon permanente

1localectl set-keymap fr
2localectl set-keymap fr-mac

Renommage utilisateur vagrant -> admin (optionnel)

non conseillé pour rester dans les règles de vagrant où le 1er user s'appelle vagrant

1usermod -l admin vagrant
2groupmod -n admin vagrant
3usermod -d /home/admin -m admin # renomme le répertoire + update /etc/passwd

Mise à jour globale des paquets

1yum update
2reboot

Compilation de python

Ansible nécessite au minimum python 3.9, compilons le à la main !

TODO: liste des commandes

Packaging

Le packaging consiste en la création d'un fichier .box qui est l'équivalent d'une ISO + metadonnées pour une utilisation avec Vagrant.

Note: la génération prend 4/5 minutes.

1$ vagrant package --base box-building --output centos-7.9.2009.box
2==> box-building: Clearing any previously set forwarded ports...
3==> box-building: Exporting VM...
4==> box-building: Compressing package to: centos-7.9.2009.box

Note: doit être le nom de la VM dans VirtualBox

A été généré un fichier centos-7.9.2009.box de 833 Mo :

844M 29 oct 11:55 centos-7.9.2009.box

1$ file centos-7.9.2009.box
2centos-7.9.2009.box: gzip compressed data, last modified: Fri Oct 28 08:26:15 2022, from Unix, original size modulo 2^32 903792128

Utilisation de la nouvelle box

Dans un nouveau répertoire, importer le fichier centos-7.9.2009.box et créér le fichier Vagrantfile suivant :

 1# -*- mode: ruby -*-
 2# vi: set ft=ruby :
 3
 4Vagrant.configure("2") do |config|
 5
 6  config.vm.box = "centos-7.9.2009.box"
 7  config.ssh.username = "admin" # ou vagrant
 8
 9  config.vm.provider "virtualbox" do |v|
10    v.name = "centos-7.9.2009"
11  end
12
13end

Erreur d'automount mais pas bloquant ...

1The following SSH command responded with a non-zero exit status.
2Vagrant assumes that this means the command failed!
3
4mkdir -p /vagrant

Note: username changé, utilisation du .box

Bilan

Avant

1$ cat /etc/redhat-release
2CentOS Linux release 7.8.2003 (Core)
3$ uname -a
4Linux localhost.localdomain 3.10.0-1127.el7.x86_64 #1 SMP Tue Mar 31 23:36:51 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

Après

1$ cat /etc/redhat-release
2CentOS Linux release 7.9.2009 (Core)
3$ uname -a
4Linux localhost.localdomain 3.10.0-1160.76.1.el7.x86_64 #1 SMP Wed Aug 10 16:21:17 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux

Ressources

Création d'une box from scratch

Dans cet exemple, on ne part plus d'une box existante, mais on la créée de toute pièce. Pour celà on procède dans VirtualBox à une installation standard à partir d'un ISO, on ajuste les premiers paramètres et on exporte une sorte de snapshot: le packaging en box vagrant.

Prérequis :

1brew install vagrant virtualbox virtualbox-extension-pack

Télécharger la dernière ISO minimal CentOS/7.9.2009 https://mirrors.ircam.fr/pub/CentOS/7.9.2009/isos/x86_64/CentOS-7-x86_64-Minimal-2207-02.iso

les Guests Additions sont ici : /Applications/VirtualBox.app/Contents/MacOS/VBoxGuestAdditions.iso

  • mot de passe root = vagrant (pas grave le warning)
  • login user vagrant + mot de passe vagrant (pas grave le warning)
  • désactiver kdump
  • localisation France/Paris
  • activer le réseau
  • Choix du disque dur virtuel d'installation
  • Attente installation (10min environs) + reboot
  • Installation des VirtualBox Guest Additions
  • Optimisation de la taille du disque :
1yum clean all
2rm -rf /var/cache/yum # redondant ?
3cat /dev/zero > zero.fill;sync;sleep 1;sync;rm -f zero.fill # optimisation du disque ??
  • Dépôt de la clé publique vagrant non sécurisée

utilisation de la clé publique insecure ? que sur user vagrant ou aussi sur root ?

666M 28 oct 19:26 centos.box

Clé ssh vagrant non sécurisée. Pour la création d'une box publique, on peut laisser une clé publique "non secure" (mentionnée dans /home/$user/.ssh/authorized_keys) Au premier vagrant up la clé sera remplacée par une nouvelle paire (authorized_keys mis à jour avec la nouvelle clé publique, clé privée déposée dans le sous rep .vagrant de la machine host).

à la création de la box, utiliser config.ssh.insert_key = false ? sinon wget --no-check-certificate https://raw.githubusercontent.com/mitchellh/vagrant/master/keys/vagrant.pub -O .ssh/authorized_keys

1ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEA6NF8iallvQVp22WDkTkyrtvp9eWW6A8YVr+kz4TjGYe7gHzIw+niNltGEFHzD8+v1I2YJ6oXevct1YeS0o9HZyN1Q9qgCgzUFtdOKLv6IedplqoPkcmF0aYet2PkEDo3MlTBckFXPITAMzF8dJSIFo9D8HfdOV0IAdx4O7PtixWKn5y2hMNG0zQPyUecp4pzC6kivAIhyfHilFR61RGL+GPXQ2MWZWFYbAGjyiYJnAmCP3NOTd0jMZEnDkbUvxhMmBYSdETk1rRgm+R4LOzFUGaHqHDLKLX+FIPKcF96hrucXzcWyLbIbEgE98OHlnVYCzRdK8jlqm8tehUc9c9WhQ== vagrant insecure public key

clic Devices / Insert Guest Additions CD image...

1yum install bzip2 kernel-headers kernel-devel gcc make perl
2mkdir /mnt/cdrom
3mount /dev/cdrom /mnt/cdrom
4/mnt/cdrom/VBoxLinuxAdditions.run --nox11
1vagrant box add --name centos-7.9.2009 centos-7.9.2009.box
2vagrant box list
1VBoxManage list vms
2VBoxManage list vms --long

Doc pour créer une box de base

https://developer.hashicorp.com/vagrant/docs/boxes/base

important pour le sudo. éditer avec visudo

1vagrant ALL=(ALL) NOPASSWD: ALL

Pour éviter les opérations manuelles avec l'interface graphique de VirtualBox, on peut utiliser packer

comments powered by Disqus