Skip to content
Risc-V journey thru containers and new projects
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.

Risc-V bring-up tracker

The objective of this repository is to track the progress and pre-requisites to allow containers and Go applications on Risc-V.

Virtual machine and pre-built Docker

To make the development easier, there is a Qemu virtual machine based on Debian with some developer tools already installed.

The pack can be downloaded here and there is a readme for it.

If you want to run Docker on your Risc-V environment, get the pack here and use the script.

To test it out after install, just run docker run -d -p 8080:8080 carlosedp/echo_on_riscv and then curl http://localhost:8080.

Building Go on your Risc-V VM or SBC

First checkout and bootstrap Go Risc-V tree into a host that has Go installed (could be Mac, Linux):

git clone
cd riscv-go/src
GOOS=linux GOARCH=riscv64 ./bootstrap.bash
# Copy the generated boostrap pack to the VM/SBC
scp -P 22222 ../../go-linux-riscv64-bootstrap.tbz root@localhost: # In case you use the VM provided above

Now on your Risc-V VM/SBC, clone the repository, export the path and bootstrap path you unpacked and build/test:

tar vxf go-linux-riscv64-bootstrap.tbz
git clone
cd riscv-go
export GOROOT_BOOTSTRAP=$HOME/go-linux-riscv64-bootstrap
export PATH="$(pwd)/misc/riscv:$(pwd)/bin:$PATH"
cd src
GOGC=off ./make.bash                            # Builds go on $HOME/riscv-go/bin that can be added to your path
GOGC=off  GO_TEST_TIMEOUT_SCALE=10 ./run.bash   # Tests the build

Now you can use this go build for testing/developing other projects.

Main dependencies

Pending upstream

PR submitted

Already upstreamed

Docker containers and pre-reqs

To build a complete container environment, check the document.


Builds fine with PR 134 even without Kernel support.


  • CGO (to build nsenter)
  • buildmode=pie support
  • Add riscv64 to libcontainer/system/syscall_linux_64.go
  • After upstreaming, update x/sys and x/net modules
  • libseccomp-dev
  • apparmor - ($ sudo aa-status -> apparmor module is not loaded.)

Crun (

No changes required, builds fine even without Kernel support for seccomp. Depends on libseccomp.

  • libseccomp

Containerd (


Docker cli (

Already builds successfully

  • Update x/sys and x/net modules in vendor. PR

Docker daemon

  • PR - Update dependencies
  • PR - Remove CGO dependency
  • Update x/sys and x/net modules in vendor.
  • Update etcd-io/bbolt in vendor.
  • Update in vendor
  • Update in vendor
  • Update in vendor
  • Update in vendor

Dependency lib PRs:

docker-init (

No changes required. Just build and copy tini-static to /usr/local/bin/docker-init


No changes required.

Alternative is run dockerd as: sudo dockerd --userland-proxy=false

Podman - libpod (

Additional projects / libraries




Dependencies for kubelet:

  • x/net
  • x/sys
  • bbolt
  • runc/libcontainers -> CGO
  • cadvisor/accelerators/nvidia -> -> CGO
  • ???


Already builds successfully


Already builds successfully


Repository mirror:

  • Update config.guess and config.sub to newer version. Posted to mailing list.


  • LXC build successfully
  • SQLite config update to build successfully
  • CGO to build storage backends

Repository on:


Inlets (



You can’t perform that action at this time.