Documentation
¶
Overview ¶
Package libinit creates the environment and root file system for u-root.
Index ¶
- Variables
- func Command(bin string, m ...CommandModifier) *exec.Cmd
- func Create(namespace []Creator, optional bool)
- func CreateRootfs()
- func GetModulesFromCmdline(m *InitModuleLoader) ([]string, error)
- func GetModulesFromConf(pattern string) ([]string, error)
- func InstallAllModules() error
- func InstallModules(m *InitModuleLoader, modules []string)
- func InstallModulesFromDir(pattern string, loader *InitModuleLoader) error
- func NetInit()
- func RunCommands(debug func(string, ...interface{}), commands ...*exec.Cmd) int
- func SetEnv()
- func WaitOrphans() uint
- type CommandModifier
- type CpDir
- type Creator
- type Dev
- type Dir
- type InitModuleLoader
- type Mount
- type Symlink
Constants ¶
This section is empty.
Variables ¶
var ( // These have to be created / mounted first, so that the logging works correctly. PreNamespace = []Creator{ Dir{Name: "/dev", Mode: 0o777}, Mount{Source: "devtmpfs", Target: "/dev", FSType: "devtmpfs"}, } Namespace = []Creator{ Dir{Name: "/buildbin", Mode: 0o777}, Dir{Name: "/ubin", Mode: 0o777}, Dir{Name: "/tmp", Mode: 0o777}, Dir{Name: "/env", Mode: 0o777}, Dir{Name: "/tcz", Mode: 0o777}, Dir{Name: "/lib", Mode: 0o777}, Dir{Name: "/usr/lib", Mode: 0o777}, Dir{Name: "/var/log", Mode: 0o777}, Dir{Name: "/go/pkg/linux_amd64", Mode: 0o777}, Dir{Name: "/etc", Mode: 0o777}, Dir{Name: "/proc", Mode: 0o555}, Mount{Source: "proc", Target: "/proc", FSType: "proc"}, Mount{Source: "tmpfs", Target: "/tmp", FSType: "tmpfs"}, Dev{Name: "/dev/tty", Mode: unix.S_IFCHR | 0o666, Dev: 0x0500}, Dev{Name: "/dev/urandom", Mode: unix.S_IFCHR | 0o444, Dev: 0x0109}, Dev{Name: "/dev/port", Mode: unix.S_IFCHR | 0o640, Dev: 0x0104}, Dev{Name: "/dev/ttyhvc0", Mode: unix.S_IFCHR | 0o666, Dev: 0xe500}, Dir{Name: "/dev/pts", Mode: 0o777}, Mount{Source: "devpts", Target: "/dev/pts", FSType: "devpts", Opts: "newinstance,ptmxmode=666,gid=5,mode=620"}, Symlink{NewPath: "/dev/ptmx", Target: "/dev/pts/ptmx"}, Dir{Name: "/dev/shm", Mode: 0o777}, Mount{Source: "tmpfs", Target: "/dev/shm", FSType: "tmpfs"}, Dir{Name: "/sys", Mode: 0o555}, Mount{Source: "sysfs", Target: "/sys", FSType: "sysfs"}, Mount{Source: "securityfs", Target: "/sys/kernel/security", FSType: "securityfs"}, Mount{Source: "efivarfs", Target: "/sys/firmware/efi/efivars", FSType: "efivarfs"}, Mount{Source: "debugfs", Target: "/sys/kernel/debug", FSType: "debugfs"}, CpDir{Source: "/etc", Target: "/tmp/etc"}, Mount{Source: "/tmp/etc", Target: "/etc", FSType: "tmpfs", Flags: unix.MS_BIND}, } // cgroups are optional for most u-root users, especially // LinuxBoot/NERF. Some users use u-root for container stuff. CgroupsNamespace = []Creator{ Mount{Source: "cgroup", Target: "/sys/fs/cgroup", FSType: "tmpfs"}, Dir{Name: "/sys/fs/cgroup/memory", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/freezer", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/devices", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/cpu,cpuacct", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/blkio", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/cpuset", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/pids", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/net_cls,net_prio", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/hugetlb", Mode: 0o555}, Dir{Name: "/sys/fs/cgroup/perf_event", Mode: 0o555}, Symlink{NewPath: "/sys/fs/cgroup/cpu", Target: "/sys/fs/cgroup/cpu,cpuacct"}, Symlink{NewPath: "/sys/fs/cgroup/cpuacct", Target: "/sys/fs/cgroup/cpu,cpuacct"}, Symlink{NewPath: "/sys/fs/cgroup/net_cls", Target: "/sys/fs/cgroup/net_cls,net_prio"}, Symlink{NewPath: "/sys/fs/cgroup/net_prio", Target: "/sys/fs/cgroup/net_cls,net_prio"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/memory", FSType: "cgroup", Opts: "memory"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/freezer", FSType: "cgroup", Opts: "freezer"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/devices", FSType: "cgroup", Opts: "devices"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/cpu,cpuacct", FSType: "cgroup", Opts: "cpu,cpuacct"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/blkio", FSType: "cgroup", Opts: "blkio"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/cpuset", FSType: "cgroup", Opts: "cpuset"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/pids", FSType: "cgroup", Opts: "pids"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/net_cls,net_prio", FSType: "cgroup", Opts: "net_cls,net_prio"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/hugetlb", FSType: "cgroup", Opts: "hugetlb"}, Mount{Source: "cgroup", Target: "/sys/fs/cgroup/perf_event", FSType: "cgroup", Opts: "perf_event"}, } )
var ErrNoModulesFound = fmt.Errorf("no modules found")
ErrNoModulesFound is the error returned when InstallModulesFromDir does not find any valid modules in the path.
Functions ¶
func Command ¶
func Command(bin string, m ...CommandModifier) *exec.Cmd
Command constructs an *exec.Cmd object.
func GetModulesFromCmdline ¶ added in v0.10.0
func GetModulesFromCmdline(m *InitModuleLoader) ([]string, error)
GetModulesFromCmdline finds kernel modules from the modules_load kernel parameter
func GetModulesFromConf ¶ added in v0.10.0
GetModulesFromConf finds kernel modules from .conf files in /lib/modules-load.d/
func InstallAllModules ¶
func InstallAllModules() error
InstallAllModules installs kernel modules form the following locations in order: - .ko files from /lib/modules - modules found in .conf files from /lib/modules-load.d/ - modules found in the cmdline argument modules_load= separated by , Useful for modules that need to be loaded for boot (ie a network driver needed for netboot). It skips over blacklisted modules in excludedMods.
func InstallModules ¶
func InstallModules(m *InitModuleLoader, modules []string)
InstallModules installs the passed modules using the InitModuleLoader
func InstallModulesFromDir ¶ added in v0.10.0
func InstallModulesFromDir(pattern string, loader *InitModuleLoader) error
InstallModulesFromDir installs kernel modules (.ko files) from /lib/modules that match the given pattern, skipping those in the exclude list.
func RunCommands ¶
FIX ME: make it not linux-specific RunCommands runs commands in sequence.
RunCommands returns how many commands existed and were attempted to run.
commands must refer to absolute paths at the moment.
func WaitOrphans ¶
func WaitOrphans() uint
WaitOrphans waits for all remaining processes on the system to exit.
Types ¶
type CommandModifier ¶
CommandModifier makes *exec.Cmd construction modular.
func WithArguments ¶
func WithArguments(arg ...string) CommandModifier
WithArguments adds command-line arguments to a command.
func WithCloneFlags ¶
func WithCloneFlags(flags uintptr) CommandModifier
WithCloneFlags adds clone(2) flags to the *exec.Cmd.
func WithTTYControl ¶
func WithTTYControl(ctty bool) CommandModifier
WithTTYControl turns on controlling the TTY on this command.
type InitModuleLoader ¶ added in v0.10.0
type InitModuleLoader struct { Cmdline *cmdline.CmdLine Prober func(name string, modParameters string) error ExcludedMods map[string]bool }
InitModuleLoader wraps the resources we need for early module loading
func NewInitModuleLoader ¶ added in v0.10.0
func NewInitModuleLoader() *InitModuleLoader
func (*InitModuleLoader) IsExcluded ¶ added in v0.10.0
func (i *InitModuleLoader) IsExcluded(mod string) bool
func (*InitModuleLoader) LoadModule ¶ added in v0.10.0
func (i *InitModuleLoader) LoadModule(mod string) error