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