u-root

command module
v0.14.0 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2024 License: BSD-3-Clause Imports: 11 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.

[!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.)

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.

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.

Documentation

Overview

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

Directories

Path Synopsis
cmds
boot/boot
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/pxeboot
Command pxeboot implements PXE-based booting.
Command pxeboot implements PXE-based booting.
core/basename
Basename return name with leading path information removed.
Basename return name with leading path information removed.
core/blkid
Blkid prints information about blocks.
Blkid prints information about blocks.
core/cat
cat concatenates files and prints them to stdout.
cat concatenates files and prints them to stdout.
core/chmod
chmod changes mode bits (e.g.
chmod changes mode bits (e.g.
core/cmp
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
comm compares two files.
comm compares two files.
core/cp
cp copies files.
cp copies files.
core/cpio
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
date prints the date.
date prints the date.
core/dd
dd converts and copies a file.
dd converts and copies a file.
core/df
df reports details of mounted filesystems.
df reports details of mounted filesystems.
core/dhclient
dhclient sets up network config using DHCP.
dhclient sets up network config using DHCP.
core/dirname
dirname prints out the directory name of one or more args.
dirname prints out the directory name of one or more args.
core/dmesg
dmesg reads the system log.
dmesg reads the system log.
core/echo
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
false returns 1.
false returns 1.
core/find
Find finds files.
Find finds files.
core/free
free reports usage information for physical memory and swap space.
free reports usage information for physical memory and swap space.
core/fusermount
fusermount is a very limited replacement for the C fusermount.
fusermount is a very limited replacement for the C fusermount.
core/gpgv
gpgv validates a signature against a file.
gpgv validates a signature against a file.
core/gpt
gpt reads and writes GPT headers.
gpt reads and writes GPT headers.
core/gzip
gzip compresses files using gzip compression.
gzip compresses files using gzip compression.
core/hexdump
hexdump prints file content in hexadecimal.
hexdump prints file content in hexadecimal.
core/hostname
hostname prints or changes the system's hostname.
hostname prints or changes the system's hostname.
core/hwclock
hwclock reads or changes the hardware clock (RTC) in UTC format.
hwclock reads or changes the hardware clock (RTC) in UTC format.
core/id
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
init is u-root's standard userspace init process.
init is u-root's standard userspace init process.
core/insmod
insmod inserts a module into the running Linux kernel.
insmod inserts a module into the running Linux kernel.
core/io
io reads and writes to physical memory and ports.
io reads and writes to physical memory and ports.
core/ip
ip manipulates network addresses, interfaces, routing, and other config.
ip manipulates network addresses, interfaces, routing, and other config.
core/kill
Kill kills processes.
Kill kills processes.
core/lddfiles
lddfiles prints the arguments and all .so dependencies of those arguments
lddfiles prints the arguments and all .so dependencies of those arguments
core/ln
Ln makes links to files.
Ln makes links to files.
core/lockmsrs
lockmsrs locks important intel MSRs.
lockmsrs locks important intel MSRs.
core/losetup
losetup sets up and controls loop devices.
losetup sets up and controls loop devices.
core/ls
ls prints the contents of a directory.
ls prints the contents of a directory.
core/lsdrivers
lsdrivers lists driver usage on Linux systems
lsdrivers lists driver usage on Linux systems
core/lsmod
lsmod list currently loaded Linux kernel modules.
lsmod list currently loaded Linux kernel modules.
core/man
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/md5sum
md5sum prints an md5 hash generated from file contents.
md5sum prints an md5 hash generated from file contents.
core/mkdir
mkdir makes a new directory.
mkdir makes a new directory.
core/mkfifo
mkfifo creates a named pipe.
mkfifo creates a named pipe.
core/mknod
Unmount a filesystem at the specified path.
Unmount a filesystem at the specified path.
core/mktemp
Mktemp makes a temporary file (or directory)
Mktemp makes a temporary file (or directory)
core/more
More pages through files without any terminal trickery.
More pages through files without any terminal trickery.
core/mount
mount mounts a filesystem at the specified path.
mount mounts a filesystem at the specified path.
core/msr
msr -- read and write MSRs with regular command or Forth
msr -- read and write MSRs with regular command or Forth
core/mv
mv renames files and directories.
mv renames files and directories.
core/netcat
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/nohup
nohup – invoke a utility immune to hangups.
nohup – invoke a utility immune to hangups.
core/ntpdate
ntpdate uses NTP to adjust the system clock.
ntpdate uses NTP to adjust the system clock.
core/pci
pci: show pci bus vendor ids and other info
pci: show pci bus vendor ids and other info
core/ping
Send icmp packets to a server to test network connectivity.
Send icmp packets to a server to test network connectivity.
core/poweroff
poweroff turns the system off, without delay.
poweroff turns the system off, without delay.
core/printenv
Print environment variables.
Print environment variables.
core/ps
Print process information.
Print process information.
core/pwd
Print name of current directory.
Print name of current directory.
core/readlink
readlink display value of symbolic link file.
readlink display value of symbolic link file.
core/rm
Delete files.
Delete files.
core/rmmod
Remove a module from the Linux kernel
Remove a module from the Linux kernel
core/rsdp
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
Scp copies files between hosts on a network.
Scp copies files between hosts on a network.
core/seq
Print a sequence of numbers.
Print a sequence of numbers.
core/shutdown
shutdown halts, suspends, or reboots at a specified time, or immediately.
shutdown halts, suspends, or reboots at a specified time, or immediately.
core/sleep
Delay for the specified amount of time.
Delay for the specified amount of time.
core/sort
Sort lines.
Sort lines.
core/strace
strace is a simple multi-process syscall & signal tracer.
strace is a simple multi-process syscall & signal tracer.
core/strings
Strings finds printable strings.
Strings finds printable strings.
core/stty
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/tar
Create and extract tar archives.
Create and extract tar archives.
core/tee
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
Time process execution.
Time process execution.
core/true
Returns 0.
Returns 0.
core/truncate
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
ts prepends each line of stdin with a timestamp.
ts prepends each line of stdin with a timestamp.
core/umount
Unmount a filesystem at the specified path.
Unmount a filesystem at the specified path.
core/uname
Print build information about the kernel and machine.
Print build information about the kernel and machine.
core/uniq
Uniq removes repeated lines.
Uniq removes repeated lines.
core/unmount
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
Disassociate parts of the process execution context.
Disassociate parts of the process execution context.
core/uptime
Get the time the machine has been up Synopsis:
Get the time the machine has been up Synopsis:
core/watchdog
watchdog interacts with /dev/watchdog.
watchdog interacts with /dev/watchdog.
core/watchdogd
watchdogd is a background daemon for petting the watchdog.
watchdogd is a background daemon for petting the watchdog.
core/wc
Wc counts lines, words, runes, syntactically–invalid UTF codes.
Wc counts lines, words, runes, syntactically–invalid UTF codes.
core/wget
Wget reads one file from a url and writes to stdout.
Wget reads one file from a url and writes to stdout.
core/which
Which locates a command.
Which locates a command.
exp/acpicat
acpicat cats ACPI tables from the kernel.
acpicat cats ACPI tables from the kernel.
exp/acpigrep
grep a stream of ACPI tables by regexp
grep a stream of ACPI tables by regexp
exp/ansi
Print ansi escape sequences.
Print ansi escape sequences.
exp/bootvars
Command bootvars reads the current UEFI boot variables.
Command bootvars reads the current UEFI boot variables.
exp/bzimage
bzImage is used to modify bzImage files.
bzImage is used to modify bzImage files.
exp/cbmem
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/console
console implements a basic console.
console implements a basic console.
exp/crc
Prints crc checksum of a file.
Prints crc checksum of a file.
exp/disk_unlock
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/dumpebda
dumpebda reads and prints the Extended BIOS Data Area.
dumpebda reads and prints the Extended BIOS Data Area.
exp/dumpmemmap
Command dumpmemmap prints different kernel interpretations of physical memory address space.
Command dumpmemmap prints different kernel interpretations of physical memory address space.
exp/ectool
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
address.go - contains methods for FileBuffer for line address resolution
address.go - contains methods for FileBuffer for line address resolution
exp/fdtdump
fdtdump prints a readable version of Flattened Device Tree or dtb.
fdtdump prints a readable version of Flattened Device Tree or dtb.
exp/field
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
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
Forth is a forth interpreter.
Forth is a forth interpreter.
exp/freq
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
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
hdparm performs control operations on disks.
hdparm performs control operations on disks.
exp/ipmidump
Synopsis:
Synopsis:
exp/madeye
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
modprobe - Add and remove modules from the Linux Kernel
modprobe - Add and remove modules from the Linux Kernel
exp/nvme_unlock
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
Synopsis:
Synopsis:
exp/partprobe
partprobe prompts the OS to re-read partition tables.
partprobe prompts the OS to re-read partition tables.
exp/pox
pox packages dynamic executable into an archive.
pox packages dynamic executable into an archive.
exp/pxeserver
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
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
Dump the headers of a PE file.
Dump the headers of a PE file.
exp/run
Run executes its arguments as a Go program.
Run executes its arguments as a Go program.
exp/rush
our first builtin: cd
our first builtin: cd
exp/smbios_transfer
smbios_transfer sends SMBIOS tables to BMC through IPMI blob interfaces.
smbios_transfer sends SMBIOS tables to BMC through IPMI blob interfaces.
exp/smn
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
Serve files on the network.
Serve files on the network.
exp/ssh
SSH client.
SSH client.
exp/syscallfilter
syscallfilter runs a command with a possibly empty set of filters:
syscallfilter runs a command with a possibly empty set of filters:
exp/tac
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/watch
watch periodically executes the executable specified in argument.
watch periodically executes the executable specified in argument.
exp/zbi
zbi dumps the header of a Zircon boot image.
zbi dumps the header of a Zircon boot image.
exp/zimage
zimage dumps the header of a zImage.
zimage dumps the header of a zImage.
fwtools/flash
flash reads and writes to a flash chip.
flash reads and writes to a flash chip.
fwtools/spidev
spidev communicates with the Linux spidev driver.
spidev communicates with the Linux spidev driver.
examples
uinit
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/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.
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.
cp
Package cp implements routines to copy files.
Package cp implements routines to copy files.
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.
find
Package find searches for files in a directory hierarchy recursively.
Package find searches for files in a directory hierarchy recursively.
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.
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/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.
termios
Package termios implements basic termios operations including getting a tty struct, termio struct, a winsize struct, and setting raw mode.
Package termios implements basic termios operations including getting a tty struct, termio struct, a winsize struct, and setting raw mode.
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.
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
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
Run with `go run checklicenses.go`.
Run with `go run checklicenses.go`.
testramfs
testramfs tests things, badly
testramfs tests things, badly

Jump to

Keyboard shortcuts

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