XGQT's blog: Posts tagged 'chroot'
urn:https-xgqt-gitlab-io:-blog-tags-chroot-html
2023-04-28T17:06:33Z
Bubblewrap cross-architecture chroot
urn:https-xgqt-gitlab-io:-blog-posts-2023-04-28-bubblewrap-cross-architecture-chroot
2023-04-28T17:06:33Z
2023-04-28T17:06:33Z
Maciej Barć
<h1 id="system-preparation">System preparation</h1>
<h2 id="qemu">Qemu</h2>
<p>Emerge <code>qemu</code> with <code>static-user</code> USE enabled and your wanted architectures.</p>
<div class="brush: conf">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal">1</span>
<span class="normal">2</span>
<span class="normal">3</span>
<span class="normal">4</span>
<span class="normal">5</span>
<span class="normal">6</span>
<span class="normal">7</span>
<span class="normal">8</span></pre></div></td>
<td class="code">
<div>
<pre><span></span>app-emulation/qemu QEMU_SOFTMMU_TARGETS: aarch64 arm x86_64
app-emulation/qemu QEMU_USER_TARGETS: aarch64 arm x86_64
app-emulation/qemu static-user
dev-libs/glib static-libs
sys-apps/attr static-libs
sys-libs/zlib static-libs
dev-libs/libpcre2 static-libs
</pre></div></td></tr></tbody></table></div>
</div>
<h2 id="openrc">OpenRC</h2>
<p>Enable <code>qemu-binfmt</code>:</p>
<div class="brush: shell">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal">1</span></pre></div></td>
<td class="code">
<div>
<pre><span></span>rc-update<span class="w"> </span>add<span class="w"> </span>qemu-binfmt<span class="w"> </span>default
</pre></div></td></tr></tbody></table></div>
</div>
<p>Start <code>qemu-binfmt</code>:</p>
<div class="brush: shell">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal">1</span></pre></div></td>
<td class="code">
<div>
<pre><span></span>rc-service<span class="w"> </span>qemu-binfmt<span class="w"> </span>start
</pre></div></td></tr></tbody></table></div>
</div>
<h1 id="chrooting">Chrooting</h1>
<ul>
<li>select chroot location (eg <code>/chroots/gentoo-arm64-musl-stable</code>)</li>
<li>unpack the desired rootfs</li>
<li>create needed directories
<ul>
<li><code>mkdir -p /chroots/gentoo-arm64-musl-stable/var/cache/distfiles</code></li></ul></li>
<li>execute <code>bwrap</code>
<ul>
<li>with last <code>ro-bind</code> mount the qemu emulator binary (eg <code>qemu-aarch64</code>)</li>
<li>execute the mounted emulator binary giving it a shell program (eg <code>bash</code>)</li></ul></li></ul>
<p>Chroot with <code>bwrap</code>:</p>
<div class="brush: shell">
<div class="source">
<table class="sourcetable">
<tbody>
<tr>
<td class="linenos">
<div class="linenodiv">
<pre><span class="normal"> 1</span>
<span class="normal"> 2</span>
<span class="normal"> 3</span>
<span class="normal"> 4</span>
<span class="normal"> 5</span>
<span class="normal"> 6</span>
<span class="normal"> 7</span>
<span class="normal"> 8</span>
<span class="normal"> 9</span>
<span class="normal">10</span></pre></div></td>
<td class="code">
<div>
<pre><span></span>bwrap<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--bind<span class="w"> </span>/chroots/gentoo-arm64-musl-stable<span class="w"> </span>/<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--dev<span class="w"> </span>/dev<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--proc<span class="w"> </span>/proc<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--perms<span class="w"> </span><span class="m">1777</span><span class="w"> </span>--tmpfs<span class="w"> </span>/dev/shm<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--tmpfs<span class="w"> </span>/run<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--ro-bind<span class="w"> </span>/etc/resolv.conf<span class="w"> </span>/etc/resolv.conf<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--bind<span class="w"> </span>/var/cache/distfiles<span class="w"> </span>/var/cache/distfiles<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>--ro-bind<span class="w"> </span>/usr/bin/qemu-aarch64<span class="w"> </span>/usr/bin/qemu-aarch64<span class="w"> </span><span class="se">\</span>
<span class="w"> </span>/usr/bin/qemu-aarch64<span class="w"> </span>/bin/bash<span class="w"> </span>-l
</pre></div></td></tr></tbody></table></div>
</div>