Hashicorp Vagrant

Siehe auch

Links:

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:

Vagrantfile
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:

Vagrantfile
config.vm.provider "libvirt" do |v|
  v.memory = 4096
  v.cpus = 2
end

Fixe IP-Adresse:

Vagrantfile
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