Hashicorp Vagrant
Siehe auch
- Links:
Vagrant Boxes Repository: https://app.vagrantup.com/boxes/search?provider=libvirt
Installation auf Fedora
Für libvirt/KVM als Hypervisor (Fedora 36+):
sudo dnf config-manager --add-repo https://rpm.releases.hashicorp.com/fedora/hashicorp.repo
sudo dnf -y install vagrant
vagrant plugin install vagrant-libvirt
Wer Windows-VMs mit Vagrant betreiben möchte:
vagrant plugin install winrm
vagrant plugin install winrm-elevated
vagrant plugin install winrm-fs
Hashicorp Vagrant Cheat Sheet
Best Practice: Pro Vagrant-Maschine ein Verzeichnis anlegen.
mkdir ~/vagrant
cd ~/vagrant
Beispiel: Ziel ist es, ein Arch-Linux zu deployen. Dafür ein Vagrantfile anlegen lassen:
mkdir generic-arch
cd generic-arch
vagrant init generic/arch
Optional Vagrantfile bearbeiten, um die eigenen SSH-Keys von vornherein zu deployen:
config.vm.provision "shell" do |s|
ssh_prv_key = ""
ssh_pub_key = ""
if File.file?("#{Dir.home}/.ssh/id_rsa")
ssh_prv_key = File.read("#{Dir.home}/.ssh/id_rsa")
ssh_pub_key = File.readlines("#{Dir.home}/.ssh/id_rsa.pub").first.strip
else
puts "No SSH key found. You will need to remedy this before pushing to the repository."
end
s.inline = <<-SHELL
if grep -sq "#{ssh_pub_key}" /home/vagrant/.ssh/authorized_keys; then
echo "SSH keys already provisioned."
exit 0;
fi
echo "SSH key provisioning."
mkdir -p /home/vagrant/.ssh/
touch /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} >> /home/vagrant/.ssh/authorized_keys
echo #{ssh_pub_key} > /home/vagrant/.ssh/id_rsa.pub
chmod 644 /home/vagrant/.ssh/id_rsa.pub
echo "#{ssh_prv_key}" > /home/vagrant/.ssh/id_rsa
chmod 600 /home/vagrant/.ssh/id_rsa
chown -R vagrant:vagrant /home/vagrant
exit 0
SHELL
end
Mehr CPU und Memory vergeben:
config.vm.provider "libvirt" do |v|
v.memory = 4096
v.cpus = 2
end
Fixe IP-Adresse:
config.vm.network "private_network", ip: "192.0.2.226"
Maschine hochfahren:
vagrant up
# after changing the Vagrantfile for an already-running Vagrant box:
vagrant reload
Tipp
There was an error talking to Libvirt. The error message is shown below:
Call to virDomainCreateWithFlags failed: internal error: /usr/libexec/qemu-bridge-helper --use-vnet --br=virbr0 --fd=27: failed to communicate with bridge helper: Transport endpoint is not connected
stderr=failed to get mtu of bridge `virbr0': No such device
Vorher den „Virtual Machine Manager“ von Hand starten. Damit werden alle später für Vagrant notwendigen libvirt-Komponenten gestartet.
Stati aller hochgefahrenen Boxes einsehen:
vagrant status
SSH-Konfiguration einsehen:
vagrant ssh-config
SSH-Zugriff mit Benutzer „vagrant“:
# using the vagrant tool:
vagrant ssh
# or doing the same with SSH (run `vagrant ssh-config` before to get the SSH details):
ssh -i ~/vagrant/$BOXNAME/.vagrant/machines/default/libvirt/private_key -o PasswordAuthentication=no -o PubkeyAcceptedKeyTypes=+ssh-rsa -p 22 vagrant@192.0.2.226
# or by using your ssh key deployed above (run `vagrant ssh-config` before to get the SSH details)::
ssh vagrant@192.0.2.226
RDP-Zugriff auf eine Windows-Box:
vagrant rdp
Troubleshooting
- SSH-Zugang zu alten Boxen (Debian 8, CentOS 6 etc.) scheitert mit „sign_and_send_pubkey: no mutual signature supported“
Ist kein Vagrant-Problem, sondern das moderner SSH-Clients - diese haben alte Encryption-Algorithmen abgeschaltet. In dem Fall den SSH-Befehl um
-o PubkeyAcceptedKeyTypes=+ssh-rsa
erweitern.- Can’t vagrant up or destroy „domain about to create is already taken“
virsh list –all
MACHINE=generic-rocky8_default virsh destroy $MACHINE virsh undefine $MACHINE
# are found in ~/.local/share/libvirt/images virsh vol-list default VOLUME=generic-arch_default.img virsh vol-delete –pool default $VOLUME