Below are my build instructions for GnuPG 2.2.1, released on September 19th, 2017. These instructions are built for a Ubuntu 16.04 LTS.
If you prefer, you may use the below install script to install GnuPG 2.2.1 by running the following commands:
curl -OL "https://gist.github.com/romen/b7bac24d679d91acabb27bfcdabbee01/raw/b93b7b00910db67c2c3332606792679802abbb32/install-gnupg22.sh" && bash ./install-gnupg22.sh
apt-get -y install libgnutls-dev bzip2 make gettext texinfo gnutls-bin build-essential libbz2-dev zlib1g-dev libncurses5-dev libsqlite3-dev libldap2-dev || apt-get -y install libgnutls28-dev bzip2 make gettext texinfo gnutls-bin build-essential libbz2-dev zlib1g-dev libncurses5-dev libsqlite3-dev libldap2-dev
apt-get -y install checkinstall
# Only if you want to compile pinentry with support for gnome3 or gtk2 UI
apt-get -y install libgcr-3-dev libgtk2.0-dev
Note: To clean up from the older GnuPG 2.1.x builds, you probably want to delete /var/src/gnupg21
entirely.
mkdir -p /var/src/gnupg22 && cd /var/src/gnupg22
gpg --list-keys
gpg --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 249B39D24F25E3B6 04376F3EE0856959 2071B08A33BD3F06 8A861B1C7EFD60D9
wget -c https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.27.tar.gz && \
wget -c https://www.gnupg.org/ftp/gcrypt/libgpg-error/libgpg-error-1.27.tar.gz.sig && \
gpg --verify libgpg-error-1.27.tar.gz.sig && tar -xzf libgpg-error-1.27.tar.gz && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd libgpg-error-1.27/ && ./configure --prefix=${PREFIX} && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="libgpg-error-alt" --pkgversion="1.27" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.1.tar.gz && \
wget -c https://www.gnupg.org/ftp/gcrypt/libgcrypt/libgcrypt-1.8.1.tar.gz.sig && \
gpg --verify libgcrypt-1.8.1.tar.gz.sig && tar -xzf libgcrypt-1.8.1.tar.gz && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd libgcrypt-1.8.1 && ./configure --prefix=${PREFIX} && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="libgcrypt-alt" --pkgversion="1.8.1" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2 && \
wget -c https://www.gnupg.org/ftp/gcrypt/libassuan/libassuan-2.4.3.tar.bz2.sig && \
gpg --verify libassuan-2.4.3.tar.bz2.sig && tar -xjf libassuan-2.4.3.tar.bz2 && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd libassuan-2.4.3 && ./configure --prefix=${PREFIX} && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="libassuan-alt" --pkgversion="2.4.3" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2 && \
wget -c https://www.gnupg.org/ftp/gcrypt/libksba/libksba-1.3.5.tar.bz2.sig && \
gpg --verify libksba-1.3.5.tar.bz2.sig && tar -xjf libksba-1.3.5.tar.bz2 && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd libksba-1.3.5 && ./configure --prefix=${PREFIX} && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="libksba-alt" --pkgversion="1.3.5" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/npth/npth-1.5.tar.bz2 && \
wget -c https://www.gnupg.org/ftp/gcrypt/npth/npth-1.5.tar.bz2.sig && \
gpg --verify npth-1.5.tar.bz2.sig && tar -xjf npth-1.5.tar.bz2 && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd npth-1.5 && ./configure --prefix=${PREFIX} && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="npth-alt" --pkgversion="1.5" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.0.0.tar.bz2 && \
wget -c https://www.gnupg.org/ftp/gcrypt/pinentry/pinentry-1.0.0.tar.bz2.sig && \
gpg --verify pinentry-1.0.0.tar.bz2.sig && tar -xjf pinentry-1.0.0.tar.bz2 && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd pinentry-1.0.0 && ./configure --prefix=${PREFIX} --enable-pinentry-curses --enable-pinentry-gnome3 --disable-pinentry-qt5 && \
make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="pinentry-alt" --pkgversion="1.0.0" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually
wget -c https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.1.tar.bz2 && \
wget -c https://www.gnupg.org/ftp/gcrypt/gnupg/gnupg-2.2.1.tar.bz2.sig && \
gpg --verify gnupg-2.2.1.tar.bz2.sig && tar -xjf gnupg-2.2.1.tar.bz2 && \
export PREFIX="/usr/local" && \
export LDFLAGS="-Wl,-rpath -Wl,${PREFIX}/lib -L${PREFIX}/lib" && \
cd gnupg-2.2.1 && ./configure --prefix=${PREFIX} --enable-gpg-is-gpg2 && make && \
sudo checkinstall --strip=no --stripso=no --default --deldoc=yes \
--pkgname="gnupg2-alt" --pkgversion="2.2.1" \
--inspect && cd ..
# ${PREFIX/info/dir} should be removed from the contents of the
# package per the Debian guidelines and to avoid conflicts.
# Unfortunately I cannot find a way to ask checkinstall to do that
# automatically, hence the --inspect option to do it manually```