Revisiting the need to use a build server (binhost)

Right after the complete switch from Gentoo to FreeBSD, there was no question for me of compiling at least all packages for all my systems: of course, compiling. Of course, Poudriere was a godsend compared to manually building packages from ports. Of course, I will continue to use Poudriere to build packages for various sensitive jails, where there should be nothing superfluous. But...

Building packages specifically for a workstation with a graphical environment becomes tedious. And the point is not in the hardware, but in the expediency of the compilation itself. The problem is that quite heavy packages get into the system. So, for example, I'm compiling Emacs with Native support for Language Server Protocol (LSP) acceleration, and also with svg support. This entails compiling Rust and GCC. Unfortunately, Rust didn't compile today (and therefore all packages that depend on it were skipped, including Firefox). When I woke up in the morning and returned to the computer, I expected everything to be ready. So I finally had to pay attention to Poudriere and take the time to clarify all the circumstances. As a result, I removed Emacs from the Poudriere package set, completely removed the compiled problematic packages from Poudriere, and recompiled everything. As a result, I realized that in fact the only package that matters to me is Emacs, which must be compiled with libgccjit support in order to speed up LSP. But why did I compile it all then?

I would like to know the opinion of the community:
  • Is building all packages fundamentally important to you?
  • Why are you compiling packages in your particular case, and are you compiling all packages or just some?
  • How often do you compile all packages for the graphical environment? Maybe you just do it once a quarter? I'm using lightweight Xmonad, but someone might be using KDE.
After all, if you do not compile all packages, then the option remains to install packages from the main FreeBSD repository. Mixing these options is not recommended. What if special settings are needed for only one package (Emacs in my case): compile only it, or then compile everything, including heavy browsers?
 
I have kernel & 3000 packages on my PC build from source, no binary packages installed. I compile because i can choose the options/flags (cfr Gentoo use-flags)
My PC has 32GB of ram and this makes compiling rust easier (as this port is ram-hungry) and when you go out of swap-space your pc reboots.
My graphical environment is "openbox". This is a very "small" desktop and compiles fast. [ The opposite of gnome/kde ] I compile it each quarter and when there are security fixes.As browser i use firefox because compiling Iridium , Ungoogled-Chromium & Chromium takes too long for me.
 
  • Thanks
Reactions: dnb
I do not compile anything these days. I use packages exclusively.

A few years ago, there was exactly one package I had to compile (Lame, the mpg encoder). I don't even remember why I had to compile it, but the package didn't work for me for some reason. I do compile software I write myself. But other than that, in the about 25 years of using OpenBSD and FreeBSD for my servers at home, that was one thing was the only open-source or free software I ever compiled.

But to each their own.
 
  • Thanks
Reactions: dnb
A few years ago, there was exactly one package I had to compile (Lame, the mpg encoder). I don't even remember why I had to compile it, but the package didn't work for me for some reason.
It's license didn't allow packages to be created. That changed some time ago. It had something to do with patents and licenses of the MP3 format if I recall correctly.
 
I have no desire to build ports, for the most part. I want a consistent package repo, so I know that all systems use the same versions of packages. I also build a few custom ports. But building emacs, rust, etc - no thanks.

There is a little trick if you want to download as many packages as possible and not build stuff:

1. Go to https://pkg-status.freebsd.org/ and find the latest build for your arch (e.g. type 131amd64 in the "package builds" filter
2. Click the one that says default, which is latest.
3. Look at the build id. That is the git commit of the ports tree when it was built.
4. cd to your poudriere ports dir, e.g. /usr/local/poudriere/data/ports/default
5. check out the matching commit, git checkout 96a5483c708f (or whatever the commit is)

Now when you poudriere bulk -b latest, it will be using the same ports tree version as the main package builder used. So there won't be new commits to force a build. I have noticed one odd thing, which is poudriere seems to fetch the first "round" of dependencies for lack of a better word. So you'll see it fetch, and then start building. Once it starts building, I ctrl-c to stop it, and then go again. Now it fetches the next "round". I do that until it has fetched everything it can, and the only thing left to build is stuff that hasn't been built on the public builder, or I have custom options, etc.
 
  • Thanks
Reactions: dnb
Is building all packages fundamentally important to you?
No, not at all. I only build what I use. Currently, there are 2099 package in my repositories. 339 are package I manually specified. Everything else is dependencies of those package.
Building everything seems like a huge waste of resources (especially time & energy). There are almost 60'000 ports as of today. Why build those if I only need a fraction of them?
When I am in a situation where I need a port that is currently not served by my own repositories, I instruct poudriere to only build that port and rebuilding the repository so I don't have to wait for the bulk build (building all ~2099 packages).

Why are you compiling packages in your particular case, and are you compiling all packages or just some?
Because default options don't cut it for me. The reason I switched from official pkg repos to building my own repos was exactly that: Default options that didn't match my use case.
What I don't do is mixing package from different repositories. Everything I use on all of my FreeBSD machines (servers & desktops/laptops) comes from my own binary repositories.
Another reason/implicit-benefit for me was that I can use the same build server to test ports which I maintain.

How often do you compile all packages for the graphical environment? Maybe you just do it once a quarter? I'm using lightweight Xmonad, but someone might be using KDE.
In my case that varies vastly. Sometimes I do multiple builds per week, sometimes I don't do a build for over two months. The average would be about once every two weeks I guess.
 
  • Thanks
Reactions: dnb
My mostly used applications are playing youtube music and editing with neovim. So i can easily assign a few cpu cores to poudriere-build.
Everything on my PC , 3000 ports, is build from quarterly. I have diskspace&cputime&memory over.
 
  • Thanks
Reactions: dnb
I mainly build packages to avoid things I don't want or need like Dbus or Wayland. The use flag philosophy in the Freebsd ports tree is to enable all features that are not harmful. I agree that's probably best for creating general-purpose packages.
 
Back
Top