To reduce bot traffic you must login to view /lordwelch/gokrazy/commit/64a92c26fe458f69beaa04f2b7a821901ab258e5?files=docs%2Fuserguide%2Frsync-backups.
The GitHub login only links via username.

Files
2026-06-25 19:32:06 +02:00

356 lines
30 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html lang="en-us" dir="ltr" itemscope itemtype="http://schema.org/Article" data-r-output-format="html">
<head>
<meta charset="utf-8">
<meta name="viewport" content="height=device-height, width=device-width, initial-scale=1.0, minimum-scale=1.0">
<meta name="generator" content="Hugo 0.161.1">
<meta name="generator" content="Relearn 8.2.0+220806ce3ced8264fbdd693f77f28216a8a1b6ae">
<meta name="description" content="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):
{ &#34;Hostname&#34;: &#34;docs&#34;, &#34;Packages&#34;: [ &#34;github.com/gokrazy/fbstatus&#34;, &#34;github.com/gokrazy/hello&#34;, &#34;github.com/gokrazy/serial-busybox&#34;, &#34;github.com/gokrazy/breakglass&#34; ] } …gokrazy will start the fbstatus, hello, serial-busybox and breakglass programs.
Package config This article shows how you can configure different aspects of individual packages.">
<meta name="author" content="">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Package config: flags, environment variables, extra files :: gokrazy">
<meta name="twitter:description" content="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):
{ &#34;Hostname&#34;: &#34;docs&#34;, &#34;Packages&#34;: [ &#34;github.com/gokrazy/fbstatus&#34;, &#34;github.com/gokrazy/hello&#34;, &#34;github.com/gokrazy/serial-busybox&#34;, &#34;github.com/gokrazy/breakglass&#34; ] } …gokrazy will start the fbstatus, hello, serial-busybox and breakglass programs.
Package config This article shows how you can configure different aspects of individual packages.">
<meta property="og:url" content="https://gokrazy.org/userguide/package-config/index.html">
<meta property="og:site_name" content="gokrazy">
<meta property="og:title" content="Package config: flags, environment variables, extra files :: gokrazy">
<meta property="og:description" content="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):
{ &#34;Hostname&#34;: &#34;docs&#34;, &#34;Packages&#34;: [ &#34;github.com/gokrazy/fbstatus&#34;, &#34;github.com/gokrazy/hello&#34;, &#34;github.com/gokrazy/serial-busybox&#34;, &#34;github.com/gokrazy/breakglass&#34; ] } …gokrazy will start the fbstatus, hello, serial-busybox and breakglass programs.
Package config This article shows how you can configure different aspects of individual packages.">
<meta property="og:locale" content="en_us">
<meta property="og:type" content="article">
<meta property="article:section" content="Configuration">
<meta itemprop="name" content="Package config: flags, environment variables, extra files :: gokrazy">
<meta itemprop="description" content="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):
{ &#34;Hostname&#34;: &#34;docs&#34;, &#34;Packages&#34;: [ &#34;github.com/gokrazy/fbstatus&#34;, &#34;github.com/gokrazy/hello&#34;, &#34;github.com/gokrazy/serial-busybox&#34;, &#34;github.com/gokrazy/breakglass&#34; ] } …gokrazy will start the fbstatus, hello, serial-busybox and breakglass programs.
Package config This article shows how you can configure different aspects of individual packages.">
<meta itemprop="wordCount" content="354">
<title>Package config: flags, environment variables, extra files :: gokrazy</title>
<link href="/images/favicon.png?1782408721" rel="icon" type="image/png">
<link href="/css/auto-complete/auto-complete.min.css?1782408721" rel="stylesheet">
<script src="/js/auto-complete/auto-complete.min.js?1782408721" defer></script>
<script src="/js/search-lunr.min.js?1782408721" defer></script>
<script src="/js/search.min.js?1782408721" defer></script>
<script>
window.relearn = window.relearn || {};
window.relearn.index_js_url="/searchindex.en.js?1782408721";
</script>
<script src="/js/lunr/lunr.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.stemmer.support.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.multi.min.js?1782408721" defer></script>
<script src="/js/lunr/lunr.en.min.js?1782408721" defer></script>
<script>
window.relearn = window.relearn || {};
window.relearn.contentLangs=['en'];
</script>
<link href="/fonts/fontawesome/css/fontawesome-all.min.css?1782408721" rel="stylesheet" media="print" onload="this.media='all';this.onload=null;"><noscript><link href="/fonts/fontawesome/css/fontawesome-all.min.css?1782408721" rel="stylesheet"></noscript>
<link href="/css/perfect-scrollbar/perfect-scrollbar.min.css?1782408721" rel="stylesheet">
<link href="/css/theme.min.css?1782408721" rel="stylesheet">
<link href="/css/format-html.min.css?1782408721" rel="stylesheet" id="R-format-style">
<script>
window.relearn = window.relearn || {};
// configuration
window.relearn.min = `.min`;
window.relearn.path='\/userguide\/package-config\/index.html';
window.relearn.relBasePath='..\/..';
window.relearn.relBaseUri='..\/..';
window.relearn.absBaseUri='https:\/\/gokrazy.org';
window.relearn.disableInlineCopyToClipboard=true;
window.relearn.enableBlockCodeWrap=true;
// legal
window.relearn.getItem = (s,n) => {return s.getItem(n)};
window.relearn.setItem = (s,n,v) => {return s.setItem(n,v)};
window.relearn.removeItem = (s,n) => {return s.removeItem(n)};
// translations
window.T_Copy_to_clipboard = `Copy text to clipboard`;
window.T_Copied_to_clipboard = `Text copied to clipboard!`;
window.T_Link_copied_to_clipboard = `Link copied to clipboard!`;
window.T_Reset_view = `Reset view`;
window.T_View_reset = `View reset!`;
window.T_No_results_found = `No results found for "{0}"`;
window.T_N_results_found = `{1} results found for "{0}"`;
window.T_Browser_unsupported_feature = `This browser doesn't support this feature`;
// variant stuff
window.relearn.themevariants = [ 'auto' ];
window.relearn.customvariantname = "my-custom-variant";
window.relearn.changeVariant = function(variant) {
var oldVariant = document.documentElement.dataset.rThemeVariant;
window.relearn.setItem(window.localStorage, window.relearn.absBaseUri + "/variant", variant);
document.documentElement.dataset.rThemeVariant = variant;
if (oldVariant != variant) {
document.dispatchEvent( new CustomEvent('themeVariantLoaded', { detail: { variant, oldVariant } }) );
window.relearn.markVariant();
}
}
window.relearn.markVariant = function() {
var variant = window.relearn.getItem(window.localStorage, window.relearn.absBaseUri + "/variant");
document.querySelectorAll(".R-variantswitcher select").forEach((select) => {select.value = variant;});
}
window.relearn.initVariant = function() {
var variant = window.relearn.getItem(window.localStorage, window.relearn.absBaseUri + "/variant") ?? "";
if( variant == window.relearn.customvariantname ){
}else if( !variant || !window.relearn.themevariants.includes(variant) ){
variant = window.relearn.themevariants[0];
window.relearn.setItem(window.localStorage, window.relearn.absBaseUri + "/variant", variant);
}
document.documentElement.dataset.rThemeVariant = variant;
}
window.relearn.initVariant();
window.relearn.markVariant();
</script>
</head>
<body class="mobile-support html" data-url="/userguide/package-config/index.html">
<div id="R-body" class="default-animation">
<div id="R-body-overlay"></div>
<nav id="R-topbar">
<div class="topbar-wrapper">
<div class="topbar-sidebar-divider"></div>
<div class="topbar-area topbar-area-start" data-area="start">
<div class="topbar-button topbar-button-sidebar" data-content-empty="disable" data-width-s="show" data-width-m="hide" data-width-l="hide">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleNav()" type="button" title="Menu (CTRL&#43;ALT&#43;n)"><i class="fa-fw fas fa-bars"></i></button></span>
</div>
<div class="topbar-button topbar-button-toc" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleTopbarFlyout(this)" type="button" title="Table of Contents (CTRL&#43;ALT&#43;t)"><i class="fa-fw fas fa-list-alt"></i></button></span>
<div class="topbar-content">
<div class="topbar-content-wrapper">
<nav class="TableOfContents">
<ul>
<li><a href="#package-config">Package config</a></li>
<li><a href="#flags">Command-line flags</a></li>
<li><a href="#env">Environment variables</a></li>
<li><a href="#buildflags">Go build flags</a></li>
<li><a href="#extrafiles">Extra files</a></li>
</ul>
</nav>
</div>
</div>
</div>
</div>
<ol class="topbar-breadcrumbs breadcrumbs highlightable" itemscope itemtype="http://schema.org/BreadcrumbList"><li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement" class=""><a itemprop="item" href="/index.html"><span itemprop="name">gokrazy Go appliances</span></a><meta itemprop="position" content="1">&nbsp;>&nbsp;</li><li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement" class=""><a itemprop="item" href="/userguide/index.html"><span itemprop="name">Configuration</span></a><meta itemprop="position" content="2">&nbsp;>&nbsp;</li><li itemscope itemtype="https://schema.org/ListItem" itemprop="itemListElement" class=""><span itemprop="name">Package config: flags, environment variables, extra files</span><meta itemprop="position" content="3"></li>
</ol>
<div class="topbar-area topbar-area-end" data-area="end">
<div class="topbar-button topbar-button-edit" data-content-empty="disable" data-width-s="area-more" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><a href="https://github.com/gokrazy/gokrazy/tree/master/website/content/userguide/package-config.md" rel="external" title="Edit (CTRL+ALT+w)"><i class="fa-fw fas fa-pen"></i></a></span>
</div>
<div class="topbar-button topbar-button-more" data-content-empty="hide" data-width-s="show" data-width-m="show" data-width-l="show">
<span class="btn cstyle button link noborder notitle interactive"><button onclick="toggleTopbarFlyout(this)" type="button" title="More"><i class="fa-fw fas fa-ellipsis-v"></i></button></span>
<div class="topbar-content">
<div class="topbar-content-wrapper">
<div class="topbar-area topbar-area-more" data-area="more">
</div>
</div>
</div>
</div>
</div>
</div>
</nav>
<div id="R-main-overlay"></div>
<main id="R-body-inner" class="highlightable userguide" tabindex="-1">
<div class="flex-block-wrapper">
<article class="default">
<header class="headline">
</header>
<h1 id="package-config-flags-environment-variables-extra-files">Package config: flags, environment variables, extra files</h1>
<p>gokrazy will arrange for each included package to be started at boot. For
example, given the following instance <code>config.json</code> (open in your editor using
<code>gok edit</code>):</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;Hostname&#34;</span>: <span style="color:#e6db74">&#34;docs&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;Packages&#34;</span>: [
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;github.com/gokrazy/fbstatus&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;github.com/gokrazy/hello&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;github.com/gokrazy/serial-busybox&#34;</span>,
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;github.com/gokrazy/breakglass&#34;</span>
</span></span><span style="display:flex;"><span> ]
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<p>…gokrazy will start the <code>fbstatus</code>, <code>hello</code>, <code>serial-busybox</code> and <code>breakglass</code>
programs.</p>
<h2 id="package-config">Package config<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>This article shows how you can configure different aspects of individual
packages.</p>
<p>Each bit of configuration is nested under the <code>PackageConfig</code> map field in your
instances <code>config.json</code>, see <a href="/userguide/instance-config/index.html#packageconfig">Instance Config Reference →
<code>PackageConfig</code></a>. The map is keyed by
package name (from the <code>Packages</code> field), and each map entry can have the
following fields:</p>
<ul>
<li><code>CommandLineFlags</code> for <a href="/userguide/package-config/index.html#flags">Command-line flags</a></li>
<li><code>Environment</code> for <a href="/userguide/package-config/index.html#env">Environment variables</a></li>
<li><code>GoBuildFlags</code> for <a href="/userguide/package-config/index.html#buildflags">Go build flags</a></li>
<li><code>ExtraFilePaths</code> or <code>ExtraFileContents</code> for <a href="/userguide/package-config/index.html#extrafiles">Extra files</a></li>
</ul>
<h2 id="flags">Command-line flags<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>The <a href="https://github.com/gokrazy/breakglass" rel="external">breakglass</a> package provides
emergency/debugging access to a gokrazy installation.</p>
<p>To enable SSH port forwardings to localhost, set the <code>-forward</code> flag to <code>loopback</code>:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;PackageConfig&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;github.com/gokrazy/breakglass&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;CommandLineFlags&#34;</span>: [
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;-forward=loopback&#34;</span>
</span></span><span style="display:flex;"><span> ]
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010"></span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<h2 id="env">Environment variables<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p><a href="https://en.wikipedia.org/wiki/Environment_variable" rel="external">Environment variables</a> such
as the <a href="https://golang.org/pkg/runtime/" rel="external">Go runtimes <code>GODEBUG</code></a> variable can be
set as follows:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;PackageConfig&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;github.com/gokrazy/breakglass&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;Environment&#34;</span>: [
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;GODEBUG=gctrace=1&#34;</span>
</span></span><span style="display:flex;"><span> ]
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010"></span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<h2 id="buildflags">Go build flags<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>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.</p>
<p>This example overwrites the value of the <a href="https://github.com/gokrazy/hello/blob/e33b5caa1a73b5e58e4d4f4b165d07e6ddf173a9/hello.go#L6" rel="external"><code>world</code>
variable</a>
using the <a href="https://golang.org/cmd/link/" rel="external"><code>-X</code> linker flag</a>, which is a common
technique to embed version information:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;PackageConfig&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;github.com/gokrazy/hello&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;GoBuildFlags&#34;</span>: [
</span></span><span style="display:flex;"><span> <span style="color:#e6db74">&#34;-ldflags=-X main.world=Welt&#34;</span>
</span></span><span style="display:flex;"><span> ]
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010"></span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<h2 id="extrafiles">Extra files<span class="btn cstyle anchor copyanchor scrollanchor link noborder notitle interactive"><button type="button" title="Copy link to clipboard"><i class="fa-fw fas fa-link fa-lg"></i></button></span></h2>
<p>If your program needs extra files to be present in gokrazys root file system
image at a specific location, you can add them with the <code>extrafiles</code> mechanism:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;PackageConfig&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;github.com/caddyserver/caddy/v2/cmd/caddy&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ExtraFileContents&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;/etc/caddy/Caddyfile&#34;</span>: <span style="color:#e6db74">&#34;http://:80 {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> root * /tmp
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> file_server browse
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">}
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">&#34;</span>
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010"></span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<p>Or, if managing the file contents within the <code>config.json</code> becomes unwieldy, you
can manage it in a separate file:</p>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-bash" data-lang="bash"><span style="display:flex;"><span>cat &gt; ~/gokrazy/hello/Caddyfile <span style="color:#e6db74">&lt;&lt;&#39;EOT&#39;
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">http://:80 {
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> root * /tmp
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74"> file_server browse
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">}
</span></span></span><span style="display:flex;"><span><span style="color:#e6db74">EOT</span></span></span></code></pre></div>
<div class="highlight actionbar-wrapper wrap-code" dir="auto"><pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"><code class="language-json" data-lang="json"><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;PackageConfig&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;github.com/caddyserver/caddy/v2/cmd/caddy&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;ExtraFilePaths&#34;</span>: {
</span></span><span style="display:flex;"><span> <span style="color:#f92672">&#34;/etc/caddy/Caddyfile&#34;</span>: <span style="color:#e6db74">&#34;Caddyfile&#34;</span>
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> }
</span></span><span style="display:flex;"><span> },
</span></span><span style="display:flex;"><span> <span style="color:#960050;background-color:#1e0010"></span>
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div>
<footer class="footline">
</footer>
</article>
</div>
</main>
</div>
<aside id="R-sidebar" class="default-animation">
<div id="R-header-topbar" class="default-animation"></div>
<div id="R-header-wrapper" class="default-animation">
<div id="R-header" class="default-animation">
<img src="/logo.svg" width="100%" alt="gokrazy logo" title="gokrazy logo">
</div>
<search><form action="/search/index.html" method="get">
<div class="searchbox default-animation">
<button class="search-detail" type="submit" title="Search (CTRL+ALT+f)"><i class="fas fa-search"></i></button>
<label class="a11y-only" for="R-search-by">Search</label>
<input data-search-input id="R-search-by" name="search-by" class="search-by" type="search" placeholder="Search...">
<button class="search-clear" type="button" data-search-clear="" title="Clear search"><i class="fas fa-times" title="Clear search"></i></button>
</div>
</form></search>
</div>
<div id="R-homelinks" class="default-animation homelinks">
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-homelinks">
<ul class="space collapsible-menu">
<li class="" data-nav-url="/index.html"><a class="padding" href="/index.html"><i class="fa-fw fas fa-home"></i> Home</a></li>
</ul>
</div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-headercontrols">
<ul class="">
</ul>
</div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
</div>
<div id="R-content-wrapper" class="highlightable">
<div class="R-sidebarmenu R-shortcutmenu-main">
<ul class="enlarge morespace collapsible-menu">
<li class="" data-nav-url="/quickstart/index.html"><a class="padding" href="/quickstart/index.html"><b>1. </b>Quickstart</a></li>
<li class="" data-nav-url="/platforms/index.html"><a class="padding" href="/platforms/index.html"><b>2. </b>Supported platforms</a></li>
<li class="parent " data-nav-url="/userguide/index.html"><a class="padding" href="/userguide/index.html"><b>3. </b>Configuration</a><ul id="R-subsections-74b4df3a3d9365853f09e9f1dfe7bbba" class="collapsible-menu">
<li class="" data-nav-url="/userguide/instance-config/index.html"><a class="padding" href="/userguide/instance-config/index.html">Instance Config Reference</a></li>
<li class="" data-nav-url="/userguide/migration-guide/index.html"><a class="padding" href="/userguide/migration-guide/index.html">Instance Config Migration Guide</a></li>
<li class="" data-nav-url="/userguide/automation/index.html"><a class="padding" href="/userguide/automation/index.html">Automation</a></li>
<li class="active " data-nav-url="/userguide/package-config/index.html"><a class="padding" href="/userguide/package-config/index.html">Package config: flags, environment variables, extra files</a></li>
<li class="" data-nav-url="/userguide/dhcp/index.html"><a class="padding" href="/userguide/dhcp/index.html">DHCP Client</a></li>
<li class="" data-nav-url="/userguide/remotesyslog/index.html"><a class="padding" href="/userguide/remotesyslog/index.html">Remote Syslog: sending gokrazy logs over the network</a></li>
<li class="" data-nav-url="/userguide/wifi/index.html"><a class="padding" href="/userguide/wifi/index.html">Connecting to WiFi networks</a></li>
<li class="" data-nav-url="/userguide/tls-for-untrusted-networks/index.html"><a class="padding" href="/userguide/tls-for-untrusted-networks/index.html">Using TLS in untrusted networks</a></li>
<li class="" data-nav-url="/userguide/bluetooth/index.html"><a class="padding" href="/userguide/bluetooth/index.html">Using Bluetooth</a></li>
<li class="" data-nav-url="/userguide/permanent-data/index.html"><a class="padding" href="/userguide/permanent-data/index.html">Access permanent data</a></li>
<li class="" data-nav-url="/userguide/nvme-disk/index.html"><a class="padding" href="/userguide/nvme-disk/index.html">NVMe disk (Pi 5)</a></li>
<li class="" data-nav-url="/userguide/qemu/index.html"><a class="padding" href="/userguide/qemu/index.html">QEMU x86-64 virtual machine</a></li>
<li class="" data-nav-url="/userguide/rsync-backups/index.html"><a class="padding" href="/userguide/rsync-backups/index.html">Permanent data backup with the gokrazy rsync</a></li></ul></li>
<li class="" data-nav-url="/packages/index.html"><a class="padding" href="/packages/index.html"><b>4. </b>Available packages</a><ul id="R-subsections-bdf1e8ce92aa8ff6883c617f10480430" class="collapsible-menu"></ul></li>
<li class="" data-nav-url="/development/index.html"><a class="padding" href="/development/index.html"><b>5. </b>Package development</a><ul id="R-subsections-54b0ce3c97b111c8cd4d107325fd580c" class="collapsible-menu"></ul></li>
</ul>
</div>
<div class="R-sidebarmenu R-shortcutmenu-shortcuts">
<div class="nav-title padding">More</div>
<ul class="space collapsible-menu">
<li class="" data-nav-url="https://github.com/gokrazy/gokrazy"><a class="padding" href="https://github.com/gokrazy/gokrazy" rel="external"><i class='fab fa-github'></i> GitHub repo</a></li>
</ul>
</div>
<div id="R-footer-margin"></div>
<div class="R-menu-divider default-animation">
<hr class="padding">
</div>
<div class="R-sidebarmenu R-shortcutmenu-footercontrols">
<ul class="">
</ul>
</div>
<div id="R-footer"><p>Built with <a href="https://github.com/McShelby/hugo-theme-relearn" title="love"><i class="fas fa-heart"></i></a> by <a href="https://gohugo.io/">Hugo</a></p></div>
</div>
</aside>
<script src="/js/perfect-scrollbar/perfect-scrollbar.min.js?1782408721" defer></script>
<script src="/js/theme.min.js?1782408721" defer></script>
<div id="toast-container" role="status" aria-live="polite" aria-atomic="false"></div>
</body>
</html>