DtxdF
Developer
Over the years, I've used AppJail images as a way to distribute jail snapshots for deterministic deployment, even before OCI was available on FreeBSD. This worked well, but the problem is that I have to build them somewhere, and I used to do that on my own computers, powered by Buildbot. The problem was that, as I added more and more images, my disks were failing faster and faster.
This year, I heard about daemonless.io when a user sent me a link after I described the problem above, and I think the project is incredible. I believe that integrating with daemonless.io will help both projects improve, since, although AppJail implemented support for deploying jails using OCI images from the very beginning, when OCI was first implemented in FreeBSD, I needed images to battle-test appjail-oci(1).
After conducting more and more tests and once the appjail-oci(1) command reached a level of maturity, I decided to migrate AppJail images in AppJail-makejails to OCI images. The OCI images in AppJail-makejails are built similarly to how they're built on daemonless.io, using dbuild as the build engine, and are distributed to the GitHub registry. The migration began on June 24, 2026, and ended on August 27, 2026.
My main goal in creating OCI images is for them to be built exactly the same way as in upstream. You can compare:
Some images required Docker Secrets, and since this feature wasn't available in AppJail, I implemented it. For now, rage/age is the only backend implemented, but I plan to add Hashicorp Vault in the next release.
After working on all of this, I think it was necessary to improve the Getting Started guide to give new users a quick way to get started. But to make things much simpler, I've written a script that allows you to easily initialize the host, explains the basics of AppJail, shows some slightly more advanced use cases (like Makejails), and introduces The Ephemeral Concept. This guide also shows you how to deploy a FreeBSD VM using bhyvemgr to test AppJail.setup in a safe manner. Any feedback is welcome.
There are two other things worth noting:
Container Stores: https://wiki.freebsd.org/Containers#Container_Stores
This year, I heard about daemonless.io when a user sent me a link after I described the problem above, and I think the project is incredible. I believe that integrating with daemonless.io will help both projects improve, since, although AppJail implemented support for deploying jails using OCI images from the very beginning, when OCI was first implemented in FreeBSD, I needed images to battle-test appjail-oci(1).
After conducting more and more tests and once the appjail-oci(1) command reached a level of maturity, I decided to migrate AppJail images in AppJail-makejails to OCI images. The OCI images in AppJail-makejails are built similarly to how they're built on daemonless.io, using dbuild as the build engine, and are distributed to the GitHub registry. The migration began on June 24, 2026, and ended on August 27, 2026.
My main goal in creating OCI images is for them to be built exactly the same way as in upstream. You can compare:
- https://github.com/appJail-makejails/postgres
- (upstream) https://hub.docker.com/_/postgres
- https://github.com/AppJail-makejails/nextcloud
- (upstream) https://hub.docker.com/_/nextcloud
- https://github.com/AppJail-makejails/mariadb
- (upstream) https://hub.docker.com/_/mariadb
Some images required Docker Secrets, and since this feature wasn't available in AppJail, I implemented it. For now, rage/age is the only backend implemented, but I plan to add Hashicorp Vault in the next release.
After working on all of this, I think it was necessary to improve the Getting Started guide to give new users a quick way to get started. But to make things much simpler, I've written a script that allows you to easily initialize the host, explains the basics of AppJail, shows some slightly more advanced use cases (like Makejails), and introduces The Ephemeral Concept. This guide also shows you how to deploy a FreeBSD VM using bhyvemgr to test AppJail.setup in a safe manner. Any feedback is welcome.
There are two other things worth noting:
- I've added support in appjail-fstab(1) for mounting sockets. By this I mean mounting individual sockets. See this and the release notes for more details.
- A new AppJail hook has been added to EXAMPLESDIR for cases where you want to load a kld. Some examples include deploying a Linux app inside a FreeBSD jail, deploying WireGuard, or (which was the main motivation) deploying Sylve.
Container Stores: https://wiki.freebsd.org/Containers#Container_Stores