I have been trying the various pkgbase options available for FreeBSD.
A few months ago I tried out ‘make packages’ in /usr/src. This produce packages in /usr/obj/usr/src/repo with very little dependency mapping so it’s hard to know which ones are needed for other ports. Also there’s no meta-ports to collect related things together (such as clang + development files into a developer only collection or an absolute minimum required group).
Since I use my own custom meta-ports and poudriere to manage all my ports/packages for all my machines I was interested in getting the FreeBSD pkgbase integrated into this, and was rather disappointed that it caused headaches, poudriere had fits when it tried to access these non /usr/ports packages.
A couple of weeks ago I decided to try out the TrueOS style pkgbase for FreeBSD, hoping this might work around some of the issues, after all the packages were in the ports tree!
This proved to be a somewhat futile exercise. Since pkgbase writes to the actual ‘system’ directories which poudriere makes read-only this caused the first round of headaches. With much massaging of meta-ports I was able to trick poudriere into some level of co-operation. It was a this point I noticed the number of times I was constantly doing a full buildworld!
Creating a new jail involved either hitting a remote repository for bootstrap packages or building world from /usr/src. Then it builds the packages in the poudriere build because some timestamp is different, then you change a couple of options and the whole buildworld happens again. And then there’s the whole issue of buildworld/buildkernel options which was advertised as an advantage…
Much of the buildworld and os-pkg making processes assume certain options are enable and that packages are configured in certain ways. So you build it one way, it fails, you dig up a problem and you have to buildworld all over again. I eventually got sick of waiting for buildworlds to finish.
So yesterday I switched back to /usr/src make packages, and with a bit of tinkering with some ‘fake’ almost-empty packages that I then over-write with some custom hacked package manifest. An hour or so of tinkering getting the dependencies right and I’ve got 4 base meta packages for virtual machines, real machines, development machines and direct-internet connected machines.
What I found from this whole process was that whoever is working on /usr/src make packages is making a solid project that works solidly. Trueos pkgbase just seems fragile, I was tinkering with their ports Makefiles, hacking their custom poudriere to include necissary packages.
Trueos pkgbase has noble ideas but it isn’t as reliable as /usr/src make packages at this point in time.