diff --git a/docker/appimage/Dockerfile b/docker/appimage/Dockerfile index cec5f93a..4103b420 100644 --- a/docker/appimage/Dockerfile +++ b/docker/appimage/Dockerfile @@ -1,107 +1,114 @@ # Dockerfile - docker/appimage # Copyright (C) 2021 g10 Code GmbH # # Software engineering by Ingo Klöcker # # This file is part of GnuPG. # # Gpg4win is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # Gpg4win is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # SPDX-License-Identifier: GPL-2.0+ FROM centos:7 # Import the CentOS 7 package signing key after verifying its fingerprint. # Then add the software collections repository from the CentOS SCLo SIG and # import its package signing key after verifying the fingerprint. # Ditto for the EPEL 7 package signing key. RUN test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 | grep -q ^fpr:::::::::6341AB2753D78A78A7C27BB124C6A8A7F4A80EB5 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7 \ && yum -y update \ && yum -y install \ centos-release-scl \ && test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo | grep -q ^fpr:::::::::C4DBD535B1FBBA14F8BA64A84EB84E71F2EE9D55 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-SIG-SCLo \ && yum -y update \ && yum -y install \ epel-release \ && test $(gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 | grep ^pub: | wc -l) = 1 \ && gpg --with-colons --with-fingerprint < /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 | grep -q ^fpr:::::::::91E97D7C4A5E96F17F3E888F6A2FAEA2352C64E5 \ && rpmkeys --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 \ && yum -y update \ && rm -rf /root/.gnupg RUN yum -y install \ at-spi2-core-devel \ automake \ boost169-devel \ bzip2 \ bzip2-devel \ cmake3 \ + cups-devel \ dbus-devel \ devtoolset-7-binutils \ devtoolset-7-gcc \ devtoolset-7-gcc-c++ \ devtoolset-7-make \ + double-conversion-devel \ egl-wayland-devel \ file \ fontconfig-devel \ freetype-devel \ gettext \ git \ gnutls-devel \ gperf \ gtk-update-icon-cache \ + harfbuzz-devel \ libXrender-devel \ libicu-devel \ + libinput-devel \ libjpeg-devel \ libpng-devel \ libxkbcommon-x11-devel \ + libzstd-devel \ mesa-libEGL-devel \ mesa-libGL-devel \ + mtdev-devel \ openldap-devel \ openssl11-devel \ patch \ pcre2-devel \ python36-lxml \ readline-devel \ stow \ + systemd-devel \ wayland-devel \ wget \ which \ xcb-util-image-devel \ xcb-util-keysyms-devel \ xcb-util-renderutil-devel \ xcb-util-wm-devel \ xz-devel \ zlib-devel # download the necessary linuxdeploy AppImages and extract them because we have no fuse in the container RUN mkdir -p /tmp/download \ && cd /tmp/download \ && wget https://github.com/linuxdeploy/linuxdeploy/releases/download/continuous/linuxdeploy-x86_64.AppImage \ && wget https://github.com/linuxdeploy/linuxdeploy-plugin-qt/releases/download/continuous/linuxdeploy-plugin-qt-x86_64.AppImage \ && chmod +x linuxdeploy-* \ && cd /tmp \ && download/linuxdeploy-plugin-qt-x86_64.AppImage --appimage-extract \ && download/linuxdeploy-x86_64.AppImage --appimage-extract \ && rm -rf /tmp/download \ && mkdir -p /opt \ && mv /tmp/squashfs-root /opt/linuxdeploy COPY build-appimage.sh / RUN chmod +x build-appimage.sh diff --git a/docker/appimage/build-appimage.sh b/docker/appimage/build-appimage.sh index 09f304fc..d7383d0d 100644 --- a/docker/appimage/build-appimage.sh +++ b/docker/appimage/build-appimage.sh @@ -1,70 +1,70 @@ #!/bin/sh # Build an AppImage of Kleopatra # Copyright (C) 2021 g10 Code GmbH # # Software engineering by Ingo Klöcker # # This file is part of GnuPG. # # GnuPG is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # GnuPG is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # SPDX-License-Identifier: GPL-3.0+ set -e source /opt/rh/devtoolset-7/enable cd /src/packages ./download.sh cd /src ./configure --enable-appimage --enable-maintainer-mode --disable-manuals cd /src make echo 'rootdir = $APPDIR/usr' >/build/AppDir/usr/bin/gpgconf.ctl export PATH=/opt/linuxdeploy/usr/bin:$PATH export LD_LIBRARY_PATH=/build/install/lib # tell the linuxdeploy qt-plugin where to find qmake export QMAKE=/build/install/bin/qmake # create plugin directories expected by linuxdeploy qt-plugin # workaround for # [qt/stdout] Deploy[qt/stderr] terminate called after throwing an instance of 'boost::filesystem::filesystem_error' -# [qt/stderr] what(): boost::filesystem::directory_iterator::construct: No such file or directory: "/build/AppDir/usr/plugins/printsupport" +# [qt/stderr] what(): boost::filesystem::directory_iterator::construct: No such file or directory: "/build/AppDir/usr/plugins/sqldrivers" # ERROR: Failed to run plugin: qt (exit code: 6) -mkdir -p /build/install/plugins/{printsupport,sqldrivers} +mkdir -p /build/install/plugins/sqldrivers # copy KDE plugins for d in iconengines kf5 pim; do mkdir -p /build/AppDir/usr/plugins/${d}/ rsync -av --delete --omit-dir-times /build/install/lib64/plugins/${d}/ /build/AppDir/usr/plugins/${d}/ done cd /build # remove existing AppRun and wrapped AppRun, that may be left over from a previous run of # linuxdeploy, to ensure that our custom AppRun is deployed rm -f /build/AppDir/AppRun /build/AppDir/AppRun.wrapped # remove existing translations that may be left over from a previous run of linuxdeploy rm -rf /build/AppDir/usr/translations linuxdeploy --appdir /build/AppDir \ --desktop-file /build/AppDir/usr/share/applications/org.kde.kleopatra.desktop \ --icon-file /build/AppDir/usr/share/icons/hicolor/256x256/apps/kleopatra.png \ --custom-apprun /src/src/appimage/AppRun \ --plugin qt \ --output appimage \ 2>&1 | tee /build/logs/linuxdeploy-kleopatra.log