|
| 1 | +FROM ubuntu:focal |
| 2 | + |
| 3 | +ENV LC_ALL=C.UTF-8 \ |
| 4 | + LANG=C.UTF-8 \ |
| 5 | + LANGUAGE=C.UTF-8 \ |
| 6 | + GLIBC_COMPAT=true |
| 7 | + |
| 8 | +# Trust the signing key for "PPA for Ubuntu Toolchain Uploads". |
| 9 | +# Source: https://keyserver.ubuntu.com/pks/lookup?op=get&search=0x2c277a0a352154e5 |
| 10 | +COPY ubuntu-toolchain-r-ubuntu-test.asc /etc/apt/trusted.gpg.d/ |
| 11 | + |
| 12 | +# Use a combined APT sources list for amd64, i386, armhf, arm64, and PPA for Ubuntu Toolchain Uploads. |
| 13 | +COPY sources.list /etc/apt/sources.list |
| 14 | + |
| 15 | +# 1. Add the supported architectures. |
| 16 | +# 2. Install all compilers and build-time dependencies (libncurses, libmysqlclient) for every architecture. |
| 17 | +# 3. Manually download, modify, and install libmysqlclient-dev, because it can't be installed in parallel. |
| 18 | +# 4. Remove cache and temporary files. |
| 19 | +RUN dpkg --add-architecture i386 \ |
| 20 | + && dpkg --add-architecture armhf \ |
| 21 | + && dpkg --add-architecture arm64 \ |
| 22 | + && apt-get update \ |
| 23 | + && apt-get install -y --no-install-recommends make \ |
| 24 | + libncurses-dev:arm64 libmysqlclient21:arm64 zlib1g-dev:arm64 libssl-dev:arm64 g++-10-arm-linux-gnueabihf \ |
| 25 | + libncurses-dev:armhf libmysqlclient21:armhf zlib1g-dev:armhf libssl-dev:armhf g++-10-aarch64-linux-gnu \ |
| 26 | + libncurses-dev:i386 libmysqlclient21:i386 zlib1g-dev:i386 libssl-dev:i386 g++-10-multilib \ |
| 27 | + libncurses-dev libmysqlclient21 zlib1g-dev libssl-dev \ |
| 28 | + && apt-get upgrade -y |
| 29 | + && cd /tmp \ |
| 30 | + && apt-get download \ |
| 31 | + libmysqlclient-dev:armhf \ |
| 32 | + libmysqlclient-dev:arm64 \ |
| 33 | + libmysqlclient-dev:i386 \ |
| 34 | + libmysqlclient-dev \ |
| 35 | + && dpkg-deb -R libmysqlclient-dev_*_armhf.deb libmysqlclient-dev-armhf \ |
| 36 | + && dpkg-deb -R libmysqlclient-dev_*_arm64.deb libmysqlclient-dev-arm64 \ |
| 37 | + && dpkg-deb -R libmysqlclient-dev_*_i386.deb libmysqlclient-dev-i386 \ |
| 38 | + && dpkg-deb -R libmysqlclient-dev_*_amd64.deb libmysqlclient-dev-amd64 \ |
| 39 | + && echo 'Multi-Arch: same' | tee -a \ |
| 40 | + libmysqlclient-dev-amd64/DEBIAN/control \ |
| 41 | + libmysqlclient-dev-i386/DEBIAN/control \ |
| 42 | + libmysqlclient-dev-armhf/DEBIAN/control \ |
| 43 | + libmysqlclient-dev-arm64/DEBIAN/control \ |
| 44 | + && dpkg-deb -b libmysqlclient-dev-amd64 libmysqlclient-dev-amd64.deb \ |
| 45 | + && dpkg-deb -b libmysqlclient-dev-i386 libmysqlclient-dev-i386.deb \ |
| 46 | + && dpkg-deb -b libmysqlclient-dev-armhf libmysqlclient-dev-armhf.deb \ |
| 47 | + && dpkg-deb -b libmysqlclient-dev-arm64 libmysqlclient-dev-arm64.deb \ |
| 48 | + && dpkg -i --force-overwrite \ |
| 49 | + libmysqlclient-dev-armhf.deb \ |
| 50 | + libmysqlclient-dev-arm64.deb \ |
| 51 | + libmysqlclient-dev-i386.deb \ |
| 52 | + libmysqlclient-dev-amd64.deb \ |
| 53 | + && rm -rf /tmp/* /var/lib/apt/lists/* |
| 54 | + |
| 55 | +# Downgrade glibc symbols for backwards compatibility. |
| 56 | +COPY compat /compat |
| 57 | + |
| 58 | +RUN mkdir -p /compat/x64 /compat/x86 \ |
| 59 | + && objcopy --redefine-syms=/compat/glibc_version_x64.redef "$(gcc-10 --print-file-name=libstdc++.a)" /compat/x64/libstdc++.a \ |
| 60 | + && objcopy --redefine-syms=/compat/glibc_version_x64.redef /usr/lib/x86_64-linux-gnu/libmysqlclient.a /compat/x64/libmysqlclient.a \ |
| 61 | + && objcopy --redefine-syms=/compat/glibc_version_x86.redef "$(gcc-10 -m32 --print-file-name=libstdc++.a)" /compat/x86/libstdc++.a \ |
| 62 | + && objcopy --redefine-syms=/compat/glibc_version_x86.redef /usr/lib/i386-linux-gnu/libmysqlclient.a /compat/x86/libmysqlclient.a |
| 63 | + |
| 64 | +VOLUME /build |
| 65 | +WORKDIR /build |
| 66 | + |
| 67 | +COPY docker-entrypoint.sh /docker-entrypoint.sh |
| 68 | + |
| 69 | +RUN chmod +x /docker-entrypoint.sh |
| 70 | + |
| 71 | +ENTRYPOINT bash /docker-entrypoint.sh |
0 commit comments