====== Criando box Ubuntu 22.04 - Libvirt ======
===== Criando Vagrant box do Ubuntu 22.04 LTS para KVM - Libvirt =====
FIXME Durante a instalação foi criado o usuário **vagrant** com a senha **vagrant**.
FIXME Instalação miníma. Apenas o SSH foi marcado para ser instalado.
===== Acessando a VM =====
$ virsh list
Id Name State
--------------------------
5 ubuntu22 running
$ virsh domifaddr ubuntu22
Name MAC address Protocol Address
-------------------------------------------------------------------------------
vnet4 52:54:00:ba:53:92 ipv4 192.168.122.231/24
$ ssh vagrant@192.168.122.231
The authenticity of host '192.168.122.231 (192.168.122.231)' can't be established.
ED25519 key fingerprint is SHA256:mppHft83QEP+bKkdAVrNfGX5GnOEwzaK07U3bz+EZss.
This key is not known by any other names
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '192.168.122.231' (ED25519) to the list of known hosts.
vagrant@192.168.122.231's password:
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
The programs included with the Ubuntu system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.
Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
applicable law.
To run a command as administrator (user "root"), use "sudo ".
See "man sudo_root" for details.
vagrant@ubuntu:~$
===== Instalação de pacotes =====
Instalando o agent qemu.
$ sudo apt update && sudo apt install -y qemu-guest-agent
===== Alterando a interface de rede =====
cat <
$ sudo sed -i 's/GRUB_CMDLINE_LINUX="\(.*\)"/GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0 \1"/g' /etc/default/grub
$ sudo update-grub
Sourcing file `/etc/default/grub'
Sourcing file `/etc/default/grub.d/init-select.cfg'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.15.0-60-generic
Found initrd image: /boot/initrd.img-5.15.0-60-generic
Warning: os-prober will not be executed to detect other bootable partitions.
Systems on them will not be added to the GRUB boot configuration.
Check GRUB_DISABLE_OS_PROBER documentation entry.
done
===== Configuração do sudo =====
$ echo 'vagrant ALL=(ALL) NOPASSWD:ALL' | sudo tee /etc/sudoers.d/vagrant
vagrant ALL=(ALL) NOPASSWD:ALL
$ sudo chmod 440 /etc/sudoers.d/vagrant
===== Removendo arquivo temporários, cache e logs =====
$ sudo apt-get -y autoremove
$ sudo apt-get -y clean
$ sudo rm -rf /usr/share/doc/*
$ sudo find /var/cache -type f -exec rm -rf {} \;
$ sudo find /var/log -type f -exec truncate --size=0 {} \;
$ sudo truncate -s 0 /var/lib/dbus/machine-id
$ sudo rm -rf /tmp/* /var/tmp/*
$ sudo rm -f /var/lib/systemd/random-seed
$ exit
===== Chave SSH =====
$ curl -O https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant
$ curl -O https://raw.githubusercontent.com/hashicorp/vagrant/master/keys/vagrant.pub
$ ssh-copy-id -i vagrant.pub vagrant@192.168.122.231
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "vagrant.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
vagrant@192.168.122.231's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh 'vagrant@192.168.122.231'"
and check to make sure that only the key(s) you wanted were added.
$ chmod 0600 vagrant
$ ssh -i vagrant vagrant@192.168.122.231
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Wed Mar 1 19:17:19 2023 from 192.168.122.1
$ export HISTSIZE=0 && sudo poweroff
Connection to 192.168.122.231 closed by remote host.
Connection to 192.168.122.231 closed.
===== Criando a box =====
$ curl -O https://raw.githubusercontent.com/vagrant-libvirt/vagrant-libvirt/master/tools/create_box.sh
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3263 100 3263 0 0 5869 0 --:--:-- --:--:-- --:--:-- 5879
$ sudo bash create_box.sh /home/gean/kvm/images/ubuntu22.qcow2
{32}
==> Creating box, tarring and gzipping
./metadata.json
./Vagrantfile
./box.img
Total bytes written: 4390133760 (4,1GiB, 36MiB/s)
==> ubuntu22.box created
==> You can now add the box:
==> 'vagrant box add ubuntu22.box --name ubuntu22'
===== Testando a box =====
$ vagrant box add ubuntu22.box --name ubuntu22
==> box: Box file was not detected as metadata. Adding it directly...
==> box: Adding box 'ubuntu22' (v0) for provider:
box: Unpacking necessary files from: file:///home/gean/Downloads/vagrant/box/ubuntu22.box
==> box: Successfully added box 'ubuntu22' (v0) for 'libvirt'!
$ vim Vagrantfile
# -*- mode: ruby -*-
# vi: set ft=ruby :
ENV['VAGRANT_DEFAULT_PROVIDER'] = 'libvirt'
Vagrant.configure("2") do |config|
config.vm.define :ubuntu22 do |ubuntu22|
ubuntu22.vm.box = "ubuntu22"
ubuntu22.vm.hostname = "vm-01"
ubuntu22.vm.provider :libvirt do |lv|
lv.memory = 2048
lv.cpus = 2
end
end
config.vm.synced_folder ".", "/vagrant", disabled: true
end
$ vagrant up
Bringing machine 'ubuntu22' up with 'libvirt' provider...
==> ubuntu22: No version detected for ubuntu22, using timestamp to watch for modifications. Consider
==> ubuntu22: generating a local metadata for the box with a version to allow better handling.
==> ubuntu22: See https://www.vagrantup.com/docs/boxes/format#box-metadata for further details.
==> ubuntu22: Uploading base box image as volume into Libvirt storage...
==> ubuntu22: Creating image (snapshot of base box volume).
==> ubuntu22: Creating domain with the following settings...
==> ubuntu22: -- Name: box_ubuntu22
==> ubuntu22: -- Description: Source: /home/gean/Downloads/vagrant/box/Vagrantfile
==> ubuntu22: -- Domain type: kvm
==> ubuntu22: -- Cpus: 2
==> ubuntu22: -- Feature: acpi
==> ubuntu22: -- Feature: apic
==> ubuntu22: -- Feature: pae
==> ubuntu22: -- Clock offset: utc
==> ubuntu22: -- Memory: 2048M
==> ubuntu22: -- Base box: ubuntu22
==> ubuntu22: -- Storage pool: default
==> ubuntu22: -- Image(vda): /home/gean/kvm/images/box_ubuntu22.img, virtio, 32G
==> ubuntu22: -- Disk driver opts: cache='default'
==> ubuntu22: -- Graphics Type: vnc
==> ubuntu22: -- Video Type: cirrus
==> ubuntu22: -- Video VRAM: 16384
==> ubuntu22: -- Video 3D accel: false
==> ubuntu22: -- Keymap: en-us
==> ubuntu22: -- TPM Backend: passthrough
==> ubuntu22: -- INPUT: type=mouse, bus=ps2
==> ubuntu22: Creating shared folders metadata...
==> ubuntu22: Starting domain.
==> ubuntu22: Domain launching with graphics connection settings...
==> ubuntu22: -- Graphics Port: 5900
==> ubuntu22: -- Graphics IP: 127.0.0.1
==> ubuntu22: -- Graphics Password: Not defined
==> ubuntu22: -- Graphics Websocket: 5700
==> ubuntu22: Waiting for domain to get an IP address...
==> ubuntu22: Waiting for machine to boot. This may take a few minutes...
ubuntu22: SSH address: 192.168.121.125:22
ubuntu22: SSH username: vagrant
ubuntu22: SSH auth method: private key
ubuntu22:
ubuntu22: Vagrant insecure key detected. Vagrant will automatically replace
ubuntu22: this with a newly generated keypair for better security.
ubuntu22:
ubuntu22: Inserting generated public key within guest...
ubuntu22: Removing insecure key from the guest if it's present...
ubuntu22: Key inserted! Disconnecting and reconnecting using new SSH key...
==> ubuntu22: Machine booted and ready!
==> ubuntu22: Setting hostname...
$ vagrant ssh
Welcome to Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/advantage
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Wed Mar 1 19:44:09 2023 from 192.168.122.1
vagrant@vm-01:~$
vagrant@vm-01:~$ exit
$ vagrant halt
$ vagrant destroy -f
===== Publicando a box =====
$ vagrant cloud publish g3anmart1ns/ubuntu22 1.0 libvirt ubuntu22.box \
--description "Ubuntu Server 22.04 TLS" \
--version-description "Ubuntu 22.04 - instalação miníma" \
--release --no-private
===== Referências =====
- [[https://computingforgeeks.com/create-rocky-linux-8-vagrant-boxes-using-packer/|How To Create Rocky Linux 8 Vagrant Boxes Using Packer]]
- [[https://leyhline.github.io/2019/02/16/creating-a-vagrant-base-box/|Creating a Vagrant Base Box (from Fedora 29 Server, using Libvirt as Provider)]]
- [[https://unix.stackexchange.com/questions/222427/how-to-create-custom-vagrant-box-from-libvirt-kvm-instance|how to create custom vagrant box from libvirt/kvm instance?]]
- [[https://github.com/chef/bento|Bento]]