diff options
Diffstat (limited to 'README')
-rw-r--r-- | README | 991 |
1 files changed, 18 insertions, 973 deletions
@@ -71,9 +71,9 @@ http://www.ibb.net/~anne/keyboard.html Recipe ------ -######### -# PHASE 0 -######### +############## +# PREPARATIONS +############## # Prepare the host. We use Archlinux 64-bit as we don't fully trust the # 32-bit toolchain in Archlinux32 (yet). And a 64-bit based toolchain is @@ -120,21 +120,27 @@ cp .config ct-ng.config su cross ./prepare_stage1_repo.sh ######### -# PHASE 1 +# STAGE 1 ######### # Build stage1 in $STAGE1_BUILD with the cross-compiler and modified # PKGBUILDs and patches into $STAGE1_CHROOT. -# we cannot build the glibc or the compilers, we create phantom packages -# by hand without makepkg with files from the toolchain's sysroot +# If necessary to fullfill the dependencies of makepkg, we create phantom +# packages by hand without makepkg with files from the toolchain's sysroot. -# so we build gcc-libs for compiler libraries (C and C++) and the glibc +# So, we build gcc-libs for compiler libraries (C and C++) and the glibc # we will NOT build them using the cross-compiler as packages but later # at the end of phase 1. This ensures glibc and gcc-libs are around as # dependency for makepkg all the time, if not the original one, so close # ones fitting to the crosstoolchain. +# In this stage we are not allowed to have loops when building, the build +# tree must be a real tree. + +# The goal is to get a booting system of the target architecture (for instance +# to be installed on real hardware for a build cluster). + su cross ./create_gcc-lib_shim.sh su cross ./create_glibc_shim.sh @@ -144,977 +150,16 @@ su cross ./create_glibc_shim.sh su cross ./create_ca-certificates-utils_shim.sh -# Install stage 1 +# Build stage 1 and install it into a chroot and into sysroot ./build_stage1.sh -# Build stage 1 ISO +# Build stage 1 ISO (mainly for testing, installing from this CD is +# difficult and more manually as with pacstrap) su cross ./create_cdrom.sh -# or easier for direct testing, build stage 1 hard disk image +# build stage 1 hard disk image (to be installed directly as the +# stage 2 build system on the target architecture) su cross ./create_hdd.sh - -# TODO FROM HERE: - - -# build packages for the i486-chroot -#################################### - - -# the package list -################## - - -# basic packages -PACKAGES=" \ -# TODO: iputils is for ping only, a little bit too many packages for -# that. -sysfsutils libidn nettle iputils" -# systrace for debugging - -# sysfsutils and libidn, nettle for iputils -SYSROOT_PACKAGES=" \ -sysfsutils libidn" - - - -# special patches for some packages -################################### - - -# libidn -sed -i 's@./configure@./configure --host=i486-unknown-linux-gnu --build=x86_64-pc-linux-gnu@g' libidn/PKGBUILD - -# sysfsutils -sed -i 's@./configure@./configure --host=i486-unknown-linux-gnu --build=x86_64-pc-linux-gnu@g' sysfsutils/PKGBUILD - -# nettle -sed -i 's@./configure@./configure --host=i486-unknown-linux-gnu --build=x86_64-pc-linux-gnu@g' PKGBUILD - -# iputils -# no documentation and use git from host -sed -i 's@\(make doc man\)@#\1@' iputils/PKGBUILD -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' iputils/PKGBUILD -sed -i 's@make @make CC=i486-unknown-linux-gnu-cc LD=i486-unknown-linux-gnu-ld@g' iputils/PKGBUILD -sed -i 's@\(install -m644 doc\)@#\1@' iputils/PKGBUILD -sed -i 's@\("${pkgdir}"/usr/share\)@#\1@' iputils/PKGBUILD - - -####################################### -##### TODO FROM HERE -####################################### - -# TODO: m4. autoconf, automake, libtool are not really bootstrappable in x-tools -# basic packages, non-virtual one from above: kernel, shell, pacman, editor, coreutils, development -# tools (some of them can be bootstrapped inside like the autotools, perl; and they also should!) - -# linux-headers is important so we can build kmod inside the chroot -# linux itself is tricky. For now we will boot with direct kernel parameters and binary in libvirt/qemu - -PACKAGES= \ - \ - \ -libffi glib2 libunistring gettext" - -# some binaries in the cross tools (also known as perl) have really -# weird library pathes (and no rpath it seems) -export LD_LIBRARY_PATH=/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/lib/:/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/lib/perl5/5.26/core_perl/CORE -export PATH=/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/bin:/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/bin:${PATH} - -### -TODO FROM HERE - - # TODO: - # autoreconf needs autotools/m4 and dependencies (crosstool-ng autotools are broken for me)\ - # libunistring for gettext - # libffi for glib2 - pushd $HOME/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot - bsdtar xf $STAGE1_CHROOT/packages/i486/m4-1.4.18-1-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/autoconf-2.69-4-any.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/automake-1.15.1-1-any.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/libffi-3.2.1-2-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/libunistring-0.9.7-1-i486.pkg.tar.gz - popd - - cd .. -done - - -# special patches for some packages -################################### - -# autoconf needs help2man, checks need fortan (wow. that package is old!) -# depends contains base-devel stuff?! diffutils -sed -i 's@makedepends\(.*\)@#makedepends\1@g' autoconf/PKGBUILD -sed -i 's@checkdepends\(.*\)@#checkdepends\1@g' autoconf/PKGBUILD -sed -i 's@depends\(.*\)@#depends=\1@g' autoconf/PKGBUILD - -# automake needs dejagnu for testing, not now, disabling checks -sed -i 's@checkdepends\(.*\)@#checkdepends\1@g' automake/PKGBUILD - -# libool: trusting the toolchain here, no silly checks :-) -sed -i 's@makedepends\(.*\)@#makedepends\1@g' libtool/PKGBUILD - -# afterpatching; autreconf has a hard-coded #! /bin/perl -w bang, -# seriously! -chmod u+w /home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/bin/autoreconf -sed -i 's@^#/bin/perl@/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/bin/perl@g' \ - /home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/bin/autoreconf - - -# glib2 -####### -# take gettext from host -sed -i 's@makedepends\(.*\)@#makedepends\1@g' glib2/PKGBUILD -# get arch-meson wrapper, doens't build without it! -# ok, forget meson, completly broken, resorting to autotools. -# autoreconf: running: /home/cross/x-tools/i486-unknown-linux-gnu/bin/autoconf --force -# configure.ac:88: error: possibly undefined macro: AC_DEFINE -# huh? -# retooling seems to be near impossible! ok, autoconf broken, meson unusable.. sweet -Found pkg-config: /bin/pkg-config (0.27.1) -Dependency libpcre found: NO -Library m found: YES -Not looking for a fallback subproject for the dependency libffi because: -Automatic wrap-based fallback dependency downloading is disabled. - -Meson encountered an error in file meson.build, line 1439, column 0: -Native dependency 'libffi' not found -==> ERROR: A failure occurred in build(). - Aborting... -=> this is all very wrong! - -# gettext -######### -# remove glib2 from depends, not needed (why the hell is there anyway then?!?! just for fun?) - -# libarchive calls autoreconf, this is quite annoying as perl in crosstool-nt or -### -# stil in phase two, no proper autotools, let's apply the out-of-chroot trick once more.. -# do the autoreconf -fi outside, create a package libarchive-3.3.2-retooled.tgz -# libarchive has trouble with wchar_t (and has quite some other trouble around autoconf it seems) -# remove the wchar_t and wchar_t sizeof test in configure.ac manutally before retooling -# and of course tests fail! -# no checks again -sed -i "s@^source=.*@source=('libarchive-3.3.2-retooled.tgz')@g" libarchive/PKGBUILD -sed -i "s@^sha256sums=.*@sha256sums=('1f856e6f5cc0e1479f381e381a031ba19d09f80b51ac88e74b2c140fc78606e8')@g" libarchive/PKGBUILD -sed -i 's@autoreconf@#autoreconf@g' libarchive/PKGBUILD - -# generic build -############### - -for p in $PACKAGES - - # for some packages we cannot execute tests (because the dependencies to install in - # the toolchain environment would be too much) - # autoconf: --nocheck - # automake: --nockeck - # pacman: --nocheck - # mpfr: --nocheck - - # for ncurses, readline for bash - # autoreconf needs autotools/m4 and dependencies (crosstool-ng autotools are broken for me) - # libunistring for gettext - # libffi for glib2 - bsdtar xf $STAGE1_CHROOT/packages/i486/m4-1.4.18-1-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/mpfr-3.1.6.p1-1-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/libmpc-1.0.3-2-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/gawk-4.1.4-2-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/libffi-3.2.1-2-i486.pkg.tar.gz - bsdtar xf $STAGE1_CHROOT/packages/i486/libunistring-0.9.7-1-i486.pkg.tar.gz - popd - - cd .. -done - -testing: - -# common issues -############### - - -TODOS: in linux package makepkg -https://github.com/libarchive/libarchive/issues/411 - -https://rubenerd.com/sata-on-qemu/ - -/usr/libexec/qemu-kvm --enable-kvm -cpu 486 -m 32 -vnc 0.0.0.0:2 \ - -kernel linux/pkg/linux/boot/vmlinuz-linux \ - -append 'root=/dev/hda1 nomodeset init=/etc/rc console=ttyS0 console=tty0' \ - -cdrom /data/isos/arch486.iso -hda /data/libvirt/arch486.qcow2 -nographic - -qemu-system-i386 --enable-kvm -cpu 486 -m 32 -cdrom /data/isos/arch486.iso \ - -hda /data/libvirt/arch486.qcow2 -curses -boot d \ - -netdev user,id=net0,net=10.0.0.0/24,host=10.0.0.2,dhcpstart=10.0.0.16,hostfwd=tcp::2222-:22 \ - -device rtl8139,netdev=net0 - -qemu-system-i386 --enable-kvm -cpu 486 -m 32 \ - -hda /home/cross/arch486.img -curses -boot d \ - -netdev user,id=net0,net=10.0.0.0/24,host=10.0.0.2,dhcpstart=10.0.0.16,hostfwd=tcp::2222-:22 \ - -device rtl8139,netdev=net0 - -# very funny: uvesafb: failed to execute /sbin/v86d -# Intel and ARM DRM modules: -# BUG: unable to handle kernel NULL pointer dereference at (null) - -PHASE 2 -####### - -Test what we can build inside the chroot. -When we get all dependencies right, we go into the real environment (which is -i486 and thus not SMP and slow- ok, we could use distcc, but anyway) - -Main problem: we have trouble to run fakeroot in a chroot -fakeroot: nested operation not yet supported -makepkf -F takes care of that (thanks for providing minial fakeroot support) -but pacman also takes an -F parameter --> INFAKEROOT=1 in /usr/bin/makepkg - -As pacman seems to have some trouble, we overwrite the temp packages inside -the chroot and replace the files on the filesystem forcefully: -error: could not register 'temp' database (wrong or NULL argument passed) - -In this round don't skip dependencies and tests if possible. - -cp pkg/arch-install-scripts/usr/bin/arch-chroot /usr/local/bin/. - -arch-chroot /home/cross/i486-root/ - -# package specific things - -# iana-etc: -download error https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xml -=> we miss /etc/ssl/certs/ca-certificates.crt from ca-certificates-utils, we - can copy it from an existing archlinux - -# hack /usr/bin/makepkg, run_pacman again, this time set -# --config /etc/pacman-i486.conf -r / - -# tzdata -/build/tzdata/PKGBUILD: line 25: zic: command not found -==> ERROR: A failure occurred in package(). - Aborting... -=> forgot zig in the shim - -# ncurses -# dlsym errors and we don't have a C++ compiler (yet) -sed -i 's@./configure@./configure --without-dlsym@g' ncurses/PKGBUILD -sed -i 's@--with-cxx-binding --with-cxx-shared@--without-cxx --without-cxx-binding --without-cxx-shared@g' ncurses/PKGBUILD - -# perl -###### -perl: warning: Please check that your locale settings: - LANGUAGE = (unset), - LC_ALL = (unset), - LANG = "en_US.UTF-8" - are supported and installed on your system. - -# openssl -sed -i 's@i686@i486@g' openssl/PKGBUILD -sed -i 's@no-ssl3-method@no-sse2 no-ssl3-method@g' openssl/PKGBUILD - -# xz -# with gcc 7.2 we get new errors -sed -i 's@--enable-werror@--disable-werror@g' xz/PKGBUILD - -# help2man -# needs perl-locale-gettext, which needs gettext, which needs glib2 -# which needs meson (so a big nogo currently!) -# obviously it builds also without gettext.. -sed -i 's@^depends\(.*\)@#depends\1@g' help2man/PKGBUILD - -# bc -# requires texinfo, is this part of base-devel? -# bootstrap --force -# no /usr/lib32 -# ./fbc -c ./libmath.b </dev/null >libmath.h - - -# libelf -######## -In file included from /usr/include/error.h:52:0, - from xmalloc.c:33: -/usr/include/bits/error.h: In function 'error': -/usr/include/bits/error.h:40:5: error: format not a string literal, argument types not checked [-Werror=format-nonliteral] - __error_noreturn (__status, __errnum, __format, __va_arg_pack ()); - ^~~~~~~~~~~~~~~~ -=> -isystem in gcc specfile needed, not -I - - -# -# libxml2 -# go without icu for now, icu needs C++ -# also, python bindings and git are not really needed -sed -i 's@^depends\(.*\)@#depends\1@g' libxml2/PKGBUILD -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' libxml2/PKGBUILD -build() -{ - sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0 /g' libtool - make -} -sed -i 's@--with-icu@@' libxml2/PKGBUILD -# dito package -# really, what is it with people! -# take: ftp://xmlsoft.org/libxml2/libxml2-2.9.7.tar.gz -#source=(git+https://git.gnome.org/browse/libxml2#commit=$_commit -# no tests, c++ tests would fail -./configure: line 13042: syntax error near unexpected token `Z,zlib,' -./configure: line 13042: ` PKG_CHECK_MODULES(Z,zlib,' -==> ERROR: A failure occurred in build(). - Aborting... --> zlib probing needs pkg-config, which is it's own disaster, so disable -zlib for now. -=> hack out the broken PKG_CHECK_MODULES out of configure! --> same trick for LZMA (equally broken) and ICU --> disable testing for now, either it takes long or it hangs - -# libgcrypt -# download location broken, download by hand, adapt PKGBUILD - -# libxslt: same disaster as libxml2 -# no python, no check - -# kmod: circular dependency on linux-headers, let's build -# linux/linux-headers correctly outside the chroot and install -# them here (at least linux-headers) -# gtk-doc draws in Gnome bullshit again -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' kmod/PKGBUILD - -# libtirpc: break the cyrcle with systemd (via krb5) -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' libtirpc/PKGBUILD -sed -i 's@^depends\(.*\)@#depends\1@g' libtirpc/PKGBUILD -# configure: error: gssapi.h not found. Use --disable-gssapi, or install GSS-API. -# --disable-gssapi - -# pam: -# dependency w3m is for documentation, let's remove it -rm: cannot remove '/build/pam/pkg/pam/usr/share/doc/Linux-PAM/sag-pam_userdb.html': No such file or directory -also remove section in PKGBUILD - -# inetutils: -# disable checks - -# iroute2 -# trying with iptables, as iptables draws in tons of things -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' iproute2/PKGBUILD -sed -i 's@^depends\(.*\)@#depends\1@g' iproute2/PKGBUILD - -# bison -# --nocheck: fails miserably to compile tests (C++ missing?) - -# linux-headers: fails hapilly and has tons of weird stuff in it -install: failed to access ‘/home/cross/build/linux/pkg/linux-headers/usr/lib/modules/4.13.13-1/build’: No such file or directory -_package-headers() -=> mkdir -p "${_builddir}" everywhere, the problem is install -D on Centos, obviously broken! - -# kmod -configure: error: The pkg-config script could not be found or is too old. Make sure it -is in your PATH or set the PKG_CONFIG environment variable to the full -path to pkg-config. - -Alternatively, you may set the environment variables liblzma_CFLAGS -and liblzma_LIBS to avoid the need to call pkg-config. -See the pkg-config man page for more details. - -To get pkg-config, see <http://pkg-config.freedesktop.org/>. -See `config.log' for more details -==> ERROR: A failure occurred in build(). - Aborting... -=> let's try to set lzma ourselves or disable it, get around pkg-config probing -# no pkg-config, no docu, try to work around -sed -i 's@--enable-gtk-doc@--disable-gtk-doc@g' kmod/PKGBUILD -sed -i 's@./configure@liblzma_CFLAGS=-I/usr/include liblzma_LIBS=-llzma ./configure@g' kmod/PKGBUILD -sed -i 's@./configure@zlib_CFLAGS=-I/usr/include zlib_LIBS=-lz ./configure@g' kmod/PKGBUILD -=> ok heck: linking errors -sed -i 's@--with-xz@--without-xz@g' kmod/PKGBUILD -sed -i 's@--with-zlib@--without-zlib@g' kmod/PKGBUILD - -# libidn -# --nocheck, testing hangs - -# iputils -# remove git again -# no docu, hack out manually -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' iptuils/PKGBUILD - -# perl-error -# no checks, needs perl test-pod -sed -i 's@^checkdepends\(.*\)@#checkdepends\1@g' perl-error/PKGBUILD - - -# shadow -# git treatment again. -# no docu -# --disable-man - -# git -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' git/PKGBUILD -# no make doc -# disable most things in build -# disable doc in install-doc -# NO_GETTEXT=1 -# --nocheck -=> no luck - -# lz4: -# git tweaking again, use 1.8.0 tarball - -# tar: -# checking whether mknod can create fifo without root privileges... configure: error: in `/build/tar/src/tar-1.29': -# configure: error: you should not run configure as root (set FORCE_UNSAFE_CONFIGURE=1 in environment to bypass this check) -# See `config.log' for more details -=> oh, please, bugger off! -sed -i 's@./configure@FORCE_UNSAFE_CONFIGURE=1 ./configure@g' tar/PKGBUILD - -#TODO: -# lz4 -# git package again -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' lz4/PKGBUILD - -#TODO: cracklib util-linux e2fsprogs libldap keyutils krb5 they end in circlejerk with systemd! -# we will solve that later by building a non-systemd version and then bootstrapping first systemd -# git: out of reach for now, far too many dependencies -perl-error git - -# for now we don't rebuild ca-certificates, we had to copy them funilly anyway, and it's -# just a bunch of certs. So, in phase 3 or 4 then.. - -# curl -###### -# curl needs asciidoc and p11-kit, don't build them, use them from the host -sed -i 's@makedepends\(.*\)@#makedepends\1@g' curl/PKGBUILD -# build with minimal features, enough to make pacman download packages -sed -i 's@depends\(.*\)@depends=('ca-certificates' 'openssl' 'zlib')@g' curl/PKGBUILD -# zsh, perl is used to create a completion file for curl and zsh? -sed -i 's@--with-gssapi@--with-gssapi --without-zsh-functions-dir@g' curl/PKGBUILD - -# pacman -######## -# pacman's tests mostly fail on non-Archlinux, so skip them -# asciidoc is a makedepend, we can use the one on the host -sed -i 's@makedepends\(.*\)@#makedepends\1@g' pacman/PKGBUILD -sed -i 's@checkdepends\(.*\)@#checkdepends\1@g' pacman/PKGBUILD -# minimal dependencies, we don't sign anything yet -sed -i "s/'gpgme'//g" pacman/PKGBUILD -sed -i "s/'pacman-mirrorlist'//g" pacman/PKGBUILD -sed -i "s/'archlinux-keyring'//g" pacman/PKGBUILD -# we need pkg-config, otherwise pacman find libarchive in the wrong -# place, but pkg-config needs glib2 and glib2 is built using meson (urgh!) -# when we take the host version, lets patch the host pkgconfig file to -# use the sysroot of the toolchain -# we simply set LIBARCHIVE_CFLAGS and LIBARCHIVE_LIBS to get rid of pkg-config probing -sed -i 's@./configure@LIBARCHIVE_CFLAGS=-I/usr/include LIBARCHIVE_LIBS=-larchive ./configure@g' pacman/PKGBUILD -# --nocheck still, as we don't have python yet -# and of course :-) -sed -i 's/exit 1 # \$E_USER_ABORT/# exit 1 # $E_USER_ABORT/g' /home/cross/i486-root/usr/bin/makepkg -# TODO -install: cannot stat '/build/pacman/src/pacman.conf.i486': No such file or directory -==> ERROR: A failure occurred in package(). - Aborting... -=> use the /etc/pacman-i486.conf from the chroot as pacman.conf.i486 (we still have the temp - repo and we force the Architecture) -sed -i "s/686)/486)/g" pacman/PKGBUILD -sed -i 's/mycarch="i686"/mycarch="i486")/g' pacman/PKGBUILD -sed -i 's/mychost="i686-pc-linux-gnu"/mychost="i486-pc-linux-gnu"/g' pacman/PKGBUILD -sed -i 's/myflags="-march=i686"/myflags=-march=i486/g' pacman/PKGBUILD - -# coreutils -########### -sed -i 's@./configure@FORCE_UNSAFE_CONFIGURE=1 ./configure@g' coreutils/PKGBUILD - -# TODO: needed in stage 2? -# apply man generation patch (one has to wonder, is it maintained at all?) -# help2man errors: help2man: can't get `--help' info from man/chmod.td/chmod -# http://ftp.lfs-matrix.net/pub/clfs/conglomeration/coreutils/coreutils-8.28-noman.patch -# based on a patch by William Harrington (kb0iic at cross-lfs dot org) 2014-10-30 for coreutils 8.23 -#sed -i 's@source=(@source=(coreutils-8.28-noman.patch @' PKGBUILD -#sed -i "s@md5sums=(@md5sums=('SKIP' @" PKGBUILD -#sed -i '/build()/ i \ prepare() { \n\ cd ${pkgname}-${pkgver}\n\ patch -Np1 < ${srcdir}/coreutils-8.28-noman.patch \n }' PKGBUILD - -# zlib -###### -strip: /lib/libz.so.1: no version information available (required by /lib/libbfd-2.29.1.so) -=> this is because some tools are built with other versions (toolchain vs. chroot) -=> so we must not install zlib before we rebuild binutils - -# util-linux -############ -# disable some dependencies on systemd, python, PAM (chfn_chsh) -# and other stuff we don't need -# libtool seems broken -sed -i 's@makedepends\(.*\)@#makedepends\1@g' PKGBUILD -sed -i 's@ \+depends\(.*\)@#depends\1@g' PKGBUILD -sed -i 's@--with-python=3@--without-python \\@g' PKGBUILD -sed -i '/--without-python/ a \ --without-systemd --without-systemdsystemunitdir' PKGBUILD -sed -i 's@./configure@./configure --host=i486-unknown-linux-gnu@g' PKGBUILD -sed -i '/--without-python \\/ a \ --disable-chfn-chsh \\' PKGBUILD -sed -i '/--without-python \\/ a \ --disable-shared --enable-static \\' PKGBUILD -sed -i 's@\(chmod 4755 "$pkgdir"/usr/bin/{newgrp,ch{sh,fn}}\)@#\1@g' PKGBUILD -sed -i "s@\(sed -i '/ListenStream.*\)@#\1@g" PKGBUILD -sed -i 's@\(rm "$pkgdir.*\)@#\1@g' PKGBUILD -# chgrp: chgrp: invalid group: 'tty'invalid group: 'tty' -# /etc/group belongs to filesystem, but has only a root entry when installed -=> filesystem package: post.install hook has not been executed (filesystem.install) -=> for now do it manually -groupadd -g 5 tty -# IMPORTANT DNAGER: the test suite is crazzy and destroys the host!! use --nocheck -# packaging generates tons of errors, lets hope, they are not critical. -# cp: omitting directory ‘/’ -# => at least util-linux needs !strip OPTIONS (makepkg-i486.conf) -#rm "$pkgdir"/usr/lib/lib*.{a,so}* - -# pcre -###### -# no C++ -sed -i 's@./configure@./configure --disable-cpp@g' pcre/PKGBUILD -# --nocheck as we have trouble to find shared libraries - -# gmp -##### -# no C++ -sed -i 's@--enable-cxx@--disable-cxx@g' gmp/PKGBUILD - -# gawk -###### -# we don't have a valid locale yet, disable NLS -# and disable testing -sed -i 's@./configure@./configure --disable-nls@g' PKGBUILD - -# openssh -######### -# package suffers from featuritis -# remove ldns and kerberos5 support, keep libedit (as it's easy to build) -# ssh => not good, openssl <> unbound <> openssl cycle and mess -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' PKGBUILD -sed -i 's@^depends\(.*\)@#depends\1@g' PKGBUILD -sed -i 's@--with-ldns@--without-ldns@g' PKGBUILD -sed -i 's@--with-kerberos5=/usr@--without-kerberos5@g' PKGBUILD -#ln: failed to create symbolic link '/build/openssh/pkg/openssh/usr/share/man/man1/slogin.1.gz': No such file or directory -sed -i 's@\(ln -sf ssh.1.gz.*\)@#\1@g' PKGBUILD - -# git -##### -# manual PKGBUILD fix -# install: cannot stat 'contrib/credential/libsecret/git-credential-libsecret': No such file or directory -# => PKGBUILD is a mess, sorry! -# no asciidoc, as this needs python2 -#asciidoc -b docbook -d manpage -f ../../Documentation/asciidoc.conf \ -# -agit_version=2.15.0 git-subtree.txt -# disable make install-doc -#make: pkg-config: Command not found -#make: pkg-config: Command not found -#make: Leaving directory '/build/git/src/git-2.15.0/contrib/subtree' -#mv: cannot stat '/build/git/pkg/git/usr/share/perl5/site_perl/Git/*': No such file or directory -=> hack away python, perl, systemd, contrib, docu and other things we don't need right now - -git clone... -Cloning into 'strusBase'... -fatal: cannot run ssh: No such file or directory -fatal: unable to fork -fatal: Unable to find remote helper for 'https' -fatal: Unable to find remote helper for 'http' -=> we need ssh - -# tcl -##### -# disable tests: cynical, disable unit tests of a software needed for testing - -# autoconf -########## -# checks need fortan (wow. that package is old!) -# depends contains base-devel stuff?! diffutils -sed -i 's@makedepends\(.*\)@#makedepends\1@g' autoconf/PKGBUILD -sed -i 's@checkdepends\(.*\)@#checkdepends\1@g' autoconf/PKGBUILD -# not bad, but lets disable testing for now: -# ERROR: 455 tests were run, -# 5 failed (4 expected failures). -# 48 tests were skipped. - -# automake -########## -# automake needs dejagnu for testing, not now, disabling checks -sed -i 's@checkdepends\(.*\)@#checkdepends\1@g' automake/PKGBUILD -# TOTAL: 2901 -# PASS: 2673 -# SKIP: 164 -# XFAIL: 41 -# FAIL: 21 -# XPASS: 0 -# ERROR: 2 -=> ok, but let's disable testing - -# dejagnu -######### -# has hard-wired AC_PROG_CXX in configure, remove internal C++ tests -sed -i '/.\/configure/ i \ sed -i "s@AC_PROG_CXX@#AC_PROG_CXX@" configure.ac' dejagnu/PKGBUILD -sed -i '/configure.ac/ a \ sed -i "s@\\(unit_SOURCES.*\\)@#\\1@g" Makefile.am' dejagnu/PKGBUILD -sed -i '/configure.ac/ a \ sed -i "s@\\(check_PROGRAMS*\\)@#\\1@g" Makefile.am' dejagnu/PKGBUILD -sed -i '/Makefile.am/ a \ autoreconf' dejagnu/PKGBUILD - -# wget -###### -# no gnutls, no libpsl -sed -i 's@^depends\(.*\)@#depends\1@g' PKGBUILD -sed -i 's@--enable-nls@--disable-nls@g' PKGBUILD -sed -i 's@--with-ssl=gnutls@--with-ssl=openssl@g' PKGBUILD -sed -i '/.\/configure/ a \ --without-libpsl \\' PKGBUILD -# work around pkg-config -sed -i 's@./configure@OPENSSL_CFLAGS=-I/usr/include OPENSSL_LIBS="-lssl lcrypto" ./configure@g' PKGBUILD -# needs myriads of perl modules for testing => --nocheck -sed -i 's@^checkdepends\(.*\)@#checkdepends\1@g' PKGBUILD - -# binutils -########## -# risky, risky -sed -i 's/glibc>=2.26/glib/g' binutils/PKGBUILD -# this is in gold, so let's disable gold! We don't have C++ (yet), so this should not matter.. -sed -i 's@--enable-gold@--disable-gold@g' binutils/PKGBUILD - -# libunwind -########### -# no TeX, no docu -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' libunwind/PKGBUILD - - -# TODO: gcc -##### -TODO: -sed -i 's@^makedepends\(.*\)@#makedepends\1@g' binutils/PKGBUILD -sed -i 's@^checkdepends\(.*\)@#checkdepends\1@g' binutils/PKGBUILD -sed -i 's@^depends\(.*\)@#depends\1@g' binutils/PKGBUILD - -# gcc -##### -# no gcc-ada and doxygen -sed -i '/makedepend/ s/gcc-ada //g' gcc/PKGBUILD -sed -i '/makedepend/ s/doxygen //g' gcc/PKGBUILD -# avoid huge git checkouts -sed -i 's@git+https://gcc.gnu.org/git/gcc.git.*@ftp://ftp.mpi-sb.mpg.de/pub/gnu/mirror/gcc.gnu.org/pub/gcc/releases/${pkgname}-${pkgver}/${pkgname}-${pkgver}.tar.gz@' gcc/PKGBUILD -sed -i 's@cd gcc$@cd ${pkgname}-${pkgver}@g' gcc/PKGBUILD -sed -i 's@$srcdir/gcc/configure@$srcdir/${pkgname}-${pkgver}/configure@g' gcc/PKGBUILD -# we don't have a working C++ compiler right now, be must bootstrap -# doesn't work, we need c++ sind 4.8! -#sed -i '/--enable-shared/ a \ --enable-bootstrap \\' gcc/PKGBUILD -# remove ADA, we don't have (and will most likely never have a GNAT binary to -# bootstrap ADA itself), on the other hand, there is nothing using ADA anyway. -# at least not in packages/community -sed -i '/pkgname/ s/gcc-ada//g' gcc/PKGBUILD -sed -i '/enable-languages/ s/ada//g' gcc/PKGBUILD -# send bugs to the right place -sed -i 's@https://bugs.archlinux.org/@https://bugs.archlinux32.org/@g' gcc/PKGBUILD -# so, I don't know what GNU people call bootstrapping, but this definitely isn't for C! -/usr/include/c++/7.2.0/cstdlib:75:15: fatal error: stdlib.h: No such file or directory -=> let's try to fix the C++ compiler then.. -# this is really really dangerous, let's hope, it works -=> find /usr/include/c++/7.2.0 -type f -exec sed -i 's/#include_next/#include/g' {} \; -# /build/gcc/src/gcc-7.2.0/libgo/testsuite/gotest: line 624: 28445 Killed ./a.out -test.short -test.timeout=${timeout}s "$@" -=> ok, enough, go without testing -==> Starting package_gcc-go()... -make: *** i486-pc-linux-gnu/libgo: No such file or directory. Stop. -==> ERROR: A failure occurred in package_gcc-go(). - Aborting... -=> fails, oh well, nobody needs go :-) - - - -only c language -no checkdepdns, makedepnds - -why the hell, I switched off c++, so wy are still cpp probes being done!? -/lib/cpp hardcoded, seriosly!! -# in prepare() -ln -s ../bin/cpp /home/cross/x-tools/i486-unknown-linux-gnu/lib/cpp -find . -name configure -exec sed -i 's@/lib/cpp@/home/cross/x-tools/i486-unknown-linux-gnu/bin/cpp@g' {} \; - -since 4.8 gcc is written in C++, fine. so we have to have a crosstool-ng C++ or -=> we add C++ to the crosstool-ng toolchain, easier and more secure - - included from /home/cross/build/gcc/src/gcc-7.2.0/gcc/genmddeps.c:19:0: -/home/cross/build/gcc/src/gcc-7.2.0/gcc/system.h:540:34: error: declaration of C function ‘const cha -r* strsignal(int)’ conflicts with - extern const char *strsignal (int); - ^ -In file included from /usr/include/c++/4.8.2/cstring:42:0, - from /home/cross/build/gcc/src/gcc-7.2.0/gcc/system.h:235, - from /home/cross/build/gcc/src/gcc-7.2.0/gcc/genmddeps.c:19: -/usr/include/string.h:562:14: error: previous declaration ‘char* strsignal(int)’ here - extern char *strsignal (int __sig) __THROW; ^ -In file included from ./bconfig.h:5:0, -=> so, we get to an end here, c++ is taken from the host while cross-compiling?! --> remove glibc-devel on the host! --> draw the g++ link, autoconf fails in gcc in funny ways (not finding uint64_t) --> carefull, we build a gcc over a crossng-gcc, not sure, this is supported.. --> aha. if mpfr, mpc and gmp are not installed and taken from sysroot but from i486-root - some pathes get messed up. - -https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82590 -https://www.mail-archive.com/gcc-bugs@gcc.gnu.org/msg550065.html -https://gcc.gnu.org/bugzilla/show_bug.cgi?format=multiple&id=54692 - -https://gcc.gnu.org/bugzilla/show_bug.cgi?id=65863 --> huh? -https://gcc.gnu.org/ml/gcc-help/2016-06/msg00016.html -- > yes, this is the inicatition I needed, mpfr, gmp and mpc point to a weird location - -The stage one compiler doesn't find the shared library, o well: -/home/cross/build/gcc/src/gcc-build/./gcc/cc1: error while loading shared libraries: libmpc.so.3: cannot open shared object file: No such file or directory --> export LD_LIBRARY_PATH=/home/cross/x-tools/i486-unknown-linux-gnu/i486-unknown-linux-gnu/sysroot/usr/lib - -And it never ends: -In file included from /home/cross/build/gcc/src/gcc-7.2.0/libgcc/libgcc2.c:27:0: -/home/cross/build/gcc/src/gcc-7.2.0/libgcc/../gcc/tsystem.h:87:10: fatal error: stdio.h: No such file or directory - #include <stdio.h> - ^~~~~~~~~ -compilation terminated. -make[2]: *** [Makefile:491: _muldi3.o] Error 1 --> https://gcc.gnu.org/ml/gcc-help/2012-04/msg00088.html --> so, let's try giving it a --with-sysroot to the crosstool-ng dirs --> and this means also it got past stage 1 compilers :-) - -/home/cross/x-tools/i486-unknown-linux-gnu/lib/gcc/i486-unknown-linux-gnu/4.9.4/../../../../i486-unknown-linux-gnu/bin/ld: /home/cross/build/gcc/src/gcc-build/./gcc/liblto_plugin.so: error loading plugin: /home/cross/build/gcc/src/gcc-build/./gcc/liblto_plugin.so: wrong ELF class: ELFCLASS32 -collect2: error: ld returned 1 exit status -make[2]: *** [Makefile:982: libgcc_s.so] Error 1 -=> for now, remove LTO stuff in PKGBUILD - -make: *** i486-unknown-linux-gnu/libstdc++-v3/doc: No such file or directory. Stop. -==> ERROR: A failure occurred in build(). - Aborting... -=> remove the PKGBUILD line # make -C $CHOST/libstdc++-v3/doc DESTDIR="$pkgdir" doc-install-man -libstdc++-v3/ -=> # make documentation - #make -C $CHOST/libstdc++-v3/doc doc-man-doxygen - -install: failed to access ‘/home/cross/build/gcc/pkg/gcc/usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/’: No such file or directory -=> gcc auto-probed itself into i486-pc-linux-gnu, so the installed files are there -CHOST="i486-pc-linux-gnu" -make: Leaving directory '/home/cross/build/gcc/src/gcc-build/gcc' -install: failed to access ‘/home/cross/build/gcc/pkg/gcc/usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/’: No such file or directory -=> sweet, let's try a symlink - -_libdir=usr/lib/gcc/$CHOST/$pkgver -=> hard-code: to _libdir=usr/lib/gcc/i486-pc-linux-gnu/$pkgver -=> nope, now others break -this is hardly the ArchLinux way: vanilla and upstream - -again CHOST set to i486-pc-linux-gnu -=> this package is a disaster! -=> we have a mess with two CHOSTS, one for crosstool-ng (unknown) and - one for our chroot - -# remove traces of ADA - rm "$pkgdir"/usr/share/info/{gccgo,gfortran.info} - -# rm: cannot remove ‘/home/cross/build/gcc/pkg/gcc/usr/share/info/gccgo’: No such file or directory -# rm "$pkgdir"/usr/share/info/{gccgo,gfortran.info} - -/home/cross/x-tools/i486-unknown-linux-gnu/lib/gcc/i486-unknown-linux-gnu/4.9.4/../../../../i486-unknown-linux-gnu/bin/ld: cannot find -lquadmath -collect2: error: ld returned 1 exit status -libtool: install: error: relink `libgfortran.la' with the above command before installing it -make: *** [Makefile:1331: install-toolexeclibLTLIBRARIES] Error 1 -make: Leaving directory '/home/cross/build/gcc/src/gcc-build/i486-unknown-linux-gnu/libgfortran' -==> ERROR: A failure occurred in package_gcc-libs(). - Aborting... -=> libquadmath must be retooled before libfortran -=> nope libfortran simply fails to relink => remove it - -install: cannot stat ‘/home/cross/build/gcc/src/gcc/COPYING.RUNTIME’: No such file or directory -=> sweet, remove it - -error: failed to commit transaction (conflicting files) -gcc: /home/cross/i486-root/usr/lib/libstdc++.a exists in filesystem (owned by gcc-libs) -gcc: /home/cross/i486-root/usr/lib/libstdc++.la exists in filesystem (owned by gcc-libs) -Errors occurred, no packages were upgraded. -=> well, force the package - -test.c:1:10: fatal error: stdio.h: No such file or directory - - -# END TODO: gcc - -# libtool -######### -# patched heavily again, git version cannot be bootstrapped use official tarball - -# glibc -####### -# use 2.25 version, not 2.26. Keep the ABI intact! -# endless loop? gawk -f ../scripts/gen-as-const.awk pthread-pi-defines.sym \ -# two reasons: clock and artifacts walk backwards or forward in time -# chroot on server with chroot, hard to have an asynchronous clock? -# or glibc is already installed on the system (where not?), so how the -# hell can it be possibly built! -# => oh, this would be cruel. -# or 3rd reason, we have a glibc shim, maybe this one causes some trouble -# => why? -# or libtool fixing, whatever fixing means (https://forums.gentoo.org/viewtopic-t-496052-start-0.html) -# => nope. -# -isystem /usr/includ ein gcc spec? quite likely! -# ah: old friend: -build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L18': -dl-sysdep.c:(.text+0x8c): undefined reference to `__memcmp_ia32' -/build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L87': -dl-sysdep.c:(.text+0x11f): undefined reference to `__memcmp_ia32' -/build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L19': -dl-sysdep.c:(.text+0x152): undefined reference to `__memcmp_ia32' -/build/glibc/src/glibc-build/libc.a(dl-sysdep.o): In function `.L85': -dl-sysdep.c:(.text+0x19c): undefined reference to `__memcmp_ia32' -dl-sysdep.c:(.text+0x1b7): undefined reference to `__memcmp_ia32' -/build/glibc/src/glibc-build/libc.a(dl-sysdep.o):dl-sysdep.c:(.text+0x202): more undefined references to `__memcmp_ia32' follow -elf/sln -=> USE_MULTIARCH -=> --disable-multi-arch -=> let's test this time, too dangerous to loose the chroot otherwise! -# older 2.25 misses a binutils 2.29 patch: -https://git.busybox.net/buildroot/diff/package/glibc/0005-fix-binutils-2-29-build.patch?id=cf821efbd0b24690b52f379d4a9934a16073762e -{standard input}: Assembler messages: -{standard input}: Error: `loc1@GLIBC_2.0' can't be versioned to common symbol 'loc1' -{standard input}: Error: `loc2@GLIBC_2.0' can't be versioned to common symbol 'loc2' -{standard input}: Error: `locs@GLIBC_2.0' can't be versioned to common symbol 'locs' -make[2]: *** [../o-iterator.mk:9: /build/glibc/src/glibc-build/misc/regexp.os] Error 1 - -PACKAGES="iana-etc filesystem linux-api-headers tzdata ncurses readline bash \ -gdbm perl openssl bzip2 xz m4 help2man flex bc elfutils \ -libtool libxml2 libgpg-error libgcrypt libxslt \ -docbook-xml docbook-xsl xmlto libcap libtirpc pambase pam inetutils bison iproute2 kmod \ -sysfsutils libidn iputils \ -expat acl attr lz4 tar libarchive curl pacman \ -joe coreutils util-linux pcre grep findutils file diffutils ed patch \ -autoconf automake libedit openssh pcre2 git libunwind strace wget \ -gmp mpfr gawk libmpc zlib tcl expect dejagnu binutils gcc libtool glibc" -for p in $PACKAGES; do - asp export $p -done - -for p in $PACKAGES - cd $p - - sed -i "s/^arch=.*/arch=('i486')/" PKGBUILD - - # for some packages we cannot execute tests (because the dependencies to install in - # the toolchain environment would be too much) - # perl: --nocheck - # openssl: --nocheck - # libelf: --nocheck - # libtool: --nocheck - # libxml2: --nocheck - # libxslt: --nocheck - # inetutils: --nocheck - # bison: --nocheck - # libarchive: --nocheck - # pacman: --nocheck - # util-linux: --nocheck - # pcre: --nocheck - # gawk: --nocheck - # tcl: --nocheck - - makepkg -C --config /etc/makepkg.conf --skipchecksums --skippgpcheck > $p.log 2>&1 - - # TODO: - # some package break in parallel builds or produce really funky - # error messages or/and results - # binutils: use makepkg-noparallel.conf - # gcc: use makepkg-noparallel.conf for debuging, the real build works fine in parallel - - cp -v *.pkg.tar.gz /packages/i486/. - - pacman --noconfirm --config /etc/pacman-i486.conf -U *.pkg.tar.gz - - # replace all pacman articats and clean caches - rm -rf /packages/i486/temp* /var/cache/pacman/pkg/* - repo-add /packages/i486/temp.db.tar.gz /packages/i486/*pkg.tar.gz - - #repo-add -n /packages/i486/temp.db.tar.gz /packages/i486/*pkg.tar.gz - - pacman --noconfirm --config /etc/pacman-i486.conf -r / -S $p - - pacman --config /etc/pacman-i486.conf -r / -Q | grep $p -done - -# aftermatch for gcc/binutils - -#collect2: unable to find ld: this sounds bad, like an archicture mismatch somewhere -#in binutils/gcc -=> this is the cross compiled gcc for i486 inside the chroot, it expects - its platform dependend stuff in /usr/lib/gcc/i486-unknown-linux-gnu/7.2.0 -=> we can temporarily fix this: -ln -s /usr/bin/ld /usr/lib/gcc/i486-unknown-linux-gnu/7.2.0/ld -etc. - -# libz.so missing? -ln -s libz.so.1 /usr/lib/libz.so - -# aftermatch for glibc - -# bacause pacman cannot set file permissions -chmod u+x /usr/bin/* /lib/*.so* - -# kernel headers: -#/usr/include/linux/errno.h missing -#/usr/include/adm/errno.h missing -=> a libarchive compression issue, files missing, because they are in pkg of - linux-api-headers?! - -remove debug packages - -error: failed to commit transaction (conflicting files) -/usr/lib/libstdc++.a exists in both 'gcc-libs' and 'gcc' -/usr/lib/libstdc++.la exists in both 'gcc-libs' and 'gcc' -/usr/lib/libblkid.a exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libblkid.la exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libfdisk.a exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libfdisk.la exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libmount.a exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libmount.la exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libsmartcols.a exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libsmartcols.la exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libuuid.a exists in both 'util-linux' and 'libutil-linux' -/usr/lib/libuuid.la exists in both 'util-linux' and 'libutil-linux' -Errors occurred, no packages were upgraded. - -=> ok, we loose files and permissions - -# in 'real' 486 -############### - -next round: do those problems persist - -error: could not register 'temp' database (wrong or NULL argument passed) - -installed binaries have wrong permissions (no execute permission), a pacman issue? -shilly flags? libarchive problem? - -git: https helpers -chmod 0777 /usr/lib/git-core/git-remote-* - -later: for inside the chroot - -# uname module hack -################### - -# as root -# we need i486, so setarch doesn't work for us, because it emulates only, -# a i686, use the hacked uname kernel module: -wget http://clfs.org/files/extras/uname_hack-20080713.tar.bz2 -tar xf uname_hack-20080713.tar.bz2 -cd uname_hack -# swap memset arguments: -# /root/uname_hack/uname_hack.c:50:2: warning: 'memset' used with constant zero length parameter; this could be due to transposed parameters [-Wmemset-transposed-args] -# memset(uname_hack_uts_machine, uname_hack_uts_machine_len, '\0'); -# ^~~~~~ -# Building modules, stage 2. -make uname_hack_fake_machine=i486 -insmod uname_hack.ko -#lib/config.guess in automake returns i486-pc-linux-gnu -# uname -m returns i486 -cd .. - -# patch our hosts pacman.conf, so it doesn't get fooled by the architecture hack -sed -i 's@^Architecture.*@Architecture = x86_64@g' /etc/pacman.conf - -# optional packages for stage 1 -# TODO: do we need this for old machines? -# linux-firmware -# use git from the host for now -#sed -i 's@makedepends\(.*\)@#makedepends\1@g' linux-firmware/PKGBUILD |