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.
On an Ubuntu system, install prerequisites and ensure Go is at least version 1.13:
sudo apt-get install git golang build-essential
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.
We use GitHub Pull Requests for code review. Pull requests must receive one approval and pass CI before being merged.
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).
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.