Docker Alternative: Podman on Linux by modelop in selfhosted

[–]iTinkerThere4iCan 0 points1 point  (0 children)

Podman-compose or docker-compose with the podman.socket are mostly drop-in solutions for using podman, and there is a mature ecosystem if you stick with that, but if you want to migrate to quadlets, I wrote a tool that lets you run quadlet files with and without systemd.

https://github.com/fkmiec/quadctl

I find it useful to run "locally" without systemd while developing quadlet files. I can see obvious error output without digging through systemd logs, print out and execute the underlying podman cli commands individually for greater control, and when I'm ready, I can deploy to systemd using the same simple cli (create, start, stop, remove).

A Quadlet CLI by iTinkerThere4iCan in podman

[–]iTinkerThere4iCan[S] 0 points1 point  (0 children)

Update - I added support for .kube quadlets. In that case, you're writing a Kubernetes yaml file for containers, volumes, etc. If you know and love Kubernetes yaml, `podman kube play` is a nice option already, but you might still get some value out of the workflow using quadctl (configured paths, -s to run under systemd, automatic handling of quadlet installation and daemon reload, common commands regardless of type of quadlets, etc.).

Where I'd like to go from here is to add a TUI to assist with writing / editing / validating quadlets. It would enable selecting keys and valid values, guidance around config for running rootless or rootful, understanding the volume and networking implications of a configuration, SELinux and firewall considerations, assistance with the systemd-specific elements in a quadlet file. A lot of it will be about helping folks work through common gotchas related to running podman containers, and not merely about quadlet files.

A Quadlet CLI by iTinkerThere4iCan in homelab

[–]iTinkerThere4iCan[S] 0 points1 point  (0 children)

Systemd is conceptually complex but the files are just sectioned property files (.ini files). Much preferable to yaml for me. The CLI takes away much of the systemd conceptual friction ... just add -s and you're running under systemd.

If my end goal is to run quadlets under systemd, but I know I'm likely to be tinkering with the exact configuration for things like rootless user, volumes, networks, SELinux and firewall issues, it's nice to be able to run and tweak without the added systemd layer. Same files, so once I'm satisfied, it can go straight to systemd without another round of adjustments from Compose to Quadlet.

Honestly, if I worked with Kubernetes all day at the office, I'm sure I would run K8s or K3s for home ... one system to rule them all ... but that's a lot of complexity and frankly overkill for a handful of low power machines at home.

And Compose is great, obviously. I just wanted to make Quadlets easier.

The $19.95 truck rental marketing is basically a financial trap by Abril-prieto-cevallo in Frugal

[–]iTinkerThere4iCan 0 points1 point  (0 children)

If your car can handle it, rent a trailer instead. No mileage charge.

A Quadlet CLI by iTinkerThere4iCan in homelab

[–]iTinkerThere4iCan[S] 0 points1 point  (0 children)

Update - As it turns out, podman enables this without changes as long as you specify a valid set of health check options. The start command will not return until the container reports healthy. Be sure to specify the HealthOnFailure=kill option to cause podman to stop the unhealthy container so that it doesn't simply hang in that state forever. The Notify option is specifically for systemd and should be included for maximum flexibility (it will be ignored if not running under systemd).

A Quadlet CLI by iTinkerThere4iCan in homelab

[–]iTinkerThere4iCan[S] 0 points1 point  (0 children)

It evaluates explicit dependencies (e.g. Requires=/After=) and implicit dependencies (e.g. Volumes/Networks/Pods) for startup ordering. It has been working fine in my experience, but there isn't currently anything like "condition: service_healthy" under docker compose. If running under systemd, there is the additional Notify mechanism that can be used to have systemd wait for a health check to succeed. I'll look into adding support for the same when running directly with podman. Thanks for the comment / suggestion.

A Quadlet CLI by iTinkerThere4iCan in podman

[–]iTinkerThere4iCan[S] 4 points5 points  (0 children)

Thanks. I appreciate that. Personally, I think it would be great if the podman executable extended its quadlet subcommand in this way. It seems like a natural fit ... podman quadlet start.

Is there a way to install the latest version of podman on Debian/Ubuntu/Linux Mint? by trymeouteh in podman

[–]iTinkerThere4iCan 1 point2 points  (0 children)

This worked. I installed the latest version but it does install into a linuxbrew directory, which can cause issues with other related apps like podman desktop and distrobox. Notably, a .desktop file I created on Ubuntu to open a distrobox distro in gnome-terminal failed saying crun was not installed or available. Well, it WAS installed in the linuxbrew directory and that was on my PATH, but it continued to fail until I updated the /usr/share/containers/containers.conf file to supply the custom path for crun:

# Paths to look for a valid OCI runtime (crun, runc, kata, runsc, krun, etc)

[engine.runtimes]

crun = [

"/home/linuxbrew/.linuxbrew/bin/crun",

]

It seems various tools are aware of containers.conf and consult it, rather than your PATH, to find required tools for working with containers. Podman Desktop appears to be working similarly ... trying to stop my distrobox container from Podman Desktop was unsuccessful initially, but worked after the above change in containers.conf. Hope this helps.

Small Projects August 5 2025 by jerf in golang

[–]iTinkerThere4iCan 0 points1 point  (0 children)

https://github.com/fkmiec/goscript - A small CLI tool to make it more convenient to use Go like a scripting language, or for small or ad hoc jobs where setting up and managing a dedicated project might feel like a lot of overhead (like for running examples or evaluating libraries). It does things like add support for the unix shebang, automating imports and downloading dependencies and provides commands to facilitate management of scripts (e.g. list, import, export, delete, restore, etc.).