# -*- coding: utf-8 -*-
# -*- mode: ruby -*-
# vi: set ft=ruby :

# for Apple silicon Mac
# vagrant plugin install vagrant-qemu
# vagrant up --provider=qemu

Vagrant.configure("2") do |config|
  config.vm.box = "takesako/alpine-virt-3.24-xaarch64"
  config.vm.box_version = "3.24.1"
  config.vm.box_check_update = false
  config.vm.boot_timeout = 300
  config.vm.network "forwarded_port", guest: 80, host: 7777
  config.ssh.insert_key = false
  # config.ssh.guest_port = 2222
  config.vm.synced_folder "vagrant", "/vagrant"
  config.vm.provider :virtualbox do |v, override|
    v.gui = true
  end
  config.vm.provider :vmware_desktop do |v, override|
    v.gui = true
  end
  config.vm.provider "qemu" do |qe, override|
    # override.vm.box = "./libvirt.box"
    # override.vm.box_version = nil
    # qe.qemu_dir = "C:/Program Files/qemu/share"
    qe.arch = "aarch64" # "x86_64"# "aarch64" # 
    qe.cpu = "cortex-a72" # "qemu64" # "cortex-a72" #
    qe.machine = "virt" # "q35" # "virt" #
    qe.memory = "256M"
    qe.smp = "2"
    qe.no_daemonize = true # export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
    if RbConfig::CONFIG["host_os"] =~ /darwin/
      override.vm.synced_folder "vagrant", "/vagrant", disabled: true
      qe.extra_qemu_args = %w(-virtfs local,path=vagrant,mount_tag=shared,security_model=mapped-file,id=shared)
    else
      override.vm.synced_folder "vagrant", "/vagrant", type: "rsync"
    end
    qe.other_default = %w(-parallel none -vga std)
  end
  config.vm.provision "shell", inline: <<-SHELL
    if grep -qi QEMU /sys/class/dmi/id/sys_vendor 2>/dev/null; then
      mount -t 9p -o trans=virtio,version=9p2000.L,uid=1000,gid=1000 shared /vagrant
      grep -q "^shared[[:space:]]/vagrant[[:space:]]9p" /etc/fstab || \
        echo "shared /vagrant 9p trans=virtio,version=9p2000.L,uid=1000,gid=1000 0 0" >> /etc/fstab
    fi
    apk update
    apk upgrade
    apk add --no-cache linux-virt-dev linux-headers
    apk add --no-cache make g++ gcc gdb file strace nasm micro
    apk add --no-cache mini_httpd
    chmod 755 /vagrant /vagrant/cgi
    ln -s /vagrant/asm /var/www/localhost/htdocs/asm
    ln -s /vagrant/cgi /var/www/localhost/htdocs/cgi
    echo "cgipat=**.cgi" >> /etc/mini_httpd/mini_httpd.conf
    service mini_httpd start
    rc-update add mini_httpd default
    sed -i -e "s/APPEND root/APPEND nokaslr root/" /boot/extlinux.conf
    echo 'default_kernel_opts="quiet splash nokaslr"' >> /etc/update-extlinux.conf
    update-grub || true
    sysctl kernel.randomize_va_space=0
  SHELL
  if Vagrant.has_plugin?("vagrant-vbguest")
    config.vbguest.auto_update = false
    config.vbguest.no_remote = true
  end
  Encoding.default_external = "utf-8"
end
