u-root

u-root logo

u-root

u-root embodies four different projects.

  • Go versions of many standard Linux tools, such as ls, cp, or shutdown. See cmds/core for most of these.

  • A way to compile many Go programs into a single binary with busybox mode.

  • A way to create initramfs (an archive of files) to use with Linux kernels.

  • Go bootloaders that use kexec to boot Linux or multiboot kernels such as ESXi, Xen, or tboot. They are meant to be used with LinuxBoot. With that, parsers for GRUB config files or syslinux config files are to make transition to LinuxBoot easier.

Setup

On an Ubuntu system, install prerequisites and ensure Go is at least version 1.13:

sudo apt-get install git golang build-essential
go version

Set your GOPATH:

export GOPATH="$HOME/go"

Clone u-root:

go get github.com/u-root/u-root

Generate an initramfs containing u-root Go tools:

u-root -format=cpio -o initramfs.cpio

You can use this initramfs with your favorite Linux kernel in QEMU to try it out.

More instructions can be found in the repo’s README.md.

Submitting Changes

We use GitHub Pull Requests for code review. Pull requests must receive one approval and pass CI before being merged.

FAQs

So, why “u-root”?

It’s to reflect a universal root, you can mount on every local and get a userland portable (it’s a goal).

Any publications?

Community

Contributors

The Go gopher was designed by Renee French. The u-root logo design is licensed under the Creative Commons 3.0 Attributions license.

The logo is communicating several things:

  • u-root has several flavors: firmware and as a root file system

  • the gopher at the bottom is a firmware u-root; that gopher brings the machine up, hence the wrench. Its work is also done, so it is resting.

  • the other gophers can make more copies of u-root; hence the u-root logo on their chest.

  • the highest gopher is showing how u-root is a good root file system for a VM.

  • the U itself is a stylized tree, evocative of roots.