diff --git a/.github/workflows/jepsen.yml b/.github/workflows/jepsen.yml index a56e253..ae62e5d 100644 --- a/.github/workflows/jepsen.yml +++ b/.github/workflows/jepsen.yml @@ -21,8 +21,11 @@ on: jobs: jepsen: - # Requires a self-hosted runner with VirtualBox + Vagrant and at least 12GB RAM free. - runs-on: [self-hosted, virtualbox] + # Requires a runner with KVM support (e.g. larger GitHub runners or metal) for decent performance. + # Standard ubuntu-latest might fall back to QEMU TCG (very slow) or fail if kvm driver is forced. + # runs-on: ubuntu-latest + runs-on: [self-hosted] + timeout-minutes: 120 steps: - name: Checkout @@ -35,9 +38,39 @@ jobs: with: go-version: "1.25.5" + - name: Install Vagrant and Libvirt + run: | + sudo apt-get update + sudo apt-get install -y vagrant ruby-libvirt qemu-kvm libvirt-daemon-system libvirt-clients bridge-utils libvirt-dev gcc make + + # Check KVM support + echo "Checking KVM support..." + if [ -r /dev/kvm ]; then + echo "KVM is available." + else + echo "WARNING: KVM is NOT available. VMs may run very slowly or fail." + fi + + # Setup Libvirt permissions + sudo usermod -aG libvirt $USER + # Allow current session to access libvirt socket + sudo chmod 666 /var/run/libvirt/libvirt-sock + + # Install Vagrant plugins + vagrant plugin install vagrant-libvirt + vagrant plugin install vagrant-scp + - name: Bring up Jepsen VMs working-directory: jepsen - run: vagrant up + run: | + if [ -r /dev/kvm ] && [ -w /dev/kvm ]; then + echo "KVM is available. Using kvm driver." + export LIBVIRT_DRIVER=kvm + else + echo "KVM is NOT available or not writable. Falling back to qemu driver (slow)." + export LIBVIRT_DRIVER=qemu + fi + vagrant up --provider=libvirt - name: Run Jepsen workload working-directory: jepsen diff --git a/jepsen/Vagrantfile b/jepsen/Vagrantfile index d96d3bf..17a562a 100644 --- a/jepsen/Vagrantfile +++ b/jepsen/Vagrantfile @@ -19,16 +19,24 @@ Vagrant.configure("2") do |config| # VirtualBox (Intel) defaults node.vm.provider "virtualbox" do |vb| - vb.memory = name == :ctrl ? 4096 : 2048 + vb.memory = name == :ctrl ? 2048 : 1024 vb.cpus = 2 end # UTM (Apple Silicon) defaults node.vm.provider "utm" do |utm| - utm.memory = name == :ctrl ? 4096 : 2048 + utm.memory = name == :ctrl ? 2048 : 1024 utm.cpus = 2 end + node.vm.provider "libvirt" do |kvm, override| + override.vm.box = "generic/debian12" + kvm.memory = name == :ctrl ? 4096 : 2048 + kvm.cpus = 2 + # 必要に応じてドライバを指定 + kvm.driver = ENV['LIBVIRT_DRIVER'] || 'kvm' + end + if name == :ctrl node.vm.synced_folder "..", "/home/vagrant/elastickv", type: "rsync",