commit 4c787631558f87b2f213981757745f4fae2ee5a0
parent 43501eca06240878a97d863c17ce482e76cba5ed
Author: Jack Sangdahl <jack@pngu.org>
Date: Sat, 7 Mar 2026 20:18:18 -0700
Improve notes on Laptop page, add content on server
Diffstat:
2 files changed, 96 insertions(+), 20 deletions(-)
diff --git a/artix_laptop.html b/artix_laptop.html
@@ -140,17 +140,16 @@ pacman -U linux-lts-headers-6.12.74-1-x86_64.pkg.tar.zst</code></pre>
</p>
<pre><code>zpool import -f -o cachefile=none -o altroot=/mnt -R /mnt kepler_rpool</code></pre>
<p>Once imported, mounted pseudo file systems and <code>chroot</code> as normal:</p>
- <pre><code>mount --rbind /dev /mnt/dev
-mount --rbind /sys /mnt/sys
+ <pre><code>mount --rbind /dev /mnt/dev
+mount --rbind /sys /mnt/sys
mount --rbind /proc /mnt/proc
-mount --rbind /run /mnt/run
+mount --rbind /run /mnt/run
chroot /mnt /bin/bash</code></pre>
<p>After fixing whatever is broke, exit and export pool(s):</p>
<pre><code>exit
zpool export kepler_rpool
-umount -a
- </code></pre>
+umount -a</code></pre>
<h4>Bootloader</h4>
<p>
As eluded to above, this system does not have a traditional bootloader, like GRUB. Being a
@@ -201,8 +200,7 @@ install_items+=" /etc/hostid /etc/zfs/zpool.cache "
add_dracutmodules+=" zfs "
filesystems+=" zfs "
-kernel_cmdline="root=ZFS=kepler_rpool/ROOT/default ro"
- </code></pre>
+kernel_cmdline="root=ZFS=kepler_rpool/ROOT/default ro"</code></pre>
</li>
<li>
<p>
@@ -212,8 +210,13 @@ kernel_cmdline="root=ZFS=kepler_rpool/ROOT/default ro"
</p>
<pre><code>mount /dev/sda1 /boot</code></pre>
<p>Create the UKI (create the appropriate directories as necessary):</p>
- <pre><code>dracut --uefi /boot/efi/EFI/Linux/artix-zfs-linux-$(uname -r) $(uname-r)</code></pre>
- The directory should look like:
+ <pre><code>dracut --uefi /boot/EFI/Linux/artix-zfs-linux-kver x.y.z</code></pre>
+ <p>
+ Note, the final argument in the above (<code>x.y.z</code>) is the kernel version dracut
+ will build the UKI for. This corresponds to the structure of
+ <code>/lib/modules/...</code>, and an argument of <code>$(uname -r)</code> for example,
+ will search in <code>/lib/modules/$(uname -r)</code>. After, the ESP should look like:
+ </p>
<pre><code>tree /boot
/boot
/boot/EFI
@@ -221,7 +224,7 @@ kernel_cmdline="root=ZFS=kepler_rpool/ROOT/default ro"
/boot/EFI/Linux/artix-zfs-linux-x.y.z</code></pre>
<p>Create a UEFI entry to expose the EFI stub using <code>efibootmgr</code>:</p>
- <pre><code>efibootmgr --create --disk /dev/sdX --part partition_number --label "Artix Linux x.y.z" --loader 'EFI\Linux\artix-zfs-linux-$(uname -r).efi'</code></pre>
+ <pre><code>efibootmgr --create --disk /dev/sdX --part partition_number --label "Artix Linux x.y.z" --loader 'EFI\Linux\artix-zfs-linux-kver.efi'</code></pre>
<p>
Above, the <code>disk</code> parameter should be only the identifier of the entire disk
(e.g. <code>sda</code>), and the <code>part</code> parameter is the partition number (e.g.
@@ -230,7 +233,6 @@ kernel_cmdline="root=ZFS=kepler_rpool/ROOT/default ro"
</li>
</ol>
<h4>Laptop Utilities</h4>
- <p>tlp, thermald, brightnessctl</p>
<p>
Across most of my systems, many of the utilities remain the same. There are a couple extra
packages that are useful on a laptop, or at least this one.
diff --git a/debian_server.html b/debian_server.html
@@ -43,16 +43,90 @@
`"""</code></pre>
<p>
There is not much to discuss in terms of intricate system configuration or hardware quirks.
- All services run in Docker containers, configured via Docker Compose. These include...
+ (Almost) all services run in Docker containers, configured via Docker Compose. One external
+ network links each container to the Caddy web server container, allowing each container to be
+ configured and run independently:
</p>
- <h3><a href="https://agendav.readthedocs.io" target="_blank">Agendav</a></h3>
- <h3><a href="https://sabre.io/baikal" target="_blank">Baïkal</a></h3>
- <h3><a href="https://caddyserver.com" target="_blank">Caddy</a></h3>
- <h3><a href="https://git.zx2c4.com/cgit" target="_blank">Cgit</a></h3>
- <h3><a href="https://uptimekuma.org" target="_blank">Kuma</a></h3>
- <h3><a href="https://roundcube.net" target="_blank">Roundcube</a></h3>
- <h3><a href="https://stalw.art" target="_blank">Stalwart</a></h3>
- <h3><a href="https://www.vaultwarden.net" target="_blank">Vaultwarden</a></h3>
+ <pre><code>services:
+ foo:
+ networks:
+ - caddybridge
+
+networks:
+ caddybridge:
+ external: true</code></pre>
+ <p>
+ If a container requires additional images within, like a database, an internal network is
+ used:
+ </p>
+ <pre><code>services:
+ foo:
+ networks:
+ - caddybridge
+ - foo_dbnet
+
+ db:
+ image: mariadb
+ container_name: foo_db
+ restart: unless-stopped
+ environment:
+ MYSQL_RANDOM_ROOT_PASSWORD: yes
+ MARIADB_DATABASE: foo
+ MARIADB_USER: foo_user
+ MARIADB_PASSWORD: ${MARIADB_PASSWORD}
+ volumes:
+ - ./db:/var/lib/mysql
+ networks:
+ - vaultwarden_dbnet
+
+networks:
+ caddybridge:
+ external: true
+ foo_dbnet:
+ internal: true</code></pre>
+ <p>
+ I use MariaDB for any database needs, where possible, for consistency and as it is quite
+ lightweight.
+ </p>
+ <h3><a href="https://agendav.readthedocs.io" target="_blank">Agendav</a> (Calendar client)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/agendav" target="_blank">Configuration</a></li>
+ </ul>
+ <h3><a href="https://sabre.io/baikal" target="_blank">Baïkal</a> (CalDav server)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/baikal" target="_blank">Configuration</a></li>
+ </ul>
+ <h3><a href="https://caddyserver.com" target="_blank">Caddy</a> (Web server)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/caddy" target="_blank">Configuration</a></li>
+ </ul>
+ <h3><a href="https://git.zx2c4.com/cgit" target="_blank">Cgit</a> (Git client)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/cgit" target="_blank">Configuration</a></li>
+ </ul>
+ <h3><a href="https://gitolite.com" target="_blank">Gitolite</a> (Git server)</h3>
+ <h3><a href="https://uptimekuma.org" target="_blank">Kuma</a> (System monitor)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/kuma" target="_blank">Configuration</a></li>
+ </ul>
+ <h3><a href="https://roundcube.net" target="_blank">Roundcube</a> (Webmail client)</h3>
+ <ul>
+ <li>
+ <a href="https://git.pngu.org/server/tree/roundcube" target="_blank">Configuration</a>
+ </li>
+ </ul>
+ <h3><a href="https://stalw.art" target="_blank">Stalwart</a> (Mail server)</h3>
+ <ul>
+ <li><a href="https://git.pngu.org/server/tree/stalwart" target="_blank">Configuration</a></li>
+ </ul>
+ <h3>
+ <a href="https://www.vaultwarden.net" target="_blank">Vaultwarden</a> (Password manager)
+ </h3>
+ <ul>
+ <li>
+ <a href="https://git.pngu.org/server/tree/vaultwarden" target="_blank">Configuration</a>
+ </li>
+ </ul>
<script src="frame.js"></script>
</body>
</html>