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
- https://developer.hashicorp.com/vagrant/docs/providers/virtualbox/boxes
- https://www.cyberciti.biz/faq/howto-change-rename-user-name-id/
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 passevagrant
(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