These are notes about bootstrapping the architectures affected by the time_t 64bit transitions
First thing to do: Get your buildd chroot updated
- TODO: have an analysis of all affected packages.
abi=time64 turns on -Werror=implicit-function-declaration in dpkg-buildflags, which causes unrelated build failures. See https://bugs.debian.org/1065371
- possible workaround: temporarily use DEB_CFLAGS_STRIP="-Werror=implicit-function-declaration" when building
- DO NOT DO THAT. As guillem said, not having the function declaration can (often will) lead to ABI breakage, and it is probably better to fail the builds instead of introducing subtle breakage hard to fix later.
this may cause FTBFS in packages such as bc but they are getting fixed as we speak
- Known issues:
- gdbm transitions
- build man-db with libdb-dev, then again with gdbm
- build python3.xx without Berkley DB, gdbm, readline, nsl, then re-enable these again
- db5.3 transitions
- build python3.xx without Berkley DB, gdbm, readline, nsl, then re-enable these again
- readline transitions
- build bc, gwk, parted without readline, then again with readline
- build python3.xx without Berkley DB, gdbm, readline, nsl, then re-enable these again
liblocale-gettext-perl -> texinfo
texinfo,libxml-libxml-perl -> e2fsprogs
- apt: remove gpgv as dependency, disable gnutls for nettle bootstrapping, drop these changes after gnupg2 is built with the updated gnutls28
- after bootstrapping perl and texinfo:
- libuv1, e2fsprogs, libtirpc, (and any others?) should be built at this point
- build openssl (not sure that is the correct position here)
- build cyrus-sasl2 with gssapi, ldap, sql disabled
- build openldap without heimdal or krb5
- build heimdal
- build cyrus-sasl2 with ldap, sql disabled
- build openldap
- build rtmpdump
- build dependencies of openssh, then openssh with the gui/gnome disabled
- build up to gnupg2
- build cyrus-sasl2 with sql disabled
- build openldap
- build [:DEL: mysql-8.0 (after fixing the RC issue) :DEL:] mariadb (for default-libmysqlclient-dev), not mysql, these days
- build postgresql-16
- as a prerequisite, this requires an installable llvm-N (built with grpc, protobuf, abseil)
- build cyrus-sasl2 unmodified
- build gnutls28, rebuild above packages for updated dependencies
- build unmodified apt
- build mesa with libva disabled
- libarchive transitions:
- build cmake without qt
- libssl:
libevent -> unbound bootstrap build -> curl bootstrap build -> libssh bootstrap
perl-openssl-defaults -> libnet-ssleay-perl
- python3.11 (and python3.12) transition:
- copy /usr/bin/py* and /usr/lib/py* into the chroot (for bootstrapping).
- remove "with-dtrace" from debian/rules
- gnupg2: doesn't need most of it's b-d's, see #980768
- curl:
- build with nocheck first, to reduce dependencies
llvm-17,cmake -> libgit2,manual cargo -> rustc -> python-cryptography -> stunnel4 -> curl
libproxy -> glib-networking -> cups -> ghostscript
glib2.0 -> gobject-introspection -> glib2.0 might need to be broken by building glib2.0 and gobject-introspection with -Pnogir
curl -> impacket -> pyopenssl -> python-cryptography -> cargo -> curl, cycle broken by the equivalent of -Pnocheck
curl -> openldap -> cyrus-sasl2 -> postgresql-16 -> gdb -> elfutils -> curl, cycle broken by the equivalent of -Ppkg.curl.noldap (1066981)
vala -> graphviz -> librsvg -> vala, cycle broken by the equivalent of -Ppkg.vala.nographviz (1055530)
- Packages using direct syscalls instead of glibc.
- glibc sorts out wrappers for you according to how _TIME_BITS is set, but any code using syscalls directly bypasses this mechanism. Most such packages have already been patched for MUSL when it changed, but those patches are often wrong for GLIBC (because MUSL only provided one interface or the other, GLIBC provides both)
e.g: Capnproto DebBug:1067916 Codesearch packages to fix: boost1.83, qtwebengine-opensource-src (in embedded abseil copy), vlc.
- glibc sorts out wrappers for you according to how _TIME_BITS is set, but any code using syscalls directly bypasses this mechanism. Most such packages have already been patched for MUSL when it changed, but those patches are often wrong for GLIBC (because MUSL only provided one interface or the other, GLIBC provides both)
- gdbm transitions
- Useful hints:
build packages directly in chroot without sbuild, install build dependencies manually using dpkg -i (use --force-depends if necessary)
download build dependencies outside chroot with apt download <pkg>; build with dpkg-buildpackage -B in chroot
- use build profiles to break circular dependencies
you may want to disable in /usr/bin/dpkg-shlibdeps -> search for "cannot find library" and there change the errormsg() to warning() and drop the "error_count++" line.
important: make sure to build with dpkg_1.22.5 to avoid Perl API mismatches (loadable library and perl binaries are mismatched (got first handshake key 0xb600080, needed 0xb700080))
- to be checked: debootstrap is broken, mmdebstrap or cdebootstrap might work.
