problems building a release

Don Lewis truckman at FreeBSD.org
Sat Mar 13 20:43:16 UTC 2021


On 13 Mar, Mark Millard wrote:
> 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:
>>> 
>>>> 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:
>>>> 
>>>> ===> 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"
>>>> 
>>>> /scratch/bin/sh seems to work, though it is using the host library:
>>>> # ldd /scratch/bin/sh
>>>> /scratch/bin/sh:
>>>> 	libedit.so.8 => /usr/lib32/libedit.so.8 (0x20463000)
>>>> 	libc.so.7 => /usr/lib32/libc.so.7 (0x20495000)
>>>> 	libncursesw.so.9 => /usr/lib32/libncursesw.so.9 (0x20683000)
>>>> # /scratch/bin/sh
>>>> # 
>>>> 
>>>> 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
>>>> 
>>>> 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.
>>>> 
>>>> 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.
>>>> 
>>>> 
>>>> ===> 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    
>>>> 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    
>>>> 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
>>> 
>>> 
>>> 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.
>> 
>> 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=i386 and TARGET_ARCH=i386
>> 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=i386 and TARGET_ARCH=i386, 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.
>> 
>> 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.
>> 
> 
> 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="amd64"
> #TARGET_ARCH="amd64"
> #KERNEL="GENERIC"
> ## Multiple kernels may be set.
> #KERNEL="GENERIC XENHVM"
> . . .
> ## Set to pass additional flags to make(1) for the build chroot setup, such
> ## as TARGET/TARGET_ARCH.
> #CHROOT_MAKEENV=
> 
> 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
>                       “uname -m” output.  This is necessary to cross-build
>                       some target architectures.  For example, cross-building
>                       for ARM64 machines requires TARGET_ARCH=aarch64 and
>                       TARGET=arm64.  If not set, TARGET defaults to the
>                       current hardware platform.
> 
>      TARGET_ARCH      The target machine processor architecture.  This is
>                       analogous to the “uname -p” 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=
> 
> ## 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=
> 
> May be EMBEDDEDBUILD= with an empty or nonexistent EMBEDDEDPORTS
> might happen to do somethings useful for your context? (Implication
> of WITH_DVD being unset when EMBEDDEDBUILD= 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=
> 
> 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() { }

Thanks.  All of this stuff is pretty confusing.

If I specify MAKE_CONF in release.conf, it does affect the target build.
In particular MODULES_OVERRIDE does the right thing.

It seems like there should be a way to specify a make.conf and src.conf
so that they get included in the release so that if the release is
installed and then world and kernel are built it reproduces itself.

I did manage to unmute release.sh and make so that the build is verbose,
but the error I get when I specify TARGET and TARGET_ARCH in the
make.conf is still a mystery.  There doesn't seem to be a line buffering
problem hiding things, this was captured from the terminal window with
no redirections involved.

===> etc (installconfig)
mkdir -p bootonly/usr/freebsd-dist
cp MANIFEST bootonly/usr/freebsd-dist
ln -fs /tmp/bsdinstall_etc/resolv.conf bootonly/etc/resolv.conf
echo sendmail_enable=\"NONE\" > bootonly/etc/rc.conf
echo hostid_enable=\"NO\" >> bootonly/etc/rc.conf
echo debug.witness.trace=0 >> bootonly/etc/sysctl.conf
echo vfs.mountroot.timeout=\"10\" >> bootonly/boot/loader.conf
echo kernels_autodetect=\"NO\" >> bootonly/boot/loader.conf
cp /usr/src/release/rc.local bootonly/etc
sh /usr/src/release/i386/mkisoimages.sh -b 14_0_CURRENT_i386_BO bootonly.iso bootonly 
sh /usr/src/release/i386/make-memstick.sh disc1 memstick.img
Calculated size of `memstick.img.part': 624754688 bytes, 13074 inodes
Extent size set to 32768
memstick.img.part: 595.8MB (1220224 sectors) block size 32768, fragment size 4096
	using 1 cylinder groups of 595.81MB, 19066 blks, 13952 inodes.
super-block backups (for fsck -b #) at:
 192,
Populating `memstick.img.part'
Image `memstick.img.part' complete
sh /usr/src/release/i386/make-memstick.sh bootonly mini-memstick.img
Calculated size of `mini-memstick.img.part': 237436928 bytes, 13069 inodes
Extent size set to 32768
mini-memstick.img.part: 226.4MB (463744 sectors) block size 32768, fragment size 4096
	using 1 cylinder groups of 226.44MB, 7246 blks, 14592 inodes.
super-block backups (for fsck -b #) at:
 192,
Populating `mini-memstick.img.part'
Image `mini-memstick.img.part' complete
make -C /usr/src/release  release-done
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
touch release
true
+ eval chroot /scratch make -C /usr/src/release 'TARGET=i386' 'TARGET_ARCH=i386' 'KERNCONF="GW"' '__MAKE_CONF=/home/dl/gw-release/make.conf' 'SRCCONF=/home/dl/gw-release/src.conf' 'NOPORTS=yes' 'WITH_DVD=' 'WITH_VMIMAGES=' 'WITH_CLOUDWARE=' 'XZ_THREADS=0' install 'DESTDIR=/R' 'WITH_COMPRESSED_IMAGES=' 'WITH_COMPRESSED_VMIMAGES='
+ chroot /scratch make -C /usr/src/release 'TARGET=i386' 'TARGET_ARCH=i386' 'KERNCONF=GW' '__MAKE_CONF=/home/dl/gw-release/make.conf' 'SRCCONF=/home/dl/gw-release/src.conf' 'NOPORTS=yes' 'WITH_DVD=' 'WITH_VMIMAGES=' 'WITH_CLOUDWARE=' 'XZ_THREADS=0' install 'DESTDIR=/R' 'WITH_COMPRESSED_IMAGES=' 'WITH_COMPRESSED_VMIMAGES='
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
ELF interpreter /libexec/ld-elf.so.1 not found, error 8
Abort trap
mkdir -p /R
cp -a ftp /R/
cp -p disc1.iso /R/FreeBSD-14.0-CURRENT-i386-disc1.iso
cp -p bootonly.iso /R/FreeBSD-14.0-CURRENT-i386-bootonly.iso
cp -p memstick.img /R/FreeBSD-14.0-CURRENT-i386-memstick.img
cp -p mini-memstick.img /R/FreeBSD-14.0-CURRENT-i386-mini-memstick.img
cd /R && sha512 FreeBSD-14.0-CURRENT-i386* > /R/CHECKSUM.SHA512
cd /R && sha256 FreeBSD-14.0-CURRENT-i386* > /R/CHECKSUM.SHA256
+ return 0
+ return 0
+ umount /scratch/dev



More information about the freebsd-hackers mailing list