u-root

# 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?

- USENIX 2015 ATC Paper
- USENIX 2015 ATC Talk
- Related: Embedded Linux Conference 2017 LinuxBoot Talk (YouTube video, slides)

## Community

- Join the mailing list
- Join the Open Source Firmware Slack team (Get an invite here.)
- Checkout the roadmap

## Contributors

- Ron Minnich
- Andrey Mirtchovski
- Alexandre Beletti
- Manoel Machado
- Rafael C. Nunes
- Matheus Pinto Rodrigues
- Gan Shun Lim
- Ryan O’Leary
- Chris Koch
- Andrea Barberio
- Jean-Marie Verdun
- Max Shegai

## Logo

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.