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"
}
}
},
…
}