View previous topic :: View next topic |
Author |
Message |
jpsollie Guru
Joined: 17 Aug 2013 Posts: 323
|
Posted: Sun Nov 06, 2022 7:27 am Post subject: handbook: chroot fails "no such file or directory" |
|
|
I have a crossdev setup in aarch64-unknown-linux-gnu.
Whereas it worked before, currently I can't compile several packages anymore, and python is the most important one here
Code: |
* Disabled modules: gdbm _tkinter _elementtree pyexpat
* econf: updating Python-3.10.8/config.sub with /usr/share/gnuconfig/config.sub
* econf: updating Python-3.10.8/config.guess with /usr/share/gnuconfig/config.guess
/usr/aarch64-unknown-linux-gnu/tmp/portage/dev-lang/python-3.10.8_p2/work/Python-3.10.8/configure --prefix=/usr --build=x86_64-pc-linux-gnu --host=aarch64-unknown-linux-gnu --mandir=/usr/share/man --infodir=/usr/share/info --datadir=/usr/share --sysconfdir=/etc --localstatedir=/var/lib --docdir=/usr/share/doc/python-3.10.8_p2 --htmldir=/usr/share/doc/python-3.10.8_p2/html --build=x86_64-pc-linux-gnu --host=x86_64-pc-linux-gnu ac_cv_header_stropts_h=no --enable-shared --without-static-libpython --enable-ipv6 --infodir=${prefix}/share/info --mandir=${prefix}/share/man --with-computed-gotos --with-dbmliborder= --with-libc= --enable-loadable-sqlite-extensions --without-ensurepip --with-system-expat --with-system-ffi --with-wheel-pkg-dir=/usr/lib/python/ensurepip --with-lto --enable-optimizations --with-readline=readline --without-lto --disable-optimizations
configure: loading site script /usr/share/config.site
configure: loading site script /usr/share/crossdev/include/site/linux
configure: loading site script /usr/share/crossdev/include/site/linux-gnu
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking for python3.10... python3.10
checking for --enable-universalsdk... no
checking for --with-universal-archs... no
checking MACHDEP... "linux"
checking for x86_64-pc-linux-gnu-gcc... aarch64-unknown-linux-gnu-gcc
checking whether the C compiler works... no
configure: error: in `/usr/aarch64-unknown-linux-gnu/tmp/portage/dev-lang/python-3.10.8_p2/work/python-3.10.8_p2-x86_64-pc-linux-gnu':
configure: error: C compiler cannot create executables
See `config.log' for more details
|
as you can see: the CHOST is x86_64-pc-linux-gnu, whereas I'd expect it to be aarch64-unknown-linux-gnu
so, I thought qemu could help me here:
Code: |
Dynamic Runlevel: manual
qemu-binfmt [ started ]
$ chroot /usr/aarch64-unknown-linux-gnu/ /bin/bash --login
chroot: failed to run command ‘/bin/bash’: No such file or directory
|
Code: |
emerge --info:
ACCEPT_KEYWORDS="amd64 ~amd64"
ACCEPT_LICENSE="*"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-march=znver1 -O3 -pipe "
CHOST="x86_64-pc-linux-gnu"
CONFIG_PROTECT="/etc /etc/stunnel/stunnel.conf /usr/share/gnupg/qualified.txt /var/bind"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php8.1/ext-active/ /etc/php/cgi-php8.1/ext-active/ /etc/php/cli-php8.1/ext-active/ /etc/php/fpm-php8.1/ext-active/ /etc/php/phpdbg-php8.1/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-march=znver1 -O3 -pipe "
DISTDIR="/data/distfiles"
ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME"
FCFLAGS="-march=znver1 -O3 -pipe "
FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs buildpkg buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news parallel-fetch preserve-libs protect-owned qa-unresolved-soname-deps sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-march=znver1 -O3 -pipe "
GENTOO_MIRRORS="http://ftp.belnet.be/pub/rsync.gentoo.org/gentoo/ rsync://ftp.belnet.be/gentoo/gentoo/ ftp://ftp.free.fr/mirrors/ftp.gentoo.org/"
LANG="en_US.utf8"
LDFLAGS="-Wl,-O1 -Wl,--as-needed"
MAKEOPTS="-j32 -l16"
PKGDIR="/data/binpkgs"
PORTAGE_CONFIGROOT="/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/var/tmp"
SHELL="/bin/bash"
USE="acl amd64 berkdb bind bzip2 caps clang cli compiler-rt crypt dbus default-compiler-rt default-libcxx dri fortran gdbm gnutls iconv ipv6 libcxx libcxxabi libglvnd libtirpc libunwind lto lzma mesa multilib ncurses nfs nftables nptl opencl openmp openssl pam pcre python readline samba seccomp sha3 split-usr ssl test-rust udev unicode urandom usb xattr xinetd zlib" ABI_X86="64" ADA_TARGET="gnat_2020" APACHE2_MODULES="authn_core authz_core socache_shmcb unixd actions alias auth_basic authn_alias authn_anon authn_dbm authn_default authn_file authz_dbm authz_default authz_groupfile authz_host authz_owner authz_user autoindex cache cgi cgid dav dav_fs dav_lock deflate dir disk_cache env expires ext_filter file_cache filter headers include info log_config logio mem_cache mime mime_magic negotiation rewrite setenvif speling status unique_id userdir usertrack vhost_alias" CALLIGRA_FEATURES="karbon sheets words" COLLECTD_PLUGINS="df interface irq load memory rrdtool swap syslog" CPU_FLAGS_X86="aes sha sse sse2 sse3 avx avx2 bmi1 bmi2 sse4_1 sse4_2 ssse3 pni mmx mmxext fma3 f16c rdrand" ELIBC="glibc" GPSD_PROTOCOLS="ashtech aivdm earthmate evermore fv18 garmin garmintxt gpsclock greis isync itrax mtk3301 nmea ntrip navcom oceanserver oldstyle oncore rtcm104v2 rtcm104v3 sirf skytraq superstar2 timing tsip tripmate tnt ublox ubx" INPUT_DEVICES="libinput" KERNEL="linux" LCD_DEVICES="bayrad cfontz cfontz633 glk hd44780 lb216 lcdm001 mtxorb ncurses text" LIBREOFFICE_EXTENSIONS="presenter-console presenter-minimizer" LLVM_TARGETS="AMDGPU X86" LUA_SINGLE_TARGET="lua5-1" LUA_TARGETS="lua5-1" OFFICE_IMPLEMENTATION="libreoffice" PHP_TARGETS="php7-4 php8-0" POSTGRES_TARGETS="postgres12 postgres13" PYTHON_SINGLE_TARGET="python3_9" PYTHON_TARGETS="python3_9 python3_10" QEMU_SOFTMMU_TARGETS="x86_64 i386 aarch64 arm" QEMU_USER_TARGETS="x86_64 i386 aarch64 arm" RUBY_TARGETS="ruby27 ruby30" SANE_BACKENDS="xerox_mfp hp" USERLAND="GNU" VIDEO_CARDS="amdgpu radeonsi" XTABLES_ADDONS="quota2 psd pknock lscan length2 ipv4options ipset ipp2p iface geoip fuzzy condition tee tarpit sysrq proto steal rawnat logmark ipmark dhcpmac delude chaos account"
Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EMERGE_DEFAULT_OPTS, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, LINGUAS, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS
|
Code: |
aarch64-unknown-linux-gnu-emerge --info:
ACCEPT_KEYWORDS="arm64 ~arm64"
ACCEPT_LICENSE="@FREE"
CBUILD="x86_64-pc-linux-gnu"
CFLAGS="-O3 -mcpu=cortex-a53 -pipe"
CHOST="aarch64-unknown-linux-gnu"
CONFIG_PROTECT="/etc /etc/stunnel/stunnel.conf /usr/share/gnupg/qualified.txt /var/bind"
CONFIG_PROTECT_MASK="/etc/ca-certificates.conf /etc/dconf /etc/env.d /etc/fonts/fonts.conf /etc/gconf /etc/gentoo-release /etc/php/apache2-php8.1/ext-active/ /etc/php/cgi-php8.1/ext-active/ /etc/php/cli-php8.1/ext-active/ /etc/php/fpm-php8.1/ext-active/ /etc/php/phpdbg-php8.1/ext-active/ /etc/revdep-rebuild /etc/sandbox.d /etc/terminfo"
CXXFLAGS="-O3 -mcpu=cortex-a53 -pipe"
DISTDIR="/var/cache/distfiles"
EMERGE_DEFAULT_OPTS=" --usepkg"
ENV_UNSET="CARGO_HOME DBUS_SESSION_BUS_ADDRESS DISPLAY GOBIN GOPATH PERL5LIB PERL5OPT PERLPREFIX PERL_CORE PERL_MB_OPT PERL_MM_OPT XAUTHORITY XDG_CACHE_HOME XDG_CONFIG_HOME XDG_DATA_HOME XDG_RUNTIME_DIR XDG_STATE_HOME"
FCFLAGS="-Os -pipe"
FEATURES="assume-digests binpkg-docompress binpkg-dostrip binpkg-logs buildpkg buildpkg-live config-protect-if-modified distlocks ebuild-locks fixlafiles merge-sync multilib-strict news nodoc noinfo noman parallel-fetch preserve-libs protect-owned qa-unresolved-soname-deps sfperms strict unknown-features-warn unmerge-logs unmerge-orphans userfetch userpriv usersandbox usersync xattr"
FFLAGS="-Os -pipe"
GENTOO_MIRRORS="http://distfiles.gentoo.org"
LANG="en_US.utf8"
LDFLAGS="-O3 -mcpu=cortex-a53 -pipe"
LINGUAS="en"
MAKEOPTS="-j32"
PKGDIR="/data/software/pkgaarch64/"
PORTAGE_CONFIGROOT="/usr/aarch64-unknown-linux-gnu/"
PORTAGE_RSYNC_OPTS="--recursive --links --safe-links --perms --times --omit-dir-times --compress --force --whole-file --delete --stats --human-readable --timeout=180 --exclude=/distfiles --exclude=/local --exclude=/packages --exclude=/.git"
PORTAGE_TMPDIR="/usr/aarch64-unknown-linux-gnu/tmp/"
SHELL="/bin/bash"
USE="arm64 bind build caps custom-cflags dbus dhcp geoip ipv6 kdrive lto minimal multicall ncurses netlink readline split-usr ssl stunnel threads urandom xinetd zlib" ELIBC="glibc" INPUT_DEVICES="evdev" KERNEL="linux" PYTHON_SINGLE_TARGET="python3_10" PYTHON_TARGETS="python3_10 python3_9" USERLAND="GNU" VIDEO_CARDS="fbdev"
Unset: ADDR2LINE, AR, ARFLAGS, AS, ASFLAGS, CC, CCLD, CONFIG_SHELL, CPP, CPPFLAGS, CTARGET, CXX, CXXFILT, ELFEDIT, EXTRA_ECONF, F77FLAGS, FC, GCOV, GPROF, INSTALL_MASK, LC_ALL, LD, LEX, LFLAGS, LIBTOOL, MAKE, MAKEFLAGS, NM, OBJCOPY, OBJDUMP, PORTAGE_BINHOST, PORTAGE_BUNZIP2_COMMAND, PORTAGE_COMPRESS, PORTAGE_COMPRESS_FLAGS, PORTAGE_RSYNC_EXTRA_OPTS, RANLIB, READELF, RUSTFLAGS, SIZE, STRINGS, STRIP, YACC, YFLAGS
|
I must have set a wrong config, that's for sure... but where do I need to look? _________________ The power of Gentoo optimization (not overclocked): [img]https://www.passmark.com/baselines/V10/images/503714802842.png[/img] |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54640 Location: 56N 3W
|
Posted: Sun Nov 06, 2022 12:57 pm Post subject: |
|
|
jpsollie,
/usr/aarch64-unknown-linux-gnu/ as set up by crossdev is set up for cross compiling. /usr/aarch64-unknown-linux-gnu/ in the target root.
For cross compiling Code: | CHOST="x86_64-pc-linux-gnu" | is correct.
The fresh crossdev target root is not useful. You need to set the profile in the target root.
To be able to use the target root for cross compiling or qemu native builds, you need two different make.conf files, one for cross compiling and one for qemu native builds.
To be able to chroot into arm64 from amd64 the targen root requires a qemu user-static amd64 binary installed. Its the only amd64 in the chroot and will emulate an arm64 CPU to execute the arm64 code inside the chroot.
You also need kernel support. This old wiki page will point the way.
That page does not touch on using that same target root as both a chroot and a cross compile target.
Somwhere I have a sample of both make.conf files. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
jpsollie Guru
Joined: 17 Aug 2013 Posts: 323
|
Posted: Sun Nov 06, 2022 1:42 pm Post subject: |
|
|
Those are a lot of things! I'll try to answer them one by one:
NeddySeagoon wrote: | jpsollie,
/usr/aarch64-unknown-linux-gnu/ as set up by crossdev is set up for cross compiling. /usr/aarch64-unknown-linux-gnu/ in the target root.
For cross compiling Code: | CHOST="x86_64-pc-linux-gnu" | is correct.
The fresh crossdev target root is not useful. You need to set the profile in the target root.
|
Code: |
ls -al /usr/aarch64-unknown-linux-gnu/etc/portage/
total 40
drwxr-xr-x 5 root root 4096 Oct 11 09:27 .
drwxr-xr-x 45 root root 4096 Nov 6 07:55 ..
-rw-r--r-- 1 root root 1404 Nov 6 13:44 make.conf
lrwxrwxrwx 1 root root 38 Mar 26 2022 make.profile -> /var/db/repos/gentoo/profiles/embedded
-rw-r--r-- 1 root root 153 Mar 17 2022 package.accept_keywords
-rw-r--r-- 1 root root 86 Mar 16 2021 package.license
-rw-r--r-- 1 root root 58 Oct 22 16:42 package.mask
-rw-r--r-- 1 root root 950 Oct 22 13:32 package.use
drwxr-xr-x 2 root root 4096 Mar 13 2021 profile
drwxr-sr-x 2 root root 4096 Oct 24 2021 repo.postsync.d
drwxr-sr-x 5 root root 4096 Mar 20 2022 savedconfig
|
NeddySeagoon wrote: |
To be able to use the target root for cross compiling or qemu native builds, you need two different make.conf files, one for cross compiling and one for qemu native builds.
|
Code: |
cat /etc/portage/make.conf
# These settings were set by the catalyst build script that automatically
# built this stage.
# Please consult /usr/share/portage/config/make.conf.example for a more
# detailed example.
COMMON_FLAGS="-march=znver1 -O3 -pipe"
#MACHINE_FLAGS="-madx -maes -mavx -mavx2 -mbmi -mbmi2 -mclflushopt -mclzero -mcx16 -mf16c -mfma -mfsgsbase -mfxsr -mlzcnt -mmmx -mmovbe -mmwaitx -mpclmul -mpopcnt -mprfchw -mrdrnd -mrdseed -msahf -msha -msse -msse2 -msse3 -msse4.1 -msse4.2 -msse4a -mssse3 -mxsave -mxsavec -mxsaveopt -mxsaves --param=l1-cache-line-size=64 --param=l1-cache-size=32 --param=l2-cache-size=512"
MAKEOPTS="-j32 -l16"
#MAKEOPTS="-j4"
ACCEPT_KEYWORDS="${ARCH} ~${ARCH}"
#FEATURES="-sandbox"
FEATURES="-sandbox -pid-sandbox -network-sandbox -ipc-sandbox buildpkg" #distcc
#FEATURES="-sandbox -pid-sandbox -network-sandbox -ipc-sandbox"
#splitdebug -sandbox"
CFLAGS="${COMMON_FLAGS} ${MACHINE_FLAGS}"
CXXFLAGS="${COMMON_FLAGS} ${MACHINE_FLAGS}"
FCFLAGS="${COMMON_FLAGS} ${MACHINE_FLAGS}"
FFLAGS="${COMMON_FLAGS} ${MACHINE_FLAGS}"
USE="python berkdb bind bzip2 dbus ipv6 lzma lto mesa ncurses nfs nptl nftables opencl samba -sslv3 -sslv2 -smartcard openssl sha3 usb udev -X -introspection -nls -qt5 -egl -gles2 -gles2-only gnutls caps urandom xinetd -system-mitkrb5 -zeroconf"
#AMD AOCC support
USE="${USE} clang compiler-rt default-compiler-rt default-libcxx libcxx libcxxabi libunwind"
ALSA_CARDS=""
VIDEO_CARDS="amdgpu radeonsi"
LLVM_TARGETS="AMDGPU X86"
PYTHON_TARGETS="python3_9 python3_10"
PYTHON_SINGLE_TARGET="python3_9"
RUBY_TARGETS="ruby27 ruby30"
CPU_FLAGS_X86="aes sha sse sse2 sse3 avx avx2 bmi1 bmi2 sse4_1 sse4_2 ssse3 pni mmx mmxext fma3 f16c rdrand"
SANE_BACKENDS="xerox_mfp hp"
# NOTE: This stage was built with the bindist Use flag enabled
PORTDIR="/var/db/repos/gentoo"
DISTDIR="/data/distfiles"
PKGDIR="/data/binpkgs"
BINPKG_COMPRESS="lz4"
#EMERGE_DEFAULT_OPTS="${EMERGE_DEFAULT_OPTS} --usepkg"
# This sets the language of build output to English.
# Please keep this setting intact when reporting bugs.
LC_MESSAGES=C
GENTOO_MIRRORS="http://ftp.belnet.be/pub/rsync.gentoo.org/gentoo/ rsync://ftp.belnet.be/gentoo/gentoo/ ftp://ftp.free.fr/mirrors/ftp.gentoo.org/"
ACCEPT_LICENSE='*'
#GENTOO_MIRRORS="rsync://localhost/gentoo-portage"
QEMU_SOFTMMU_TARGETS="x86_64 i386 aarch64 arm"
QEMU_USER_TARGETS="x86_64 i386 aarch64 arm"
linuxserver /usr/src/linux # cat /usr/aarch64-unknown-linux-gnu/etc/portage/make.conf
# Note: profile variables are set/overridden in profile/ files:
# etc/portage/profile/use.force (overrides kernel_* USE variables)
# etc/portage/profile/make.defaults (overrides ARCH, KERNEL, ELIBC variables)
CHOST=aarch64-unknown-linux-gnu
CBUILD=x86_64-pc-linux-gnu
ARCH="arm64"
HOSTCC=${CHOST}-gcc
CROSS_COMPILE="${HOSTCC}"
MAKEOPTS="-j32"
ROOT=/usr/${CHOST}/
MACHINE_FLAGS=""
ACCEPT_KEYWORDS="${ARCH} ~${ARCH}"
USE="-pcre -X -qt5 -test -bluetooth -seccomp -usb -xml minimal build -samba -pdf -gtk -png -svg -jpeg2k -gdbm -pci lto readline bind custom-cflags -cryptsetup caps ssl netlink dbus dhcp ipv6 -pam -introspection urandom ncurses geoip stunnel threads xinetd -cairo -glib -acl -xattrs -xattr -openmp -nls -pie -tcpd -cups -zeroconf split-usr"
COMMON_FLAGS="-O3 -mcpu=cortex-a53 -pipe"
CFLAGS="${COMMON_FLAGS}"
CXXFLAGS="${COMMON_FLAGS}"
LDFLAGS="${COMMON_FLAGS}"
#FEATURES="-collision-protect sandbox -ipc-sandbox -pid-sandbox -user-sandbox -network-sandbox buildpkg noman noinfo nodoc"
FEATURES="-collision-protect buildpkg noman noinfo nodoc"
# Be sure we dont overwrite pkgs from another repo..
PYTHON_TARGETS="python3_10 python3_9"
PYTHON_SINGLE_TARGET="python3_10"
PKGDIR=/data/software/pkgaarch64/
PORTAGE_TMPDIR=${ROOT}tmp/
PKG_CONFIG_PATH="${ROOT}usr/lib/pkgconfig/"
BINPKG_COMPRESS="lz4"
EMERGE_DEFAULT_OPTS="${EMERGE_DEFAULT_OPTS} --usepkg"
#PORTDIR_OVERLAY="/usr/portage/local/"
|
NeddySeagoon wrote: |
To be able to chroot into arm64 from amd64 the targen root requires a qemu user-static amd64 binary installed. Its the only amd64 in the chroot and will emulate an arm64 CPU to execute the arm64 code inside the chroot.
|
do I need that one in the first place? it used to work without!
If I don't, forget about this one! but thanks for the tip anyway ...
NeddySeagoon wrote: |
You also need kernel support. This old wiki page will point the way.
|
my host .config
Code: |
CONFIG_BINFMT_ELF=y
CONFIG_COMPAT_BINFMT_ELF=y
CONFIG_ELFCORE=y
CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y
CONFIG_BINFMT_SCRIPT=y
CONFIG_BINFMT_MISC=y
CONFIG_COREDUMP=y
|
NeddySeagoon wrote: |
That page does not touch on using that same target root as both a chroot and a cross compile target.
Somwhere I have a sample of both make.conf files. |
_________________ The power of Gentoo optimization (not overclocked): [img]https://www.passmark.com/baselines/V10/images/503714802842.png[/img] |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54640 Location: 56N 3W
|
Posted: Sun Nov 06, 2022 3:06 pm Post subject: |
|
|
jpsollie,
Code: | lrwxrwxrwx 1 root root 38 Mar 26 2022 make.profile -> /var/db/repos/gentoo/profiles/embedded |
That's the bit that's not useful. Choose a profile that starts default/linux/arm64/17.0 That's valid but very bare.
/usr/aarch64-unknown-linux-gnu/etc/portage/make.conf: |
CHOST=aarch64-unknown-linux-gnu
CBUILD=x86_64-pc-linux-gnu
ARCH="arm64"
HOSTCC=${CHOST}-gcc
CROSS_COMPILE="${HOSTCC}"
MAKEOPTS="-j32"
ROOT=/usr/${CHOST}/ |
Is fine for cross compiling but you need a native arm64 make.conf for a QEMU chroot, so most of that changes.
I'm cheating, I have a arm64 server. Its make.conf is set up to be Raspberry Pi ~arm64 compabable.
The qemu user-static amd64 binary installed in the arm64 chroot is required to chroot. /bin/bash is going to need it as its arm64 code.
The separate make.conf is only required if you will use portage under QEMU. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
jpsollie Guru
Joined: 17 Aug 2013 Posts: 323
|
Posted: Sun Nov 06, 2022 8:00 pm Post subject: |
|
|
NeddySeagoon wrote: |
Is fine for cross compiling but you need a native arm64 make.conf for a QEMU chroot, so most of that changes.
I'm cheating, I have a arm64 server. Its make.conf is set up to be Raspberry Pi ~arm64 compabable.
The qemu user-static amd64 binary installed in the arm64 chroot is required to chroot. /bin/bash is going to need it as its arm64 code.
The separate make.conf is only required if you will use portage under QEMU. |
Lol ... that's definitely cheating
anyway: do I need a qemu chroot if this cross-build environment is only for building packages into the native device? _________________ The power of Gentoo optimization (not overclocked): [img]https://www.passmark.com/baselines/V10/images/503714802842.png[/img] |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54640 Location: 56N 3W
|
Posted: Sun Nov 06, 2022 9:46 pm Post subject: |
|
|
jpsollie,
As long as cross compiling works, you do not need a QEMU chroot.
Cross compiling is much faster than a QEMU chroot as QEMU has to emulate the target CPU at the register level, which is slow.
For some things, its either a native build or a QEMU chroot though.
You do need a QEMU chroot to be able to chroot into the arm64 code, because somehow you need to be able to execute the arm64 code.
Cross compiling will give a lot of errors until you fix your target root profile as the cross compiler is going to use /usr/<target>/etc/potage/* when it builds things, not your build host /etc/potage/* _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
jpsollie Guru
Joined: 17 Aug 2013 Posts: 323
|
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54640 Location: 56N 3W
|
Posted: Mon Nov 07, 2022 12:21 pm Post subject: |
|
|
jpsollie,
Python can be tricky to cross compile.
From memory, it builds some code then runs as as a part of the build process. That has to run on the host during cross compiling.
It it built arm64 code then tried to run it on the build host, I would probably hear the crash. :)
This is the main drawback with cross compile - packages than need to do that but are not cross build aware.
This next bit might make your head hurt.
If you go the QEMU chroot to build things like this, you can use distcc inside the chroot to use the cross compiler on the build host (outside the chroot) as a helper.
That way gcc runs native on the build host, not emulated by QEMU. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
jpsollie Guru
Joined: 17 Aug 2013 Posts: 323
|
Posted: Mon Nov 07, 2022 9:16 pm Post subject: |
|
|
NeddySeagoon wrote: |
This next bit might make your head hurt.
If you go the QEMU chroot to build things like this, you can use distcc inside the chroot to use the cross compiler on the build host (outside the chroot) as a helper.
That way gcc runs native on the build host, not emulated by QEMU. |
You're a genious!
The path I'm currently walking is almost the same:
1)installing gcc on embedded target
2)install distcc on target
3)make a 40GB file in /tmp/blobs, format it as ext, and export /tmp/blobs via nfs
4) Mount /tmp/blobs as network share on target device, and the file in to /var/tmp/portage
5) run emerge on embedded device
But yours is way more beautiful! _________________ The power of Gentoo optimization (not overclocked): [img]https://www.passmark.com/baselines/V10/images/503714802842.png[/img] |
|
Back to top |
|
|
NeddySeagoon Administrator
Joined: 05 Jul 2003 Posts: 54640 Location: 56N 3W
|
Posted: Mon Nov 07, 2022 9:43 pm Post subject: |
|
|
jpsollie,
distcc only distributes C and C++ compile jobs. Big chunks of the build still run on the embedded device.
Linking may run out of real RAM, so builds fail.
That was one of the things that drove me to play with a QEMU chroot for the Raspberry Pi3.
1 GB RAM is too small to build rust, firefox and friends, even in when the Pi3 was new.
gcc is a PITA to build on low end hardware as it is built three times.
The first time with any random C/C++ builds enough of gcc to build itself.
The second time it rebuilds itself with the compiler built in the first stage. There is only one copy of that, so no distcc.
The third time in builds the C/C++ again with the compiler built in stage2. No distcc again.
The results of those two builds are compared. If they are not identical, the build fails.
When all is well, it continues to build the other language targets.
Most of the build cannot use distcc.
When gcc cross compiles itself, it can't do the three pass build as it can't run the output compiler on the build host. _________________ Regards,
NeddySeagoon
Computer users fall into two groups:-
those that do backups
those that have never had a hard drive fail. |
|
Back to top |
|
|
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum
|
|