aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIngo Klöcker <[email protected]>2021-09-15 09:57:38 +0000
committerIngo Klöcker <[email protected]>2021-09-15 10:03:23 +0000
commit1e3252449418e15f2b69449e8b4bd74a78a9bc87 (patch)
tree70e52b6382508911394ab82382a75e551c8217d7
parentspeedo: Add appimage targets for Speedo builds (diff)
downloadgnupg-1e3252449418e15f2b69449e8b4bd74a78a9bc87.tar.gz
gnupg-1e3252449418e15f2b69449e8b4bd74a78a9bc87.zip
appimage: Add experimental scripts for building an AppImage of gpg
GnuPG-bug-id: 5598
-rw-r--r--appimage/appimage.desktop9
-rwxr-xr-xappimage/build-appimage-with-docker.sh54
-rwxr-xr-xappimage/build-docker-image.sh24
-rw-r--r--appimage/docker/Dockerfile57
-rw-r--r--appimage/docker/build-appimage.sh43
5 files changed, 187 insertions, 0 deletions
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 <[email protected]>
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+# 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 <[email protected]>
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+# 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 <[email protected]>
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+# 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 <[email protected]>
+#
+# 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 <https://www.gnu.org/licenses/>.
+#
+# 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