├── entrypoint-ubuntu.sh ├── entrypoint-centos.sh ├── README.md ├── install-deps-ubuntu.sh ├── install-cmake.sh ├── .github └── workflows │ └── main.yml ├── LICENSE ├── Dockerfile.bionic-x86_64 ├── Dockerfile.bionic-armhf ├── Dockerfile.bionic-aarch64 ├── Dockerfile.centos7-x86_64 └── Dockerfile.centos7-i386 /entrypoint-ubuntu.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -eo pipefail 4 | 5 | export PATH=/deps/bin/:"$PATH" 6 | export PKG_CONFIG_PATH=/deps/lib/pkgconfig:"$PKG_CONFIG_PATH" 7 | 8 | exec "$@" 9 | -------------------------------------------------------------------------------- /entrypoint-centos.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -eo pipefail 4 | 5 | source /opt/rh/devtoolset-10/enable 6 | 7 | export PATH=/deps/bin/:"$PATH" 8 | export PKG_CONFIG_PATH=/deps/lib/pkgconfig:"$PKG_CONFIG_PATH" 9 | 10 | exec "$@" 11 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AppImageBuild -- resources for building AppImageKit 2 | 3 | ## Docker images 4 | 5 | The Docker images defined by the Dockerfiles in this repository contain all the tools required for building [AppImageKit](https://github.com/AppImage/AppImageKit). 6 | 7 | The goal is to shorten the AppImageKit build times by moving the dependency installation to a single central place. Instead of using less trustworthy dependency sources, such dependencies are built and set up from source. 8 | 9 | The images will be built and published in a Docker library, and pulled during the build process by Travis CI. 10 | -------------------------------------------------------------------------------- /install-deps-ubuntu.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | set -x 5 | 6 | apt-get update 7 | 8 | packages=( 9 | libfuse-dev 10 | desktop-file-utils 11 | ca-certificates 12 | gcc 13 | g++ 14 | make 15 | build-essential 16 | git 17 | automake 18 | autoconf 19 | libtool 20 | libtool-bin 21 | patch 22 | wget 23 | vim-common 24 | desktop-file-utils 25 | pkg-config 26 | libarchive-dev 27 | librsvg2-dev 28 | librsvg2-bin 29 | liblzma-dev 30 | cmake 31 | libssl-dev 32 | zsync 33 | fuse 34 | gettext 35 | bison 36 | texinfo 37 | ) 38 | 39 | apt-get install -y "${packages[@]}" 40 | -------------------------------------------------------------------------------- /install-cmake.sh: -------------------------------------------------------------------------------- 1 | #! /bin/bash 2 | 3 | set -e 4 | set -x 5 | 6 | case "$ARCH" in 7 | arm64*|aarch64) 8 | cmake_arch=arm64v8 9 | ;; 10 | arm32*|armhf) 11 | cmake_arch=armhf 12 | ;; 13 | i?86) 14 | cmake_arch=i386 15 | ;; 16 | *) 17 | cmake_arch="$ARCH" 18 | ;; 19 | esac 20 | 21 | case "$DIST" in 22 | "xenial"|"bionic") 23 | cmake_dist="ubuntu_$DIST" 24 | ;; 25 | *) 26 | cmake_dist="$DIST" 27 | ;; 28 | esac 29 | 30 | wget https://artifacts.assassinate-you.net/prebuilt-cmake/cmake-v3.19.1-"$cmake_dist"-"$cmake_arch".tar.gz -O- | \ 31 | tar xz --strip-components=1 -C/usr/local 32 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: Main pipeline 2 | 3 | on: 4 | push: 5 | pull_request: 6 | schedule: 7 | - cron: '0 6 * * 0' 8 | workflow_dispatch: 9 | 10 | jobs: 11 | build: 12 | strategy: 13 | fail-fast: false 14 | matrix: 15 | ARCH: ['x86_64', 'i386'] 16 | DIST: ['centos7'] 17 | include: 18 | - ARCH: 'aarch64' 19 | DIST: 'bionic' 20 | - ARCH: 'armhf' 21 | DIST: 'bionic' 22 | - ARCH: 'x86_64' 23 | DIST: 'bionic' 24 | 25 | name: Build ${{ matrix.DIST }} (${{ matrix.ARCH }}) 26 | env: 27 | DIST: ${{ matrix.DIST }} 28 | ARCH: ${{ matrix.ARCH }} 29 | runs-on: ubuntu-latest 30 | steps: 31 | - uses: actions/checkout@v2 32 | - name: Set up QEMU integration for Docker 33 | run: docker run --rm --privileged multiarch/qemu-user-static --reset -p yes 34 | - name: Build and upload Docker image 35 | env: 36 | DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }} 37 | DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} 38 | run: | 39 | echo "$DOCKER_PASSWORD" | docker login -u "$DOCKER_USERNAME" --password-stdin quay.io 40 | bash -ex build.sh --pull --push 41 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | This is free and unencumbered software released into the public domain. 2 | 3 | Anyone is free to copy, modify, publish, use, compile, sell, or 4 | distribute this software, either in source code form or as a compiled 5 | binary, for any purpose, commercial or non-commercial, and by any 6 | means. 7 | 8 | In jurisdictions that recognize copyright laws, the author or authors 9 | of this software dedicate any and all copyright interest in the 10 | software to the public domain. We make this dedication for the benefit 11 | of the public at large and to the detriment of our heirs and 12 | successors. We intend this dedication to be an overt act of 13 | relinquishment in perpetuity of all present and future rights to this 14 | software under copyright law. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 19 | IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR 20 | OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, 21 | ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR 22 | OTHER DEALINGS IN THE SOFTWARE. 23 | 24 | For more information, please refer to 25 | -------------------------------------------------------------------------------- /Dockerfile.bionic-x86_64: -------------------------------------------------------------------------------- 1 | FROM ubuntu:bionic 2 | 3 | ENV ARCH=x86_64 DIST=bionic 4 | 5 | # inherited by build scripts 6 | ARG VERBOSE=0 7 | 8 | COPY /entrypoint-ubuntu.sh /entrypoint.sh 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | SHELL ["/entrypoint.sh", "bash", "-c"] 12 | 13 | COPY ./install-deps-ubuntu.sh / 14 | RUN bash -x /install-deps-ubuntu.sh 15 | 16 | COPY ./install-cmake.sh / 17 | RUN bash -x /install-cmake.sh 18 | 19 | ARG DESKTOP_FILE_UTILS_VERSION=56d220dd679c7c3a8f995a41a27a7d6f3df49dea 20 | COPY build-desktop-file-utils.sh / 21 | RUN bash -x /build-desktop-file-utils.sh 22 | 23 | ARG AUTOMAKE_VERSION=1.16.5 24 | COPY build-automake.sh / 25 | RUN bash -x /build-automake.sh 26 | 27 | ARG LIBGPG_ERROR_VERSION=1.45 28 | COPY build-libgpg-error.sh / 29 | RUN bash -x /build-libgpg-error.sh 30 | 31 | ARG LIBASSUAN_VERSION=2.5.5 32 | COPY build-libassuan.sh / 33 | RUN bash -x /build-libassuan.sh 34 | 35 | ARG LIBGCRYPT_VERSION=1.10.1 36 | COPY build-libgcrypt.sh / 37 | RUN bash -x /build-libgcrypt.sh 38 | 39 | ARG LIBKSBA_VERSION=1.6.0 40 | COPY build-libksba.sh / 41 | RUN bash -x /build-libksba.sh 42 | 43 | ARG NPTH_VERSION=1.6 44 | COPY build-npth.sh / 45 | RUN bash -x /build-npth.sh 46 | 47 | ARG GNUPG_VERSION=2.3.7 48 | COPY build-gnupg.sh / 49 | RUN bash -x /build-gnupg.sh 50 | 51 | ARG GPGME_VERSION=1.17.1 52 | COPY build-gpgme.sh / 53 | RUN bash -x /build-gpgme.sh 54 | 55 | # create unprivileged user for non-build-script use of this image 56 | # build-in-docker.sh will likely not use this one, as it enforces the caller's uid inside the container 57 | RUN adduser --system --group build 58 | USER build 59 | -------------------------------------------------------------------------------- /Dockerfile.bionic-armhf: -------------------------------------------------------------------------------- 1 | FROM arm32v7/ubuntu:bionic 2 | 3 | ENV ARCH=armhf DIST=bionic 4 | 5 | # inherited by build scripts 6 | ARG VERBOSE=0 7 | 8 | COPY /entrypoint-ubuntu.sh /entrypoint.sh 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | SHELL ["/entrypoint.sh", "bash", "-c"] 12 | 13 | COPY ./install-deps-ubuntu.sh / 14 | RUN bash -x /install-deps-ubuntu.sh 15 | 16 | COPY ./install-cmake.sh / 17 | RUN bash -x /install-cmake.sh 18 | 19 | ARG DESKTOP_FILE_UTILS_VERSION=56d220dd679c7c3a8f995a41a27a7d6f3df49dea 20 | COPY build-desktop-file-utils.sh / 21 | RUN bash -x /build-desktop-file-utils.sh 22 | 23 | ARG AUTOMAKE_VERSION=1.16.5 24 | COPY build-automake.sh / 25 | RUN bash -x /build-automake.sh 26 | 27 | ARG LIBGPG_ERROR_VERSION=1.45 28 | COPY build-libgpg-error.sh / 29 | RUN bash -x /build-libgpg-error.sh 30 | 31 | ARG LIBASSUAN_VERSION=2.5.5 32 | COPY build-libassuan.sh / 33 | RUN bash -x /build-libassuan.sh 34 | 35 | ARG LIBGCRYPT_VERSION=1.10.1 36 | COPY build-libgcrypt.sh / 37 | RUN bash -x /build-libgcrypt.sh 38 | 39 | ARG LIBKSBA_VERSION=1.6.0 40 | COPY build-libksba.sh / 41 | RUN bash -x /build-libksba.sh 42 | 43 | ARG NPTH_VERSION=1.6 44 | COPY build-npth.sh / 45 | RUN bash -x /build-npth.sh 46 | 47 | ARG GNUPG_VERSION=2.3.7 48 | COPY build-gnupg.sh / 49 | RUN bash -x /build-gnupg.sh 50 | 51 | ARG GPGME_VERSION=1.17.1 52 | COPY build-gpgme.sh / 53 | RUN bash -x /build-gpgme.sh 54 | 55 | # create unprivileged user for non-build-script use of this image 56 | # build-in-docker.sh will likely not use this one, as it enforces the caller's uid inside the container 57 | RUN adduser --system --group build 58 | USER build 59 | -------------------------------------------------------------------------------- /Dockerfile.bionic-aarch64: -------------------------------------------------------------------------------- 1 | FROM arm64v8/ubuntu:bionic 2 | 3 | ENV ARCH=aarch64 DIST=bionic 4 | 5 | # inherited by build scripts 6 | ARG VERBOSE=0 7 | 8 | COPY /entrypoint-ubuntu.sh /entrypoint.sh 9 | 10 | ENTRYPOINT ["/entrypoint.sh"] 11 | SHELL ["/entrypoint.sh", "bash", "-c"] 12 | 13 | COPY ./install-deps-ubuntu.sh / 14 | RUN bash -x /install-deps-ubuntu.sh 15 | 16 | COPY ./install-cmake.sh / 17 | RUN bash -x /install-cmake.sh 18 | 19 | ARG DESKTOP_FILE_UTILS_VERSION=56d220dd679c7c3a8f995a41a27a7d6f3df49dea 20 | COPY build-desktop-file-utils.sh / 21 | RUN bash -x /build-desktop-file-utils.sh 22 | 23 | ARG AUTOMAKE_VERSION=1.16.5 24 | COPY build-automake.sh / 25 | RUN bash -x /build-automake.sh 26 | 27 | ARG LIBGPG_ERROR_VERSION=1.45 28 | COPY build-libgpg-error.sh / 29 | RUN bash -x /build-libgpg-error.sh 30 | 31 | ARG LIBASSUAN_VERSION=2.5.5 32 | COPY build-libassuan.sh / 33 | RUN bash -x /build-libassuan.sh 34 | 35 | ARG LIBGCRYPT_VERSION=1.10.1 36 | COPY build-libgcrypt.sh / 37 | RUN bash -x /build-libgcrypt.sh 38 | 39 | ARG LIBKSBA_VERSION=1.6.0 40 | COPY build-libksba.sh / 41 | RUN bash -x /build-libksba.sh 42 | 43 | ARG NPTH_VERSION=1.6 44 | COPY build-npth.sh / 45 | RUN bash -x /build-npth.sh 46 | 47 | ARG GNUPG_VERSION=2.3.7 48 | COPY build-gnupg.sh / 49 | RUN bash -x /build-gnupg.sh 50 | 51 | ARG GPGME_VERSION=1.17.1 52 | COPY build-gpgme.sh / 53 | RUN bash -x /build-gpgme.sh 54 | 55 | # create unprivileged user for non-build-script use of this image 56 | # build-in-docker.sh will likely not use this one, as it enforces the caller's uid inside the container 57 | RUN adduser --system --group build 58 | USER build 59 | -------------------------------------------------------------------------------- /Dockerfile.centos7-x86_64: -------------------------------------------------------------------------------- 1 | FROM centos:7 2 | 3 | ENV ARCH=x86_64 DIST=centos7 4 | 5 | # inherited by build scripts 6 | ARG VERBOSE=0 7 | 8 | RUN yum install -y centos-release-scl && \ 9 | yum install -y devtoolset-10 \ 10 | wget make gnupg zip git subversion glib2-devel automake libtool patch zlib-devel cairo-devel openssl-devel curl-devel \ 11 | fuse-devel vim-common zlib-devel desktop-file-utils fuse fuse-libs gtest-devel \ 12 | libXft-devel librsvg2-devel curl libffi-devel gettext-devel file python2 bzip2 \ 13 | texinfo bison gnutls-devel sqlite3-devel readline-devel boost-devel 14 | 15 | COPY /entrypoint-centos.sh /entrypoint.sh 16 | 17 | ENTRYPOINT ["/entrypoint.sh"] 18 | SHELL ["/entrypoint.sh", "bash", "-c"] 19 | 20 | RUN yum update -y ca-certificates 21 | RUN wget https://artifacts.assassinate-you.net/prebuilt-cmake/cmake-v3.19.1-centos7-x86_64.tar.gz -O- | tar xz --strip-components=1 -C/usr/local 22 | 23 | # pcre >= 8.40 required by glib 2.56 24 | # however, we can just use the latest version, which is 8.44 as of Dec 2020 25 | ARG PCRE_VERSION=8.40 26 | COPY build-pcre.sh / 27 | RUN bash -x /build-pcre.sh 28 | 29 | # set up PKG_CONFIG_PATH to ensure that deps in /deps have precedence 30 | # also, pcre is a dep of glib 31 | ENV PKG_CONFIG_PATH=/deps/lib/pkgconfig:/deps/share/pkgconfig 32 | 33 | ARG GLIB_VERSION=2.56.0 34 | COPY build-glib.sh / 35 | RUN bash -x /build-glib.sh 36 | 37 | ARG GIT_VERSION=2.29.2 38 | COPY build-git.sh / 39 | RUN bash -x /build-git.sh 40 | 41 | ARG ZSYNC_VERSION=0.6.2 42 | COPY build-zsync.sh / 43 | RUN bash -x /build-zsync.sh 44 | 45 | ARG DESKTOP_FILE_UTILS_VERSION=56d220dd679c7c3a8f995a41a27a7d6f3df49dea 46 | COPY build-desktop-file-utils.sh / 47 | RUN bash -x /build-desktop-file-utils.sh 48 | 49 | ARG AUTOMAKE_VERSION=1.16.5 50 | COPY build-automake.sh / 51 | RUN bash -x /build-automake.sh 52 | 53 | ARG LIBGPG_ERROR_VERSION=1.45 54 | COPY build-libgpg-error.sh / 55 | RUN bash -x /build-libgpg-error.sh 56 | 57 | ARG LIBASSUAN_VERSION=2.5.5 58 | COPY build-libassuan.sh / 59 | RUN bash -x /build-libassuan.sh 60 | 61 | ARG LIBGCRYPT_VERSION=1.10.1 62 | COPY build-libgcrypt.sh / 63 | RUN bash -x /build-libgcrypt.sh 64 | 65 | ARG LIBKSBA_VERSION=1.6.0 66 | COPY build-libksba.sh / 67 | RUN bash -x /build-libksba.sh 68 | 69 | ARG NPTH_VERSION=1.6 70 | COPY build-npth.sh / 71 | RUN bash -x /build-npth.sh 72 | 73 | ARG GNUPG_VERSION=2.3.7 74 | COPY build-gnupg.sh / 75 | RUN bash -x /build-gnupg.sh 76 | 77 | ARG GPGME_VERSION=1.17.1 78 | COPY build-gpgme.sh / 79 | RUN bash -x /build-gpgme.sh 80 | 81 | # create unprivileged user for non-build-script use of this image 82 | # build-in-docker.sh will likely not use this one, as it enforces the caller's uid inside the container 83 | RUN useradd --system build 84 | USER build 85 | -------------------------------------------------------------------------------- /Dockerfile.centos7-i386: -------------------------------------------------------------------------------- 1 | FROM i386/centos:7 2 | 3 | ENV ARCH=i386 DIST=centos7 4 | 5 | # inherited by build scripts 6 | ARG VERBOSE=0 7 | 8 | # thanks CloudLinux, you're really helping us poor AppImage creators seeking for maximum compatibility by providing devtoolset i386 builds 9 | RUN yum install -y yum-utils && \ 10 | rpm --import https://repo.cloudlinux.com/cloudlinux/security/RPM-GPG-KEY-CloudLinux && \ 11 | yum-config-manager --add-repo https://www.repo.cloudlinux.com/cloudlinux/7/sclo/devtoolset-10/i386/ && \ 12 | yum install -y devtoolset-10 \ 13 | wget make gnupg zip git subversion glib2-devel automake libtool patch zlib-devel cairo-devel openssl-devel curl-devel \ 14 | fuse-devel vim-common zlib-devel desktop-file-utils fuse fuse-libs gtest-devel \ 15 | libXft-devel librsvg2-devel curl libffi-devel gettext-devel file python2 bzip2 \ 16 | texinfo bison gnutls-devel sqlite3-devel readline-devel boost-devel 17 | 18 | COPY /entrypoint-centos.sh /entrypoint.sh 19 | 20 | ENTRYPOINT ["/entrypoint.sh"] 21 | SHELL ["/entrypoint.sh", "bash", "-c"] 22 | 23 | RUN yum update -y ca-certificates 24 | RUN wget https://artifacts.assassinate-you.net/prebuilt-cmake/cmake-v3.19.1-centos7-i386.tar.gz -O- | tar xz --strip-components=1 -C/usr/local 25 | 26 | # pcre >= 8.40 required by glib 2.56 27 | # however, we can just use the latest version, which is 8.44 as of Dec 2020 28 | ARG PCRE_VERSION=8.40 29 | COPY build-pcre.sh / 30 | RUN bash -x /build-pcre.sh 31 | 32 | # set up PKG_CONFIG_PATH to ensure that deps in /deps have precedence 33 | # also, pcre is a dep of glib 34 | ENV PKG_CONFIG_PATH=/deps/lib/pkgconfig:/deps/share/pkgconfig 35 | 36 | ARG GLIB_VERSION=2.56.0 37 | COPY build-glib.sh / 38 | RUN bash -x /build-glib.sh 39 | 40 | ARG GIT_VERSION=2.29.2 41 | COPY build-git.sh / 42 | RUN bash -x /build-git.sh 43 | 44 | ARG ZSYNC_VERSION=0.6.2 45 | COPY build-zsync.sh / 46 | RUN bash -x /build-zsync.sh 47 | 48 | ARG DESKTOP_FILE_UTILS_VERSION=56d220dd679c7c3a8f995a41a27a7d6f3df49dea 49 | COPY build-desktop-file-utils.sh / 50 | RUN bash -x /build-desktop-file-utils.sh 51 | 52 | ARG AUTOMAKE_VERSION=1.16.5 53 | COPY build-automake.sh / 54 | RUN bash -x /build-automake.sh 55 | 56 | ARG LIBGPG_ERROR_VERSION=1.45 57 | COPY build-libgpg-error.sh / 58 | RUN bash -x /build-libgpg-error.sh 59 | 60 | ARG LIBASSUAN_VERSION=2.5.5 61 | COPY build-libassuan.sh / 62 | RUN bash -x /build-libassuan.sh 63 | 64 | ARG LIBGCRYPT_VERSION=1.10.1 65 | COPY build-libgcrypt.sh / 66 | RUN bash -x /build-libgcrypt.sh 67 | 68 | ARG LIBKSBA_VERSION=1.6.0 69 | COPY build-libksba.sh / 70 | RUN bash -x /build-libksba.sh 71 | 72 | ARG NPTH_VERSION=1.6 73 | COPY build-npth.sh / 74 | RUN bash -x /build-npth.sh 75 | 76 | ARG GNUPG_VERSION=2.3.7 77 | COPY build-gnupg.sh / 78 | RUN bash -x /build-gnupg.sh 79 | 80 | ARG GPGME_VERSION=1.17.1 81 | COPY build-gpgme.sh / 82 | RUN bash -x /build-gpgme.sh 83 | 84 | # create unprivileged user for non-build-script use of this image 85 | # build-in-docker.sh will likely not use this one, as it enforces the caller's uid inside the container 86 | RUN useradd --system build 87 | USER build 88 | --------------------------------------------------------------------------------