Repository navigation
Installation
Bull runs on Linux, either natively or inside WSL2. It needs Vagrant, a hypervisor, and a handful of CLI tools. The bundled install.sh can set up everything unattended, or you can install the pieces yourself.
git clone https://github.com/WhiteMuush/Bull.git
cd Bullinstall.sh detects your distribution and installs Vagrant plus a hypervisor without prompting.
sudo ./install.shSupported families:
| Family | Package manager |
|---|---|
| Debian / Ubuntu / Kali / Parrot | apt |
| Fedora / RHEL / Rocky / AlmaLinux |
dnf / yum
|
| Arch / Manjaro | pacman |
| openSUSE Leap / Tumbleweed | zypper |
Architectures: x86_64, arm64.
Flags:
sudo ./install.sh --provider libvirt # force libvirt/KVM
sudo ./install.sh --provider virtualbox # force VirtualBox
sudo ./install.sh --skip-provider # install Vagrant onlyInstall these yourself, then let Bull verify them:
- Vagrant 2.3+ — on Ubuntu 24.04+ it is no longer in apt; Bull adds the official HashiCorp repo automatically when needed.
-
A hypervisor —
libvirt+qemu-kvm+ovmf(preferred), or VirtualBox. -
jq,gpg,ssh,openssl— usually already present. -
sshpass— optional, only needed for some custom-user SSH flows.
sudo ./bull.sh initinit checks every dependency, sets up the libvirt storage pool and NAT network (libvirt provider), installs the vagrant-libvirt plugin if missing, and creates the inventory. Fix anything it reports before creating a VM.
After init you can call bull directly instead of ./bull.sh.
Bull auto-selects a provider:
-
libvirt/KVM when
/dev/kvmexists. This is the preferred path: the whole stack stays in Linux, no Windows tooling required. VM images live in/var/lib/libvirt/images/. -
VirtualBox otherwise. VM files live under
~/VirtualBox VMs/.
Force a provider for the whole session:
export BULL_PROVIDER=libvirt # or virtualboxBull detects WSL2 from /proc/version and adapts automatically:
-
It exports
VAGRANT_WSL_ENABLE_WINDOWS_ACCESS=1(Vagrant refuses to run on WSL2 without it). -
With libvirt it keeps everything on the Linux side, pins
VAGRANT_HOMEto~/.vagrant.d, and shimscmd.exe/powershell.exeso Vagrant's Windows checks pass without invoking real Windows binaries. This is the recommended WSL2 setup. -
With VirtualBox it stores VM files on the Windows filesystem (
/mnt/c/...), because the Windows VirtualBox process cannot reach the WSL2 ext4 filesystem. Bull resolves your Windows home and setsBULL_HOMEthere. If it cannot, set it yourself:export BULL_HOME=/mnt/c/Users/<you>/.bull
To enable KVM inside WSL2, add nested virtualization to ~/.wslconfig on Windows:
[wsl2]
nestedVirtualization=trueThen run wsl --shutdown and reopen your distro.
WSL2 stores its filesystem in a .vhdx that grows but never shrinks on its own. After destroying VMs the space is free inside WSL2, but Windows still sees the file at peak size. To reclaim it on the Windows side:
# 1. Shut down WSL2
wsl --shutdown
# 2. Compact the disk (PowerShell as Administrator, requires Hyper-V)
$vhdx = (Get-ChildItem "$env:LOCALAPPDATA\Packages\*\LocalState\ext4.vhdx" -Recurse -ErrorAction SilentlyContinue | Select-Object -First 1).FullName
Optimize-VHD -Path $vhdx -Mode FullWithout Hyper-V, use diskpart instead:
diskpart
select vdisk file="C:\Users\<you>\AppData\Local\Packages\<distro>\LocalState\ext4.vhdx"
compact vdisk
exit
The first bull create takes 10–15 minutes. It downloads the Vagrant box (~2–4 GB for Kali, and a ~9 GB OVA for Parrot on first use) and installs hypervisor dependencies. Subsequent VMs from the same box are much faster.
Next: the Usage Guide.
Bull · MIT License · Technical hardening only — see the Security Model.
Getting started
Features
Internals
Help