Skip to content

Instantly share code, notes, and snippets.

@defanator
Last active February 11, 2025 03:50
Show Gist options
  • Save defanator/c42bae01d99557900ecccf1a45942008 to your computer and use it in GitHub Desktop.
Save defanator/c42bae01d99557900ecccf1a45942008 to your computer and use it in GitHub Desktop.
Vagrantfile with a number of useful dev environments
# -*- mode: ruby -*-
# vi: set ft=ruby :
# https://github.com/dotless-de/vagrant-vbguest/issues/367
# https://github.com/dotless-de/vagrant-vbguest/pull/373
if defined?(VagrantVbguest)
class MyWorkaroundInstallerUntilPR373IsMerged < VagrantVbguest::Installers::CentOS
protected
def has_rel_repo?
unless instance_variable_defined?(:@has_rel_repo)
rel = release_version
@has_rel_repo = communicate.test(centos_8? ? 'yum repolist' : "yum repolist --enablerepo=C#{rel}-base --enablerepo=C#{rel}-updates")
end
@has_rel_repo
end
def centos_8?
release_version && release_version.to_s.start_with?('8')
end
def install_kernel_devel(opts=nil, &block)
if centos_8?
communicate.sudo('yum update -y kernel', opts, &block)
communicate.sudo('yum install -y kernel-devel', opts, &block)
communicate.sudo('shutdown -r now', opts, &block)
begin
sleep 10
end until @vm.communicate.ready?
else
rel = has_rel_repo? ? release_version : '*'
cmd = "yum install -y kernel-devel-`uname -r` --enablerepo=C#{rel}-base --enablerepo=C#{rel}-updates"
communicate.sudo(cmd, opts, &block)
end
end
end
end
Vagrant.configure("2") do |config|
mem = 1024
cpus = [2, `getconf _NPROCESSORS_ONLN`.to_i / 2].max
host = RbConfig::CONFIG['host_os']
if host =~ /darwin/
mem = [2048, `sysctl -n hw.memsize`.to_i / 1024 / 1024 / 2].max
elsif host =~ /linux/
mem = [cpus * 512, `awk '/MemTotal/ {print $2}' /proc/meminfo`.to_i / 1024 / 2].min
end
config.vm.provider "virtualbox" do |vbox, override|
vbox.cpus = cpus
vbox.memory = mem
end
config.vm.provider :libvirt do |libvirt, override|
libvirt.cpus = cpus
libvirt.memory = mem
libvirt.driver = "kvm"
libvirt.cpu_mode = "host-passthrough"
end
config.ssh.forward_agent = true
config.vm.provision "shell",
inline: "printf '[ui]\nusername = Andrei Belov <[email protected]>\n\n[extensions]\nmq =\n' > $HOME/.hgrc", privileged: false
config.vm.define "centos7", autostart: false do |centos7|
centos7.vm.box = "centos/7"
centos7.vm.provision "shell",
inline: "yum -y install epel-release mercurial"
end
config.vm.define "centos8", autostart: false do |centos8|
centos8.vm.box = "centos/8"
centos8.vm.network "private_network", type: "dhcp"
centos8.vm.provision "shell",
inline: "yum -y install epel-release mercurial nfs-utils rpm-build expect createrepo python2-pytest python3-pytest python2-yaml python3-yaml"
centos8.vm.synced_folder "/Users/defan", "/vagrant", type: "nfs"
if defined?(MyWorkaroundInstallerUntilPR373IsMerged)
centos8.vbguest.installer = MyWorkaroundInstallerUntilPR373IsMerged
end
end
config.vm.define "fedora41", autostart: false do |fedora41|
fedora41.vm.box = "fedora/41-cloud-base"
fedora41.vm.network "private_network", type: "dhcp"
fedora41.vm.provision "shell",
inline: "dnf -y install mercurial nfs-utils python3-pytest reprepro rpm-build dpkg dpkg-dev expect createrepo libxslt-devel wget openssl openssl-devel pcre-devel geoip-devel gd-devel libedit-devel libmaxminddb-devel git cmake libstdc++-static yaml-cpp-devel rubygem-rake libcurl-devel yajl-devel rpmlint"
#fedora41.vm.synced_folder "/Users/defan", "/vagrant", type: "nfs"
fedora41.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "opensuse_leap", autostart: false do |opensuse_leap|
opensuse_leap.vm.box = "opensuse/openSUSE-42.3-x86_64"
end
config.vm.define "opensuse_tumbleweed", autostart: false do |opensuse_tumbleweed|
opensuse_tumbleweed.vm.box = "opensuse/openSUSE-Tumbleweed-x86_64"
end
config.vm.define "debian10", autostart: false do |debian10|
#debian10.vm.box = "debian/buster64"
debian10.vm.box = "generic/debian10"
debian10.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "debian11", autostart: false do |debian11|
#debian11.vm.box = "debian/bullseye64"
debian11.vm.box = "generic/debian11"
debian11.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "debian12", autostart: false do |debian12|
debian12.vm.box = "generic/debian12"
debian12.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "ubuntu2004", autostart: false do |ubuntu2004|
ubuntu2004.vm.box = "generic/ubuntu2004"
ubuntu2004.vm.network "private_network", type: "dhcp"
#ubuntu2004.vm.provision "shell",
# inline: "apt-get install -y mercurial debhelper devscripts python-pytest python3-pytest python3-rpm python3-dev expect dh-systemd python3-requests python3-requests-mock python3-mock python3-freezegun libxml2-utils xsltproc quilt libssl-dev libpcre3-dev libbrotli-dev libgeoip-dev libmaxminddb-dev libgd-dev libedit-dev cmake libyaml-cpp-dev libperl-dev libxslt1-dev libpcre2-dev php-dev libphp-embed python2.7-dev golang ruby-dev ruby-rack openjdk-11-jdk-headless openjdk-11-jre-headless libkrb5-dev libboost-dev"
ubuntu2004.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "ubuntu2204", autostart: false do |ubuntu2204|
ubuntu2204.vm.box = "generic/ubuntu2204"
ubuntu2204.vm.network "private_network", type: "dhcp"
#ubuntu2204.vm.provision "shell",
# inline: "apt-get install -y mercurial debhelper devscripts python3-pytest python3-rpm python3-dev expect python3-requests python3-requests-mock python3-mock python3-freezegun libxml2-utils xsltproc quilt libssl-dev libpcre3-dev libbrotli-dev libgeoip-dev libmaxminddb-dev libgd-dev libedit-dev cmake libyaml-cpp-dev libperl-dev libxslt1-dev libpcre2-dev php-dev libphp-embed python2.7-dev golang ruby-dev ruby-rack openjdk-11-jdk-headless openjdk-11-jre-headless libkrb5-dev libboost-dev"
ubuntu2204.vm.synced_folder "/Users/defan", "/vagrant"
ubuntu2204.vm.provider "virtualbox" do |vbox, override|
vbox.cpus = 4
end
end
# config.vm.define "ubuntu2404", autostart: false do |ubuntu2404|
# ubuntu2404.vm.box = "generic/ubuntu2404"
# ubuntu2404.vm.network "private_network", type: "dhcp"
# ubuntu2404.vm.synced_folder "/Users/defan", "/vagrant"
# end
config.vm.define "alpine317", autostart: false do |alpine317|
alpine317.vm.box = "generic/alpine317"
alpine317.vm.network "private_network", type: "dhcp"
alpine317.vm.provision "shell",
inline: "modprobe isofs && apk update && apk add virtualbox-guest-additions rsync abuild git make gcc g++ zlib-dev openssl-dev pcre-dev curl-dev tar linux-pam-dev musl-dev linux-headers coreutils brotli-dev libmaxminddb-dev xz patchelf readline-dev yajl-dev libxml2-dev libxslt-dev perl-dev ruby-dev ruby-rake ruby-etc yaml-cpp-dev cmake gd-dev geoip-dev mercurial krb5-dev"
alpine317.vm.synced_folder "/Users/defan", "/vagrant"
end
config.vm.define "freebsd13", autostart: false do |freebsd13|
freebsd13.vm.guest = :freebsd
freebsd13.vm.box = "freebsd/FreeBSD-13.3-RELEASE"
freebsd13.vm.network "private_network", type: "dhcp"
freebsd13.vm.synced_folder "/Users/defan", "/vagrant"
freebsd13.vm.boot_timeout = 600
freebsd13.ssh.shell = "sh"
end
config.vm.define "freebsd14", autostart: false do |freebsd14|
freebsd14.vm.guest = :freebsd
freebsd14.vm.box = "freebsd/FreeBSD-14.1-RELEASE"
freebsd14.vm.network "private_network", type: "dhcp"
freebsd14.vm.synced_folder "/Users/defan", "/vagrant"
freebsd14.vm.boot_timeout = 600
freebsd14.ssh.shell = "sh"
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment