Depuis le répertoire root exécuter la commande knife kvm vm create
cd ~ knife kvm vm create dgfip-rhel7 -u root --password master -h 127.0.0.1 --flavor el --variant rhel7 --location /opt/iso/soclelinux-2016-0.14.iso --network network:br0 --disk-size 16 --memory 1024 --disk-base-path /opt/images --custom-kickstart /tmp/ksknife.cfg --bootstrap-node-ip xx.xx.xxx.xxx --bootstrap-path /var/www/html/chef-repo/bootstrap/template.erb --root_password master
La commande knife kvm va:
Se connecter au node nouvellement installé pour l'arrêté
Dans le répertoire contenant l'image :
cd /opt/images
convertir l'image du disque raw en qcow2
qemu-img convert -f raw -O qcow2 97d20855-ae18-481b-9194-dc0686818442.img invite.qcow2
renommer l'image obtenue en box.img
mv invite.qcow2 box.img
créer un fichier metadata.json avec le contenu suivant :
{
"provider" : "libvirt",
"format" : "qcow2",
"virtual_size" : 16
}
créer un fichier Vagrantfile avec le contenu suivant :
Vagrant.configure("2") do |config|
config.vm.provider :libvirt do |libvirt|
libvirt.driver = "kvm"
libvirt.host = 'localhost'
libvirt.uri = 'qemu:///system'
end
config.vm.define "new" do |vmbox|
vmbox.vm.box = "dgfip-rhel7"
vmbox.vm.provider :libvirt do |domain|
domain.memory = 1024
domain.cpus = 1
domain.management_network_address = "192.168.122.0/24"
end
end
end
tar cvzf dgfip-rhel7-0.4.0.box ./metadata.json ./Vagrantfile ./box.img scp dgfip-rhel7-0.4.0.box user@xx.xx.xxx.xxx:/var/www/html/repo/pub/vagrant/boxes/
Penser à supprimer la VM sur la workstation avant d'en activer une copie sur le chef serveur
knife kvm vm delete dgfip-rhel7 -u root --password master -h 127.0.0.1
Penser égalemment à supprimer le node sur l'interface WEBUI du chef serveur
Dans un répertoire dédié au nouveau node
vagrant box add 'dgfip-rhel7' file://../boxes/dgfip-rhel7-0.4.0.box vagrant init
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
config.vm.box = "dgfip-rhel7"
config.vm.define "dgfip-rhel7"
config.vm.network "private_network", libvirt__network_name: "br0", auto_config: false
vagrant up
Bringing machine 'dgfip-rhel7' up with 'libvirt' provider...
==> dgfip-rhel7: Uploading base box image as volume into libvirt storage...
==> dgfip-rhel7: Creating image (snapshot of base box volume).
==> dgfip-rhel7: Creating domain with the following settings...
==> dgfip-rhel7: Creating shared folders metadata...
==> dgfip-rhel7: Starting domain.
==> dgfip-rhel7: Waiting for domain to get an IP address...
==> dgfip-rhel7: Waiting for SSH to become available...
dgfip-rhel7:
dgfip-rhel7: Vagrant insecure key detected. Vagrant will automatically replace
dgfip-rhel7: this with a newly generated keypair for better security.
dgfip-rhel7:
dgfip-rhel7: Inserting generated public key within guest...
dgfip-rhel7: Removing insecure key from the guest if it's present...
dgfip-rhel7: Key inserted! Disconnecting and reconnecting using new SSH key...
==> dgfip-rhel7: Configuring and enabling network interfaces...
dgfip-rhel7: SSH address: 192.168.121.203:22
dgfip-rhel7: SSH username: vagrant
dgfip-rhel7: SSH auth method: private key
==> dgfip-rhel7: Installing NFS client...
==> dgfip-rhel7: Exporting NFS shared folders...
==> dgfip-rhel7: Preparing to edit /etc/exports. Administrator privileges will be required...
==> dgfip-rhel7: Mounting NFS shared folders...
$ vagrant destroy dgfip-rhel7 dgfip-rhel7: Are you sure you want to destroy the 'dgfip-rhel7' VM? [y/N] y ==> dgfip-rhel7: Removing domain... $ vagrant box remove dgfip-rhel7 Removing box 'dgfip-rhel7' (v0) with provider 'libvirt'... Vagrant-libvirt plugin removed box only from you LOCAL ~/.vagrant/boxes directory From libvirt storage pool you have to delete image manually(virsh, virt-manager or by any other tool) $ virsh vol-delete dgfip-rhel7_vagrant_box_image_0.img default Volume dgfip-rhel7_vagrant_box_image_0.img détruit
config.vm.define "dgfip-rhel7" config.vm.network "private_network", libvirt__network_name: "br0"
Utilisation de l'adresse MAC définie par MacVtap lors de l'installation
config.vm.provider :libvirt do |domain|
domain.management_network_address = "192.168.122.0/24"
domain.management_network_mac = "52:54:00:6A:35:B8"
end
Utilisation de insecure_private_key afin de permettre les tests de connexion ssh avec clé privée
config.ssh.insert_key = false config.ssh.private_key_path = ["~/.vagrant.d/insecure_private_key"]
Conclusion des tests:
Activation de l'authentification par clé privée par augtool
augtool set "/files/etc/ssh/ssh_config/PubKeyAuthentication" yes
Définition d'une règle polkit pour donner la possibilité à l'utilisateur vagrant d'exécuter des actions sans fournir le mot de passe.
cat <<EOF > /etc/polkit-1/rules.d/49-nopasswd_global.rules
/* Allow members of the wheel group to execute any actions
* without password authentication, similar to "sudo NOPASSWD:"
*/
polkit.addRule(function(action, subject) {
if (subject.isInGroup("wheel")) {
return polkit.Result.YES;
}
});
EOF
usermod -aG wheel vagrant
Désactivation de la gestion par dracut des modules ifcfg (fausse piste)
%post ... echo 'omit_dracutmodules+="ifcfg"' >> /etc/dracut.conf.d/99-disable_ifcfg.conf dracut -f ... %end
Définition des règles permettant à l'utilisateur vagrant d'utiliser SUDO sans avoir à confirmer le mot de passe (vagrant ALL=(ALL) NOPASSWD: ALL) et sans devoir utiliser pour cela une connexion à un terminal (Defaults:vagrant !requiretty)
cat <<EOF > /etc/sudoers.d/vagrant vagrant ALL=(ALL) NOPASSWD: ALL Defaults:vagrant !requiretty EOF chmod 0440 /etc/sudoers.d/vagrant
! Activation de l'authentification par clé privée par sed plutôt que augtool (pour supprimer le caractère dièse, bien que dans le cas des fichiers sudoers celui-ci indique une valeur par défaut et non pas un commantaire)
sed -i 's/#PubkeyAuthentication yes/PubkeyAuthentication yes/g' /etc/ssh/sshd_config
Ecrasement du fichier de configuration ifcfg-eth0 écrit par dracut par un fichier définissant le DEVICE eth0 ( DEV=eth0) mais pas l'adresse MAC.
# vagrant: modification de l'interface administration eth0 cat > /etc/sysconfig/network-scripts/ifcfg-eth0 << EOF DEVICE="eth0" BOOTPROTO="dhcp" ONBOOT="yes" TYPE="Ethernet" EOF
Démarrage de NetworkManager (car celui-ci est utilisé par le script de configuration réseau de Vagrant
systemctl start NetworkManager.service systemctl enable NetworkManager.service
Nettoyage du répertoire tmp.
rm -rf /tmp/*
Nettoyage des derniers journaux des utilisateurs connectés.
rm -f /var/log/wtmp /var/log/btmp
Nettoyage de l'historique des commandes passées.
history -c