Bastille 1.0 – Bastille Day 2025

4 months ago 2

We are pleased to announce the release of Bastille 1.0, which includes
many enhancements and bug fixes since the previous release (0.14.20250420).

This release continues to improve the stability, functionality, and user experience
of Bastille. We will now use 1.0.x to our release names since we reached a milestone
in our roadmap.

Bastille 1.0.20250714 introduces significant improvements to network management,
allowing both types of VNET jails (-V and -B) to run simultaneously through
dynamic epair handling with a consistent naming scheme. Major enhancements
include a new live migration capability with backup options, improved list
command functionality with priority-based sorting, enhanced IPv6 support across
multiple operations, and a basic API for BastilleBSD integration. The release
also features better template management with subdirectory support, parallel mode
for improved performance, and numerous stability improvements including enhanced
package management, better resource limits handling, and improved etcupdate
functionality. Users upgrading should restart all jails to convert configurations
to the new epair naming syntax and update their bastille.conf file.

Thanks to all contributors who helped make this milestone possible all this years!

1.0 Potentially Breaking Changes ⚠️

Up until version 1.0.20250714, Bastille has handled epairs for -V jails
using the jib script included in FreeBSD installs. However, for -B jails,
Bastille statically assigned an epair to each jail. This means you can only
run one type (-V or -B) of VNET jails on a given system.

Starting with version 1.0.20250714, we are now handling all epairs
dynamically, allowing the use of both types of VNET jails without issue. We
have also selected a naming scheme that will allow for consistency across
these jail types. The naming scheme is as follows:

e0a_jailname and e0b_jailname are the default epair interfaces for every
jail. The a side is on the host, while the b is in the jail. This will
allow better management when trying to figure out which jail a given epair is
linked to. Due to a limitation in how long an interface name can be, Bastille
will truncate "jailname" to avoid errors if it is too long. So,
mylongjailname will be e0a_mylongjxxme and e0b_mylongjxxme. The xx
part is necessary due to another limitation that does not allow dots (.) in
interface names when using the jib script.

If you decide to add an interface using the network sub-command, they will
be named e1a_jailname and e1b_jailname respectively. The number included
will increment by 1 for each interface you add.

Mandatory

We have tried our best to auto-convert each jails jail.conf and rc.conf
to the new syntax (this happens when the jail is stopped). It isn't a huge
change (only a handful of lines), but if you do have an issue please open a
bug report.

After updating, you must restart all your jails (probably one at a time, in
case of issues) to have Bastille convert the jail.conf and rc.conf files.
This simply involves renaming the epairs to the new syntax.

If you have used the network sub-command to add any number of interfaces, you
will have to edit the jail.conf and rc.conf files for each jail to update
the names of the epair interfaces. This is because all epairs will have been
renamed to e0... in both files. For each additional one, simply increment
the number by 1.

Major Enhancements ✅

CI/CD

  • We now use some scripts to help us test Bastille itself. This is done with
    the help of our other project Rocinante

Basic API

New Migrate subcommand

  • Added support for live migration
  • Added a backup option with --backup flag
  • Added support for sudo, doas and custom ports
  • Enhanced user@host:port syntax support. Also supports password authentication.

List subcommand Improvements

  • Added ability to list jails according to priority
  • Enhanced listing by jail type separately
  • Added support for additional listing arguments
  • Improved sorting options

Create subcommand Improvements

  • Improved IPv6 support for create, clone, rename, and network operations
  • Separated IPv4 and IPv6 configurations in /etc/rc.conf
  • Added support for 3.x and 4.x MidnightBSD releases
  • Added validation to prevent interface conflicts with -V option
  • Improved interface naming validation

Setup Improvements

  • Enhanced network configuration options
  • Improved firewall setup and configuration
  • Better handling of ZFS and UFS storage options

Other Notable Improvements

  • Enhanced package management with better exit code handling
  • Improved template bootstrapping, including support for subdirectories
  • Enhanced service management
  • Improved resource limits management
  • Better handling of etcupdate with improved src verification
  • Various documentation updates and improvements

Bug Fixes

  • Fixed issues with cloning single templates
  • Fixed variable name errors in verify command
  • Fixed various shellcheck issues
  • Numerous other bug fixes and stability improvements

Upgrading

When upgrading from a previous version of Bastille, you will need to update your bastille.conf:

cd /usr/local/etc/bastille diff -u bastille.conf bastille.conf.sample

Merge the lines that are present in the new bastille.conf.sample into your bastille.conf.

Community Support

If you've found a bug in Bastille, please submit it to the Bastille Issue Tracker.

What's Changed (detailed log)

🗞️ New features

🔧 Improvements

📓 Documentation

🐞 Bug fixes

New Contributors

Full Changelog: 0.14.20250420...1.0.20250714

Read Entire Article