Poudriere - Compile ALL Ports

Mark Millard marklmi at yahoo.com
Mon May 11 17:04:43 UTC 2020


Leander Schaefer info at NetOcean.de wrote on
Tue May 5 20:38:49 UTC 2020 :

> I have been dealing with Poudriere for quite a while and one of the most 
> issues I have is, that I have ports which won't compile along with 
> another. Reason is mostly something like:
> 
> pkg-static: ImageMagick7-7.0.10.6 conflicts with ImageMagick6-6.9.11.6,1 
> (installs files into the same place). Problematic file: 
> /usr/local/bin/Magick++-config
> 
> So in other words a newer version is going to place its binaries etc. 
> into the same place as the previous version. I have read and used 
> something like:
> 
> # Build several PHP versions parallel on the same server:
> # 
> https://github.com/freebsd/poudriere/issues/602
> 
> PHP_ALT=php56 php70 php71 php72 php73
> .for port in ${PHP_ALT}
> .if ${.CURDIR:M*/ports*/*/${port}*}
> DISABLE_CONFLICTS=YES
> PREFIX=/usr/local/${port}
> PHPBASE=/usr/local/${port}
> LOCALBASE=/usr/local
> CONFIGURE_ARGS+=--datadir=/usr/local/${port}/share
> CONFIGURE_ARGS+=--bindir=/usr/local/${port}/bin
> CONFIGURE_ARGS+=--with-config-file-scan-dir=/usr/local/${port}/etc/php
> #CONFIGURE_ARGS+=--with-php-config=/usr/local/${port}/bin/php.conf
> #CONFIGURE_ARGS+=--with-iconv=/usr/local
> #CONFIGURE_ARGS+=--with-pcre-dir=/usr/local
> .endif
> .endfor
> 
> But I was wondering: How is the FreeBSD Team dealing with this, when 
> they compile their packages for the public repository? Because we only 
> use one official repository and all packages are there ... some even 
> with differet options enabled. So how to deal with this? How can I 
> compile the entire ports tree without issues and build a repository of 
> it and some packages even with different options? Lets say one OpenLDAP 
> with SASL and another one with SASL? The only way I was able to do this 
> was building it in separate repositories.

The following is based on a guess about what might be
going on.

In my context, for example, I have:

# poudriere jail -l
JAILNAME              VERSION      ARCH          METHOD TIMESTAMP           PATH
FBSDFSSDjail          13.0-CURRENT amd64         null   2018-11-09 08:58:53 /usr/obj/DESTDIRs/clang-amd64-installworld-poud

I do not chroot into /usr/obj/DESTDIRs/clang-amd64-installworld-poud and
install any ports there. Why? Because the installed port could conflict
with whatever port(s) poudriere bulk might want to install temporarily.
My /usr/obj/DESTDIRs/clang-amd64-installworld-poud/ is only for poudriere's
use.

Having installed ports in /usr/obj/DESTDIRs/clang-amd64-installworld-poud
would also lead to poudriere using the installed port over instead
installing ports that it is building. This can lead t using the wrong
version of such an installed port.

Also, I have:

# ls -laT /usr/obj/DESTDIRs/clang-amd64-installworld-poud/usr/local/
total 8
drwxr-xr-x   2 root  wheel  512 Mar 29 23:31:30 2020 .
drwxr-xr-x  14 root  wheel  512 Apr 29 11:57:28 2020 ..

I do not make that a mount point for making /usr/local
visible for chrooting into clang-amd64-installworld-poud.
This is for the same reason as above: poudriere activity
there could end up conflicting with any pre-existing
content that as made visible in
/usr/obj/DESTDIRs/clang-amd64-installworld-poud/usr/local/ .

I do sometimes create other directory trees for use with
chroot (but not as the PATH for a poudiere jail). In
these I freely install ports.

These notes apply to more than just "bulk -a" builds:
smaller subsets built can have the same problems with
having pre-existing material in an equivalent of my
/usr/obj/DESTDIRs/clang-amd64-installworld-poud/usr/local/
area.

===
Mark Millard
marklmi at yahoo.com
( dsl-only.net went
away in early 2018-Mar)



More information about the freebsd-ports mailing list