试图从源代码编译gnupg

我从https://www.gnupg.org/download/下载了最新的稳定tarball,并将其解压缩到我的ubuntu机器上的文件夹中。 我不得不chmod 775 configure以便能够运行它,然后运行./configure

我在最后得到了这个消息:

GnuPG v2.0.29 has been configured as follows: Revision: 120fc69 (4623) Platform: GNU/Linux (x86_64-unknown-linux-gnu) OpenPGP: yes S/MIME: yes Agent: yes Smartcard: yes (without internal CCID driver) Gpgtar: no Protect tool: (default) Default agent: (default) Default pinentry: (default) Default scdaemon: (default) Default dirmngr: (default) Warning: Mismatches between the target platform and the to be used libraries have been detected for: libgpg-error libgcrypt Please check above for more warning messages. 

我试图运行一个sudo apt-get install libgpg-error libgcrypt但它说找不到它们,所以我尝试了libgpg-error-dev libgcrypt-dev并得到了这个:

 Reading package lists... Building dependency tree... Reading state information... libgpg-error-dev is already the newest version. libgcrypt11-dev is already the newest version. 0 upgraded, 0 newly installed, 0 to remove and 69 not upgraded. 

所以我试着运行make,这就是我在最后看到的

 Making all in . make[3]: Entering directory `/home/nitrous/gnupg-new/tests' srcdir=. GNUPGHOME=`/bin/pwd` GPG_AGENT_INFO= LC_ALL=C GPGSM=../sm/gpgsm ./runtest ./inittests make[3]: Leaving directory `/home/nitrous/gnupg-new/tests' make[2]: Leaving directory `/home/nitrous/gnupg-new/tests' make[1]: Leaving directory `/home/nitrous/gnupg-new' /bin/bash: ./runtest: permission denied make[3]: *** [inittests.stamp] Error 126 make[2]: *** [all-recursive] Error 1 make[1]: *** [all-recursive] Error 1 make: *** [all] Error 2 Making all in . make[3]: Entering directory `/home/nitrous/gnupg-new/tests' srcdir=. GNUPGHOME=`/bin/pwd` GPG_AGENT_INFO= LC_ALL=C GPGSM=../sm/gpgsm ./runtest ./inittests /bin/bash: ./runtest: Permission denied make[3]: *** [inittests.stamp] Error 126 make[3]: Leaving directory `/home/nitrous/gnupg-new/tests' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/nitrous/gnupg-new/tests' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/nitrous/gnupg-new' make: *** [all] Error 2 

然后我运行make install并在最后得到相同的错误。 出了什么问题?

编辑:

我手动编译并安装了libgpg-error和libgcrypt,./configure没有任何警告就没问题了,当我运行sudo make我得到了这个:

 chmod 755 ./gpg_dearmor ./gpg_dearmor > ./pubring.gpg < ./pubring.asc ../../g10/gpg2: error while loading shared libraries: libgcrypt.so.20: cannot open shared object file: No such file or directory make[3]: *** [pubring.gpg] Error 127 make[3]: Leaving directory `/home/nitrous/gnupg-new/tests/openpgp' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/nitrous/gnupg-new/tests' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/nitrous/gnupg-new' make: *** [all] Error 2 

然后,当我再次尝试make install时,我得到了这个:

 Making install in tests make[1]: Entering directory `/home/nitrous/gnupg-new/tests' Making install in openpgp make[2]: Entering directory `/home/nitrous/gnupg-new/tests/openpgp' ./gpg_dearmor > ./secring.gpg < ./secring.asc ../../g10/gpg2: error while loading shared libraries: libgcrypt.so.20: cannot open shared object file: No such file or directory make[2]: *** [secring.gpg] Error 127 make[2]: Leaving directory `/home/nitrous/gnupg-new/tests/openpgp' make[1]: *** [install-recursive] Error 1 make[1]: Leaving directory `/home/nitrous/gnupg-new/tests' make: *** [install-recursive] Error 1 

编辑2:

我发现一个post说要运行sudo ldconfig -v

然后当我运行./configuresudo make install时,我最后得到了这个错误:

 Making all in . make[3]: Entering directory `/home/nitrous/gnupg-new/tests' srcdir=. GNUPGHOME=`/bin/pwd` GPG_AGENT_INFO= LC_ALL=C GPGSM=../sm/gpgsm ./runtest ./inittests /bin/bash: ./runtest: Permission denied make[3]: *** [inittests.stamp] Error 126 make[3]: Leaving directory `/home/nitrous/gnupg-new/tests' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/nitrous/gnupg-new/tests' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/nitrous/gnupg-new' make: *** [all] Error 2 

编辑3:

sudo chmod 755 on tests/runtest运行了一个sudo chmod 755 on tests/runtest然后执行./configuresudo make AGAIN,现在我有这个错误:

 Making all in . make[3]: Entering directory `/home/nitrous/gnupg-new/tests' srcdir=. GNUPGHOME=`/bin/pwd` GPG_AGENT_INFO= LC_ALL=C GPGSM=../sm/gpgsm ./runtest ./inittests asschk: interpreter: invalid statement `set' make[3]: *** [inittests.stamp] Error 1 make[3]: Leaving directory `/home/nitrous/gnupg-new/tests' make[2]: *** [all-recursive] Error 1 make[2]: Leaving directory `/home/nitrous/gnupg-new/tests' make[1]: *** [all-recursive] Error 1 make[1]: Leaving directory `/home/nitrous/gnupg-new' make: *** [all] Error 2 

叹气 ….

我发现提供的speedo方法对于gnupg-2.1.X来说最简单:

  1. sudo apt-get update

  2. sudo apt-get install libldap2-dev gtk+-2 libbz2-dev

  3. 解压缩最新的gnupg-2.1.X tarball并cd到新文件夹后,运行命令:

     sudo make -f build-aux/speedo.mk native INSTALL_PREFIX=/usr/local 
  4. sudo ldconfig

  5. 下载最新的pinentry-0.9.5,运行./configure && make && sudo make install

  6. 测试出来: gpg2 --version

****我想更新GnuPG v2.2.x的这个答案。 以下bash文件将安装在Ubuntu 16.04,17.10上:

 cd ~/Downloads version=gnupg-2.2.2 wget https://gnupg.org/ftp/gcrypt/gnupg/$version.tar.bz2 wget https://gnupg.org/ftp/gcrypt/gnupg/$version.tar.bz2.sig tar xf $version.tar.bz2 cd $version sudo apt-get update sudo apt-get install -y libldap2-dev sudo apt-get install -y gtk+-2 sudo apt-get install -y rng-tools sudo apt-get install -y libbz2-dev sudo apt-get install -y zlib1g-dev sudo apt-get install -y libgmp-dev sudo apt-get install -y nettle-dev sudo apt-get install -y libgnutls28-dev sudo apt-get install -y libsqlite3-dev sudo apt-get install -y adns-tools sudo apt-get install -y libreadline-dev sudo apt-get install -y pinentry-gtk2 sudo apt-get install -y pcscd scdaemon sudo make -f build-aux/speedo.mk native INSTALL_PREFIX=/usr/local sudo ldconfig 

这将支持像Yubikey 4 Nano这样的TOFU和智能卡。 要更新到最新版本编辑版本= gnupg-2.2.2测试它:gpg –version