I've been a FreeBSD user for quite some time, going back to 3.3 or so, and for the last serveral years have also been working a lot with Ubuntu Linux. So when I ran across Debian GNU/kFreeBSD, which provides a Debian environment on top of a FreeBSD kernel, I was somewhat intrigued. It got even more interesting when I found a tutorial on setting up GNU/kFreeBSD in a jail. The notion of having a Debian environment on my home FreeBSD server without having to get something like VirtualBox running was just too good to pass up.
I got it running fairly decently, but along the way ran into some small problems - and thought I'd jot down what they were and what the fixes were.
At first, I was using FreeBSD 8.2-RELEASE, and used
debootstrap to install Debian Squeeze, as the tutorial showed. Once inside the jail, things sort of worked, but most commands,
aptitude especially, would die with:
User defined signal 1
It turns out you need a newer kernel than 8.2 to run kFreeBSD in a chroot, as is mentioned in the FAQ. I upgraded my FreeBSD kernel/world to 8.3-PRERELEASE (2012-02-22), and the "signal 1" problem went away.
The next problem was that
aptitude would still die, with:
Uncaught exception: Unable to read from stdin: Operation not permitted
After reading about this bug in cwidget, it seemed an upgrade to Wheezy was needed to fix the problem - and sure enough that problem went away.
kbdcontrol and /dev/console
The upgrade to Wheezy didn't go entirely smoothly, mainly due to the
kbdcontrol package (required by
sysvinit) being unable to access
/dev/console in the jail. I wasn't worried about keeping things in the jail isolated for security reasons, so I went ahead and added
/dev/console on-the-fly to the running jail by running outside the jail:
devfs -m /jails/debian/dev rule add path 'console*' unhide devfs -m /jails/debian/dev rule applyset
After that, the
kbdcontrol package was able to be upgraded, and I seem to have a Wheezy FreeBSD jail now. Very cool.
UPDATE: A followup talks more about the actual file changes made to run as an ezjail