# How should I attain a system with several working ports?



## robroy (Jan 28, 2018)

FreeBSD Friends,

I'm running 11.1-RELEASE amd64 on a Xeon E3-1241 v3 with 32GB of RAM and a ZFS stripe across two fast SSDs.

My goal's to attain a system with these ports all working at the same time:  audio/audacity, www/firefox and emulators/virtualbox-ose.

I followed the portsnap(8) method from the Handbook to attain a current ports tree, from which I was able to build and use emulators/virtualbox-ose and www/firefox.

Yet sadly, this seems to have resulted in a version of ports on my system in which audio/audacity (or one of its dependencies; I'm sorry, but I can't remember now, and I'm asking this question in a more big-picture, general sense anyways) fails to build.  So I haven't been able to enjoy these programs all at the same time; it seems closer to throwing darts (every time I build from ports), and either lucking out (all desired programs build) or not (some do; some don't).

I generally desire no non-default options, so I'd just be using pkg(8), yet at the moment, emulators/virtualbox-ose users on 11.1-RELEASE desiring bridged networking support are forced to build from ports; the emulators/virtualbox-ose package is built on 11.0-RELEASE, and includes a kernel module which doesn't work correctly with the 11.1-RELEASE kernel.  As I understand it, this change may have been against FreeBSD's normal policy for keeping kernel interfaces steady within a major release level like 11.x-RELEASE, yet this is reality, so here I am:  using ports.

The solution of updating my ports tree, crossing my fingers and trying re-compile everything I use seems pretty haphazard, not to mention that it's nice to be able to fix/install an application within a single day of my life, instead of requiring an overnight build festival (with a completely uncertain outcome, that could easily transform this path in to a multi-day trek I never really wanted to sign up for).

I have the idea that ports-mgmt/synth will use pre-compiled packages for ports configured with no non-default options.  This feature would actually break emulators/virtualbox-ose for me, because I do intend to build it with no non-default options, and the pre-compiled package is broken on 11.1-RELEASE (due to a kernel interface change).

Those of you with experience juggling lots of application on FreeBSD these days:  what's the path of least pain for my situation?

Days of joy to you all; thank you!


----------



## Deleted member 30996 (Jan 28, 2018)

I use ports and ports-mgmt/portmaster exclusively. It will gather all the dependencies at the beginning of the build and give you the opportunity to set your variables.

Very seldom do I have to step in and take over due to problems and generally rely on it to do the job on its own.


----------



## ShelLuser (Jan 28, 2018)

robroy said:


> My goal's to attain a system with these ports all working at the same time:  audio/audacity, www/firefox and emulators/virtualbox-ose.
> 
> I followed the portsnap(8) method from the Handbook to attain a current ports tree, from which I was able to build and use emulators/virtualbox-ose and www/firefox.
> 
> Yet sadly, this seems to have resulted in a version of ports on my system in which audio/audacity (or one of its dependencies; I'm sorry, but I can't remember now, and I'm asking this question in a more big-picture, general sense anyways) fails to build.


Do you have any build errors? Without those it's kind of hard to tell what is causing your problems.

I ran `make all-depends-list` in the Audacity directory and can spot some possible problems (note: following list was edited by me):


```
$ make all-depends-list
/usr/ports/lang/perl5.24
/usr/ports/lang/lua52
/usr/ports/databases/sqlite3
/usr/ports/lang/tcl85
/usr/ports/textproc/py-sphinx
/usr/ports/devel/py-Jinja2
/usr/ports/devel/py-setuptools
/usr/ports/lang/python27
```
Perl, Lua and Python are all influenced by default versions (see /usr/ports/Mk/bsd.default-versions.mk). Sometimes you really cannot avoid to "pinpoint" a version, especially because not every port will pull in a system default but rather depend on its own preference. Then there's also the "flavor" system which has been recently put in effect.

So I'd start by identifying your problems. `# make clean build |& tee output.log` (note: I assume root is using csh). This should get you a good idea where things go wrong. Share that with us.

Based on that you can plan for a solution. This is just a hunch but I wouldn't be surprised if your problem is caused by 2 versions of the same program getting installed at once (which the system will block because it would overwrite stuff).

Hope this can help!


----------



## robroy (Jan 28, 2018)

Thanks so much Trihexagonal and ShelLuser for your great replies!





ShelLuser said:


> Do you have any build errors?



Yeah, here's how it fails.

'much appreciated!


----------



## ShelLuser (Jan 28, 2018)

Intriguing.

Try running `make missing` in /usr/ports/textproc/gtk-doc, my assumption is that it will have some complaints. If it doesn't try running: `pkg info -ox xsl`. Make sure you have textproc/docbook-xsl installed, as well as textproc/libxslt. My assumption is that those two ports are missing somehow.

Which would be somewhat peculiar because they're requirements for textproc/gtk-doc and thus should have been pulled in already.

When all else fails my suggestion is as follows:


```
# cd /usr/ports/textproc/gtk-doc
# portmaster `make build-depends-list | sed -e 's/\/usr\/ports\///g'`
```
Then try to build textproc/gtk-doc again.  _What this does:_ Although Portmaster has a really solid way to resolve these kinds of issues it also goes a bit overboard: `# portmaster -Rf` is an excellent way to ensure that all the dependencies of a port get (re)build. The problem though is that Portmaster will recurse through _all_ dependencies. So it will also rebuild everything the required ports depend on, and even deeper.

The code snippet above only checks for the direct requirements of a port and feeds that list to Portmaster for rebuilding. This ensures that it won't fully recurse.

Hope this can help somewhat.


----------



## chrbr (Jan 29, 2018)

robroy said:


> I have the idea that ports-mgmt/synth will use pre-compiled packages for ports configured with no non-default options.


I think it can use pre-compiled packages for ports with default options.

Regarding your issue, how about running some stuff in a jail? This is what I have done in the past. One jail for the web browser installed from packages because it takes too long to build on your own, one jail for python3 things at the time flavors have had not been introduced, one jail for the tex distribution with docs disabled to save about 2GB of disk space. It is a matter what to put where - and of course if it is possible to interface everything. And yes, then you could some dirty things in a jail without affecting the host and other jails.


----------

