<?xml version="1.0" encoding="utf-8"?><?xml-stylesheet type="text/xsl" href="rss.xsl"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>Semalibre Blog</title>
        <link>https://semalibre.com/blog</link>
        <description>Semalibre Blog</description>
        <lastBuildDate>Sat, 19 Sep 2026 00:00:00 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <item>
            <title><![CDATA[Run your AI assistant in a local secure container]]></title>
            <link>https://semalibre.com/blog/ai-nspawn</link>
            <guid>https://semalibre.com/blog/ai-nspawn</guid>
            <pubDate>Sat, 19 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[Why shall you run your coding assistant in a container]]></description>
            <content:encoded><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-shall-you-run-your-coding-assistant-in-a-container">Why shall you run your coding assistant in a container<a href="https://semalibre.com/blog/ai-nspawn#why-shall-you-run-your-coding-assistant-in-a-container" class="hash-link" aria-label="Direct link to Why shall you run your coding assistant in a container" title="Direct link to Why shall you run your coding assistant in a container" translate="no">​</a></h2>
<p>Coding assistants have stopped being autocomplete: they now install packages, edit files
and run shell commands, all with your credentials on your machine.</p>
<p>An agent can wipe your home directory, exfiltrate secrets, fall for prompt injection,
run malicious skills, and act on irreversible operations without asking<sup><a href="https://semalibre.com/blog/ai-nspawn#user-content-fn-docker-d1c182" id="user-content-fnref-docker-d1c182" data-footnote-ref="true" aria-describedby="footnote-label" class="anchorTargetStickyNavbar_Vzrq">1</a></sup>. One
may use Docker sandboxes (sbx) to run them in an isolated environment so they can work
unattended. This article describes a lightweight, dependency-free alternative using only
systemd, similar to the [build container][/blog/build-in-nspawn] presented earlier.</p>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="what-systemd-nspawn-gives-you">What systemd-nspawn gives you<a href="https://semalibre.com/blog/ai-nspawn#what-systemd-nspawn-gives-you" class="hash-link" aria-label="Direct link to What systemd-nspawn gives you" title="Direct link to What systemd-nspawn gives you" translate="no">​</a></h2>
<p>systemd-nspawn gives you:</p>
<ul>
<li class="">an up-to-date distribution, in a chroot that systemd manages for you</li>
<li class="">a developer environment where you can install anything you want (pip, npm...)</li>
<li class="">easy access to the journal from the host</li>
<li class="">a secure place for running any command without trouble</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="about-systemd-nspawn">About systemd-nspawn<a href="https://semalibre.com/blog/ai-nspawn#about-systemd-nspawn" class="hash-link" aria-label="Direct link to About systemd-nspawn" title="Direct link to About systemd-nspawn" translate="no">​</a></h2>
<p>If you already read [Build in a systemd-nspawn container][/blog/build-in-nspawn], the
procedure is quite similar.</p>
<p>For general information about systemd-nspawn, see:</p>
<ul>
<li class=""><code>systemd-nspawn(1)</code> and <code>systemd.nspawn(5)</code> manpages</li>
<li class=""><a href="https://wiki.archlinux.org/title/Systemd-nspawn" target="_blank" rel="noopener noreferrer" class="">Archlinux wiki</a></li>
</ul>
<p>The container is a directory under <code>/var/lib/machines</code> that systemd boots. One
file controls it: the nspawn config (<code>/etc/systemd/nspawn/&lt;name&gt;.nspawn</code>).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="creation">Creation<a href="https://semalibre.com/blog/ai-nspawn#creation" class="hash-link" aria-label="Direct link to Creation" title="Direct link to Creation" translate="no">​</a></h2>
<p>For a Debian based distribution (host or target), follow <a class="" href="https://semalibre.com/blog/build-in-nspawn#creation">builder
creation</a> for usage of <code>debootstrap</code>.</p>
<p>I personally use Archlinux and opencode as coder assistant, I can use pacstrap to
initialize a new Archlinux container which I call coder:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># cd /var/lib/machines</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># mkdir coder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># pacstrap -K -c coder/ base base-devel opencode</span><br></div></code></pre></div></div>
<p>The container now exists in <code>/var/lib/machines/coder</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="users">Users<a href="https://semalibre.com/blog/ai-nspawn#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users" translate="no">​</a></h2>
<p>Before using the container, set a password for root and create a normal user.</p>
<p>Create the user with the same uid/gid as the host account (use <code>$ id -u</code> ). Mine is
1337:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># cd /var/lib/machines</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># systemd-nspawn -D ./coder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># passwd</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># useradd -m coder -u 1337 -U -s /bin/bash</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># passwd coder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># logout</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configure-the-mount-point">Configure the mount point<a href="https://semalibre.com/blog/ai-nspawn#configure-the-mount-point" class="hash-link" aria-label="Direct link to Configure the mount point" title="Direct link to Configure the mount point" translate="no">​</a></h2>
<p>Edit <code>/etc/systemd/nspawn/coder.nspawn</code> (the file name must match the container name in
<code>/var/lib/machines/</code>).</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token table class-name">Files</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># mount a host directory, mapping uid/gid so the mount is owned by the</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># container's user instead of nobody</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key property" style="color:#36acaa">Bind</span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain">/home/louson/projects/publicproject:/home/coder/publicproject:idmap</span><br></div></code></pre></div></div>
<p>Without the <code>idmap</code> option, the mount point is owned by the user <code>nobody</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="network">Network<a href="https://semalibre.com/blog/ai-nspawn#network" class="hash-link" aria-label="Direct link to Network" title="Direct link to Network" translate="no">​</a></h2>
<p>If the host runs systemd-networkd and systemd-resolved, the network is automatic. Enable
and start them:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># systemctl enable --now systemd-networkd.service</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># systemctl enable --now systemd-resolved.service</span><br></div></code></pre></div></div>
<p>Otherwise, either configure the <a href="https://wiki.archlinux.org/title/Systemd-nspawn#Use_a_virtual_Ethernet_link" target="_blank" rel="noopener noreferrer" class="">NAT</a> or disable virtual networking:</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token table class-name">Network</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># no virtual ethernet: the container shares the host network</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key property" style="color:#36acaa">VirtualEthernet</span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain">no</span><br></div></code></pre></div></div>
<p>Now start and login to the container:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># machinectl start coder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># machinectl login coder</span><br></div></code></pre></div></div>
<p>Check the network is up, and update the system.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="considerations">Considerations<a href="https://semalibre.com/blog/ai-nspawn#considerations" class="hash-link" aria-label="Direct link to Considerations" title="Direct link to Considerations" translate="no">​</a></h2>
<ul>
<li class="">Do not install <code>git</code>. The coding assistant may run unfortunate git commands and
destroy your history. Instead, run <code>git</code> commands from the host.</li>
<li class="">Avoid binding or installing credentials such as private ssh keys to the container,
keep those confidential.</li>
<li class="">Limit binds to what is strictly necessary. Don't include private data or NDA source
code. If you need an assistant for private data, running a local model is possible.</li>
</ul>
<!-- -->
<section data-footnotes="true" class="footnotes"><h2 class="anchor anchorTargetStickyNavbar_Vzrq sr-only" id="footnote-label">Footnotes<a href="https://semalibre.com/blog/ai-nspawn#footnote-label" class="hash-link" aria-label="Direct link to Footnotes" title="Direct link to Footnotes" translate="no">​</a></h2>
<ol>
<li class="anchorTargetStickyNavbar_Vzrq" id="user-content-fn-docker-d1c182">
<p><a href="https://www.docker.com/blog/ai-coding-agent-horror-stories-security-risks/" target="_blank" rel="noopener noreferrer" class="">https://www.docker.com/blog/ai-coding-agent-horror-stories-security-risks/</a> <a href="https://semalibre.com/blog/ai-nspawn#user-content-fnref-docker-d1c182" data-footnote-backref="" aria-label="Back to reference 1" class="data-footnote-backref">↩</a></p>
</li>
</ol>
</section>]]></content:encoded>
            <category>Containers</category>
            <category>Systemd-nspawn</category>
            <category>Artificial Intelligence</category>
        </item>
        <item>
            <title><![CDATA[Build in a systemd-nspawn container]]></title>
            <link>https://semalibre.com/blog/build-in-nspawn</link>
            <guid>https://semalibre.com/blog/build-in-nspawn</guid>
            <pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate>
            <description><![CDATA[For general information about systemd-nspawn, see:]]></description>
            <content:encoded><![CDATA[<p>For general information about systemd-nspawn, see:</p>
<ul>
<li class=""><code>systemd-nspawn(1)</code> and <code>systemd.nspawn(5)</code> manpages</li>
<li class=""><a href="https://wiki.archlinux.org/title/Systemd-nspawn" target="_blank" rel="noopener noreferrer" class="">Archlinux wiki</a></li>
</ul>
<p>The container is a directory under <code>/var/lib/machines</code> that systemd boots. One
file controls it: the nspawn config (<code>/etc/systemd/nspawn/&lt;name&gt;.nspawn</code>).</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="why-build-in-a-systemd-nspawn-container">Why build in a systemd-nspawn container?<a href="https://semalibre.com/blog/build-in-nspawn#why-build-in-a-systemd-nspawn-container" class="hash-link" aria-label="Direct link to Why build in a systemd-nspawn container?" title="Direct link to Why build in a systemd-nspawn container?" translate="no">​</a></h2>
<p>This guide is for cross-building (e.g. Yocto) against an old distribution without
touching the host. systemd-nspawn gives you:</p>
<ul>
<li class="">an old distribution, in a chroot that systemd manages for you</li>
<li class="">fine control over resources such as CPUs and memory</li>
<li class="">easy access to the journal from the host</li>
<li class="">nothing more than systemd to install</li>
</ul>
<!-- -->
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="creation">Creation<a href="https://semalibre.com/blog/build-in-nspawn#creation" class="hash-link" aria-label="Direct link to Creation" title="Direct link to Creation" translate="no">​</a></h2>
<p>Install <code>debootstrap</code>, and one or both of <code>debian-archive-keyring</code> and <code>ubuntu-keyring</code>,
depending on which distribution you want.</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># cd /var/lib/machines</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># debootstrap --include=dbus,libpam-systemd,libnss-systemd,systemd-resolved --components=main,universe &lt;codename&gt; &lt;container-name&gt;</span><br></div></code></pre></div></div>
<p>For Debian, use the rolling names ("stable", "testing") or release names ("stretch",
"sid"); for Ubuntu, use the code name ("xenial", "zesty"). Code names are listed in
<code>/usr/share/debootstrap/scripts</code>, and a table of code names to version numbers is on the
<a href="https://www.debian.org/releases/" target="_blank" rel="noopener noreferrer" class="">Debian releases page</a>.</p>
<p>In my case, I use Debian stable and call the container builder:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># debootstrap --include=dbus,libpam-systemd,libnss-systemd,systemd-resolved stable builder</span><br></div></code></pre></div></div>
<p>The container now exists in <code>/var/lib/machines/builder</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="users">Users<a href="https://semalibre.com/blog/build-in-nspawn#users" class="hash-link" aria-label="Direct link to Users" title="Direct link to Users" translate="no">​</a></h2>
<p>Before using the container, set a password for root and create a normal user.</p>
<p>Create the user with the same uid/gid as the host account (use <code>$ id -u</code> ). Mine is
1337:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># cd /var/lib/machines</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># systemd-nspawn -D ./builder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># passwd</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># useradd -m build -u 1337 -U -s /bin/bash</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># passwd build</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># logout</span><br></div></code></pre></div></div>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="configure-the-mount-point">Configure the mount point<a href="https://semalibre.com/blog/build-in-nspawn#configure-the-mount-point" class="hash-link" aria-label="Direct link to Configure the mount point" title="Direct link to Configure the mount point" translate="no">​</a></h2>
<p>Edit <code>/etc/systemd/nspawn/builder.nspawn</code> (the file name must match the container name
in <code>/var/lib/machines/</code>).</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token table class-name">Files</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># mount a host directory, mapping uid/gid so the mount is owned by the</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># container's user instead of nobody</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key property" style="color:#36acaa">Bind</span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain">/home/louson/projects/yocto:/home/builder/yocto:idmap</span><br></div></code></pre></div></div>
<p>Without the <code>idmap</code> option, the mount point is owned by the user <code>nobody</code>.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="network">Network<a href="https://semalibre.com/blog/build-in-nspawn#network" class="hash-link" aria-label="Direct link to Network" title="Direct link to Network" translate="no">​</a></h2>
<p>If the host runs systemd-networkd and systemd-resolved, the network is automatic. Enable
and start them:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># systemctl enable --now systemd-networkd.service</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># systemctl enable --now systemd-resolved.service</span><br></div></code></pre></div></div>
<p>Otherwise, either configure the <a href="https://wiki.archlinux.org/title/Systemd-nspawn#Use_a_virtual_Ethernet_link" target="_blank" rel="noopener noreferrer" class="">NAT</a> or disable virtual networking:</p>
<div class="language-toml codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-toml codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token punctuation" style="color:#393A34">[</span><span class="token table class-name">Network</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># no virtual ethernet: the container shares the host network</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token key property" style="color:#36acaa">VirtualEthernet</span><span class="token punctuation" style="color:#393A34">=</span><span class="token plain">no</span><br></div></code></pre></div></div>
<p>Now start and login to the container:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># machinectl start builder</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># machinectl login builder</span><br></div></code></pre></div></div>
<p>Check the network is up, and update the system.</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="further-configuration">Further configuration<a href="https://semalibre.com/blog/build-in-nspawn#further-configuration" class="hash-link" aria-label="Direct link to Further configuration" title="Direct link to Further configuration" translate="no">​</a></h2>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="start-the-container-at-boot">Start the container at boot<a href="https://semalibre.com/blog/build-in-nspawn#start-the-container-at-boot" class="hash-link" aria-label="Direct link to Start the container at boot" title="Direct link to Start the container at boot" translate="no">​</a></h3>
<p>You can start the container at boot:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># machinectl enable builder</span><br></div></code></pre></div></div>
<h3 class="anchor anchorTargetStickyNavbar_Vzrq" id="control-the-resources">Control the resources<a href="https://semalibre.com/blog/build-in-nspawn#control-the-resources" class="hash-link" aria-label="Direct link to Control the resources" title="Direct link to Control the resources" translate="no">​</a></h3>
<p>A build can easily take your PC down, so limit its usage:</p>
<div class="language-bash codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-bash codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><div class="token-line" style="color:#393A34"><span class="token comment" style="color:#999988;font-style:italic"># systemctl set-property systemd-nspawn@builder.service MemoryMax=4G</span><span class="token plain"></span><br></div><div class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic"># systemctl set-property systemd-nspawn@builder.service CPUQuota=400%</span><br></div></code></pre></div></div>
<p>Those limitations may also be given in the nspawn configuration file.</p>]]></content:encoded>
            <category>Containers</category>
            <category>Systemd-nspawn</category>
            <category>Yocto</category>
        </item>
        <item>
            <title><![CDATA[Welcome]]></title>
            <link>https://semalibre.com/blog/welcome</link>
            <guid>https://semalibre.com/blog/welcome</guid>
            <pubDate>Sat, 05 Apr 2025 00:00:00 GMT</pubDate>
            <description><![CDATA[This is the new site of Semalibre.]]></description>
            <content:encoded><![CDATA[<p>This is the new site of Semalibre.</p>]]></content:encoded>
        </item>
    </channel>
</rss>