Building on Unix systems ============================= First of all we need to make sure that all dependencies are satisfied. This doc is trying to cover: * [Debian/Ubuntu](#debianubuntu) (contains packaging instructions) * [Fedora/Centos](#fedoracentos) * [FreeBSD](#freebsd) Make sure you have all required dependencies for your system successfully installed. If so then we are ready to go! Let's clone the repository and start building the i2pd: ```bash git clone https://github.com/PurpleI2P/i2pd.git cd i2pd/build cmake -DCMAKE_BUILD_TYPE=Release # more options could be passed, see "CMake Options" make ``` After successfull build i2pd could be installed with: ```bash make install ``` Debian/Ubuntu ------------- You will need a compiler and other tools that could be installed with `build-essential` package: ```bash sudo apt-get install build-essential ``` Also you will need a bunch of development libraries: ```bash sudo apt-get install \ libboost-chrono-dev \ libboost-date-time-dev \ libboost-filesystem-dev \ libboost-program-options-dev \ libboost-regex-dev \ libboost-system-dev \ libboost-thread-dev \ libssl-dev ``` If you need UPnP support (don't forget to run CMake with `WITH_UPNP=ON`) miniupnpc development library should be installed: ```bash sudo apt-get install libminiupnpc-dev ``` You may also build deb-package with the following: ```bash sudo apt-get install fakeroot devscripts cd i2pd debuild --no-tgz-check ``` Fedora/Centos ------------- You will need a compiler and other tools to perform a build: ```bash sudo yum install make cmake gcc gcc-c++ ``` *Latest Fedora system using [DNF](https://en.wikipedia.org/wiki/DNF_(software)) instead of YUM by default, you may prefer to use DNF, but YUM should be ok* > *Centos 7 has CMake 2.8.11 in the official repositories that too old to build i2pd, CMake >=2.8.12 is required* > You could build CMake for Centos manualy(WARNING there are a lot of build dependencies!): > ```bash > wget https://kojipkgs.fedoraproject.org/packages/cmake/2.8.12/3.fc21/src/cmake-2.8.12-3.fc21.src.rpm > yum-builddep cmake-2.8.12-3.fc21.src.rpm > rpmbuild --rebuild cmake-2.8.12-3.fc21.src.rpm > yum install ~/rpmbuild/RPMS/x86_64/cmake-2.8.12-3.el7.centos.x86_64.rpm > ``` Also you will need a bunch of development libraries ```bash sudo yum install boost-devel openssl-devel ``` If you need UPnP support (don't forget to run CMake with `WITH_UPNP=ON`) miniupnpc development library should be installed: ```bash miniupnpc-devel ``` FreeBSD ------- Branch 9.X has gcc v4.2, that knows nothing about required c++11 standart. Required ports: * `devel/cmake` * `devel/boost-libs` * `lang/gcc47`(or later version) To use newer compiler you should set these variables(replace "47" with your actual gcc version): ```bash export CC=/usr/local/bin/gcc47 export CXX=/usr/local/bin/g++47 ``` Branch 10.X has more reliable clang version, that can finally build i2pd, but I still recommend to use gcc, otherwise you will fight it's bugs by your own. CMake Options ------------- Available CMake options(each option has a for of `=`, for more information see `man 1 cmake`): * `CMAKE_BUILD_TYPE` build profile (Debug/Release) * `WITH_BINARY` build i2pd itself * `WITH_LIBRARY` build libi2pd * `WITH_STATIC` build static versions of library and i2pd binary * `WITH_UPNP` build with UPnP support (requires libupnp) * `WITH_AESNI` build with AES-NI support (ON/OFF) * `WITH_HARDENING` enable hardening features (ON/OFF) (gcc only) * `WITH_PCH` use pre-compiled header (experimental, speeds up build) Also there is `-L` flag for CMake that could be used to list current cached options: ```bash cmake -L ```