PC-BSD: From Crap to Critical

http://cft.lv/15

Version 1.1

© Michael Dexter

PC-BSD is rapidly becoming a better FreeBSD than FreeBSD

There's no polite way of putting this: I've had issues with PC-BSD, the desktop OS built on FreeBSD. At best I was unsure of the point of it and at worse it was a slow, bloated and buggy system that BRICKED my notebook. I sincerely wanted to like it and have interviewed Kris Moore the lead developer but somehow things never were quite right.

That was then. This is now.

Then a funny thing happened. PC-BSD 9.0 "Isotope" reached critical mass, no pun intended. It literally just started working and making sense. All of its seemingly-unrelated strategies started working in harmony and produced something greater than the sum of its parts. This rebirth couldn't have come too soon either: FreeBSD 9.0 pushed the X Window System into ports, forcing users to assemble their desktop experience from scratch. Rest assured, PC-BSD now offers a better out-of-the-box desktop experience than virtually every other open source operating system available.

Window Manager Paradise

Previous versions of PC-BSD only included the KDE desktop environment and you had the option of loving it or hating it. PC-BSD 9.0 thoroughly makes up for this shortcoming by not only offering a "the other" leading desktop but by taking a completely desktop-agnostic approach. The install DVD literally includes just about every desktop you might want and I find myself choosing a different one every time I log in. The current "supported" and "unsupported" included desktops are GNOME, KDE, LXDE, XFCE, Awesome, Enlightenment, EvilWM, FVWM, i3, iceWM, Openbox, Ratpoison, Spectrwm, WindowLab and Window_Maker. Mercifully, most of these respect the ~/Desktop convention and store their settings in the centralized PC-BSD Control Panel. So correct!

PBI, AppCafe, EasyPBI and Ports Jails

Ever picking its battles, PC-BSD 9.0 not only averts the desktop environment war but attacks package management head-on. I installed all of the included desktop environments and the result was nearly 1,500 installed packages. You can imagine the risk of package conflict this introduces. To avert the inevitable "dependency hell", PC-BSD has long used its own PBI "Push Button Installer" package system that offers self-contained applications that internally satisfy their own dependencies. This approach shifts the burden to a greater storage requirement but allows for what are essentially micro userlands for each application and the result is a huge reduction in user and administrator frustration.

PBIs are installed and managed through a tool called AppCafe but are built using a tool called EasyPBI. Resist the temptation to add a package via the pkg tools! Versions of PC-BSD up through 9.0 will actually downgrade your ports and packages after you use a tool like portupgrade but 9.1 aims to resolve this shortcoming and add finer-grained management. What you should be doing is searching for your desired software in AppCafe and using EasyPBI to convert any missing ports to PBIs. EasyPBI is indeed easy to use and while I did find ports that wouldn't build under it, I may have encountered bugs that exist in FreeBSD and should be resolved accordingly. The PC-BSD Forums include a "PBI Requests" thread and by all accounts the developers have been very responsive to feedback and requests.

Failing the PBI and EasyPBI options, you have one more choice: Ports Jails. At the risk of getting sentimental (or simply mental as was the case), I first used FreeBSD 4.8/5.0BETA specifically for the jail(8) feature and specifically to solve this problem. Web application stacks were proving to be one of the top causes of dependency hell on various systems and jail(8) promised to contain the offending code. FreeBSD jails work by creating self-contained userlands that are not only chrooted but are managed by the kernel as to appear as independent operating systems. I went as far as using disk images in place for hardware slices and managed my jails with rc scripts. PC-BSD Ports Jails institutionalize this idea for desktop users and allow you to install desktop applications in dedicated jails. Come PC-BSD 9.1 these special jails will be managed by PC-BSD's jail management tool "Warden" and this is where PC-BSD's holistic view starts to get very, very interesting.

Warden

The whole notion of institutionalized jail management in FreeBSD was introduced in FreeBSD 5.0 and PC-BSD's Warden is a GUI for this task. It offers the obligatory start/stop control plus "Traditional" and "Ports" jail creation, user and package management and shell access. That's nice, but what's awesome is the fact that it now uses dedicated ZFS datasets for jails with snapshotting. Having jails in disk images was pretty exciting but this is how to do it right. We all have Paul Schenkeveld to thank for exploring this idea with his pioneering paper, "Minimizing service windows using NanoBSD + ZFS + jails". Taking this all yet another step further, PC-BSD 9.1 includes support for Linux Jails using kFreeBSD/Debian and kFreeBSD/Gentoo userlands. In time, improved compat_linux support would allow for the native execution of Linux daemons in jails. Now that's a holistic view. BHyVe anyone?

The writing is on the wall about the usefulness of this infrastructure for servers and the names "TrueOS" and "OwnCloud" have recently appeared in relation to PC-BSD. That said, PC-BSD has always done something remarkable with regards to serving: the installer has long offered you a choice between installing FreeBSD or PC-BSD, emphasizing the point that PC-BSD is still FreeBSD. I challenge the Ubuntu project to do the same with Debian. While that toggle appears to be giving way to a TrueOS choice, it's important to note that the PC-BSD installer can do things that the FreeBSD installer cannot, such as effortlessly installing to a bootable ZFS storage array. The PC-BSD 9.1 installer also includes another simple yet elegantly useful feature: the OEM install. Unlike virtually every open source OS out there, PC-BSD now only asks for partitioning and package group information during installation, pushing all local configuration such as setting the root password and creating users to the first boot. So, so correct.

PC-BSD Hardware

Deciding what you will run PC-BSD on will begin to reveal PC-BSD's one true flaw: for all the features it leverages in FreeBSD, it also inherits and exposes all of its bugs. That said, if runs FreeBSD, it will probably run PC-BSD. FreeBSD has not been the strongest laptop OS and I have confirmed this repeatedly with personal experience. There is a simple solution though: consider getting a Lenovo ThinkPad T420 or T520 (and perhaps T*30) with Intel wireless and NVIDIA graphics. Choose discreet graphics in BIOS and the result will be a pleasant suspend and resume experience. Sandy Bridge and Ivy Bridge Intel Graphics will cause panics on many laptops and the use of VESA "fallback mode" video on desktops. My Intel DQ67EP Mini-ITX motherboard will support suspend and resume and I use an older, fanless ATI video card with good results. VESA "fallback mode" video is quite painful to look at both in terms of emulated 1024X768 screen resolution and GUI artifacts. If I were to firmly stand by one hardware-related complaint, it would be PC-BSD's lack two-finger scrolling. Even OpenBSD has it by default. This, like most other PC-BSD issues is sadly a FreeBSD issue and I cannot fault the developers.

In a way, PC-BSD's propensity for exposing FreeBSD bugs is a very good thing: the TODO list becomes very clear, very quickly. I hope the FreeBSD Foundation's Intel GEM/KMS/DRI graphics project is successful because of the huge value it will provide to PC-BSD users. Success should also get a few FreeBSD developers to wipe Mac OS X from their MacBooks and get back to dogfooding FreeBSD. As a bonus, they will find hacking on PC-BSD to be quite elegant given that the majority of its unique tools are simply shell scripts with GUI widgets.

It took time but PC-BSD is really shaping up nicely and teaches quite a few lessons about holistic OS design. I haven't even explored its "Life Preserver" backup/FreeNAS option but the developers are clearly are focusing on adding the missing tools of the highest value. They are also focused on creating a complete client/server ecosystem and PC-BSD 9.1 users can look forward to expanded command line alternatives to the GUI tools. PC-BSD also has quite a few invisible features such as the unified base OS .txz it uses for jail creation that I may end up using for building BHyVe images. PC-BSD 9.0 and newer is truly worth a try and I applaud the progress its developers have made.

Discoveries

After writing this I had the pleasure of spending some time with Kris Moore and John Hixon of iXsystems while at EuroBSDcon 2012 in Warsaw and they pointed me to a few fixes that make PC-BSD even more pleasant to use on my ThinkPad T420.

Edge scrolling: You can enable edge-of-the-touchpad scrolling by adding hw.psm.synaptics_support="1" to /boot/loader.conf I haven't delved into the black arts of xorg.conf Synaptics configuration but two-finger scrolling should be achievable.

Volume controls: The keyboard volume buttons can be enabled with these entries to ~/.Xmodmap although XF86MicMute does not appear to be enabled in FreeBSD:

keycode 160 = XF86AudioMute keycode 174 = XF86AudioLowerVolume keycode 176 = XF86AudioRaiseVolume

If you find that the cursor is frozen after resume on PC-BSD 9.0, add /etc/rc.d/moused restart to /etc/rc.resume

Have you ever wondered exactly how your system was configured? pc-sysinstall logs the entire installation process in /root/pc-sysinstall.log and simply reading the log is a good lesson in system administration. Ever connecting the dots... there is an Automated Installation option that allows you to use a pc-sysinstall.cfg file to script an installation.

It's slowly dawning on me what is going on here: PC-BSD makes no attempt to dumb down the user experience and hide the details of the system from the user or administrator. This is very, very refreshing considering how many open source operating system either focus on idiotproofing the system or rolling your own from scratch. The BSDs nailed "source orientation" over a decade ago and this what the next level looks like. There's no question that PC-BSD automates many processes but it does so in an administrator-friendly way with an arsenal of shell scripts. Listen up GNU/Linux.

Feedback

Prior to publishing this, Michael W. Lucas wrote privately, "Hell yes. I hope FreeBSD steals their installer. And other stuff."

On Facebook, original FreeBSD release coordinator Jordan Hubbard wrote, "I made no friends at BSDCan by dissing the new and extremely complicated package management tool, instead espousing the virtues of PBI, but I stand by that assertion."

Copyright © 2011 – 2014 Michael Dexter unless specified otherwise. Feedback and corrections welcome.