This page describes the steps required to configure an Ubuntu-based Linux jail or chroot - a complete Linux userspace environment running on top of [[Linuxulator]]. Required steps: - Have %%FreeBSD%% 14-CURRENT or 13.0-RELEASE on amd64, or 14-CURRENT on arm64 - Have linux(4) compatibility enabled, as documented in the [[https://www.freebsd.org/cgi/man.cgi?linux|man page]]; this boils down to having ''%%linux_enable=YES%%'' in ''%%/etc/rc.conf%%''; running ''%%service linux start%%'' as root after adding it there. This is to load the neccessary kernel modules and set some sysctls. - Install [[https://www.freshports.org/sysutils/debootstrap/|sysutils/debootstrap]]; ''%%pkg install debootstrap%%''. - Run ''%%debootstrap bionic /compat/ubuntu%%''. This will install Ubuntu Bionic into ''%%/compat/ubuntu%%''. While it is technically possible to install into ''%%/compat/linux%%'' instead, it's discouraged due to possible clash with %%CentOS%%-based ports and packages ([[https://www.freshports.org/emulators/linux_base-c7/|linux_base-c7]] et al). You might see some errors during the configuration phase - they are generally harmless; as long as the log ends with "Base system installed successfully", everything is fine. - Set up mounts in ''%%/etc/fstab%%'', as described in [[https://www.freebsd.org/cgi/man.cgi?linux|linux(4) man page]]. Remember to actually mount them (''%%mount -al%%'' if you use the example below) afterwards. If you want to share home directory contents, and be able to run X11 apps, you will also need [[https://www.freebsd.org/cgi/man.cgi?nullfs|null mounts]] for ''%%/home%%'' and ''%%/tmp%%''. For example: # Device Mountpoint FStype Options Dump Pass# devfs /compat/ubuntu/dev devfs rw,late 0 0 tmpfs /compat/ubuntu/dev/shm tmpfs rw,late,size=1g,mode=1777 0 0 fdescfs /compat/ubuntu/dev/fd fdescfs rw,late,linrdlnk 0 0 linprocfs /compat/ubuntu/proc linprocfs rw,late 0 0 linsysfs /compat/ubuntu/sys linsysfs rw,late 0 0 /tmp /compat/ubuntu/tmp nullfs rw,late 0 0 /home /compat/ubuntu/home nullfs rw,late 0 0 That's it! You should now be able to run ''%%chroot /compat/ubuntu /bin/bash%%'' and use ''%%apt%%'' like you would on a typical Ubuntu instance. You will probably want to add users and groups with UIDs/GIDs matching the ones on the host system. While ''%%systemd%%'' doesn't work, the ''%%service%%'' command works as usual. Some things that would probably get set up by the installer require manual tweaking: if you get warnings about LC_ALL, you'll want to install appropriate locales (''%%apt search language-pack%%''). There's a configuration problem with the rsyslog package; use ''%%apt remove rsyslog%%'' to make ''%%apt%%'' stop whining. To get your environment variables set up in the typical Ubuntu way you might want to start sshd(8) (''%%service ssh start%%'') and log in this way; you can add ''%%chroot /compat/ubuntu /usr/sbin/service ssh start%%'' to ''%%/etc/rc.local%%'' to make it run at boot. As with any other Ubuntu, you will probably want to add the package repositories missing from defaults; for the amd64 (x86_64) version of Bionic, make your ''%%/compat/ubuntu/etc/apt/sources.list%%'' look like this: deb http://archive.ubuntu.com/ubuntu bionic main universe restricted multiverse deb http://security.ubuntu.com/ubuntu/ bionic-security universe multiverse restricted main deb http://archive.ubuntu.com/ubuntu bionic-backports universe multiverse restricted main deb http://archive.ubuntu.com/ubuntu bionic-updates universe multiverse restricted main For arm64, it should look like this: deb http://ports.ubuntu.com/ubuntu-ports bionic main universe restricted multiverse Note that the instructions above apply to both jails and chroots - it makes no difference from Linuxulator's point of view; the part that matters is changing the filesystem root directory, which is common to both. Also note that the instructions don't describe how to manage the jail; take a look at [[https://www.harshadsharma.com/posts/2020/12/ubuntu-bionic-on-freebsd-with-iocage-managed-jails/|this article]] for instructions on how to manage your Ubuntu jail using [[https://iocage.io/|iocage]], or [[https://bastillebsd.org/blog/2021/08/01/bastille-experiments-with-ubuntu-and-debian-linux-containers/|this one]] for [[https://bastillebsd.org/|Bastille]]. You can find the list of tested apps at [[LinuxApps]]. Feel free to add new entries. It is possible to use VNET with a Linux jail if one replaces the linux version of ''%%ifconfig%%'' with ''%%/rescue/ifconfig%%'' and ''%%route%%'' with ''%%/rescue/route%%'' (see the [[https://forums.freebsd.org/threads/vnet-and-a-linux-jail.82787/|forums]] for a more in-depth explanation). ---- {{tag>HowTo}}