Recently I had to perform a maintenance update of a FreeBSD system. Familiar with OpeBSD, I thought – not a big deal, let's do it! I spent several hours on this simple task. Well, I have to admit, I'm not very experienced with FreeBSD world. But, there can't be so much difference, can it?
At first it is exciting. freebsd-update performs well and smooth. The base-system is up-to-date. But, as it came to ports, the fun was over. There is an half of dozen tools, and none of them do, what they meant to do.
Binary updates with pkgng? Screw you! The migration tool (pkg2ng) reports "everything is fine" and than the upgrade task stumbles over miracles dependency problems, like files belonging to mysql55-server and to mysql51-server simultaneously. WTF? None of them is installed, despite the old package, called mysql-server-51.x.y, which is to replace. Changing package name schema? And no way to track it? WTF again?
Well, fuck. Roll back backups and try portupgrade this time. No fun. Recompiling everything, leading into circular dependency hell. Everything burns. pkgdb -F is not very helpful. Circular dependency hell again, trying recompiling and reinstalling same packages over and over.
Finally, after several hours of trying to fix bizarre dependency and package naming problems, I got it working by dropping all installed packages and installing them anew, manually. (Because there is no way to say "here is my list, do you best!" or may be I just couldn't find it.) Gladly pkgng performed this time as expected, so I haven't need to recompile everything again.
And here is the saddest experience sofar: the Handbook is a piece of crap. Not up-to-date and barely helpful. Having a lot of experience with OpenBSD systems, its spotless documentation and one-tool-for-one-task paradigm, it was really disappointing to me not having any helpful documentation and being trapped into a dozen of tools, performing same worse on a the same task.