u-root

command module
v0.15.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Aug 18, 2025 License: BSD-3-Clause Imports: 12 Imported by: 0

README

u-root

Build Status codecov Go Report Card CodeQL GoDoc Slack License OpenSSF Best Practices

Description

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, embeddable into firmware.

  • 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.

Usage

Make sure your Go version is >= 1.21.

Download and install u-root either via git:

git clone https://github.com/u-root/u-root
cd u-root
go install

Or install directly with go:

go install github.com/u-root/u-root@latest

[!NOTE] The u-root command will end up in $GOPATH/bin/u-root, so you may need to add $GOPATH/bin to your $PATH.

Examples

Here are some examples of using the u-root command to build an initramfs.

git clone https://github.com/u-root/u-root
cd u-root

# Build an initramfs of all the Go cmds in ./cmds/core/... (default)
u-root

# Generate an archive with bootloaders
#
# core and boot are templates that expand to sets of commands
u-root core boot

# Generate an archive with only these given commands
u-root ./cmds/core/{init,ls,ip,dhclient,wget,cat,gosh}

# Generate an archive with all of the core tools with some exceptions
u-root core -cmds/core/{ls,losetup}

[!IMPORTANT]

u-root works exactly when go build and go list work as well.

See also the section below discussing the AMD64 architecture level.

[!NOTE]

The u-root tool is the same as the mkuimage tool with some defaults applied.

In the near future, uimage will replace u-root.

[!TIP]

To just build Go busybox binaries, try out gobusybox's makebb tool.

Multi-module workspace builds

There are several ways to build multi-module command images using standard Go tooling.

$ mkdir workspace
$ cd workspace
$ git clone https://github.com/u-root/u-root
$ git clone https://github.com/u-root/cpu

$ go work init ./u-root
$ go work use ./cpu

$ u-root ./u-root/cmds/core/{init,gosh} ./cpu/cmds/cpud

$ cpio -ivt < /tmp/initramfs.linux_amd64.cpio
...
-rwxr-x---   0 root     root      6365184 Jan  1  1970 bbin/bb
lrwxrwxrwx   0 root     root            2 Jan  1  1970 bbin/cpud -> bb
lrwxrwxrwx   0 root     root            2 Jan  1  1970 bbin/gosh -> bb
lrwxrwxrwx   0 root     root            2 Jan  1  1970 bbin/init -> bb
...

# Works for offline vendored builds as well.
$ go work vendor # Go 1.22 feature.

$ u-root ./u-root/cmds/core/{init,gosh} ./cpu/cmds/cpud

When creating a new Go workspace is too much work, the goanywhere tool can create one on the fly. This works only with local file system paths:

$ go install github.com/u-root/gobusybox/src/cmd/goanywhere@latest

$ goanywhere ./u-root/cmds/core/{init,gosh} ./cpu/cmds/cpud -- u-root

goanywhere creates a workspace in a temporary directory with the given modules, and then execs u-root in the workspace passing along the command names.

[!TIP]

While workspaces are good for local compilation, they are not meant to be checked in to version control systems.

For a non-workspace way of building multi-module initramfs images, read more in the mkuimage README. (The u-root tool is mkuimage with more defaults applied.)

Extra Files

You may also include additional files in the initramfs using the -files flag.

If you add binaries with -files are listed, their ldd dependencies will be included as well.

$ u-root -files /bin/bash

$ cpio -ivt < /tmp/initramfs.linux_amd64.cpio
...
-rwxr-xr-x   0 root     root      1277936 Jan  1  1970 bin/bash
...
drwxr-xr-x   0 root     root            0 Jan  1  1970 lib/x86_64-linux-gnu
-rwxr-xr-x   0 root     root       210792 Jan  1  1970 lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
-rwxr-xr-x   0 root     root      1926256 Jan  1  1970 lib/x86_64-linux-gnu/libc.so.6
lrwxrwxrwx   0 root     root           15 Jan  1  1970 lib/x86_64-linux-gnu/libtinfo.so.6 -> libtinfo.so.6.4
-rw-r--r--   0 root     root       216368 Jan  1  1970 lib/x86_64-linux-gnu/libtinfo.so.6.4
drwxr-xr-x   0 root     root            0 Jan  1  1970 lib64
lrwxrwxrwx   0 root     root           42 Jan  1  1970 lib64/ld-linux-x86-64.so.2 -> /lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
...

You can determine placement with colons:

$ u-root -files "/bin/bash:sbin/sh"

$ cpio -ivt < /tmp/initramfs.linux_amd64.cpio
...
-rwxr-xr-x   0 root     root      1277936 Jan  1  1970 sbin/sh
...

For example on Debian, if you want to add two kernel modules for testing, executing your currently booted kernel:

$ u-root -files "$HOME/hello.ko:etc/hello.ko" -files "$HOME/hello2.ko:etc/hello2.ko"
$ qemu-system-x86_64 -kernel /boot/vmlinuz-$(uname -r) -initrd /tmp/initramfs.linux_amd64.cpio

Init and Uinit

u-root has a very simple (exchangable) init system controlled by the -initcmd and -uinitcmd command-line flags.

  • -initcmd determines what /init is symlinked to. -initcmd may be a u-root command name or a symlink target.

  • -uinitcmd is run by the default u-root init after some basic file system setup. There is no default, users should optionally supply their own. -uinitcmd may be a u-root command name with arguments or a symlink target with arguments.

  • After running a uinit (if there is one), init will start a shell determined by the -defaultsh argument.

We expect most users to keep their -initcmd as init, but to supply their own uinit for additional initialization or to immediately load another operating system.

All three command-line args accept both a u-root command name or a target symlink path. Only -uinitcmd accepts command-line arguments, however. For example,

u-root -uinitcmd="echo Go Gopher" ./cmds/core/{init,echo,gosh}

cpio -ivt < /tmp/initramfs.linux_amd64.cpio
# ...
# lrwxrwxrwx   0 root     root           12 Dec 31  1969 bin/uinit -> ../bbin/echo
# lrwxrwxrwx   0 root     root            9 Dec 31  1969 init -> bbin/init

qemu-system-x86_64 -kernel $KERNEL -initrd /tmp/initramfs.linux_amd64.cpio -nographic -append "console=ttyS0"
# ...
# [    0.848021] Freeing unused kernel memory: 896K
# 2020/05/01 04:04:39 Welcome to u-root!
#                              _
#   _   _      _ __ ___   ___ | |_
#  | | | |____| '__/ _ \ / _ \| __|
#  | |_| |____| | | (_) | (_) | |_
#   \__,_|    |_|  \___/ \___/ \__|
#
# Go Gopher
# ~/>

Passing command line arguments like above is equivalent to passing the arguments to uinit via a flags file in /etc/uinit.flags, see Extra Files.

Additionally, you can pass arguments to uinit via the uroot.uinitargs kernel parameters, for example:

u-root -uinitcmd="echo Gopher" ./cmds/core/{init,echo,gosh}

cpio -ivt < /tmp/initramfs.linux_amd64.cpio
# ...
# lrwxrwxrwx   0 root     root           12 Dec 31  1969 bin/uinit -> ../bbin/echo
# lrwxrwxrwx   0 root     root            9 Dec 31  1969 init -> bbin/init

qemu-system-x86_64 -kernel $KERNEL -initrd /tmp/initramfs.linux_amd64.cpio -nographic -append "console=ttyS0 uroot.uinitargs=Go"
# ...
# [    0.848021] Freeing unused kernel memory: 896K
# 2020/05/01 04:04:39 Welcome to u-root!
#                              _
#   _   _      _ __ ___   ___ | |_
#  | | | |____| '__/ _ \ / _ \| __|
#  | |_| |____| | | (_) | (_) | |_
#   \__,_|    |_|  \___/ \___/ \__|
#
# Go Gopher
# ~/>

Note the order of the passed arguments in the above example.

The command you name must be present in the command set. The following will not work:

u-root -uinitcmd="echo Go Gopher" ./cmds/core/{init,gosh}
# 21:05:57 could not create symlink from "bin/uinit" to "echo": command or path "echo" not included in u-root build: specify -uinitcmd="" to ignore this error and build without a uinit

You can also refer to non-u-root-commands; they will be added as symlinks. We don't presume to know whether your symlink target is correct or not.

This will build, but not work unless you add a /bin/foobar to the initramfs.

u-root -uinitcmd="/bin/foobar Go Gopher" ./cmds/core/{init,gosh}

This will boot the same as the above.

u-root -uinitcmd="/bin/foobar Go Gopher" -files /bin/echo:bin/foobar -files your-hosts-file:/etc/hosts ./cmds/core/{init,gosh}

The effect of the above command:

  • Sets up the uinit command to be /bin/foobar, with 2 arguments: Go Gopher
  • Adds /bin/echo as bin/foobar
  • Adds your-hosts-file as etc/hosts
  • builds in the cmds/core/init, and cmds/core/gosh commands.

This will bypass the regular u-root init and just launch a shell:

u-root -initcmd=gosh ./cmds/core/{gosh,ls}

cpio -ivt < /tmp/initramfs.linux_amd64.cpio
# ...
# lrwxrwxrwx   0 root     root            9 Dec 31  1969 init -> bbin/gosh

qemu-system-x86_64 -kernel $KERNEL -initrd /tmp/initramfs.linux_amd64.cpio -nographic -append "console=ttyS0"
# ...
# [    0.848021] Freeing unused kernel memory: 896K
# failed to put myself in foreground: ioctl: inappropriate ioctl for device
# ~/>

(It fails to do that because some initialization is missing when the shell is started without a proper init.)

AMD64 Architecture Level

Before building an initramfs for AMD64 with u-root, verify that the command

go env GOAMD64

prints v1. A GOAMD64 setting of any higher version may produce such binaries that don't execute on old AMD64 processors (including the default CPU model of QEMU).

GOAMD64 can be reset to v1 with one of the following methods:

  • through the GOAMD64 environment variable:

    export GOAMD64=v1
    
  • through go env (only takes effect if the GOAMD64 environment variable is not set):

    go env -w GOAMD64=v1
    

Cross Compilation (targeting different architectures and OSes)

Cross-OS and -architecture compilation comes for free with Go. In fact, every PR to the u-root repo is built against the following architectures: amd64, x86 (i.e. 32bit), mipsle, armv7, arm64, and ppc64le.

Further, we run integration tests on linux/amd64, and linux/arm64, using several CI systems. If you need to add another CI system, processor or OS, please let us know.

To cross compile for an ARM, on Linux:

GOARCH=arm u-root

If you are on OSX, and wish to build for Linux on AMD64:

GOOS=linux GOARCH=amd64 u-root

Testing in QEMU

A good way to test the initramfs generated by u-root is with qemu:

qemu-system-x86_64 -nographic -kernel path/to/kernel -initrd /tmp/initramfs.linux_amd64.cpio

Note that you do not have to build a special kernel on your own, it is sufficient to use an existing one. Usually you can find one in /boot.

If you don't have a kernel handy, you can also get the one we use for VM testing:

go install github.com/hugelgupf/vmtest/tools/runvmtest@latest

runvmtest -- bash -c "cp \$VMTEST_KERNEL ./kernel"

It may not have all features you require, however.

Framebuffer

For framebuffer support, append a VESA mode via the vga kernel parameter:

qemu-system-x86_64 \
  -kernel path/to/kernel \
  -initrd /tmp/initramfs.linux_amd64.cpio \
  -append "vga=786"

For a list of modes, refer to the Linux kernel documentation.

Entropy / Random Number Generator

Some utilities, e.g., dhclient, require entropy to be present. For a speedy virtualized random number generator, the kernel should have the following:

CONFIG_VIRTIO_PCI=y
CONFIG_HW_RANDOM_VIRTIO=y
CONFIG_CRYPTO_DEV_VIRTIO=y

Then you can run your kernel in QEMU with a virtio-rng-pci device:

qemu-system-x86_64 \
    -device virtio-rng-pci \
    -kernel vmlinuz \
    -initrd /tmp/initramfs.linux_amd64.cpio

In addition, you can pass your host's RNG:

qemu-system-x86_64 \
    -object rng-random,filename=/dev/urandom,id=rng0 \
    -device virtio-rng-pci,rng=rng0 \
    -kernel vmlinuz \
    -initrd /tmp/initramfs.linux_amd64.cpio

SystemBoot

SystemBoot is a set of bootloaders written in Go. It is meant to be a distribution for LinuxBoot to create a system firmware + bootloader. All of these use kexec to boot. The commands are in cmds/boot. Parsers are available for GRUB, syslinux, and other config files to make the transition to LinuxBoot easier.

  • pxeboot: a network boot client that uses DHCP and HTTP or TFTP to get a boot configuration which can be parsed as PXELinux or iPXE configuration files to get a boot program.

  • boot: finds all bootable kernels on local disk, shows a menu, and boots them. Supports (basic) GRUB, (basic) syslinux, (non-EFI) BootLoaderSpec, and ESXi configurations.

More detailed information about the build process for a full LinuxBoot firmware image using u-root/systemboot and coreboot can be found in the LinuxBoot book chapter about LinuxBoot using coreboot, u-root and systemboot.

This project started as a loose collection of programs in u-root by various LinuxBoot contributors, as well as a personal experiment by Andrea Barberio that has since been merged in. It is now an effort of a broader community and graduated to a real project for system firmwares.

Compression

You can compress the initramfs. However, for xz compression, the kernel has some restrictions on the compression options and it is suggested to align the file to 512 byte boundaries:

xz --check=crc32 -9 --lzma2=dict=1MiB \
   --stdout /tmp/initramfs.linux_amd64.cpio \
   | dd conv=sync bs=512 \
   of=/tmp/initramfs.linux_amd64.cpio.xz

Getting Packages of TinyCore

Using the tcz command included in u-root, you can install tinycore linux packages for things you want.

You can use QEMU NAT to allow you to fetch packages. Let's suppose, for example, you want bash. Once u-root is running, you can do this:

% tcz bash

The tcz command computes and fetches all dependencies. If you can't get to tinycorelinux.net, or you want package fetching to be faster, you can run your own server for tinycore packages.

You can do this to get a local server using the u-root srvfiles command:

% srvfiles -p 80 -d path-to-local-tinycore-packages

Of course you have to fetch all those packages first somehow :-)

Build an Embeddable u-root

You can build the cpio image created by u-root into a Linux kernel via the CONFIG_INITRAMFS_SOURCE config variable or coreboot config variable, and further embed the kernel image into firmware as a coreboot payload.

In the kernel and coreboot case, you may need to configure ethernet. We have a dhclient command that works for both ipv4 and ipv6. Since v6 does not yet work that well for most people, a typical invocation looks like this:

% dhclient -ipv4 -ipv6=false

Or, on newer linux kernels (> 4.x) boot with ip=dhcp in the command line, assuming your kernel is configured to work that way.

Build Modes

u-root can create an initramfs in two different modes, specified by -build:

  • gbb mode: One busybox-like binary comprising all the Go tools you ask to include. See the gobusybox README for how it works. In this mode, u-root copies and rewrites the source of the tools you asked to include to be able to compile everything into one busybox-like binary.

  • binary mode: each specified binary is compiled separately and all binaries are added to the initramfs.

Updating Dependencies

go get -u
go mod tidy
go mod vendor

Building without network access

The u-root command supports building with workspace vendoring and module vendoring. In both of those cases, if all dependencies are found in the vendored directories, the build happens completely offline.

Read more in the mkuimage README.

u-root also still supports GO111MODULE=off builds.

Hardware

If you want to see u-root on real hardware, this board is a good start.

Using with Plan 9

U-root works with Plan 9. The best distro to use for it is 9front, as the 9front cpiofs works with newc-format cpio (the format of Linux initramfs, which u-root generates).

Here is a script for Plan 9. Once this script runs, all the u-root commands appear in /bin. You will need to have go1.22 installed on Plan 9; or create the u-root initramfs on some other system and copy it to Plan 9.

#!/bin/rc
u-root '-defaultsh=' '-initcmd=' '-shellbang=true'
fs/cpiofs /tmp/initram*cpio
bind -a /n/tapefs /
bind -a /bbin /bin

Contributions

For information about contributing, including how we sign off commits, please see CONTRIBUTING.md.

Improving existing commands (e.g., additional currently unsupported flags) is very welcome. In this case it is not even required to build an initramfs, just enter the cmds/ directory and start coding. A list of commands that are on the roadmap can be found here.

Website

The sources of u-root.org are inside the docs/ directory and are deployed to the gh-pages branch. The CNAME file is currently not part of the CI which deploys to the branch which shall be evaluated if this makes futures deployments easier.

Documentation

Overview

Command u-root builds CPIO archives with the given files and Go commands.

Directories

Path Synopsis
cmds
boot/boot command
Command boot allows to handover a system running linuxboot/u-root to a legacy preinstalled operating system by replacing the traditional bootloader path
Command boot allows to handover a system running linuxboot/u-root to a legacy preinstalled operating system by replacing the traditional bootloader path
boot/fitboot command
boot/pxeboot command
Command pxeboot implements PXE-based booting.
Command pxeboot implements PXE-based booting.
cluster/nodestats command
nodestats prints out vital statistics about a node as JSON.
nodestats prints out vital statistics about a node as JSON.
contrib/fbptcat command
core/backoff command
core/base64 command
base64 - encode and decode base64 from stdin or file to stdout
base64 - encode and decode base64 from stdin or file to stdout
core/basename command
Basename return name with leading path information removed.
Basename return name with leading path information removed.
core/blkid command
Blkid prints information about blocks.
Blkid prints information about blocks.
core/brctl command
core/cat command
cat concatenates files and prints them to stdout.
cat concatenates files and prints them to stdout.
core/chmod command
chmod changes mode bits (e.g.
chmod changes mode bits (e.g.
core/chroot command
core/cmp command
cmp compares two files and prints a message if their contents differ.
cmp compares two files and prints a message if their contents differ.
core/comm command
comm compares two files.
comm compares two files.
core/cp command
cp copies files.
cp copies files.
core/cpio command
cpio operates on cpio files using a cpio package It only implements basic cpio options.
cpio operates on cpio files using a cpio package It only implements basic cpio options.
core/date command
date prints the date.
date prints the date.
core/dd command
dd converts and copies a file.
dd converts and copies a file.
core/df command
df reports details of mounted filesystems.
df reports details of mounted filesystems.
core/dhclient command
dhclient sets up network config using DHCP.
dhclient sets up network config using DHCP.
core/dirname command
dirname prints out the directory name of one or more args.
dirname prints out the directory name of one or more args.
core/dmesg command
dmesg reads the Linux system log.
dmesg reads the Linux system log.
core/du command
core/echo command
echo writes its arguments separated by blanks and terminated by a newline on the standard output.
echo writes its arguments separated by blanks and terminated by a newline on the standard output.
core/false command
false returns 1.
false returns 1.
core/find command
Find finds files.
Find finds files.
core/free command
free reports usage information for physical memory and swap space.
free reports usage information for physical memory and swap space.
core/fusermount command
fusermount is a very limited replacement for the C fusermount.
fusermount is a very limited replacement for the C fusermount.
core/gosh command
core/gpgv command
gpgv validates a signature against a file.
gpgv validates a signature against a file.
core/gpt command
gpt reads and writes GPT headers.
gpt reads and writes GPT headers.
core/grep command
core/gzip command
gzip compresses files using gzip compression.
gzip compresses files using gzip compression.
core/head command
core/hexdump command
hexdump prints file content in hexadecimal.
hexdump prints file content in hexadecimal.
core/hostname command
hostname prints or changes the system's hostname.
hostname prints or changes the system's hostname.
core/hwclock command
hwclock reads or changes the hardware clock (RTC) in UTC format.
hwclock reads or changes the hardware clock (RTC) in UTC format.
core/id command
id displays the user id, group id, and groups of the calling process.
id displays the user id, group id, and groups of the calling process.
core/init command
init is u-root's standard userspace init process.
init is u-root's standard userspace init process.
core/insmod command
insmod inserts a module into the running Linux kernel.
insmod inserts a module into the running Linux kernel.
core/io command
io reads and writes to physical memory and ports.
io reads and writes to physical memory and ports.
core/ip command
ip manipulates network addresses, interfaces, routing, and other config.
ip manipulates network addresses, interfaces, routing, and other config.
core/kexec command
core/kill command
Kill kills processes.
Kill kills processes.
core/lddfiles command
lddfiles prints the arguments and all .so dependencies of those arguments
lddfiles prints the arguments and all .so dependencies of those arguments
core/ln command
Ln makes links to files.
Ln makes links to files.
core/lockmsrs command
lockmsrs locks important intel MSRs.
lockmsrs locks important intel MSRs.
core/losetup command
losetup sets up and controls loop devices.
losetup sets up and controls loop devices.
core/ls command
ls prints the contents of a directory.
ls prints the contents of a directory.
core/lsdrivers command
lsdrivers lists driver usage on Linux systems
lsdrivers lists driver usage on Linux systems
core/lsfd command
core/lsmod command
lsmod list currently loaded Linux kernel modules.
lsmod list currently loaded Linux kernel modules.
core/man command
man - print manual entry for command.
man - print manual entry for command.
core/man/data
Code generated by man/gen/gen.go.
Code generated by man/gen/gen.go.
core/man/gen command
core/md5sum command
md5sum prints an md5 hash generated from file contents.
md5sum prints an md5 hash generated from file contents.
core/mkdir command
mkdir makes a new directory.
mkdir makes a new directory.
core/mkfifo command
mkfifo creates a named pipe.
mkfifo creates a named pipe.
core/mknod command
Unmount a filesystem at the specified path.
Unmount a filesystem at the specified path.
core/mktemp command
Mktemp makes a temporary file (or directory)
Mktemp makes a temporary file (or directory)
core/more command
More pages through files without any terminal trickery.
More pages through files without any terminal trickery.
core/mount command
mount mounts a filesystem at the specified path.
mount mounts a filesystem at the specified path.
core/msr command
msr -- read and write MSRs with regular command or Forth
msr -- read and write MSRs with regular command or Forth
core/mv command
mv renames files and directories.
mv renames files and directories.
core/netcat command
netcat creates arbitrary TCP and UDP connections and listens and sends arbitrary data.
netcat creates arbitrary TCP and UDP connections and listens and sends arbitrary data.
core/netstat command
core/nohup command
nohup – invoke a utility immune to hangups.
nohup – invoke a utility immune to hangups.
core/ntpdate command
ntpdate uses NTP to adjust the system clock.
ntpdate uses NTP to adjust the system clock.
core/pci command
pci: show pci bus vendor ids and other info
pci: show pci bus vendor ids and other info
core/pidof command
core/ping command
Send icmp packets to a server to test network connectivity.
Send icmp packets to a server to test network connectivity.
core/poweroff command
poweroff turns the system off, without delay.
poweroff turns the system off, without delay.
core/printenv command
Print environment variables.
Print environment variables.
core/ps command
Print process information.
Print process information.
core/pwd command
Print name of current directory.
Print name of current directory.
core/readlink command
readlink display value of symbolic link file.
readlink display value of symbolic link file.
core/realpath command
core/rm command
Delete files.
Delete files.
core/rmmod command
Remove a module from the Linux kernel
Remove a module from the Linux kernel
core/rsdp command
rsdp allows to determine the ACPI RSDP structure address which could be passed to the boot command later on It must be executed at the system init as it relies on scanning the kernel messages which could be quickly filled up in some cases
rsdp allows to determine the ACPI RSDP structure address which could be passed to the boot command later on It must be executed at the system init as it relies on scanning the kernel messages which could be quickly filled up in some cases
core/scp command
Scp copies files between hosts on a network.
Scp copies files between hosts on a network.
core/seq command
Print a sequence of numbers.
Print a sequence of numbers.
core/service command
core/shasum command
shasum computes SHA checksums of files.
shasum computes SHA checksums of files.
core/shutdown command
shutdown halts, suspends, or reboots at a specified time, or immediately.
shutdown halts, suspends, or reboots at a specified time, or immediately.
core/sleep command
Delay for the specified amount of time.
Delay for the specified amount of time.
core/sluinit command
core/sort command
Sort lines.
Sort lines.
core/sshd command
core/strace command
strace is a simple multi-process syscall & signal tracer.
strace is a simple multi-process syscall & signal tracer.
core/strings command
Strings finds printable strings.
Strings finds printable strings.
core/stty command
The command works like this: stty [verb] [options] Verbs are: dump -- dump the json of the struct to stdout load -- read a json file from stdin and use it to set raw -- convenience command to set raw cooked -- convenience command to set cooked In common stty usage, options may be specified without a verb.
The command works like this: stty [verb] [options] Verbs are: dump -- dump the json of the struct to stdout load -- read a json file from stdin and use it to set raw -- convenience command to set raw cooked -- convenience command to set cooked In common stty usage, options may be specified without a verb.
core/sync command
core/tail command
core/tar command
Create and extract tar archives.
Create and extract tar archives.
core/tee command
Tee transcribes the standard input to the standard output and makes copies in the files.
Tee transcribes the standard input to the standard output and makes copies in the files.
core/time command
Time process execution.
Time process execution.
core/timeout command
core/touch command
touch changes file access and modification times.
touch changes file access and modification times.
core/tr command
core/true command
Returns 0.
Returns 0.
core/truncate command
Truncate - shrink or extend the size of a file to the specified size
Truncate - shrink or extend the size of a file to the specified size
core/ts command
ts prepends each line of stdin with a timestamp.
ts prepends each line of stdin with a timestamp.
core/tty command
core/umount command
Unmount a filesystem at the specified path.
Unmount a filesystem at the specified path.
core/uname command
Print build information about the kernel and machine.
Print build information about the kernel and machine.
core/uniq command
Uniq removes repeated lines.
Uniq removes repeated lines.
core/unmount command
Unmount unmounts new from old, or everything mounted on old if new is omitted.
Unmount unmounts new from old, or everything mounted on old if new is omitted.
core/unshare command
Disassociate parts of the process execution context.
Disassociate parts of the process execution context.
core/uptime command
Get the time the machine has been up Synopsis:
Get the time the machine has been up Synopsis:
core/watchdog command
watchdog interacts with /dev/watchdog.
watchdog interacts with /dev/watchdog.
core/watchdogd command
core/wc command
Wc counts lines, words, runes, syntactically–invalid UTF codes.
Wc counts lines, words, runes, syntactically–invalid UTF codes.
core/wget command
Wget reads one file from a url and writes to stdout.
Wget reads one file from a url and writes to stdout.
core/which command
Which locates a command.
Which locates a command.
core/xargs command
xargs reads space, tab, newline and end-of-file delimited strings from the standard input and executes utility with the strings as arguments.
xargs reads space, tab, newline and end-of-file delimited strings from the standard input and executes utility with the strings as arguments.
core/yes command
exp/acpicat command
acpicat cats ACPI tables from the kernel.
acpicat cats ACPI tables from the kernel.
exp/acpigrep command
grep a stream of ACPI tables by regexp
grep a stream of ACPI tables by regexp
exp/ansi command
Print ansi escape sequences.
Print ansi escape sequences.
exp/bootvars command
Command bootvars reads the current UEFI boot variables.
Command bootvars reads the current UEFI boot variables.
exp/bzimage command
bzImage is used to modify bzImage files.
bzImage is used to modify bzImage files.
exp/cbmem command
cbmem prints out coreboot mem table information in JSON by default, and also implements the basic cbmem -list and -console commands.
cbmem prints out coreboot mem table information in JSON by default, and also implements the basic cbmem -list and -console commands.
exp/cbmem/gen command
exp/console command
console implements a basic console.
console implements a basic console.
exp/crc command
Prints crc checksum of a file.
Prints crc checksum of a file.
exp/disk_unlock command
The disk_unlock command is used to unlock a disk drive with a HSS-derived password, and rescan the drive to enumerate the unlocked partitions.
The disk_unlock command is used to unlock a disk drive with a HSS-derived password, and rescan the drive to enumerate the unlocked partitions.
exp/dmidecode command
exp/dumpebda command
dumpebda reads and prints the Extended BIOS Data Area.
dumpebda reads and prints the Extended BIOS Data Area.
exp/dumpmemmap command
Command dumpmemmap prints different kernel interpretations of physical memory address space.
Command dumpmemmap prints different kernel interpretations of physical memory address space.
exp/ectool command
These should all implement io.ReadAt, with the address as the Offset; same for WriteAt.
These should all implement io.ReadAt, with the address as the Offset; same for WriteAt.
exp/ed command
address.go - contains methods for FileBuffer for line address resolution
address.go - contains methods for FileBuffer for line address resolution
exp/efivarfs command
exp/esxiboot command
exp/fbnetboot command
exp/fbsplash command
exp/fdtdump command
fdtdump prints a readable version of Flattened Device Tree or dtb.
fdtdump prints a readable version of Flattened Device Tree or dtb.
exp/field command
The `field` command reads newline-separated lines of data from either the standard input or the specified files.
The `field` command reads newline-separated lines of data from either the standard input or the specified files.
exp/fixrsdp command
fixrsdp copies the existing RSDP into the EBDA region in low mem.
fixrsdp copies the existing RSDP into the EBDA region in low mem.
exp/forth command
Forth is a forth interpreter.
Forth is a forth interpreter.
exp/freq command
Freq reads the given files (default standard input) and prints histograms of the character frequencies.
Freq reads the given files (default standard input) and prints histograms of the character frequencies.
exp/getty command
getty Open a TTY and invoke a shell There are no special options and no login support Also getty exits after starting the shell so if one exits the shell, there is no more shell!
getty Open a TTY and invoke a shell There are no special options and no login support Also getty exits after starting the shell so if one exits the shell, there is no more shell!
exp/hdparm command
hdparm performs control operations on disks.
hdparm performs control operations on disks.
exp/ipmidump command
Synopsis:
Synopsis:
exp/kconf command
exp/localboot command
exp/lsfabric command
exp/madeye command
madeye merges multiple architecture u-root initramfs to form a single universal initramfs.
madeye merges multiple architecture u-root initramfs to form a single universal initramfs.
exp/modprobe command
modprobe - Add and remove modules from the Linux Kernel
modprobe - Add and remove modules from the Linux Kernel
exp/netbootxyz command
exp/newsshd command
exp/nvme_unlock command
The nvme_unlock command is used to unlock a NVMe drive with a HSS-derived password, and rescan the drive to enumerate the unlocked partitions.
The nvme_unlock command is used to unlock a NVMe drive with a HSS-derived password, and rescan the drive to enumerate the unlocked partitions.
exp/page command
Synopsis:
Synopsis:
exp/partprobe command
partprobe prompts the OS to re-read partition tables.
partprobe prompts the OS to re-read partition tables.
exp/pflask command
exp/pox command
pox packages dynamic executable into an archive.
pox packages dynamic executable into an archive.
exp/pxeserver command
pxeserver is a test & lab PXE server that supports TFTP, HTTP, and DHCPv4.
pxeserver is a test & lab PXE server that supports TFTP, HTTP, and DHCPv4.
exp/readelf command
Dump the headers of an ELF file, from stdin or a set of files
Dump the headers of an ELF file, from stdin or a set of files
exp/readpe command
Dump the headers of a PE file.
Dump the headers of a PE file.
exp/run command
Run executes its arguments as a Go program.
Run executes its arguments as a Go program.
exp/rush command
our first builtin: cd
our first builtin: cd
exp/serial command
exp/smbios_transfer command
smbios_transfer sends SMBIOS tables to BMC through IPMI blob interfaces.
smbios_transfer sends SMBIOS tables to BMC through IPMI blob interfaces.
exp/smn command
smn: read or write registers in the System Management Network on AMD cpus
smn: read or write registers in the System Management Network on AMD cpus
exp/srvfiles command
Serve files on the network.
Serve files on the network.
exp/ssh command
SSH client.
SSH client.
exp/syscallfilter command
syscallfilter runs a command with a possibly empty set of filters:
syscallfilter runs a command with a possibly empty set of filters:
exp/systemboot command
exp/tac command
tac concatenates files and prints to stdout in reverse order, file by file
tac concatenates files and prints to stdout in reverse order, file by file
exp/tc command
exp/tcpdump command
exp/tcz command
exp/tftp command
exp/tftpd command
exp/traceroute command
exp/uefiboot command
exp/vboot command
exp/vmboot command
exp/watch command
watch periodically executes the executable specified in argument.
watch periodically executes the executable specified in argument.
exp/zbi command
zbi dumps the header of a Zircon boot image.
zbi dumps the header of a Zircon boot image.
exp/zimage command
zimage dumps the header of a zImage.
zimage dumps the header of a zImage.
extra/tsort command
fwtools/flash command
flash reads and writes to a flash chip.
flash reads and writes to a flash chip.
fwtools/spidev command
spidev communicates with the Linux spidev driver.
spidev communicates with the Linux spidev driver.
examples
uinit command
This is a basic init script.
This is a basic init script.
integration
pkg
acpi
Package acpi reads, modifies, and writes ACPI tables.
Package acpi reads, modifies, and writes ACPI tables.
acpi/fpdt
Package fpdt reads FPDT ACPI table and gets FPDT record information
Package fpdt reads FPDT ACPI table and gets FPDT record information
acpi/fpdt/fbpt
Package fbpt reads Firmware Basic Performance Table within ACPI FPDT Table.
Package fbpt reads Firmware Basic Performance Table within ACPI FPDT Table.
align
Package align provides helpers for doing uint alignment.
Package align provides helpers for doing uint alignment.
boot
Package boot is the high-level interface for booting another operating system from Linux using kexec.
Package boot is the high-level interface for booting another operating system from Linux using kexec.
boot/bls
Package bls parses systemd Boot Loader Spec config files.
Package bls parses systemd Boot Loader Spec config files.
boot/bootcmd
Package bootcmd handles common cleanup functions and flags that all boot commands should support.
Package bootcmd handles common cleanup functions and flags that all boot commands should support.
boot/boottest
Package boottest contains methods for comparing boot.OSImages to each other and to JSON representations of themselves for use in tests.
Package boottest contains methods for comparing boot.OSImages to each other and to JSON representations of themselves for use in tests.
boot/bzimage
Package bzimage implements decoding for bzImage files.
Package bzimage implements decoding for bzImage files.
boot/ebda
Package ebda looks for the Extended Bios Data Area (EBDA) pointer in /dev/mem, and provides access to the EBDA.
Package ebda looks for the Extended Bios Data Area (EBDA) pointer in /dev/mem, and provides access to the EBDA.
boot/esxi
Package esxi contains an ESXi boot config parser for disks and CDROMs.
Package esxi contains an ESXi boot config parser for disks and CDROMs.
boot/fit
Package fit provides tools to read and verify FIT kernel images See https://doc.coreboot.org/lib/payloads/fit.html
Package fit provides tools to read and verify FIT kernel images See https://doc.coreboot.org/lib/payloads/fit.html
boot/grub
Package grub implements a grub config file parser.
Package grub implements a grub config file parser.
boot/ibft
Package ibft defines the iSCSI Boot Firmware Table.
Package ibft defines the iSCSI Boot Firmware Table.
boot/image
Package image contains a parser for Arm64 Linux Image format.
Package image contains a parser for Arm64 Linux Image format.
boot/kexec
Package kexec implements kexec load and file load syscall API.
Package kexec implements kexec load and file load syscall API.
boot/linux
The linux package loads bzImage-based Linux kernels using the kexec_load system call.
The linux package loads bzImage-based Linux kernels using the kexec_load system call.
boot/localboot
Package localboot contains helper functions for booting off local disks.
Package localboot contains helper functions for booting off local disks.
boot/menu
Package menu displays a Terminal UI based text menu to choose boot options from.
Package menu displays a Terminal UI based text menu to choose boot options from.
boot/multiboot
Package multiboot implements bootloading multiboot kernels as defined by https://www.gnu.org/software/grub/manual/multiboot/multiboot.html.
Package multiboot implements bootloading multiboot kernels as defined by https://www.gnu.org/software/grub/manual/multiboot/multiboot.html.
boot/multiboot/internal/trampoline
Package trampoline sets machine to a specific state defined by multiboot v1 spec and jumps to the intended kernel.
Package trampoline sets machine to a specific state defined by multiboot v1 spec and jumps to the intended kernel.
boot/netboot
Package netboot provides a one-stop shop for netboot parsing needs.
Package netboot provides a one-stop shop for netboot parsing needs.
boot/netboot/ipxe
Package ipxe implements a trivial IPXE config file parser.
Package ipxe implements a trivial IPXE config file parser.
boot/netboot/pxe
Package pxe implements the PXE config file parsing.
Package pxe implements the PXE config file parsing.
boot/purgatory
Package purgatory provides several purgatories for use with kexec_load system call.
Package purgatory provides several purgatories for use with kexec_load system call.
boot/syslinux
Package syslinux implements a syslinux config file parser.
Package syslinux implements a syslinux config file parser.
boot/universalpayload
Package universalpayload supports to load FIT (Flat Image Tree) image.
Package universalpayload supports to load FIT (Flat Image Tree) image.
boot/zbi
Package zbi contains a parser for the Zircon boot image format.
Package zbi contains a parser for the Zircon boot image format.
boot/zimage
Package zimage contains a Parser for the arm zImage Linux format.
Package zimage contains a Parser for the arm zImage Linux format.
brctl
package brctl provides a Go interface to the Linux bridge control (brctl) command.
package brctl provides a Go interface to the Linux bridge control (brctl) command.
cluster/health
Package health is used for quick measuring of cluster health.
Package health is used for quick measuring of cluster health.
cmdline
Package cmdline is parser for kernel command-line args from /proc/cmdline.
Package cmdline is parser for kernel command-line args from /proc/cmdline.
cmos
Package cmos lets you read and write to cmos registers while doing basic checks on valid register selections.
Package cmos lets you read and write to cmos registers while doing basic checks on valid register selections.
core/base64
Package base64 implements the base64 core utility.
Package base64 implements the base64 core utility.
core/cat
Package cat implements the cat core utility.
Package cat implements the cat core utility.
core/chmod
Package chmod implements the chmod core utility.
Package chmod implements the chmod core utility.
core/cp
Package cp implements the cp core utility.
Package cp implements the cp core utility.
core/find
Package find implements the find core utility.
Package find implements the find core utility.
core/gzip
Package gzip implements the gzip command.
Package gzip implements the gzip command.
core/ls
Package ls implements the ls core utility.
Package ls implements the ls core utility.
core/mkdir
Package mkdir implements the mkdir core utility.
Package mkdir implements the mkdir core utility.
core/mktemp
Package mktemp implements the mktemp core utility.
Package mktemp implements the mktemp core utility.
core/mv
Package mv implements the mv core utility.
Package mv implements the mv core utility.
core/rm
Package rm implements the rm core utility.
Package rm implements the rm core utility.
core/shasum
Package shasum implements the shasum core utility.
Package shasum implements the shasum core utility.
core/tar
Package tar implements the tar command.
Package tar implements the tar command.
core/touch
Package touch implements the touch core utility.
Package touch implements the touch core utility.
core/xargs
Package xargs implements the xargs core utility.
Package xargs implements the xargs core utility.
cpio
Package cpio implements utilities for reading and writing cpio archives.
Package cpio implements utilities for reading and writing cpio archives.
curl
Package curl implements routines to fetch files given a URL.
Package curl implements routines to fetch files given a URL.
dhclient
Package dhclient allows for getting both DHCPv4 and DHCPv6 leases on multiple network interfaces in parallel.
Package dhclient allows for getting both DHCPv4 and DHCPv6 leases on multiple network interfaces in parallel.
dt
Package dt contains utilities for device tree.
Package dt contains utilities for device tree.
efivarfs
Package efivarfs allows interaction with efivarfs of the linux kernel.
Package efivarfs allows interaction with efivarfs of the linux kernel.
fb
fdsrv
Serves a file descriptor over an AF_UNIX socket when presented with a nonce.
Serves a file descriptor over an AF_UNIX socket when presented with a nonce.
finddrive
Package finddrive provides functionality to find an NVMe block device associated with a particular physical slot on the machine, based on information in the SMBIOS table.
Package finddrive provides functionality to find an NVMe block device associated with a particular physical slot on the machine, based on information in the SMBIOS table.
flash
Package flash provides higher-level functions such as reading, erasing, writing and programming the flash chip.
Package flash provides higher-level functions such as reading, erasing, writing and programming the flash chip.
flash/chips
Package chips contains chips known to work with the flash tool.
Package chips contains chips known to work with the flash tool.
flash/op
Package op contains available SPI opcodes.
Package op contains available SPI opcodes.
flash/sfdp
Package sfdp reads the SFDP (Serial Flash Discoverable Parameters) from a flash chip where supported.
Package sfdp reads the SFDP (Serial Flash Discoverable Parameters) from a flash chip where supported.
flash/spimock
Package spimock provides a fake SPI flash part for unit testing.
Package spimock provides a fake SPI flash part for unit testing.
forth
Package forth implements Forth parsing, which allows programs to use forth-like syntax to manipulate a stack of Cells.
Package forth implements Forth parsing, which allows programs to use forth-like syntax to manipulate a stack of Cells.
gpio
Package gpio provides functions for interacting with GPIO pins via the GPIO Sysfs Interface for Userspace.
Package gpio provides functions for interacting with GPIO pins via the GPIO Sysfs Interface for Userspace.
hsskey
Package hsskey provides functionality for generating a key for unlocking drives based on the following procedure:
Package hsskey provides functionality for generating a key for unlocking drives based on the following procedure:
ipmi
Package ipmi implements functions to communicate with the OpenIPMI driver interface.
Package ipmi implements functions to communicate with the OpenIPMI driver interface.
ipmi/blobs
Package blobs implements OpenBMC IPMI Blob Protocol commands.
Package blobs implements OpenBMC IPMI Blob Protocol commands.
ipmi/ocp
Package ocp implements OCP/Facebook-specific IPMI client functions.
Package ocp implements OCP/Facebook-specific IPMI client functions.
kmodule
Package kmodule interfaces with Linux kernel modules.
Package kmodule interfaces with Linux kernel modules.
ldd
ldd returns library dependencies of an executable.
ldd returns library dependencies of an executable.
libinit
Package libinit creates the environment and root file system for u-root.
Package libinit creates the environment and root file system for u-root.
logutil
Package logutil implements utilities for recording log output.
Package logutil implements utilities for recording log output.
ls
Package ls implements formatting tools to list files like the Linux ls tool.
Package ls implements formatting tools to list files like the Linux ls tool.
lsb
Package lsb implements parsing, marshaling, and manipulation of LSB-compliant init script metadata blocks, which are used to define dependencies, run levels, and other operational properties for initialization scripts in Unix-like systems.
Package lsb implements parsing, marshaling, and manipulation of LSB-compliant init script metadata blocks, which are used to define dependencies, run levels, and other operational properties for initialization scripts in Unix-like systems.
mei
Package mei implements a wrapper on top of Linux's MEI (Intel ME Interface, formerly known as HECI).
Package mei implements a wrapper on top of Linux's MEI (Intel ME Interface, formerly known as HECI).
mount
Package mount implements mounting, moving, and unmounting file systems.
Package mount implements mounting, moving, and unmounting file systems.
mount/block
Package block finds, mounts, and modifies block devices on Linux systems.
Package block finds, mounts, and modifies block devices on Linux systems.
mount/gpt
Package gpt implements reading and writing of GUID Partition tables.
Package gpt implements reading and writing of GUID Partition tables.
mount/loop
Package loop provides an interface to interacting with Linux loop devices.
Package loop provides an interface to interacting with Linux loop devices.
mount/mtd
Chips are made by vendors, and an individual vendor is defined by a 1 to 8 byte vendor id stored in the chip.
Chips are made by vendors, and an individual vendor is defined by a 1 to 8 byte vendor id stored in the chip.
mount/scuzz
Package scuzz supports direct access to SCSI or SATA devices.
Package scuzz supports direct access to SCSI or SATA devices.
msr
This file contains support functions for msr access for Linux.
This file contains support functions for msr access for Linux.
namespace
Package namespace parses name space description files https://plan9.io/magic/man2html/6/namespace
Package namespace parses name space description files https://plan9.io/magic/man2html/6/namespace
pci
pty
Package pty provides basic pty support.
Package pty provides basic pty support.
rand
Package rand implements cancelable reads from a cryptographically safe random number source.
Package rand implements cancelable reads from a cryptographically safe random number source.
rtc
securelaunch
Package securelaunch takes integrity measurements before launching the target system.
Package securelaunch takes integrity measurements before launching the target system.
securelaunch/config
Package config manages configuratino settings for secure launch.
Package config manages configuratino settings for secure launch.
securelaunch/eventlog
Package eventlog parses kernel event logs and saves the parsed data on a file on disk.
Package eventlog parses kernel event logs and saves the parsed data on a file on disk.
securelaunch/launcher
Package launcher boots the target kernel.
Package launcher boots the target kernel.
securelaunch/measurement
Package measurement provides different collectors to hash files, disks, dmi info and cpuid info.
Package measurement provides different collectors to hash files, disks, dmi info and cpuid info.
securelaunch/policy
Package policy locates and parses a JSON policy file.
Package policy locates and parses a JSON policy file.
securelaunch/tpm
Package tpm reads and extends pcrs with measurements.
Package tpm reads and extends pcrs with measurements.
sh
shlex
Package shlex is a simplified command-line shell-like argument parser.
Package shlex is a simplified command-line shell-like argument parser.
smbios
Package smbios parses SMBIOS tables into Go structures.
Package smbios parses SMBIOS tables into Go structures.
spidev
Package spidev wraps the Linux spidev driver and performs low-level SPI operations.
Package spidev wraps the Linux spidev driver and performs low-level SPI operations.
strace
Package strace traces Linux process events.
Package strace traces Linux process events.
strace/internal/abi
Package abi describes the interface between a kernel and userspace.
Package abi describes the interface between a kernel and userspace.
strace/internal/binary
Package binary translates between select fixed-sized types and a binary representation.
Package binary translates between select fixed-sized types and a binary representation.
syscallfilter
Package syscallfilter supports filtering child process events by system call or strace event.
Package syscallfilter supports filtering child process events by system call or strace event.
tc
termios
N.B.: While these functions are only used on Plan 9, they can be tested on any system: they are just doing file IO.
N.B.: While these functions are only used on Plan 9, they can be tested on any system: they are just doing file IO.
ts
Package ts contains a Transform to prepend a timestamp in front of each line.
Package ts contains a Transform to prepend a timestamp in front of each line.
tss
Package tss provides TPM 1.2/2.0 core functionality and abstraction layer for high-level functions
Package tss provides TPM 1.2/2.0 core functionality and abstraction layer for high-level functions
uefivars
Package uefivars manipulates UEFI variables, and can encode and decode the mixed-endianness GUIDs used by UEFI (and MS).
Package uefivars manipulates UEFI variables, and can encode and decode the mixed-endianness GUIDs used by UEFI (and MS).
uefivars/boot
Package boot manipulates UEFI boot variables, and can identify and mount the volume referenced by a boot var.
Package boot manipulates UEFI boot variables, and can identify and mount the volume referenced by a boot var.
uefivars/vartest
Package vartest contains utility functions for testing uefivars and subpackages.
Package vartest contains utility functions for testing uefivars and subpackages.
uflag
Package uflag supports u-root-custom flags as well as flag files.
Package uflag supports u-root-custom flags as well as flag files.
ulog
Package ulog exposes logging via a Go interface.
Package ulog exposes logging via a Go interface.
ulog/ulogtest
Package ulogtest implement the Logger interface via a test's testing.TB.Logf.
Package ulogtest implement the Logger interface via a test's testing.TB.Logf.
upath
Package upath contains utilities for dealing with symlinked paths.
Package upath contains utilities for dealing with symlinked paths.
uroot/test/foo command
uzip
Package uzip contains utilities for file system->zip and zip->file system conversions.
Package uzip contains utilities for file system->zip and zip->file system conversions.
vfile
Package vfile verifies files against a hash or signature.
Package vfile verifies files against a hash or signature.
vpd
watchdog
Package watchdog provides functions for interacting with the Linux watchdog.
Package watchdog provides functions for interacting with the Linux watchdog.
tools
build_perf command
Measure the performance of building all the Go commands under various GOGC values.
Measure the performance of building all the Go commands under various GOGC values.
checklicenses command
Run with `go run checklicenses.go`.
Run with `go run checklicenses.go`.
testramfs command
testramfs tests things, badly
testramfs tests things, badly
tinygobb command
tinygoize command
vpdbootmanager command

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL