Building ACRN in Docker

This tutorial shows how to build ACRN in a Clear Linux Docker image.

Install Docker

  1. Install Docker according to the Docker installation instructions.

  2. If you are behind an HTTP or HTTPS proxy server, follow the HTTP/HTTPS proxy instructions to set up an HTTP/HTTPS proxy to pull the Docker image and Configure Docker to use a proxy server to set up an HTTP/HTTPS proxy for the Docker container.

  3. Docker requires root privileges by default. Follow these additional steps to enable a non-root user.

    Note

    Performing these post-installation steps is not required. If you choose not to, add sudo in front of every docker command in this tutorial.

Get the Docker Image

This tutorial presents two ways to get the Clear Linux Docker image that’s needed to build ACRN.

Build the Docker Image from Dockerfile

  1. Download Dockerfile to your development machine.

  2. Build the Docker image:

    $ docker build -t clearlinux-acrn-builder:latest -f <path/to/Dockerfile> .
    

    if you are behind an HTTP or HTTPS proxy server, use this command instead:

    $ docker build --build-arg HTTP_PROXY=http://<proxy_host>:<proxy_port> \
    --build-arg HTTPS_PROXY=https://<proxy_host>:<proxy_port> \
    -t clearlinux-acrn-builder:latest -f <path/to/Dockerfile> .
    

Get the Docker Image from Docker Hub

As an alternative, you can pull a pre-built Docker image from Docker Hub to your development machine. Use this command:

$ docker pull acrn/clearlinux-acrn-builder:latest

Build ACRN from Source in Docker

  1. Clone the acrn-hypervisor repo:

    $ mkdir -p ~/workspace && cd ~/workspace
    $ git clone https://github.com/projectacrn/acrn-hypervisor
    $ cd acrn-hypervisor
    
  2. Build the acrn-hypervisor with the default configuration (Software Defined Cockpit [SDC] configuration):

    For the Docker image build from Dockerfile, use this command to build ACRN:

    $ docker run -u`id -u`:`id -g` --rm -v $PWD:/workspace \
      clearlinux-acrn-builder:latest bash -c "make clean && make"
    

    For the Docker image downloaded from Docker Hub, use this command to build ACRN:

    $ docker run -u`id -u`:`id -g` --rm -v $PWD:/workspace \
      acrn/clearlinux-acrn-builder:latest bash -c "make clean && make"
    

    The build artifacts are found in the build directory.

Build the ACRN Service VM Kernel in Docker

  1. Clone the acrn-kernel repo:

    $ mkdir -p ~/workspace && cd ~/workspace
    $ git clone https://github.com/projectacrn/acrn-kernel
    $ cd acrn-kernel
    
  2. Build the ACRN Service VM kernel:

    For the Docker image built from Dockerfile, use this command to build ACRN:

    $ cp kernel_config_sos .config
    $ docker run -u`id -u`:`id -g` --rm -v $PWD:/workspace \
      clearlinux-acrn-builder:latest \
      bash -c "make clean && make olddefconfig && make && make modules_install INSTALL_MOD_PATH=out/"
    

    For the Docker image downloaded from Docker Hub, use this command to build ACRN:

    $ cp kernel_config_sos .config
    $ docker run -u`id -u`:`id -g` --rm -v $PWD:/workspace \
      acrn/clearlinux-acrn-builder:latest \
      bash -c "make clean && make olddefconfig && make && make modules_install INSTALL_MOD_PATH=out/"
    

    The commands build the bootable kernel image as arch/x86/boot/bzImage, and the loadable kernel modules under the ./out/ folder.

Build the ACRN User VM PREEMPT_RT Kernel in Docker

  1. Clone the preempt-rt kernel repo:

    $ mkdir -p ~/workspace && cd ~/workspace
    $ git clone -b 4.19/preempt-rt https://github.com/projectacrn/acrn-kernel preempt-rt
    $ cd preempt-rt
    
  2. Buildthe ACRN User VM PREEMPT_RT kernel:

    For the Docker image built from Dockerfile, use this command to build ACRN:

    $ cp x86-64_defconfig .config
    $ docker run -u`id -u`:`id -g` --rm  -v $PWD:/workspace \
      acrn/clearlinux-acrn-builder:latest \
      bash -c "make clean && make olddefconfig && make && make modules_install INSTALL_MOD_PATH=out/"
    

    For the Docker image downloaded from Docker Hub, use this command to build ACRN:

    $ cp x86-64_defconfig .config
    $ docker run -u`id -u`:`id -g` --rm  -v $PWD:/workspace \
      acrn/clearlinux-acrn-builder:latest \
      bash -c "make clean && make olddefconfig && make && make modules_install INSTALL_MOD_PATH=out/"
    

    The commands build the bootable kernel image as arch/x86/boot/bzImage, and the loadable kernel modules under the ./out/ folder.