gokrazy will arrange for each included package to be started at boot. For
example, given the following instance config.json (open in your editor using
gok edit):
{
"Hostname": "docs",
"Packages": [
"github.com/gokrazy/fbstatus",
"github.com/gokrazy/hello",
"github.com/gokrazy/serial-busybox",
"github.com/gokrazy/breakglass"
]
}
…gokrazy will start the fbstatus, hello, serial-busybox and breakglass
programs.
This article shows how you can configure different aspects of individual packages.
Each bit of configuration is nested under the PackageConfig map field in your
instance’s config.json, see Instance Config Reference →
PackageConfig. The map is keyed by
package name (from the Packages field), and each map entry can have the
following fields:
CommandLineFlags for Command-line flagsEnvironment for Environment variablesGoBuildFlags for Go build flagsExtraFilePaths or ExtraFileContents for Extra filesThe breakglass package provides emergency/debugging access to a gokrazy installation.
To enable SSH port forwardings to localhost, set the -forward flag to loopback:
{
"PackageConfig": {
"github.com/gokrazy/breakglass": {
"CommandLineFlags": [
"-forward=loopback"
]
}
},
…
}
Environment variables such
as the Go runtime’s GODEBUG variable can be
set as follows:
{
"PackageConfig": {
"github.com/gokrazy/breakglass": {
"Environment": [
"GODEBUG=gctrace=1"
]
}
},
…
}
If you want to influence the build of the package at image-creation time (as opposed to runtime), you can specify flags to be passed to the Go build invocation.
This example overwrites the value of the world
variable
using the -X linker flag, which is a common
technique to embed version information:
{
"PackageConfig": {
"github.com/gokrazy/hello": {
"GoBuildFlags": [
"-ldflags=-X main.world=Welt"
]
}
},
…
}
If your program needs extra files to be present in gokrazy’s root file system
image at a specific location, you can add them with the extrafiles mechanism:
{
"PackageConfig": {
"github.com/caddyserver/caddy/v2/cmd/caddy": {
"ExtraFileContents": {
"/etc/caddy/Caddyfile": "http://:80 {
root * /tmp
file_server browse
}
"
}
}
},
…
}
Or, if managing the file contents within the config.json becomes unwieldy, you
can manage it in a separate file:
cat > ~/gokrazy/hello/Caddyfile <<'EOT'
http://:80 {
root * /tmp
file_server browse
}
EOT
{
"PackageConfig": {
"github.com/caddyserver/caddy/v2/cmd/caddy": {
"ExtraFilePaths": {
"/etc/caddy/Caddyfile": "Caddyfile"
}
}
},
…
}