From 224768b40915233bf11a863946ffdcb2dda6a63f Mon Sep 17 00:00:00 2001 From: Andreas Baumann Date: Sun, 18 Feb 2018 09:56:55 +0100 Subject: cleaned up some documentation and moved old things into .Attic --- .Attic/README.iputils | 36 ++ .Attic/README.old_stage2 | 919 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 955 insertions(+) create mode 100644 .Attic/README.iputils create mode 100644 .Attic/README.old_stage2 (limited to '.Attic') diff --git a/.Attic/README.iputils b/.Attic/README.iputils new file mode 100644 index 0000000..b507a9e --- /dev/null +++ b/.Attic/README.iputils @@ -0,0 +1,36 @@ +# for ping only, takes to many packages and ping is broken after +# cross-compilation anyway (at least for me) + +# build packages for the i486-chroot +#################################### + +# basic packages +PACKAGES=" \ +# TODO: iputils is for ping only, a little bit too many packages for +# that. +sysfsutils libidn nettle iputils" + +# 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 diff --git a/.Attic/README.old_stage2 b/.Attic/README.old_stage2 new file mode 100644 index 0000000..dd997af --- /dev/null +++ b/.Attic/README.old_stage2 @@ -0,0 +1,919 @@ +# old stage 2 based on a broken stage 1, so carefull what to pick +# into the next version.. + +####################################### +##### 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 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 . +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 + ^~~~~~~~~ +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 -- cgit v1.2.3-54-g00ecf