container: provide usage example
All checks were successful
Test / Create distribution (push) Successful in 39s
Test / Sandbox (push) Successful in 2m17s
Test / Hakurei (push) Successful in 3m15s
Test / Sandbox (race detector) (push) Successful in 4m12s
Test / Hpkg (push) Successful in 4m16s
Test / Hakurei (race detector) (push) Successful in 5m7s
Test / Flake checks (push) Successful in 1m29s
All checks were successful
Test / Create distribution (push) Successful in 39s
Test / Sandbox (push) Successful in 2m17s
Test / Hakurei (push) Successful in 3m15s
Test / Sandbox (race detector) (push) Successful in 4m12s
Test / Hpkg (push) Successful in 4m16s
Test / Hakurei (race detector) (push) Successful in 5m7s
Test / Flake checks (push) Successful in 1m29s
This requires cgo so unfortunately will not run in the playground. Signed-off-by: Ophestra <cat@gensokyo.uk>
This commit is contained in:
parent
b7406cc4c4
commit
299685775a
@ -56,7 +56,7 @@ func NewAbs(pathname string) (*Absolute, error) {
|
||||
// MustAbs calls [NewAbs] and panics on error.
|
||||
func MustAbs(pathname string) *Absolute {
|
||||
if a, err := NewAbs(pathname); err != nil {
|
||||
panic(err.Error())
|
||||
panic(err)
|
||||
} else {
|
||||
return a
|
||||
}
|
||||
|
||||
@ -84,9 +84,9 @@ func TestNewAbs(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
defer func() {
|
||||
wantPanic := `path "etc" is not absolute`
|
||||
wantPanic := &AbsoluteError{Pathname: "etc"}
|
||||
|
||||
if r := recover(); r != wantPanic {
|
||||
if r := recover(); !reflect.DeepEqual(r, wantPanic) {
|
||||
t.Errorf("MustAbs: panic = %v; want %v", r, wantPanic)
|
||||
}
|
||||
}()
|
||||
|
||||
@ -21,6 +21,7 @@ import (
|
||||
"hakurei.app/command"
|
||||
"hakurei.app/container"
|
||||
"hakurei.app/container/check"
|
||||
"hakurei.app/container/fhs"
|
||||
"hakurei.app/container/seccomp"
|
||||
"hakurei.app/container/std"
|
||||
"hakurei.app/container/vfs"
|
||||
@ -29,6 +30,45 @@ import (
|
||||
"hakurei.app/message"
|
||||
)
|
||||
|
||||
// Note: this package requires cgo, which is unavailable in the Go playground.
|
||||
func Example() {
|
||||
// Must be called early if the current process starts containers.
|
||||
container.TryArgv0(nil)
|
||||
|
||||
// Configure the container.
|
||||
z := container.New(context.Background(), nil)
|
||||
z.Hostname = "hakurei-example"
|
||||
z.Proc(fhs.AbsProc).Dev(fhs.AbsDev, true)
|
||||
z.Stdin, z.Stdout, z.Stderr = os.Stdin, os.Stdout, os.Stderr
|
||||
|
||||
// Bind / for demonstration.
|
||||
z.Bind(fhs.AbsRoot, fhs.AbsRoot, 0)
|
||||
if name, err := exec.LookPath("hostname"); err != nil {
|
||||
panic(err)
|
||||
} else {
|
||||
z.Path = check.MustAbs(name)
|
||||
}
|
||||
|
||||
// This completes the first stage of container setup and starts the container init process.
|
||||
// The new process blocks until the Serve method is called.
|
||||
if err := z.Start(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// This serves the setup payload to the container init process,
|
||||
// starting the second stage of container setup.
|
||||
if err := z.Serve(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Must be called if the Start method succeeds.
|
||||
if err := z.Wait(); err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// Output: hakurei-example
|
||||
}
|
||||
|
||||
func TestStartError(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
|
||||
@ -24,6 +24,7 @@
|
||||
|
||||
# for check
|
||||
util-linux,
|
||||
nettools,
|
||||
|
||||
glibc, # for ldd
|
||||
withStatic ? stdenv.hostPlatform.isStatic,
|
||||
@ -98,6 +99,9 @@ buildGoModule rec {
|
||||
nativeBuildInputs = [
|
||||
pkg-config
|
||||
makeBinaryWrapper
|
||||
|
||||
# for container example
|
||||
nettools
|
||||
];
|
||||
|
||||
postInstall =
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user