Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 13 Mar 2021 01:40:17 -0800
From:      Mark Millard <marklmi@yahoo.com>
To:        Don Lewis <truckman@FreeBSD.org>
Cc:        freebsd-hackers <freebsd-hackers@freebsd.org>
Subject:   Re: problems building a release
Message-ID:  <8CE18E0A-8931-4C41-83B4-D30EEC049E6D@yahoo.com>
In-Reply-To: <tkrat.1fc12827aa92db3e@FreeBSD.org>
References:  <tkrat.1c0426e45b0db829@FreeBSD.org> <B1EB0872-3BC4-424A-AC83-1D5184B9DA15@yahoo.com> <tkrat.1fc12827aa92db3e@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On 2021-Mar-13, at 00:11, Don Lewis <truckman at FreeBSD.org> wrote:

> On 10 Mar, Mark Millard wrote:
>> On 2021-Mar-10, at 15:00, Don Lewis <truckman at FreeBSD.org> wrote:
>>=20
>>> I'm trying to build a customized 13.0 i386 release on a amd64 host
>>> running FreeBSD 14.0-CURRENT #89 n245058-1ca8842f3ad9.  The source =
tree
>>> is branch releng/13.0 from last night.  The release build gets most =
of
>>> the way through, but fails with:
>>>=20
>>> =3D=3D=3D> usr.bin/svn/lib/libsvn_wc (installconfig)
>>> --- installconfig_subdir_usr.sbin ---
>>> --- installconfig_subdir_usr.sbin/pkg ---
>>> --- installdirs-CONFSDIR ---
>>> --- _CONFSINS_FreeBSD.conf.quarterly ---
>>> --- installdirs-CONFSDIR ---
>>> installing DIRS CONFSDIR
>>> install -N /scratch/usr/src/etc  -d -m 0755 -o root  -g wheel  =
/scratch/etc/pkg
>>> --- _CONFSINS_FreeBSD.conf.quarterly ---
>>> install -N /scratch/usr/src/etc  -C -o root  -g wheel -m 644  =
/scratch/usr/src/usr.sbin/pkg/FreeBSD.conf.quarterly =
/scratch/etc/pkg/FreeBSD.conf
>>> Shared object "libedit.so.8" not found, required by "sh"
>>>=20
>>> /scratch/bin/sh seems to work, though it is using the host library:
>>> # ldd /scratch/bin/sh
>>> /scratch/bin/sh:
>>> 	libedit.so.8 =3D> /usr/lib32/libedit.so.8 (0x20463000)
>>> 	libc.so.7 =3D> /usr/lib32/libc.so.7 (0x20495000)
>>> 	libncursesw.so.9 =3D> /usr/lib32/libncursesw.so.9 (0x20683000)
>>> # /scratch/bin/sh
>>> #=20
>>>=20
>>> The library is present in /scratch/lib:
>>> # file /scratch/lib/libedit.so.8
>>> /scratch/lib/libedit.so.8: ELF 32-bit LSB shared object, Intel =
80386, version 1 (FreeBSD), dynamically linked, for FreeBSD 13.0 =
(1300139), stripped
>>>=20
>>> Unfortunately the build isn't verbose enough to give me any hints =
about
>>> where the problem might be.  I've been able to build FreeBSD 11.x =
and
>>> 12.x releases this way, but no luck so far with 13.
>>>=20
>>> Update: I am able to build an amd64 release, so the problem has
>>> something to do with crossbuilds.  There are some other problems =
that
>>> crop up, though.
>>>=20
>>>=20
>>> =3D=3D=3D> usr.bin/svn/lib/libsvn_wc (installconfig)
>>> --- installconfig_subdir_usr.sbin ---
>>> --- installconfig_subdir_usr.sbin/pkg ---
>>> --- installdirs-CONFSDIR ---
>>> --- _CONFSINS_FreeBSD.conf.quarterly ---
>>> --- installdirs-CONFSDIR ---
>>> installing DIRS CONFSDIR
>>> install -N /scratch/usr/src/etc  -d -m 0755 -o root  -g wheel  =
/scratch/etc/pkg
>>> --- _CONFSINS_FreeBSD.conf.quarterly ---
>>> install -N /scratch/usr/src/etc  -C -o root  -g wheel -m 644  =
/scratch/usr/src/usr.sbin/pkg/FreeBSD.conf.quarterly =
/scratch/etc/pkg/FreeBSD.conf
>>> ELF ldconfig path: /lib /usr/lib /usr/lib/compat /usr/local/lib =
/usr/local/lib/perl5/5.20/mach/CORE
>>> 32-bit compatibility ldconfig path: /usr/lib32
>>> pkg: Warning: Major OS version upgrade detected.  Running =
"pkg-static install -f pkg" recommended
>>> Updating FreeBSD repository catalogue...
>>> Fetching meta.txz: 100%    916 B   0.9kB/s    00:01   =20
>>> pkg: repository meta /var/db/pkg/FreeBSD.meta has wrong version 2
>>> repository FreeBSD has no meta file, using default settings
>>> Fetching packagesite.txz: 100%    6 MiB   1.6MB/s    00:04   =20
>>> pkg: repository meta /var/db/pkg/FreeBSD.meta has wrong version 2
>>> Unable to open created repository FreeBSD
>>> Unable to update repository FreeBSD
>>> All repositories are up-to-date.
>>> pkg: repository meta /var/db/pkg/FreeBSD.meta has wrong version 2
>>> pkg: Repository FreeBSD cannot be opened. 'pkg update' required
>>> Updating database digests format: 100%
>>> pkg: No packages available to install matching 'devel/git' have been =
found in the repositories
>>=20
>>=20
>> To my knowledge FreeBSD does not support 14 directly
>> building 13 or before: self hosted and sufficiently
>> recent older building newer only, as far as direct
>> builds go.
>=20
> That doesn't seem to be the problem that I'm running into.  I run into =
a
> similar problem when trying to build a 14-CURRENT release.  The cause =
of
> the problem seems to be that I'm specifying TARGET=3Di386 and =
TARGET_ARCH=3Di386
> in both release.conf, and the make.conf that release.conf points to.
> With 14-CURRENT the failure mode is that something can't find =
ld-elf.so
> and aborts.  That happens a number of times during the release build,
> but this time the release build appears to run to completion.  If I
> remove the make.conf settings, then the error goes away.  The reason
> that I did this in the first place was so I could set TARGET_CPUTYPE.
> This setting appears to be ignored in release.conf.  If I set it in
> make.conf without setting TARGET=3Di386 and TARGET_ARCH=3Di386, then I =
get a
> compiler error because the CPUTYPE is not valid on amd64.  Basically,
> the difference is that with the settings in both places, I get an i386
> chroot under /scratch and with the settings different, the chroot is
> amd64.  I thing the failure is being caused when something tries to =
run
> an amd64 executable in under the i386 chroot.  Verbosity is too low to
> see what it is.
>=20
> Another complication is that I want to maintain the target system with
> freebsd-update, so I need to package up my customized make.conf and
> src.conf into the release so they get used by the update builder.  It
> should be easy to tweak the release script to do this, but it gets
> complicated if the the make.conf files have different TARGET settings.
>=20

You are definitely working outside my direct
experience. But I'll note that
release/release.conf.sample and the man page
have all of the following, not that I
understand the various implications of use:

## Set to override the default target architecture.
#TARGET=3D"amd64"
#TARGET_ARCH=3D"amd64"
#KERNEL=3D"GENERIC"
## Multiple kernels may be set.
#KERNEL=3D"GENERIC XENHVM"
. . .
## Set to pass additional flags to make(1) for the build chroot setup, =
such
## as TARGET/TARGET_ARCH.
#CHROOT_MAKEENV=3D

Also described via:

CHROOT_MAKEENV   Additional make(1) arguments to pass through, which
                      directly affect the tuning of the build chroot.

TARGET and TARGET_ARCH are also listed as controllable
via the ENVIRONMENT :

     TARGET           The target hardware platform.  This is analogous =
to the
                      =E2=80=9Cuname -m=E2=80=9D output.  This is =
necessary to cross-build
                      some target architectures.  For example, =
cross-building
                      for ARM64 machines requires TARGET_ARCH=3Daarch64 =
and
                      TARGET=3Darm64.  If not set, TARGET defaults to =
the
                      current hardware platform.

     TARGET_ARCH      The target machine processor architecture.  This =
is
                      analogous to the =E2=80=9Cuname -p=E2=80=9D =
output.  Set this to cross-
                      build for a different architecture.  If not set,
                      TARGET_ARCH defaults to the current machine
                      architecture, unless TARGET is also set, in which =
case
                      it defaults to the appropriate value for that =
platform.
                      Typically, one only needs to set TARGET.


A possibility would seem to be use of:

## Set to the hardware platform of the target userland.  This value
## is passed to make(1) to set the TARGET (value of uname -m) to cross
## build.
#EMBEDDED_TARGET=3D

## Set to the machine processor architecture of the target userland.
## This value is passed to make(1) to set the TARGET_ARCH (value of =
uname -p)
## to cross build.
#EMBEDDED_TARGET_ARCH=3D

May be EMBEDDEDBUILD=3D with an empty or nonexistent EMBEDDEDPORTS
might happen to do somethings useful for your context? (Implication
of WITH_DVD being unset when EMBEDDEDBUILD=3D is in use. Implicit
EMBEDDEDPORTS such as devel/subversion ?)


A different direction is to have release use a pre-existing build
(separately built beforehand). As I vaguely remember, this involved:

## Set to skip the chroot environment =
buildworld/installworld/distribution
## step if it is expected the build environment will exist via alternate
## means.
#CHROOTBUILD_SKIP=3D

Also described via:

 CHROOTBUILD_SKIP
                      If defined, the buildworld, installworld, and
                      distribution stages of the chroot(8) build =
environment
                      setup are skipped.  This is intended solely for =
cases
                      where the chroot(8) userland are provided by =
alternate
                      means.


There are also:

## Redefine environment variables here to override prototypes
## defined in release.sh.
#load_chroot_env() { }
#load_target_env() { }
#buildenv_setup() { }



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




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?8CE18E0A-8931-4C41-83B4-D30EEC049E6D>