Installation
============

OS/Distro-specific
==================

Ubuntu
------

Install dependencies::

  $ sudo snap install go --classic
  $ sudo snap install docker
  $ sudo apt install qemu-system-x86 build-essential gdb

macOS
-----

Install dependencies::

  $ brew install go qemu
  $ brew cask install docker

NixOS
-----

There's a minimal configuration that you need to apply::

  #!nix
  { config, pkgs, ... }:
  {
    virtualisation.docker.enable = true;
    virtualisation.libvirtd.enable = true;
    environment.systemPackages = with pkgs; [
      go git
    ];
  }

Common
======

Setup Go environment::

  $ echo 'export GOPATH=$HOME' >> ~/.bashrc
  $ echo 'export PATH=$PATH:$HOME/bin' >> ~/.bashrc
  $ source ~/.bashrc

Build *out-of-tree*::

  $ go get -u code.dumpstack.io/tools/out-of-tree

.. note::
  On a GNU/Linux you need to add your user to docker group if you want
  to use *out-of-tree* without sudo. Note that this has a **serious**
  security implications. Check *Docker* documentation for more
  information.

Bootstrap::

  $ out-of-tree bootstrap

Test that everything works::

  $ cd $GOPATH/src/code.dumpstack.io/tools/out-of-tree/examples/kernel-exploit
  $ out-of-tree kernel autogen --max=1
  $ out-of-tree pew --max=1

Enjoy!