A fully Go userland with Linux bootloaders! u-root can create a one-binary root file system (initramfs) containing a busybox-like set of tools written in Go.
[!IMPORTANT] TL;DR: When Go modules are enabled, you won't be able to run
u-root
from any arbitrary directory after this release.u-root
must be run somewhere with a Go module or Go workspace. (WithGO111MODULE=off
the behavior should be as it always has been.)
u-root
will now work exactly whengo build
works as well.Use Go workspaces to compile commands from multiple modules together locally. A tool called goanywhere can create a workspace on the fly. Check out the README for more.
Go workspaces are not as suitable to be committed to a git repository. The recommended method for source-control-committed multi-module commands is described by the mkuimage README.
This change pulls in https://github.com/u-root/gobusybox/pull/110, in which we stop supporting module builds without a go.mod. In essence, from this point forward, the u-root
tool will support builds exactly when go build
and go list
also work. https://github.com/u-root/gobusybox/pull/110 reduces a lot of maintenance burden, trivially starts supporting Go workspaces and Go module replace directives, and increases gobusybox code's readability.
Multi-module builds can be done easily with standard Go methods, as described in the README. Go workspaces, vendored Go workspaces, Go modules, and vendored Go modules are all supported. Completely offline builds can easily done with vendored Go modules or workspaces.
For ease of use, the goanywhere tool was created. goanywhere
creates a temporary directory with a Go workspace of the given commands, and then execs a binary passing along the Go command paths. Use like goanywhere ./u-root/cmds/core/{init,gosh} ./cpu/cmds/cpud -- u-root [other u-root args]
. This approaches the easy usability of u-root
up to this point.
goanywhere
does not work with templates. goanywhere
only accepts file system paths at this time.
This also fixes the issue where binary
mode builds didn't always work in the same cases where gbb
builds worked. Both are now always supported in the exact same circumstances.
This change also pulls in https://github.com/u-root/mkuimage/pull/28, in which we support generic template YAML files named ".mkuimage.yaml" in the current working directory or any of its parents. Templates support the existing command expansions, but also support configs (invoked with u-root -config=$config
) in which one can specify build configuration and mixed-builder (bb/binary) builds. They will be documented in a README at a later time.
[!NOTE]
If you have any issues, please file an issue and use the last release before this change, which is
v0.13.1
.
Full Changelog: https://github.com/u-root/u-root/compare/v0.13.1...v0.14.0
Maintenance release before the anticipated breaking change of https://github.com/u-root/u-root/pull/2923.
#2914 fixed a DHCP client forever hang introduced by #2845 in cases where the link never comes up.
cmds/boot/{systemboot,fbnetboot,localboot}
have been moved to cmds/exp/{systemboot,fbnetboot,localboot}
as they are less maintained than the remaining boot commands in cmds/boot
.
Full Changelog: https://github.com/u-root/u-root/compare/v0.13.0...v0.13.1
cmds/fwtools/flash
command! Thank you @rminnich!cmds/core/nohup
, like the regular nohup
utility ("invoke a utility immune to hangups"). Thank you @binjip978!cmds/exp/dumpmemmap
, parses and dumps every interpretation of physical memory available on the system (/proc/iomem
, /sys/firmware/memmap
, /sys/firmware/fdt
, and /sys/kernel/debug/memblock
).Full Changelog: https://github.com/u-root/u-root/compare/v0.12.0...v0.13.0
A lot has changed in ~1 year. The build system has better module support. Some improvements to the boot infrastructure. A lot of tinygo support. A better gosh shell.
Full Changelog: https://github.com/u-root/u-root/compare/v0.11.0...v0.12.0
-cmdline
to fbnetboot
to override kernel cmdline args by @staticfloat in https://github.com/u-root/u-root/pull/2524
Full Changelog: https://github.com/u-root/u-root/compare/v0.10.0...v0.11.0
Create v0.10.0 release notes