Run Debian as the Service VM

The Debian Project is an association of individuals who have made common cause to create a free operating system. The latest stable Debian release is 10.0.

This tutorial describes how to use Debian 10.0 as the Service VM OS with the ACRN hypervisor.

Prerequisites

Use the following instructions to install Debian.

  • Navigate to Debian 10 iso. Select and download debian-10.1.0-amd64-netinst.iso (scroll down to the bottom of the page).

    Note

    These instructions were validated with the debian_10.1.0 ISO image. A newer Debian 10 version should still work as expected.

  • Follow the Debian installation guide to install it on your board; we are using a Kaby Lake Intel NUC (NUC7i7DNHE) in this tutorial.

  • Install Build Tools and Dependencies for ACRN.

  • Update to the newer iASL:

    $ sudo apt update
    $ sudo apt install m4 bison flex zlib1g-dev
    $ cd ~
    $ wget https://acpica.org/sites/acpica/files/acpica-unix-20190816.tar.gz
    $ tar zxvf acpica-unix-20190816.tar.gz
    $ cd acpica-unix-20190816
    $ make clean && make iasl
    $ sudo cp ./generate/unix/bin/iasl /usr/sbin/
    

Validated Versions

  • Debian version: 10.1 (buster)

  • ACRN hypervisor tag: acrn-2020w40.1-180000p

  • Debian Service VM Kernel version: release_2.2

Install ACRN on the Debian VM

  1. Clone the Project ACRN code repository:

    $ cd ~
    $ git clone https://github.com/projectacrn/acrn-hypervisor
    $ cd acrn-hypervisor
    $ git checkout acrn-2020w40.1-180000p
    
  2. Build and install ACRN:

    $ make all BOARD_FILE=misc/vm_configs/xmls/board-xmls/nuc7i7dnb.xml SCENARIO_FILE=misc/vm_configs/xmls/config-xmls/nuc7i7dnb/industry.xml RELEASE=0
    $ sudo make install
    $ sudo mkdir /boot/acrn/
    $ sudo cp ~/acrn-hypervisor/build/hypervisor/acrn.bin /boot/acrn/
    
  3. Build and Install the Service VM kernel:

    $ mkdir ~/sos-kernel && cd ~/sos-kernel
    $ git clone https://github.com/projectacrn/acrn-kernel
    $ cd acrn-kernel
    $ git checkout release_2.2
    $ cp kernel_config_uefi_sos .config
    $ make olddefconfig
    $ make all
    $ sudo make modules_install
    $ sudo cp arch/x86/boot/bzImage /boot/bzImage
    
  4. Update Grub for the Debian Service VM:

    Update the /etc/grub.d/40_custom file as shown below.

    Note

    Enter the command line for the kernel in /etc/grub.d/40_custom as a single line and not as multiple lines. Otherwise, the kernel will fail to boot.

    menuentry "ACRN Multiboot Debian Service VM" --id debian-service-vm {
      recordfail
      load_video
      insmod gzio
      insmod part_gpt
      insmod ext2
    
      search --no-floppy --fs-uuid --set 9bd58889-add7-410c-bdb7-1fbc2af9b0e1
      echo 'loading ACRN...'
      multiboot2 /boot/acrn/acrn.bin  root=PARTUUID="e515916d-aac4-4439-aaa0-33231a9f4d83"
      module2 /boot/bzImage Linux_bzImage
    }
    

    Note

    Update this to use the UUID (--set) and PARTUUID (root= parameter) (or use the device node directly) of the root partition (e.g. /dev/nvme0n1p2). Hint: use sudo blkid <device node>.

    Update the kernel name if you used a different name as the source for your Service VM kernel.

  5. Modify the /etc/default/grub file to make the Grub menu visible when booting and make it load the Service VM kernel by default. Modify the lines shown below:

    GRUB_DEFAULT=debian-service-vm
    #GRUB_TIMEOUT_STYLE=hidden
    GRUB_TIMEOUT=5
    GRUB_CMDLINE_LINUX="text"
    
  6. Update Grub on your system:

    $ sudo update-grub
    $ sudo reboot
    
  7. Log in to the Debian Service VM and check the ACRN status:

    $ dmesg | grep ACRN
    [    0.000000] Hypervisor detected: ACRN
    [    0.981476] ACRNTrace: Initialized acrn trace module with 4 cpu
    [    0.982837] ACRN HVLog: Failed to init last hvlog devs, errno -19
    [    0.983023] ACRN HVLog: Initialized hvlog module with 4 cp
    

Enable Network Sharing to Give Network Access to the User VM

$ sudo systemctl enable systemd-networkd
$ sudo systemctl start systemd-networkd