如何构建 dnscrypt 插件?

如何构建 dnscrypt 插件?

我尝试为 DNSCrypt 构建一个插件,但它一直告诉我它需要一些其他文件。

我需要知道如何构建它,而且我从未从头开始编译过包。我一直能够使用存储库。

我使用带有 gcc 的 Ubuntu 14.04(64 位)随处编码

这是该插件的链接:GeoIP 插件

这是 dnscrypt 的链接:DNS加密

这是我尝试编译时得到的结果:

cabox@box-codeanywhere:~/workspace$ cmake . && make                                                                                                            
CMake Error: The source directory "/home/cabox/workspace" does not appear to contain CMakeLists.txt.                                                           
Specify --help for usage, or press the help button on the CMake GUI.                                                                                           
cabox@box-codeanywhere:~/workspace$ cd plugin                                                                                                                  
cabox@box-codeanywhere:~/workspace/plugin$ cmake . && make                                                                                                     
-- Configuring done                                                                                                                                            
-- Generating done                                                                                                                                             
-- Build files have been written to: /home/cabox/workspace/plugin                                                                                              
[100%] Building C object CMakeFiles/geoip-block.dir/geoip-block.c.o                                                                                            
/home/cabox/workspace/plugin/geoip-block.c:14:29: fatal error: dnscrypt/plugin.h: No such file or directory                                                    
 #include <dnscrypt/plugin.h>                                                                                                                                  
                             ^                                                                                                                                 
compilation terminated.                                                                                                                                        
make[2]: *** [CMakeFiles/geoip-block.dir/geoip-block.c.o] Error 1                                                                                              
make[1]: *** [CMakeFiles/geoip-block.dir/all] Error 2                                                                                                          
make: *** [all] Error 2                         

如果需要更多信息,我会尽快添加。


Dnscrypt 构建一切正常,但我仍然得到 http://pastebin.com/MeU4Q24W

答案1

更新

看起来 terdon 在感恩节假期添加并更新了一些命令。这些添加了额外的和/或所需的功能。我要感谢他添加这些。

任务

首先,让我们从头开始。

cd ~ && rm -Rv workspace

现在,我们确保我们拥有适合 Ubuntu 的工具:

sudo apt-get update  ## run make sure you get all things right
sudo apt-get install build-essential checkinstall
sudo apt-get install cmake wget software-properties-common python-software-properties autoconf
sudo add-apt-repository ppa:shnatsel/dnscrypt
sudo add-apt-repository ppa:maxmind/ppa
sudo apt-get update
sudo apt-get install libtool openssl libssl-dev

然后,如果您想要源代码管理中的包,我们需要添加更多工具。 DNScrypt 不需要它,但如果您再次从源代码构建项目:

sudo apt-get install cvs subversion git-core mercurial

您应该位于主目录中,因此现在我们需要 dnscrypt-proxy 的实际源 tarball:

  • 下载(如果你还没有安装)

    wget https://download.libsodium.org/libsodium/releases/libsodium-1.0.1.tar.gz
    tar xzf libsodium-1.0.1.tar.gz && cd libsodium-1.0.1 && ./configure
    make && make check && sudo make install
    sudo ldconfig && ./configure && cd ..
    
  • 下载地理IP API(如果你还没有安装)

    wget https://github.com/maxmind/geoip-api-c/archive/v1.6.3.tar.gz
    tar xzf v1.6.3.tar.gz && cd geoip-api-c-1.6.3
    sh bootstrap && ./configure
    make && make check && sudo make install && cd ..
    
  • 下载域名系统(如果你还没有安装)

    wget http://www.nlnetlabs.nl/downloads/ldns/ldns-1.6.17.tar.gz
    tar xzf ldns-1.6.17.tar.gz && cd ldns-1.6.17
    ./configure && make && sudo make install && cd ..
    
  • 下载DNSCrypt-代理版本 1.4.1 Tar.bz2文件。对于 Ubuntu 方式,添加此DNSCrypt-PPA 请注意,此 PPA 已过时(13.10 的最新版本是 1.4.0),因此我们将从源安装

    tar -xvjpf dnscrypt-proxy-1.4.1.tar.bz2 && cd dnscrypt-proxy-1.4.1
    ./configure && make && sudo make install
    
    • 由于我们删除了插件,我们需要从 GitHub Repo 重新下载 Zip 文件。我们创建的目录将被称为master

      sudo apt-get install zip unzipTar 不会提取 zip,因此我们需要新工具。您可能已经拥有这些。

      unzip master.zip && cd master

    • 解压缩文件后,转到文件夹并编辑CMakeLists.txt并添加以下行

include_directories(/home/cabox/workspace/dnscrypt-proxy-1.4.1/src/include) include_directories(/home/cabox/workspace/geoip-api-c-1.6.3/libGeoIP) include_directories(/home/cabox/workspace) /ldns-1.6.17/ldns)

  • 然后,运行

    cmake . && make
    cd .. && cp -v master/nameofplugin.ext /some/dir/where/you/store/plugins
    

为什么你的错误发生

DNSCrypt 的头文件仅在您成功编译 DNSCrypt 本身后plugin.h才会安装。/usr/include/dnscrypt您无法编译 DNSCrypt 有两个原因:

  1. 您没有源 tarball。
  2. 交叉制作,或 CMake简而言之,它是一个独立的构建系统,不使用标准的Linux构建过程。使用它的客户端包括 KDE 和 Poppler。

参考

  1. 根图用户。我们通常从源代码构建。事实上,每次更新。
  2. 乌班图EasyCompilingHOWTO

相关内容