# -*- mode: ruby -*- # vi: set ft=ruby : # Copyright The containerd Authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # http://www.apache.org/licenses/LICENSE-2.0 # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. # Vagrantfile for cgroup2 and SELinux Vagrant.configure("2") do |config| config.vm.box = "fedora/35-cloud-base" memory = 4096 cpus = 2 config.vm.provider :virtualbox do |v| v.memory = memory v.cpus = cpus end config.vm.provider :libvirt do |v| v.memory = memory v.cpus = cpus end # Disabled by default. To run: # vagrant up --provision-with=upgrade-packages # To upgrade only specific packages: # UPGRADE_PACKAGES=selinux vagrant up --provision-with=upgrade-packages # config.vm.provision "upgrade-packages", type: "shell", run: "never" do |sh| sh.upload_path = "/tmp/vagrant-upgrade-packages" sh.env = { 'UPGRADE_PACKAGES': ENV['UPGRADE_PACKAGES'], } sh.inline = <<~SHELL #!/usr/bin/env bash set -eux -o pipefail dnf -y upgrade ${UPGRADE_PACKAGES} SHELL end # To re-run, installing CNI from RPM: # INSTALL_PACKAGES="containernetworking-plugins" vagrant up --provision-with=install-packages # config.vm.provision "install-packages", type: "shell", run: "once" do |sh| sh.upload_path = "/tmp/vagrant-install-packages" sh.env = { 'INSTALL_PACKAGES': ENV['INSTALL_PACKAGES'], } sh.inline = <<~SHELL #!/usr/bin/env bash set -eux -o pipefail dnf -y install \ container-selinux \ curl \ gcc \ git \ iptables \ libseccomp-devel \ libselinux-devel \ lsof \ make \ ${INSTALL_PACKAGES} SHELL end # To re-run this provisioner, installing a different version of go: # GO_VERSION="1.14.6" vagrant up --provision-with=install-golang # config.vm.provision "install-golang", type: "shell", run: "once" do |sh| sh.upload_path = "/tmp/vagrant-install-golang" sh.env = { 'GO_VERSION': ENV['GO_VERSION'] || "1.17.5", } sh.inline = <<~SHELL #!/usr/bin/env bash set -eux -o pipefail curl -fsSL "https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz" | tar Cxz /usr/local cat >> /etc/environment <> /etc/profile.d/sh.local < /tmp/containerd.log systemctl stop containerd } selinux=$(getenforce) if [[ $selinux == Enforcing ]]; then setenforce 0 fi systemctl enable --now ${GOPATH}/src/github.com/containerd/containerd/containerd.service if [[ $selinux == Enforcing ]]; then setenforce 1 fi trap cleanup EXIT ctr version critest --parallel=$(nproc) --report-dir="${REPORT_DIR}" --ginkgo.skip='HostIpc is true' SHELL end # Rootless Podman is used for testing CRI-in-UserNS # (We could use rootless nerdctl, but we are using Podman here because it is available in dnf) config.vm.provision "install-rootless-podman", type: "shell", run: "never" do |sh| sh.upload_path = "/tmp/vagrant-install-rootless-podman" sh.inline = <<~SHELL #!/usr/bin/env bash set -eux -o pipefail # Delegate cgroup v2 controllers to rootless mkdir -p /etc/systemd/system/user@.service.d cat > /etc/systemd/system/user@.service.d/delegate.conf << EOF [Service] Delegate=yes EOF systemctl daemon-reload # Install Podman dnf install -y podman # Configure Podman to resolve `golang` to `docker.io/library/golang` mkdir -p /etc/containers cat > /etc/containers/registries.conf <