Il y a quelques jours, je vous proposais un tutorial pour installer un VM de dev sur votre poste Windows en utilisant multipass de Canonical. Mais voilà du coup on se retrouve avec une distribution Ubuntu.
J'ai donc revu ma copie et je vous livre un nouveau tutoriel avec cette vagrant en provisionner sous windows avec une distribution Oracle Linux 8.
Comme pour la version avec Multipass cet environnement doit être simple à mettre en œuvre et surtout rapide. On y trouve tout ce qu'il faut pour développer des rôles ansible, de tester ses containers, d'installer des VM, ....
- ansible
- kitchen avec serverpec
- docker
- kvm
- vagrant
Pour la rapidité ça demeure acceptable, car pour faire fonctionner le plugin vagrant-libvirt j'ai dû recompiler des librairies.
Installation des produits nécessaires : hyperv, cifs et vagrant
Prérequis :
- Windows 10 Entreprise, Professionnel ou Éducation
- Processeur 64 bits avec traduction d’adresse de second niveau (SLAT).
- Processeur prenant en charge les extensions de mode du moniteur de machine virtuelle (VT-c sur les processeurs Intel).
- Au minimum 4 Go de mémoire.
Activation d'hyper-v et SMB/CIFS
Dans un premier temps il faut activer hyper-v et le partage SMB/CIFS sur votre poste Windows. Dans une fenêtre Powershell ouverte en tant qu'administrateur, taper les commandes suivantes
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All
Enable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol
Installation de Vagrant
Vous pouvez télécharger la dernière version de Vagrant d'hashicorp sur la page vagrantup
Création de la première VM
Vagrant oblige de lancer ses commandes dans une fenêtre powershell avec les droits admin.
vagrant box add generic/oracle8
vagrant init generic/oracle8
Pour créer ma VM de dev je vais utiliser cette fois un shell script car le support de cloud-init dans vagrant est encore en test.
Éditer votre fichier Vagrantfile et ajouter ceci :
$script = <<-SCRIPT
echo I am provisioning...
dnf update -y
dnf install -y https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf config-manager --add-repo=https://download.docker.com/linux/centos/docker-ce.repo
dnf config-manager --enable ol8_codeready_builder
curl -sSL https://get.rvm.io | bash
source /etc/profile.d/rvm.sh
rvm reload
rvm requirements
rvm install ruby-2.7.2
rvm use 2.7.2 --default
systemctl disable firewalld.service
systemctl stop firewalld.service
dnf module install virt -y
dnf install virt-install virt-viewer libvirt qemu-kvm ruby-devel rsync gcc zlib-devel libvirt-devel curl git htop python3-pip python3-virtualenv cmake -y
systemctl start libvirtd.service
systemctl enable libvirtd.service
usermod -aG docker vagrant
usermod -aG libvirt vagrant
usermod -aG rvm vagrant
sudo pip3 install ansible==2.9.15 ansible-lint
dnf install -y https://releases.hashicorp.com/vagrant/2.2.14/vagrant_2.2.14_x86_64.rpm
dnf install docker-ce --nobest -y
systemctl start docker
systemctl enable docker
gem install test-kitchen kitchen-vagrant kitchen-ansible kitchen-docker kitchen-verifier-serverspec serverspec
cd /tmp/
dnf download --source krb5-libs
rpm2cpio krb5*.rpm| cpio -imdV
tar xf krb5*.gz
cd krb5*/src
LDFLAGS='-L/opt/vagrant/embedded/' ./configure
make
cp lib/libk5crypto.so.3 /opt/vagrant/embedded/lib64/
cd /tmp/;
dnf download --source libssh
rpm2cpio libssh*.rpm | cpio -imdV
tar xf libssh*.xz
mkdir build
cd build
cmake ../libssh-*/ -DOPENSSL_ROOT_DIR=/opt/vagrant/embedded/
make
sudo cp lib/libssh* /opt/vagrant/embedded/lib64/
SCRIPT
$script2 = <<-SCRIPT
CONFIGURE_ARGS="with-libvirt-include=/usr/include/libvirt with-libvirt-lib=/opt/vagrant/embedded/lib64/" vagrant plugin install vagrant-libvirt
echo '. /usr/local/rvm/scripts/rvm' >>/home/vagrant/.bashrc
SCRIPT
Vagrant.configure("2") do |config|
config.vm.box = "generic/oracle8"
config.vm.provider "hyperv" do |hv|
hv.enable_virtualization_extensions = true
hv.linked_clone = false
hv.cpus = "4"
hv.memory = "2048"
hv.vmname = "csl"
end
config.vm.synced_folder ".", "/vagrant", disabled: true
config.vm.define "csl" do |csl|
csl.vm.network "public_network"
csl.vm.hostname = "csl"
end
config.vm.provision "shell", inline: $script
config.vm.provision "shell", inline: $script2, privileged: false
end
Eh oui rien que ça:
Pas besoin d'activer la fonctionnalité de virtualisation imbriquée, car elle est faite avec l'option
enable_virtualization_extensions = true
Laisser bien le paramètre
hv.linked_clone
à false sinon vous ne pourrez pas packager votre box pour la distribuer.On ne peut pas fixer l'adresse IP, mais vous verrez on peut récupérer la config ssh de vagrant facilement.
On a deux scripts
un premier qui s'exécute avec le compte root
un second avec le user vagrant pour installer en local le plugin vagrant-libvirt
fixer la version de ruby
Ce fichier permet de :
Maintenant lançons le provisionnement de la VM :
vagrant up
Patience ..... Cela dure quelques minutes le temps de tout installer et configurer.
vagrant ssh
Vous devriez obtenir une invite de commande vagrant@csl. Vérifions que kvm fonctionne :
sudo systemctl status libvirtd.service
[vagrant@csl ~]$ sudo systemctl status libvirtd
● libvirtd.service - Virtualization daemon
Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2021-01-14 12:03:20 UTC; 6s ago
Docs: man:libvirtd(8)
https://libvirt.org
Main PID: 97188 (libvirtd)
Tasks: 19 (limit: 32768)
Memory: 51.5M
CGroup: /system.slice/libvirtd.service
├─76006 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
├─76007 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
└─97188 /usr/sbin/libvirtd --timeout 120
Vous devriez obtenir active (running) :
Création de VM avec un fichier vagrantfile
Toujours dans votre VM dev tapez les commandes suivantes, au moment du choix d'hyperviseur prenez bien libvirt :
vagrant box add centos/7
vagrant init centos/7
vagrant up
Au bout de quelques minutes vous devriez pouvoir vous connecter à votre VM dans la VM:
vagrant ssh
yum update
Et voilà.
Accès à votre VM depuis visual code (installé sur Windows)
On va tout simplement utiliser l'extension Remote SSH. Installer la. Pour configurer l'accès il faut juste récupérer la config ssh de vagrant:
vagrant ssh-config
Je vous laisse lire ce tuto pour utiliser cette extension.