Re: src upgrade locally vs nfs from RELENG_12 to RELENG_13

From: Robert R. Russell <robert_at_rrbrussell.com>
Date: Mon, 12 Feb 2024 21:52:15 UTC
On Mon, 12 Feb 2024 16:04:29 -0500
mike tancsa <mike@sentex.net> wrote:

> Hi All,
> 
> Starting to plan to upgrade a few remaining RELENG_12 servers to 13.  
> Was hoping I could just do an nfs mount of /usr/src and /usr/obj of a
> 13 build server, but it does not seem to work when going from
> RELENG_12 to RELENG_13.
> 
> root@proxytest:/usr/src # make installkernel
> --------------------------------------------------------------
>  >>> Install check kernel  
> --------------------------------------------------------------
> --------------------------------------------------------------
>  >>> Installing kernel GENERIC on Mon Feb 12 20:58:06 UTC 2024  
> --------------------------------------------------------------
> cd /usr/obj/usr/src/amd64.amd64/sys/GENERIC;  MACHINE_ARCH=amd64 
> MACHINE=amd64  CPUTYPE= CC="cc -target x86_64-unknown-freebsd13.3 
> --sysroot=/usr/obj/usr/src/amd64.amd64/tmp 
> -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin" CXX="c++  -target 
> x86_64-unknown-freebsd13.3 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp 
> -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin"  CPP="cpp -target 
> x86_64-unknown-freebsd13.3 --sysroot=/usr/obj/usr/src/amd64.amd64/tmp 
> -B/usr/obj/usr/src/amd64.amd64/tmp/usr/bin"  AS="as" AR="ar" 
> ELFCTL="elfctl" LD="ld"  LLVM_LINK="" NM=nm OBJCOPY="objcopy" 
> RANLIB=ranlib STRINGS=  SIZE="size" STRIPBIN="strip" 
> PATH=/usr/obj/usr/src/amd64.amd64/tmp/bin:/usr/obj/usr/src/amd64.amd64/tmp/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/sbin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/bin:/usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/libexec::/sbin:/bin:/usr/sbin:/usr/bin 
> make  KERNEL=kernel install
> ld-elf.so.1: /usr/obj/usr/src/amd64.amd64/tmp/legacy/usr/sbin/make: 
> Undefined symbol "regcomp@FBSD_1.6"
> *** Error code 1
> 
> Stop.
> make[1]: stopped in /usr/src
> *** Error code 1
> 
> root@proxytest:/usr/src #
> 
> 
> But if I clone the releng13 source locally and then do a make 
> buildworld/buildkernel, doing a make installkernel works.  Is there a 
> way to get it to work over nfs ? What do I need to build on the 
> buildserver so I dont have to build locally each time on the
> RELENG_12 boxes I want to upgrade ?
> 
>      ---Mike
> 
> 

The most likely problem:
- Toolchain ABI compatibility

How to fix the problem:

- Create a 12-RELEASE jail with a clean /etc/make.conf and /usr/src and
  build inside that.
- Share the resulting /usr/obj with the host needing to be upgraded.

The problem in more detail:

The toolchain stages of building FreeBSD link to the libraries on the
build host. Since your build host is from FreeBSD 13-* the toolchain
programs are linked to a slightly newer ABI than the FreeBSD 12-*
targets support.