# Synth builds all packages even though "fetch prebuilt packages is true"



## jockej (Mar 17, 2017)

Hello!

I've always found mixing packages and ports to be the biggest pain point in using FreeBSD. Right now I only have two things I build from ports: audio/musicpd in order to avoid a ton a X-stuff I don't want and sysutils/bareos-server in order to build againt postgresql96 instead of 93.

Either way, I got the tip that synth might solve my problems, so I installed it and did 
`synth configure` and set "Fetch prebuilt packages" to true, since I don't want to build stuff except when I need to.
When I do `synth status` it reports that it will fetch 152 packages and build 2 (this varies a bit between invocations).
But when I try a `synth upgrade-system` synth starts building everything from source, including pulling down all the build dependencies of everything.

So what am I missing? What does the "Fetch prebuilt packages" option actually mean? I thought `synth status` was supposed to be a dry run of `synth upgrade-system` but they seem to do completely different things.

Is there a way to make synth build only those ports I have non standard options for and fetch the rest from the FreeBSD mirrors? Basically I just want to automate the manual work I do in order to combine a few ports with a lot of packages.


----------



## marino (Mar 17, 2017)

your understanding is correct.
It's possible that either the fetch is failing or it's getting a mismatch on the checksum (because the mirror is still copying files over, as it's not changed atomically (which is a big issue with the distribution model)).

normally the output of status is accurate.

On the other hand, if you let it build everything the first time, the pain of building everything from source will be manageable on subsequent runs.  Due to the mirror issues above, the prefetch is just a "quick and dirty" feature that's hard to rely on.  That's why it's off by default.


----------



## jockej (Mar 17, 2017)

Thanks for replying! I'm now in the process of building everything (`gcc6` takes really long to build). So will the prefetching continue not to work?

Interestingly, I tried doing `synth just-build audio/musicpd` and then it downloaded a bunch of packages, and then built only lame and musicpd itself.

Also interesting (I think) is that synth pulled down postgresql93-client, even though it is not a dependency of bareos-server, since I have `DEFAULT_VERSIONS += pgsql=9.6` in /etc/make.conf.

But say in a few weeks I update my ports tree and my FreeBSD package repo (ie `pkg update`) and the do `synth upgrade-system`, will it want to build all changed packages from source, or will it take them from the FreeBSD mirror? If it rebuilds everything, it will start to get a little annoying, since I only really need very few packages built from source, and they are updated pretty infrequently.


----------



## xtaz (Mar 17, 2017)

Synth doesn't use /etc/make.conf , put your changes into /usr/local/etc/synth/LiveSystem-make.conf instead assuming you are using the default profile. The LiveSystem part of the filename matches the profile in use.


----------



## jockej (Mar 17, 2017)

Hm, ok. I interpreted these lines form the README on github:

*Custom make.conf*
Any file that matches the path "/usr/local/etc/synth/[profile]-make.conf" where [profile] is the name of the selected configuration profile will be appended to the builders stock make.conf.

to mean that /etc/make.conf on the host system would be concatenated with /usr/local/etc/synth/LiveSystem-make.conf.

But OK, that would explain why it wants to pull down `postgresql93-client`.


----------



## marino (Mar 17, 2017)

the key word is "builder's".  Builder refers to the slave jail that builds the port and it has a standard generated make.conf.
I guess some people think "builder" refers to themselves.  You aren't the first to interpret that way.


----------



## jockej (Mar 18, 2017)

Oh ok... Well I'll try to put it there then. Still I hope that the prebuilt fetching will start work somehow...


----------



## jockej (Mar 19, 2017)

OK, I copied /etc/make.conf to /usr/local/etc/synth/LiveSystem-make.conf and it seems to work  I will have to wait for some upgrades to see if the fetching starts working.


----------

