diff --git a/appimage/appimage.desktop b/appimage/appimage.desktop new file mode 100644 index 000000000..c72f0f624 --- /dev/null +++ b/appimage/appimage.desktop @@ -0,0 +1,9 @@ +[Desktop Entry] +Name=gpg +Type=Application +Terminal=true +NoDisplay=true +Exec=gpg +Icon=gpg +Categories=Security;System; +X-AppImage-Integrate=false diff --git a/appimage/build-appimage-with-docker.sh b/appimage/build-appimage-with-docker.sh new file mode 100755 index 000000000..36c314593 --- /dev/null +++ b/appimage/build-appimage-with-docker.sh @@ -0,0 +1,54 @@ +#!/bin/sh +# 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 + +tag_or_branch=gnupg-2.2.30 +buildroot=$(mktemp -d --tmpdir gnupg-appimage.XXXXXXXXXX) +echo Using ${buildroot} + +cd ${buildroot} + +git clone -b ${tag_or_branch} https://dev.gnupg.org/source/gnupg + +# run autogen.sh outside of the container because automake in Centos 7 is too old +cd gnupg +./autogen.sh +# download swdb.lst outside of the container because gpgv in Centos 7 is too old +# to verify the signature +build-aux/getswdb.sh + +cd ${buildroot} +mkdir -p build + +# run the build-appimage.sh script in the Docker container to build the sources +# using CentOS 7; run the container with the same user/group as the current +# user to ensure that all files created inside the container are writeable +# by the current user +docker run -it --rm --user "$(id -u):$(id -g)" \ + --volume ${buildroot}/gnupg:/src \ + --volume ${buildroot}/build:/build \ + g10-build-appimage-gnupg:centos7 \ + /build-appimage.sh + +echo The AppImage should now be available at ${buildroot}/build: +ls ${buildroot}/build/*.AppImage diff --git a/appimage/build-docker-image.sh b/appimage/build-docker-image.sh new file mode 100755 index 000000000..27cbcfb95 --- /dev/null +++ b/appimage/build-docker-image.sh @@ -0,0 +1,24 @@ +#!/bin/sh +# build-docker-image.sh - appimage +# 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+ + +docker build -t g10-build-appimage-gnupg:centos7 docker diff --git a/appimage/docker/Dockerfile b/appimage/docker/Dockerfile new file mode 100644 index 000000000..34957ad97 --- /dev/null +++ b/appimage/docker/Dockerfile @@ -0,0 +1,57 @@ +# Dockerfile - appimage/docker +# 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+ + +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. + +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 + +RUN yum -y install \ + automake \ + bzip2 \ + devtoolset-7-binutils \ + devtoolset-7-gcc \ + devtoolset-7-gcc-c++ \ + devtoolset-7-make \ + file \ + gnutls-devel \ + openldap-devel \ + qt5-qtbase-devel \ + readline-devel \ + sqlite-devel \ + wget + +COPY build-appimage.sh / + +RUN chmod +x build-appimage.sh diff --git a/appimage/docker/build-appimage.sh b/appimage/docker/build-appimage.sh new file mode 100644 index 000000000..0d3bde801 --- /dev/null +++ b/appimage/docker/build-appimage.sh @@ -0,0 +1,43 @@ +#!/bin/sh +# Build an AppImage of gpg +# 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 + +mkdir -p /build/AppDir +cd /src +source /opt/rh/devtoolset-7/enable + +make -f build-aux/speedo.mk INSTALL_PREFIX=/build/AppDir/usr CUSTOM_SWDB=1 appimage + +mkdir -p /build/download +cd /build/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 /build +# extract the AppImages because we have no fuse in the container +download/linuxdeploy-plugin-qt-x86_64.AppImage --appimage-extract +download/linuxdeploy-x86_64.AppImage --appimage-extract +export PATH=squashfs-root/usr/bin:$PATH +export LD_LIBRARY_PATH=/build/AppDir/usr/lib +linuxdeploy --appdir AppDir --desktop-file /src/appimage/appimage.desktop --icon-file /src/artwork/gnupg-lock-256x256tr.png --icon-filename gpg --plugin qt --output appimage