commit a0c7248b68c5d19621f4617c42abe3ef9f97ff9a Author: l-n-s Date: Wed Oct 12 15:41:06 2016 +0000 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..c871d6e --- /dev/null +++ b/README.md @@ -0,0 +1,60 @@ +i2pd +==== + +i2pd (I2P Daemon) это полнофункциональная реализация I2P клиента на языке C++. + +I2P (Невидимый Интернет Протокол) это универсальный анонимный сетевой +уровень. Все соединения через I2P анонимны и используют сквозное (end-to-end) +шифрование, участники не раскрывают свои настоящие IP адреса. + +I2P клиент это программа для построения и использования анонимных I2P +сетей. Подобные сети обычно используются для анонимных peer-to-peer приложений +(файлообмен, криптовалюты) и для анонимных клиент-серверных приложений +(вебсайты, мессенджеры, чат-серверы). + +I2P позволяет людям со всего мира общаться и делиться информацией без +ограничений. + +* [Сайт](http://i2pd.website) +* [Документация](https://i2pd.readthedocs.io/ru/latest/) +* [Вики](https://github.com/PurpleI2P/i2pd/wiki) +* [Багтрекер](https://github.com/PurpleI2P/i2pd/issues) +* [Спецификация](https://geti2p.net/spec) +* [Twitter](https://twitter.com/hashtag/i2pd) + +Установка +--------- + +Самый простой способ установить i2pd это использование +[бинарных файлов](https://github.com/PurpleI2P/i2pd/releases/latest). +Инструкции по сборке из исходников для вашей ОС смотрите +в [документации](https://i2pd.readthedocs.io/en/latest/) + +**Поддерживаемые системы:** + +* Linux x86/x64 - [![Build Status](https://travis-ci.org/PurpleI2P/i2pd.svg?branch=openssl)](https://travis-ci.org/PurpleI2P/i2pd) +* Windows - [![Build status](https://ci.appveyor.com/api/projects/status/1908qe4p48ff1x23?svg=true)](https://ci.appveyor.com/project/PurpleI2P/i2pd) +* Mac OS X +* FreeBSD +* Android + +Использование +------------- + +Смотрите в [документацию](https://i2pd.readthedocs.io/en/latest/) и +[документированный конфигурационный файл](https://github.com/PurpleI2P/i2pd/blob/openssl/docs/i2pd.conf). + +Помощь монетками +---------------- + +BTC: 1K7Ds6KUeR8ya287UC4rYTjvC96vXyZbDY +DASH: Xw8YUrQpYzP9tZBmbjqxS3M97Q7v3vJKUF +LTC: LKQirrYrDeTuAPnpYq5y7LVKtywfkkHi59 +ANC: AQJYweYYUqM1nVfLqfoSMpUMfzxvS4Xd7z +DOGE: DNXLQKziRPAsD9H3DFNjk4fLQrdaSX893Y + +Лицензия +-------- + +Исходный код распространяется под лицензией BSD, полный текст +лицензии в файле LICENSE. diff --git a/docs/Doxyfile b/docs/Doxyfile new file mode 100644 index 0000000..f2e2999 --- /dev/null +++ b/docs/Doxyfile @@ -0,0 +1,259 @@ +DOXYFILE_ENCODING = UTF-8 +PROJECT_NAME = "i2pd" +PROJECT_NUMBER = +PROJECT_BRIEF = "load-balanced unspoofable packet switching network" +PROJECT_LOGO = +OUTPUT_DIRECTORY = docs/generated +CREATE_SUBDIRS = NO +ALLOW_UNICODE_NAMES = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = +ALWAYS_DETAILED_SEC = NO +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 +ALIASES = +TCL_SUBST = +OPTIMIZE_OUTPUT_FOR_C = NO +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO +EXTENSION_MAPPING = +MARKDOWN_SUPPORT = YES +AUTOLINK_SUPPORT = YES +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +INLINE_GROUPED_CLASSES = NO +INLINE_SIMPLE_STRUCTS = NO +TYPEDEF_HIDES_STRUCT = NO +LOOKUP_CACHE_SIZE = 0 +EXTRACT_ALL = NO +EXTRACT_PRIVATE = NO +EXTRACT_PACKAGE = NO +EXTRACT_STATIC = NO +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = NO +EXTRACT_ANON_NSPACES = NO +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = NO +CASE_SENSE_NAMES = YES +HIDE_SCOPE_NAMES = NO +SHOW_INCLUDE_FILES = YES +SHOW_GROUPED_MEMB_INC = NO +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES +SORT_BRIEF_DOCS = NO +SORT_MEMBERS_CTORS_1ST = NO +SORT_GROUP_NAMES = NO +SORT_BY_SCOPE_NAME = NO +STRICT_PROTO_MATCHING = NO +GENERATE_TODOLIST = YES +GENERATE_TESTLIST = YES +GENERATE_BUGLIST = YES +GENERATE_DEPRECATEDLIST= YES +ENABLED_SECTIONS = +MAX_INITIALIZER_LINES = 30 +SHOW_USED_FILES = YES +SHOW_FILES = YES +SHOW_NAMESPACES = YES +FILE_VERSION_FILTER = +LAYOUT_FILE = +CITE_BIB_FILES = +QUIET = YES +WARNINGS = YES +WARN_IF_UNDOCUMENTED = NO +WARN_IF_DOC_ERROR = YES +WARN_NO_PARAMDOC = NO +WARN_FORMAT = "$file:$line: $text" +WARN_LOGFILE = +INPUT = +INPUT_ENCODING = UTF-8 +FILE_PATTERNS = *.cpp *.h +RECURSIVE = NO +EXCLUDE = +EXCLUDE_SYMLINKS = NO +EXCLUDE_PATTERNS = +EXCLUDE_SYMBOLS = +EXAMPLE_PATH = +EXAMPLE_PATTERNS = +EXAMPLE_RECURSIVE = NO +IMAGE_PATH = +INPUT_FILTER = +FILTER_PATTERNS = +FILTER_SOURCE_FILES = NO +FILTER_SOURCE_PATTERNS = +USE_MDFILE_AS_MAINPAGE = +SOURCE_BROWSER = NO +INLINE_SOURCES = NO +STRIP_CODE_COMMENTS = YES +REFERENCED_BY_RELATION = NO +REFERENCES_RELATION = NO +REFERENCES_LINK_SOURCE = YES +SOURCE_TOOLTIPS = YES +USE_HTAGS = NO +VERBATIM_HEADERS = NO +CLANG_ASSISTED_PARSING = NO +CLANG_OPTIONS = +ALPHABETICAL_INDEX = YES +COLS_IN_ALPHA_INDEX = 5 +IGNORE_PREFIX = +GENERATE_HTML = YES +HTML_OUTPUT = html +HTML_FILE_EXTENSION = .html +HTML_HEADER = +HTML_FOOTER = +HTML_STYLESHEET = +HTML_EXTRA_STYLESHEET = +HTML_EXTRA_FILES = +HTML_COLORSTYLE_HUE = 220 +HTML_COLORSTYLE_SAT = 100 +HTML_COLORSTYLE_GAMMA = 80 +HTML_TIMESTAMP = YES +HTML_DYNAMIC_SECTIONS = NO +HTML_INDEX_NUM_ENTRIES = 100 +GENERATE_DOCSET = NO +DOCSET_FEEDNAME = "Doxygen generated docs" +DOCSET_BUNDLE_ID = org.doxygen.Project +DOCSET_PUBLISHER_ID = org.doxygen.Publisher +DOCSET_PUBLISHER_NAME = Publisher +GENERATE_HTMLHELP = NO +CHM_FILE = +HHC_LOCATION = +GENERATE_CHI = NO +CHM_INDEX_ENCODING = +BINARY_TOC = NO +TOC_EXPAND = NO +GENERATE_QHP = NO +QCH_FILE = +QHP_NAMESPACE = org.doxygen.Project +QHP_VIRTUAL_FOLDER = doc +QHP_CUST_FILTER_NAME = +QHP_CUST_FILTER_ATTRS = +QHP_SECT_FILTER_ATTRS = +QHG_LOCATION = +GENERATE_ECLIPSEHELP = NO +ECLIPSE_DOC_ID = org.doxygen.Project +DISABLE_INDEX = NO +GENERATE_TREEVIEW = NO +ENUM_VALUES_PER_LINE = 4 +TREEVIEW_WIDTH = 250 +EXT_LINKS_IN_WINDOW = NO +FORMULA_FONTSIZE = 10 +FORMULA_TRANSPARENT = YES +USE_MATHJAX = NO +MATHJAX_FORMAT = HTML-CSS +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest +MATHJAX_EXTENSIONS = +MATHJAX_CODEFILE = +SEARCHENGINE = YES +SERVER_BASED_SEARCH = NO +EXTERNAL_SEARCH = NO +SEARCHENGINE_URL = +SEARCHDATA_FILE = searchdata.xml +EXTERNAL_SEARCH_ID = +EXTRA_SEARCH_MAPPINGS = +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4 +EXTRA_PACKAGES = +LATEX_HEADER = +LATEX_FOOTER = +LATEX_EXTRA_FILES = +PDF_HYPERLINKS = YES +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO +LATEX_BIB_STYLE = plain +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_SUBDIR = +MAN_LINKS = NO +GENERATE_XML = NO +XML_OUTPUT = xml +XML_PROGRAMLISTING = YES +GENERATE_DOCBOOK = NO +DOCBOOK_OUTPUT = docbook +DOCBOOK_PROGRAMLISTING = NO +GENERATE_AUTOGEN_DEF = NO +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = +ENABLE_PREPROCESSING = YES +MACRO_EXPANSION = NO +EXPAND_ONLY_PREDEF = NO +SEARCH_INCLUDES = YES +INCLUDE_PATH = +INCLUDE_FILE_PATTERNS = +PREDEFINED = +EXPAND_AS_DEFINED = +SKIP_FUNCTION_MACROS = YES +TAGFILES = +GENERATE_TAGFILE = +ALLEXTERNALS = NO +EXTERNAL_GROUPS = YES +EXTERNAL_PAGES = YES +PERL_PATH = /usr/bin/perl +CLASS_DIAGRAMS = YES +MSCGEN_PATH = +DIA_PATH = +HIDE_UNDOC_RELATIONS = YES +HAVE_DOT = NO +DOT_NUM_THREADS = 0 +DOT_FONTNAME = Helvetica +DOT_FONTSIZE = 10 +DOT_FONTPATH = +CLASS_GRAPH = YES +COLLABORATION_GRAPH = YES +GROUP_GRAPHS = YES +UML_LOOK = NO +UML_LIMIT_NUM_FIELDS = 10 +TEMPLATE_RELATIONS = NO +INCLUDE_GRAPH = YES +INCLUDED_BY_GRAPH = YES +CALL_GRAPH = NO +CALLER_GRAPH = NO +GRAPHICAL_HIERARCHY = YES +DIRECTORY_GRAPH = YES +DOT_IMAGE_FORMAT = png +INTERACTIVE_SVG = NO +DOT_PATH = +DOTFILE_DIRS = +MSCFILE_DIRS = +DIAFILE_DIRS = +PLANTUML_JAR_PATH = +DOT_GRAPH_MAX_NODES = 50 +MAX_DOT_GRAPH_DEPTH = 0 +DOT_TRANSPARENT = NO +DOT_MULTI_TARGETS = NO +GENERATE_LEGEND = YES +DOT_CLEANUP = YES diff --git a/docs/build_notes_android.md b/docs/build_notes_android.md new file mode 100644 index 0000000..6d20112 --- /dev/null +++ b/docs/build_notes_android.md @@ -0,0 +1,57 @@ +Сборка для Android +================== + +There are two versions: with QT and without QT. + +Pre-requesties +-------------- + +You need to install Android SDK, NDK and QT with android support. + +- [SDK](https://developer.android.com/studio/index.html) (choose command line tools only) +- [NDK](https://developer.android.com/ndk/downloads/index.html) +- [QT](https://www.qt.io/download-open-source/)(for QT only). Choose one for your platform for android. For example QT 5.6 under Linux would be [this file](http://download.qt.io/official_releases/qt/5.6/5.6.1-1/qt-opensource-linux-x64-android-5.6.1-1.run ) + +You also need Java JDK and Ant. + +QT-Creator (for QT only) +------------------------ +Open QT-creator that should be installed with QT. +Go to Settings/Anndroid and specify correct paths to SDK and NDK. +If everything is correct you will see two set avaiable: +Android for armeabi-v7a (gcc, qt) and Android for x86 (gcc, qt). + +Dependencies +-------------- +Take following pre-compiled binaries from PurpleI2P's repositories. +```bash +git clone https://github.com/PurpleI2P/Boost-for-Android-Prebuilt.git +git clone https://github.com/PurpleI2P/OpenSSL-for-Android-Prebuilt.git +git clone https://github.com/PurpleI2P/MiniUPnP-for-Android-Prebuilt.git +git clone https://github.com/PurpleI2P/android-ifaddrs.git +``` + + +Building the app with QT +------------------------ +- Open qt/i2pd_qt/i2pd_qt.pro in the QT-creator +- Change line MAIN_PATH = /path/to/libraries to an actual path where you put the dependancies to +- Select appropriate project (usually armeabi-v7a) and build +- You will find an .apk file in android-build/bin folder + +Building the app without QT +--------------------------- +- Change line I2PD_LIBS_PATH in android/jni/Application.mk to an actual path where you put the dependancies to +- Run 'ndk-build -j4' from andorid folder +- Create or edit file 'local.properties'. Place 'sdk.dir=' and 'ndk.dir=' +- Run 'ant clean debug' + +Creating release .apk +---------------------- +In order to create release .apk you must obtain a Java keystore file(.jks). Either you have in already, or you can generate it yourself using keytool, or from one of you existing well-know ceritificates. For example, i2pd release are signed with this [certificate](https://github.com/PurpleI2P/i2pd/blob/openssl/contrib/certificates/router/orignal_at_mail.i2p.crt). +Create file 'ant.propeties' +key.store='path to keystore file' +key.alias='alias name' +key.store.password='keystore password' +key.alias.password='alias password' +Run 'ant clean release' diff --git a/docs/build_notes_cross.md b/docs/build_notes_cross.md new file mode 100644 index 0000000..0b389b5 --- /dev/null +++ b/docs/build_notes_cross.md @@ -0,0 +1,75 @@ +Кросс-компиляция +================ + +Static 64 bit windows binary on Ubuntu 15.10 (Wily Werewolf) +--------------------------------------------------------------------- + +Install cross compiler and friends +```sh +sudo apt-get install g++-mingw-w64-x86-64 +``` +Default is to use Win32 threading model which lacks std::mutex and such. So we change defaults +```sh +sudo update-alternatives --set x86_64-w64-mingw32-g++ /usr/bin/x86_64-w64-mingw32-g++-posix +``` +From now on we assume we have everything in `~/dev/`. Get Boost sources unpacked into `~/dev/boost_1_60_0/` +and change directory to it. +Now add out cross compiler configuration. Warning: the following will wipe out whatever you had in there. +```sh +echo "using gcc : mingw : x86_64-w64-mingw32-g++ ;" > ~/user-config.jam +``` +Proceed with building Boost normal way, but let's define dedicated staging directory +```sh +./bootstrap.sh +./b2 toolset=gcc-mingw target-os=windows variant=release link=static runtime-link=static address-model=64 \ + --build-type=minimal --with-filesystem --with-program_options --with-date_time \ + --stagedir=stage-mingw-64 +cd .. +``` +Now we get & build OpenSSL +```sh +git clone https://github.com/openssl/openssl +cd openssl +git checkout OpenSSL_1_0_2g +./Configure mingw64 no-rc2 no-rc4 no-rc5 no-idea no-bf no-cast no-whirlpool no-md2 no-md4 no-ripemd no-mdc2 \ + no-camellia no-seed no-comp no-krb5 no-gmp no-rfc3779 no-ec2m no-ssl2 no-jpake no-srp no-sctp no-srtp \ + --prefix=~/dev/stage --cross-compile-prefix=x86_64-w64-mingw32- +make depend +make +make install +cd .. +``` +and Zlib +```sh +git clone https://github.com/madler/zlib +cd zlib +git checkout v1.2.8 +CC=x86_64-w64-mingw32-gcc CFLAGS=-O3 ./configure --static --64 --prefix=~/dev/stage +make +make install +cd .. +``` +Now we prepare cross toolchain hint file for CMake, let's name it `~/dev/toolchain-mingw.cmake` +```cmake +SET(CMAKE_SYSTEM_NAME Windows) +SET(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) +SET(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) +SET(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres) +SET(CMAKE_FIND_ROOT_PATH /usr/x86_64-w64-mingw32) +set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) +``` +Download miniupnpc, unpack, and symlink it into `~/dev/miniupnpc/`. +Finally, we can build i2pd with all that goodness +```sh +git clone https://github.com/PurpleI2P/i2pd +mkdir i2pd-mingw-64-build +cd i2pd-mingw-64-build +BOOST_ROOT=~/dev/boost_1_60_0 cmake -G 'Unix Makefiles' ~/dev/i2pd/build -DBUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=~/dev/toolchain-mingw.cmake -DWITH_AESNI=ON -DWITH_UPNP=ON -DWITH_STATIC=ON \ + -DWITH_HARDENING=ON -DCMAKE_INSTALL_PREFIX:PATH=~/dev/i2pd-mingw-64-static \ + -DZLIB_ROOT=~/dev/stage -DBOOST_LIBRARYDIR:PATH=~/dev/boost_1_60_0/stage-mingw-64/lib \ + -DOPENSSL_ROOT_DIR:PATH=~/dev/stage +make +x86_64-w64-mingw32-strip i2pd.exe +``` +By now, you should have a release build with stripped symbols. diff --git a/docs/build_notes_ios.md b/docs/build_notes_ios.md new file mode 100644 index 0000000..67a342c --- /dev/null +++ b/docs/build_notes_ios.md @@ -0,0 +1,85 @@ +Сборка для iOS +============== + +How to build i2pd for iOS 9 and iOS Simulator 386/x64 + +Prerequisites +-------------- + +XCode7+, cmake 3.2+ + +Dependencies +-------------- +- precompiled openssl +- precompiled boost with modules `filesystem`, `program_options`, `date_time` and `system` +- ios-cmake toolchain from https://github.com/vovasty/ios-cmake.git + +Building +------------------------ +Assume you have folder structure + +``` +lib + libboost_date_time.a + libboost_filesystem.a + libboost_program_options.a + libboost_system.a + libboost.a + libcrypto.a + libssl.a +include + boost + openssl +ios-cmake +i2pd +``` + + +```bash +mkdir -p build/simulator/lib build/ios/lib include/i2pd + +pushd build/simulator && \ +cmake -DIOS_PLATFORM=SIMULATOR \ + -DPATCH=/usr/bin/patch \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \ + -DWITH_STATIC=yes \ + -DWITH_BINARY=no \ + -DBoost_INCLUDE_DIR=../../include \ + -DOPENSSL_INCLUDE_DIR=../../include \ + -DBoost_LIBRARY_DIR=../../lib \ + -DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \ + -DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \ + ../../i2pd/build && \ +make -j16 VERBOSE=1 && \ +popd + +pushd build/ios +cmake -DIOS_PLATFORM=OS \ + -DPATCH=/usr/bin/patch \ + -DCMAKE_BUILD_TYPE=Release \ + -DCMAKE_TOOLCHAIN_FILE=../../ios-cmake/toolchain/iOS.cmake \ + -DWITH_STATIC=yes \ + -DWITH_BINARY=no \ + -DBoost_INCLUDE_DIR=../../include \ + -DOPENSSL_INCLUDE_DIR=../../include \ + -DBoost_LIBRARY_DIR=../../lib \ + -DOPENSSL_SSL_LIBRARY=../../lib/libssl.a \ + -DOPENSSL_CRYPTO_LIBRARY=../../lib/libcrypto.a \ + ../../i2pd/build && \ +make -j16 VERBOSE=1 && \ +popd + +libtool -static -o lib/libi2pdclient.a build/*/libi2pdclient.a +libtool -static -o lib/libi2pd.a build/*/libi2pd.a + +cp i2pd/*.h include/i2pd +``` + +Include into project +--------------------------- +1. add all libraries in `lib` folder to `Project linked frameworks`. +2. add `libc++` and `libz` libraries from system libraries to `Project linked frameworks`. +3. add path to i2p headers to your `Headers search paths` + +Alternatively you may use swift wrapper https://github.com/vovasty/SwiftyI2P.git diff --git a/docs/build_notes_unix.md b/docs/build_notes_unix.md new file mode 100644 index 0000000..547dd5b --- /dev/null +++ b/docs/build_notes_unix.md @@ -0,0 +1,147 @@ +Сборка на Unix системах +======================= + +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 # you may add VERBOSE=1 to cmdline for debugging +``` + +After successfull build i2pd could be installed with: +```bash +make install +``` +or you can just use 'make' once you have all dependencies (boost and openssl) installed + +```bash +git clone https://github.com/PurpleI2P/i2pd.git +cd i2pd +make +``` + +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-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 +``` + +MAC OS X +-------- + +Requires homebrew + +```bash +brew install libressl boost +``` + +Then build: +```bash +make HOMEBREW=1 +``` + + +FreeBSD +------- + +For 10.X use clang. You would also need boost and openssl ports. +Type gmake, it invokes Makefile.bsd, make necessary changes there is required. + +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 +``` + +CMake Options +------------- + +Available CMake options(each option has a form 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 +``` diff --git a/docs/build_notes_windows.md b/docs/build_notes_windows.md new file mode 100644 index 0000000..991ff95 --- /dev/null +++ b/docs/build_notes_windows.md @@ -0,0 +1,197 @@ +Сборка на Windows +================= + +There are two approaches available to build i2pd on Windows. The best +one depends on your needs and personal preferences. One is to use +msys2 and [unix alike infrastructure](build_notes_unix.md). Another +one is to use Visual Studio. While there might be no difference for +end users of i2pd daemon, developers, however, shall be wary of +differences in C++ name mangling between the two compilers when making +a choice to be able to link their software against libi2pd. + +If you are a stranger to C++ with no development tools installed on +your system and your only goal is to have i2pd up and running from the +most recent source, consider using msys2. Although it relies on +command line operations, it should be straight forward. + +In this guide, we will use CMake for both approaches and we will +assume that you typically have your projects in C:\dev\ as your +development location for the sake of convenience. Adjust paths +accordingly if it is not the case. Note that msys uses unix-alike +paths like /c/dev/ for C:\dev\. + + + +msys2 +----- + +### x86 (32-bit architecture) + +Get install file msys2-i686-*.exe from https://msys2.github.io. +open MSYS2 Shell (from Start menu). +Install all prerequisites and download i2pd source: + +```bash +pacman -S mingw-w64-i686-boost mingw-w64-i686-openssl mingw-w64-i686-gcc git make +mkdir -p /c/dev/i2pd +cd /c/dev/i2pd +git clone https://github.com/PurpleI2P/i2pd.git +cd i2pd +export PATH=/mingw32/bin:/usr/bin # we need compiler on PATH which is usually heavily cluttered on Windows +make +``` + + +### x64 (64-bit architecture) + +Get install file msys2-x86_64-*.exe from https://msys2.github.io. +open MSYS2 Shell (from Start menu). +Install all prerequisites and download i2pd source: + +```bash +pacman -S mingw-w64-x86_64-boost mingw-w64-x86_64-openssl mingw-w64-x86_64-gcc git make +mkdir -p /c/dev/i2pd +cd /c/dev/i2pd +git clone https://github.com/PurpleI2P/i2pd.git +cd i2pd +export PATH=/mingw64/bin:/usr/bin # we need compiler on PATH which is usually heavily cluttered on Windows +make +``` + + +### Caveats + +It is important to restrict PATH as described above. If you have +Strawberry Perl and/or Mercurial installed, it will pick up gcc & +openssl from the wrong places. + +If you do use precompiled headers to speed up compilation +(recommended), things can go wrong if compiler options have changed +for whatever reason. Just delete `stdafx.h.gch` found in your build +folder, note the file extension. + +If you are an Arch Linux user, refrain from updating system with +`pacman -Syu`. Always update runtime separately as described on the +home page, otherwise you might end up with DLLs incompatibility +problems. + + +### AES-NI + +If your processor has +[AES instruction set](https://en.wikipedia.org/wiki/AES_instruction_set), +you use `make USE_AESNI=1`. No check is done however, it +will compile, but it might crash with `Illegal instruction` if not supported. + +You should be able to run ./i2pd . If you need to start from the new +shell, consider starting *MinGW-w64 Win32 Shell* instead of *MSYS2 Shell* as +it adds`/minw32/bin` to the PATH. + +### UPnP +You can install it through the MSYS2 +and build with USE_UPNP key. + +```bash +pacman -S mingw-w64-i686-miniupnpc +make USE_UPNP=yes +``` +or +```bash +pacman -S mingw-w64-x86_64-miniupnpc +make USE_UPNP=yes +``` + +Using Visual Studio +------------------- + +Requirements for building: + +* [CMake](https://cmake.org/) (tested with 3.1.3) +* [Visual Studio Community Edition](https://www.visualstudio.com/en-us/products/visual-studio-community-vs.aspx) (tested with VS2013 Update 4) +* [Boost](http://www.boost.org/) (tested with 1.59) +* Optionally [MiniUPnP](http://miniupnp.free.fr) (tested with 1.9), we need only few client headers +* OpenSSL (tested with 1.0.1p and 1.0.2e), if building from sources (recommended), you'll need as well + * [Netwide assembler](http://www.nasm.us/) + * Strawberry Perl or ActiveState Perl, do NOT try msys2 perl, it won't work + + +### Building Boost + +Open a Command Prompt (there is no need to start Visual Studio command +prompt to build Boost) and run the following: + + cd C:\dev\boost + bootstrap + b2 toolset=msvc-12.0 --build-type=complete --with-filesystem --with-program_options --with-date_time + +If you are on 64-bit Windows and you want to build 64-bit version as well + + b2 toolset=msvc-12.0 --build-type=complete --stagedir=stage64 address-model=64 --with-filesystem --with-program_options --with-date_time + +After Boost is compiled, set the environment variable `BOOST_ROOT` to +the directory Boost was unpacked to, e.g., C:\dev\boost. + +If you are planning on building only particular variant, e.g. Debug +only and static linking, and/or you are out of space/time, you might +consider `--build-type=minimal`. Take a look at +[appveyor.yml](../appveyor.yml) for details on how test builds are done. + + +### Building OpenSSL + +Download OpenSSL, e.g. with git + + git clone https://github.com/openssl/openssl.git + cd openssl + git checkout OpenSSL_1_0_1p + +Now open Visual Studio command prompt and change directory to that with OpenSSL + + set "PATH=%PATH%;C:\Program Files (x86)\nasm" + perl Configure VC-WIN32 --prefix=c:\OpenSSL-Win32 + ms\do_nasm + nmake -f ms\ntdll.mak + nmake -f ms\ntdll.mak install + +You should have it installed into C:\OpenSSL-Win32 by now. + +Note that you might consider providing `-DOPENSSL_ROOT_DIR` to CMake +and/or create a symlink (with mklink /J) to C:\OpenSSL if you plan on +maintaining multiple versions, e.g. 64 bit and/or +static/shared. Consult `C:\Program Files +(x86)\CMake\share\cmake-3.3\Modules\FindOpenSSL.cmake` for details. + + +### Get miniupnpc + +If you are behind a UPnP enabled router and don't feel like manually +configuring port forwarding, you should consider using +[MiniUPnP](http://miniupnp.free.fr) client. I2pd can be built capable +of using miniupnpc shared library (DLL) to open up necessary +port. You'd want to have include headers around to build i2pd with +support for this. Unpack client source code in a sibling folder, +e.g. C:\dev\miniupnpc . You may want to remove version number from +folder name included in downloaded archive. + +### Creating Visual Studio project + +Start CMake GUI, navigate to i2pd directory, choose building directory, e.g. ./out, and configure options. + +Alternatively, if you feel adventurous, try that from the command line + +``` +cd +mkdir out +cd out +cmake ..\build -G "Visual Studio 12 2013" -DWITH_UPNP=ON -DWITH_PCH=ON -DCMAKE_INSTALL_PREFIX:PATH=C:\dev\Debug_Win32_stage +``` + +WITH_UPNP will stay off, if necessary files are not found. + + +### Building i2pd + +You can open generated solution/project with Visual Studio and build +from there, alternatively you can use `cmake --build . --config Release --target install` or +[MSBuild tool](https://msdn.microsoft.com/en-us/library/dd293626.aspx) +`msbuild i2pd.sln /p:Configuration=Release`. diff --git a/docs/build_requirements.md b/docs/build_requirements.md new file mode 100644 index 0000000..1485ad2 --- /dev/null +++ b/docs/build_requirements.md @@ -0,0 +1,15 @@ +Требования для сборки из исходников +=================================== + +Linux/FreeBSD/OSX +----------------- + +GCC 4.7 or newer, Boost 1.49 or newer, openssl, zlib. Clang can be used instead of GCC. + +Windows +------- + +VS2013 (known to work with 12.0.21005.1 or newer), Boost 1.46 or newer, +crypto++ 5.62. See Win32/README-Build.txt for instructions on how to build i2pd +and its dependencies. + diff --git a/docs/conf.py b/docs/conf.py new file mode 100644 index 0000000..a39b138 --- /dev/null +++ b/docs/conf.py @@ -0,0 +1,300 @@ +# -*- coding: utf-8 -*- +# +# i2pd documentation build configuration file, created by +# sphinx-quickstart on Tue Jan 12 06:26:12 2016. +# +# This file is execfile()d with the current directory set to its +# containing dir. +# +# Note that not all possible configuration values are present in this +# autogenerated file. +# +# All configuration values have a default; values that are commented out +# serve to show the default. + +import sys +import os +import shlex +from recommonmark.parser import CommonMarkParser + +source_parsers = { + '.md': CommonMarkParser, +} + +# Check if on RTD +on_rtd = os.environ.get('READTHEDOCS', None) == 'True' + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +#sys.path.insert(0, os.path.abspath('.')) + +# -- General configuration ------------------------------------------------ + +# If your documentation needs a minimal Sphinx version, state it here. +#needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [] + +# Add any paths that contain templates here, relative to this directory. +#templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# source_suffix = ['.rst', '.md'] +source_suffix = ['.rst', '.md'] + +# The encoding of source files. +#source_encoding = 'utf-8-sig' + +# The master toctree document. +master_doc = 'index' + +# General information about the project. +project = u'i2pd' +copyright = u'2016, PurpleI2P team' +author = u'PurpleI2P team' + +# The version info for the project you're documenting, acts as replacement for +# |version| and |release|, also used in various other places throughout the +# built documents. +# +# The short X.Y version. +version = u'2.2.0' +# The full version, including alpha/beta/rc tags. +release = u'2.2.0' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# There are two options for replacing |today|: either, you set today to some +# non-false value, then it is used: +#today = '' +# Else, today_fmt is used as the format for a strftime call. +#today_fmt = '%B %d, %Y' + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +exclude_patterns = ['_build'] + +# The reST default role (used for this markup: `text`) to use for all +# documents. +#default_role = None + +# If true, '()' will be appended to :func: etc. cross-reference text. +#add_function_parentheses = True + +# If true, the current module name will be prepended to all description +# unit titles (such as .. function::). +#add_module_names = True + +# If true, sectionauthor and moduleauthor directives will be shown in the +# output. They are ignored by default. +#show_authors = False + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + +# A list of ignored prefixes for module index sorting. +#modindex_common_prefix = [] + +# If true, keep warnings as "system message" paragraphs in the built documents. +#keep_warnings = False + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = False + + +# -- Options for HTML output ---------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +html_theme = 'default' + +if not on_rtd: + try: + import sphinx_rtd_theme + html_theme = 'sphinx_rtd_theme' + html_theme_path = [sphinx_rtd_theme.get_html_theme_path()] + except ImportError: + pass + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +#html_theme_options = {} + +# Add any paths that contain custom themes here, relative to this directory. +#html_theme_path = [] + +# The name for this set of Sphinx documents. If None, it defaults to +# " v documentation". +#html_title = None + +# A shorter title for the navigation bar. Default is the same as html_title. +#html_short_title = None + +# The name of an image file (relative to this directory) to place at the top +# of the sidebar. +#html_logo = None + +# The name of an image file (within the static path) to use as favicon of the +# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32 +# pixels large. +#html_favicon = None + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +#html_static_path = ['_static'] + +# Add any extra paths that contain custom files (such as robots.txt or +# .htaccess) here, relative to this directory. These files are copied +# directly to the root of the documentation. +#html_extra_path = [] + +# If not '', a 'Last updated on:' timestamp is inserted at every page bottom, +# using the given strftime format. +#html_last_updated_fmt = '%b %d, %Y' + +# If true, SmartyPants will be used to convert quotes and dashes to +# typographically correct entities. +#html_use_smartypants = True + +# Custom sidebar templates, maps document names to template names. +#html_sidebars = {} + +# Additional templates that should be rendered to pages, maps page names to +# template names. +#html_additional_pages = {} + +# If false, no module index is generated. +#html_domain_indices = True + +# If false, no index is generated. +#html_use_index = True + +# If true, the index is split into individual pages for each letter. +#html_split_index = False + +# If true, links to the reST sources are added to the pages. +#html_show_sourcelink = True + +# If true, "Created using Sphinx" is shown in the HTML footer. Default is True. +#html_show_sphinx = True + +# If true, "(C) Copyright ..." is shown in the HTML footer. Default is True. +#html_show_copyright = True + +# If true, an OpenSearch description file will be output, and all pages will +# contain a tag referring to it. The value of this option must be the +# base URL from which the finished HTML is served. +#html_use_opensearch = '' + +# This is the file name suffix for HTML files (e.g. ".xhtml"). +#html_file_suffix = None + +# Language to be used for generating the HTML full-text search index. +# Sphinx supports the following languages: +# 'da', 'de', 'en', 'es', 'fi', 'fr', 'hu', 'it', 'ja' +# 'nl', 'no', 'pt', 'ro', 'ru', 'sv', 'tr' +#html_search_language = 'en' + +# A dictionary with options for the search language support, empty by default. +# Now only 'ja' uses this config value +#html_search_options = {'type': 'default'} + +# The name of a javascript file (relative to the configuration directory) that +# implements a search results scorer. If empty, the default will be used. +#html_search_scorer = 'scorer.js' + +# Output file base name for HTML help builder. +htmlhelp_basename = 'i2pddoc' + +# -- Options for LaTeX output --------------------------------------------- + +latex_elements = { +# The paper size ('letterpaper' or 'a4paper'). +#'papersize': 'letterpaper', + +# The font size ('10pt', '11pt' or '12pt'). +#'pointsize': '10pt', + +# Additional stuff for the LaTeX preamble. +#'preamble': '', + +# Latex figure (float) alignment +#'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'i2pd.tex', u'i2pd Documentation', + u'PurpleI2P team', 'manual'), +] + +# The name of an image file (relative to this directory) to place at the top of +# the title page. +#latex_logo = None + +# For "manual" documents, if this is true, then toplevel headings are parts, +# not chapters. +#latex_use_parts = False + +# If true, show page references after internal links. +#latex_show_pagerefs = False + +# If true, show URL addresses after external links. +#latex_show_urls = False + +# Documents to append as an appendix to all manuals. +#latex_appendices = [] + +# If false, no module index is generated. +#latex_domain_indices = True + + +# -- Options for manual page output --------------------------------------- + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'i2pd', u'i2pd Documentation', + [author], 1) +] + +# If true, show URL addresses after external links. +#man_show_urls = False + + +# -- Options for Texinfo output ------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'i2pd', u'i2pd Documentation', + author, 'i2pd', 'One line description of project.', + 'Miscellaneous'), +] + +# Documents to append as an appendix to all manuals. +#texinfo_appendices = [] + +# If false, no module index is generated. +#texinfo_domain_indices = True + +# How to display URL addresses: 'footnote', 'no', or 'inline'. +#texinfo_show_urls = 'footnote' + +# If true, do not generate a @detailmenu in the "Top" node's menu. +#texinfo_no_detailmenu = False diff --git a/docs/config_opts_after_2.3.0.md b/docs/config_opts_after_2.3.0.md new file mode 100644 index 0000000..1b2adcd --- /dev/null +++ b/docs/config_opts_after_2.3.0.md @@ -0,0 +1,43 @@ +Изменения обработки параметров в релизах > 2.3.0 +------------------------------------------------ + +Система параметров отличается от того, что было ранее и достаточно сильно: + +* изменения имён и стиля параметров + +Все параметры теперь в виде --help (gnu-style), у некоторых есть шорткаты в виде -h (unix-style). +Это касается всех систем, в том числе винды. + +--daemon=1 и подобное -> просто --daemon, без параметра. Нет опции - false, есть - true +--notransit=1 -> --notransit, то же что и выше: есть опция - false, нет - true +--v6 -> --ipv6 (первое было похоже на версию какого-то своего протокола, типа socksproxy --v5) +--tunnelscfg -> --tunconf (имя параметра было слишком длинным, cfg переделан на conf - единообразно с --conf) +--sockskeys -> разделён на два, для socks и httpproxy по-отдельности + +* поддержка секций в основном конфиге + +Выглядит это так: + + # основные опции + pidfile = /var/run/i2pd.pid + # + # настройки конкретного модуля + [httproxy] + address = 1.2.3.4 + port = 4446 + keys = httproxy-keys.dat + # и так далее + [sam] + enabled = no + addresss = 127.0.0.2 + # ^^ переопределяется только адрес, остальное берётся из дефолта + +Точно так же сейчас работает конфиг туннелей: секция до точки - имя, после - параметр + +* поддержка выключения отдельных сервисов "на корню" см sam.enabled и подобное + +Это позволило задать дефолт для номера порта и не писать его руками для включения. + +* добавлен --help (см #110) + +* присутствует некая валидация параметров, --port=abcd - не прокатит, --port=100500 - тоже diff --git a/docs/configuration.md b/docs/configuration.md new file mode 100644 index 0000000..4bd4511 --- /dev/null +++ b/docs/configuration.md @@ -0,0 +1,148 @@ +Настройка i2pd +============== + +Command line options +-------------------- + +Options specified on the command line take precedence over those in the config file. +If you are upgrading your very old router (< 2.3.0) see also [this](config_opts_after_2.3.0.md) page. + +* --help - Show builtin help message (default value of option will be shown in braces) +* --conf= - Config file (default: ~/.i2pd/i2pd.conf or /var/lib/i2pd/i2pd.conf) + This parameter will be silently ignored if the specified config file does not exist. +* --tunconf= - Tunnels config file (default: ~/.i2pd/tunnels.conf or /var/lib/i2pd/tunnels.conf) +* --pidfile= - Where to write pidfile (dont write by default) +* --log= - Logs destination: stdout, file (stdout if not set, file - otherwise, for compatibility) +* --logfile= - Path to logfile (default - autodetect) +* --loglevel= - Log messages above this level (debug, info, warn, error) +* --datadir= - Path to storage of i2pd data (RI, keys, peer profiles, ...) +* --host= - Router external IP for incoming connections +* --port= - Port to listen for incoming connections (default: auto) +* --daemon - Router will go to background after start +* --service - Router will use system folders like '/var/lib/i2pd' +* --ipv6 - Enable communication through ipv6. false by default +* --notransit - Router will not accept transit tunnels at startup. false by default +* --floodfill - Router will be floodfill. false by default +* --bandwidth= - Bandwidth limit: integer in KBps or letters: L (32), O (256), P (2048), X (>9000) +* --family= - Name of a family, router belongs to + +Windows-specific options: + +* --svcctl= - Windows service management (--svcctl="install" or --svcctl="remove") +* --insomnia - Prevent system from sleeping +* --close= - Action on close: minimize, exit, ask + +All options below still possible in cmdline, but better write it in config file: + +* --http.address= - The address to listen on (HTTP server) +* --http.port= - The port to listen on (HTTP server) +* --http.auth - Enable basic HTTP auth for webconsole +* --http.user= - Username for basic auth (default: i2pd) +* --http.pass= - Password for basic auth (default: random, see logs) + +* --httpproxy.address= - The address to listen on (HTTP Proxy) +* --httpproxy.port= - The port to listen on (HTTP Proxy) 4444 by default +* --httpproxy.keys= - optional keys file for proxy local destination (both HTTP and SOCKS) +* --httpproxy.enabled= - If HTTP proxy is enabled. true by default + +* --socksproxy.address= - The address to listen on (SOCKS Proxy) +* --socksproxy.port= - The port to listen on (SOCKS Proxy). 4447 by default +* --socksproxy.keys= - optional keys file for proxy local destination (both HTTP and SOCKS) +* --socksproxy.enabled= - If SOCKS proxy is enabled. true by default +* --socksproxy.outproxy= - Address of outproxy. requests outside i2p will go there +* --socksproxy.outproxyport= - Outproxy remote port + +* --sam.address= - The address to listen on (SAM bridge) +* --sam.port= - Port of SAM bridge. Usually 7656. SAM is off if not specified +* --sam.enabled= - If SAM is enabled. false by default + +* --bob.address= - The address to listen on (BOB command channel) +* --bob.port= - Port of BOB command channel. Usually 2827. BOB is off if not specified +* --bob.enabled= - If BOB is enabled. false by default + +* --i2cp.address= - The address to listen on or an abstract address for Android LocalSocket +* --i2cp.port= - Port of I2CP server. Usually 7654. Ignored for Andorid +* --i2cp.enabled= - If I2CP is enabled. false by default. Other services don't require I2CP + +* --i2pcontrol.address= - The address to listen on (I2P control service) +* --i2pcontrol.port= - Port of I2P control service. Usually 7650. I2PControl is off if not specified +* --i2pcontrol.enabled= - If I2P control is enabled. false by default + +* --upnp.enabled= - Enable or disable UPnP, false by default for CLI and true for GUI (Windows, Android) +* --upnp.name= - Name i2pd appears in UPnP forwardings list. I2Pd by default + +* --precomputation.elgamal= - Use ElGamal precomputated tables. false for x64 and true for other platforms by default +* --reseed.verify= - Request SU3 signature verification +* --reseed.file= - Full path to SU3 file to reseed from +* --reseed.urls= - Reseed URLs, separated by comma +* --addressbook.defaulturl= - AddressBook subscription URL for initial setup +* --addressbook.subscriptions= - AddressBook subscriptions URLs, separated by comma + +* --limits.transittunnels= - Override maximum number of transit tunnels. 2500 by default + +Config files +------------ + +INI-like, syntax is the following : = . +Comments are "#", not ";" as you may expect. See [boost ticket](https://svn.boost.org/trac/boost/ticket/808) +All command-line parameters are allowed as keys, but note for those which contains dot (.). + +For example: + +i2pd.conf: + + # comment + log = true + ipv6 = true + # settings for specific module + [httpproxy] + port = 4444 + # ^^ this will be --httproxy.port= in cmdline + # another comment + [sam] + enabled = true + +See also commented config with examples of all options in ``docs/i2pd.conf``. + +tunnels.conf: + + # outgoing tunnel sample, to remote service + # mandatory parameters: + # * type -- always "client" + # * port -- local port to listen to + # * destination -- i2p hostname + # optional parameters (may be omitted) + # * keys -- our identity, if unset, will be generated on every startup, + # if set and file missing, keys will be generated and placed to this file + # * address -- local interface to bind + # * signaturetype -- signature type for new destination. 0 (DSA/SHA1), 1 (EcDSA/SHA256) or 7 (EdDSA/SHA512) + [IRC] + type = client + address = 127.0.0.1 + port = 6668 + destination = irc.postman.i2p + keys = irc-keys.dat + # + # incoming tunnel sample, for local service + # mandatory parameters: + # * type -- "server" or "http" + # * host -- ip address of our service + # * port -- port of our service + # * keys -- file with LeaseSet of address in i2p + # optional parameters (may be omitted) + # * inport -- optional, i2p service port, if unset - the same as 'port' + # * accesslist -- comma-separated list of i2p addresses, allowed to connect + # every address is b32 without '.b32.i2p' part + [LOCALSITE] + type = http + host = 127.0.0.1 + port = 80 + keys = site-keys.dat + # + [IRC-SERVER] + type = server + host = 127.0.0.1 + port = 6667 + keys = irc.dat + +Also see [this page](https://github.com/PurpleI2P/i2pd/wiki/tunnels.cfg) for more tunnel examples. diff --git a/docs/family.md b/docs/family.md new file mode 100644 index 0000000..b303b22 --- /dev/null +++ b/docs/family.md @@ -0,0 +1,36 @@ +Настройка Family +================ + +Your might want to specify a family, your router belongs to. +There are two possibilities: create new family or joing to existing. + +New family +----------- + +You must create family self-signed certificate and key. +The only key type supposted is prime256v1. +Use the following list of commands: + + openssl ecparam -name prime256v1 -genkey -out .key + openssl req -new -key .key -out .csr + touch v3.ext + openssl x509 -req -days 3650 -in .csr -signkey .key -out .crt -extfile v3.ext + +Specify .family.i2p.net for CN (Common Name) when requested. + +Once you are done with it place .key and .crt to /family folder (for exmple ~/.i2pd/family). +You should provide these two files to other members joining your family. +If you want to register you family and let I2P network recorgnize it, create pull request for you .crt file into contrib/certificate/family. +It will appear in i2pd and I2P next releases packages. Dont place .key file, it must be shared between you family members only. + +How to join existing family +--------------------------- + +Once you and that family agree to do it, they must give you .key and .crt file and you must place in /certificates/family/ folder. + +Publish your family +------------------- + +Run i2pd with parameter 'family=', make sure you have .key and .crt in your 'family' folder. +If everything is set properly, you router.info will contain two new fields: 'family' and 'family.sig'. +Otherwise your router will complain on startup with log messages starting with "Family:" prefix and severity 'warn' or 'error'. diff --git a/docs/i2pd.conf b/docs/i2pd.conf new file mode 100644 index 0000000..9ade366 --- /dev/null +++ b/docs/i2pd.conf @@ -0,0 +1,164 @@ +## Configuration file for a typical i2pd user +## See https://i2pd.readthedocs.org/en/latest/configuration.html +## for more options you can use in this file. + +## Lines that begin with "## " try to explain what's going on. Lines +## that begin with just "#" are disabled commands: you can enable them +## by removing the "#" symbol. + +## Tunnels config file +## Default: ~/.i2pd/tunnels.conf or /var/lib/i2pd/tunnels.conf +# tunconf = /var/lib/i2pd/tunnels.conf + +## Where to write pidfile (don't write by default) +# pidfile = /var/run/i2pd.pid + +## Logging configuration section +## By default logs go to stdout with level 'info' and higher +## +## Logs destination (valid values: stdout, file, syslog) +## * stdout - print log entries to stdout +## * file - log entries to a file +## * syslog - use syslog, see man 3 syslog +# log = file +## Path to logfile (default - autodetect) +# logfile = /var/log/i2pd.log +## Log messages above this level (debug, *info, warn, error) +# loglevel = info + +## Path to storage of i2pd data (RI, keys, peer profiles, ...) +## Default: ~/.i2pd or /var/lib/i2pd +# datadir = /var/lib/i2pd + +## Daemon mode. Router will go to background after start +# daemon = true +## Run as a service. Router will use system folders like ‘/var/lib/i2pd’ +# service = true + +## Specify a family, router belongs to (default - none) +# family = + +## External IP address to listen for connections +## By default i2pd sets IP automatically +# host = 1.2.3.4 + +## Port to listen for connections +## By default i2pd picks random port. You MUST pick a random number too, +## don't just uncomment this +# port = 4567 + +## Enable communication through ipv4 +ipv4 = true +## Enable communication through ipv6 +ipv6 = false + +## Network interface to bind to +# ifname = + +## Enable NTCP transport (default = true) +# ntcp = true +## Enable SSU transport (default = true) +# ssu = true + +## Should we assume we are behind NAT? (false only in MeshNet) +# nat = true + +## Bandwidth configuration +## L limit bandwidth to 32Kbs/sec, O - to 256Kbs/sec, P - to 2048Kbs/sec, +## X - unlimited +## Default is X for floodfill, L for regular node +# bandwidth = L + +## Router will not accept transit tunnels at startup +# notransit = true + +## Router will be floodfill +# floodfill = true + +[limits] +## Maximum active transit sessions (default:2500) +# transittunnels = 2500 + +[precomputation] +## Enable or disable elgamal precomputation table +## By default, enabled on i386 hosts +# elgamal = true + +[upnp] +## Enable or disable UPnP: automatic port forwarding (enabled by default in WINDOWS, ANDROID) +# enabled = false + +## Name i2pd appears in UPnP forwardings list (default = I2Pd) +# name = I2Pd + +[reseed] +## URLs to request reseed data from, separated by comma +## Default: "mainline" I2P Network reseeds +# urls = https://reseed.i2p-projekt.de/,https://i2p.mooo.com/netDb/,https://netdb.i2p2.no/ +## Path to reseed data file (.su3) for manual reseeding +# file = /path/to/i2pseeds.su3 + +[addressbook] +## AddressBook subscription URL for initial setup +## Default: inr.i2p at "mainline" I2P Network +# defaulturl = http://joajgazyztfssty4w2on5oaqksz6tqoxbduy553y34mf4byv6gpq.b32.i2p/export/alive-hosts.txt +## Optional subscriptions URLs, separated by comma +# subscriptions = http://inr.i2p/export/alive-hosts.txt,http://stats.i2p/cgi-bin/newhosts.txt,http://rus.i2p/hosts.txt + +[http] +## Uncomment and set to 'false' to disable Web Console +# enabled = true +## Address and port service will listen on +address = 127.0.0.1 +port = 7070 + +[httpproxy] +## Uncomment and set to 'false' to disable HTTP Proxy +# enabled = true +## Address and port service will listen on +address = 127.0.0.1 +port = 4444 +## Optional keys file for proxy local destination +# keys = http-proxy-keys.dat + +[socksproxy] +## Uncomment and set to 'false' to disable SOCKS Proxy +# enabled = true +## Address and port service will listen on +address = 127.0.0.1 +port = 4447 +## Optional keys file for proxy local destination +# keys = socks-proxy-keys.dat + +## Socks outproxy. Example below is set to use Tor for all connections except i2p +## Address and port of outproxy +# outproxy = 127.0.0.1 +# outproxyport = 9050 + +[sam] +## Uncomment and set to 'true' to enable SAM Bridge +# enabled = false +## Address and port service will listen on +# address = 127.0.0.1 +# port = 7656 + +[bob] +## Uncomment and set to 'true' to enable BOB command channel +# enabled = false +## Address and port service will listen on +# address = 127.0.0.1 +# port = 2827 + +[i2cp] +## Uncomment and set to 'true' to enable I2CP protocol +# enabled = false +## Address and port service will listen on +# address = 127.0.0.1 +# port = 7654 + +[i2pcontrol] +## Uncomment and set to 'true' to enable I2PControl protocol +# enabled = false +## Address and port service will listen on +# address = 127.0.0.1 +# port = 7650 diff --git a/docs/index.rst b/docs/index.rst new file mode 100644 index 0000000..e6fb8e1 --- /dev/null +++ b/docs/index.rst @@ -0,0 +1,42 @@ +i2pd +==== + +i2pd (I2P Daemon) это полнофункциональная реализация I2P клиента на языке C++. + +* `Сайт `_ +* `GitHub `_ +* `Вики `_ +* `Багтрекер `_ +* `Twitter `_ + +Установка +--------- + +Самый простой способ установить i2pd это использование +`бинарных файлов `_. +Инструкции по сборке из исходников для вашей ОС смотрите +в документации. + +Использование +------------- + +Смотрите в документацию и +`документированный конфигурационный файл `_. + +Содержание: +----------- + +.. toctree:: + :maxdepth: 2 + + build_requirements + build_notes_unix + build_notes_windows + build_notes_cross + build_notes_android + build_notes_ios + configuration + family + usage + + diff --git a/docs/itoopieImage.png b/docs/itoopieImage.png new file mode 100644 index 0000000..a5dc7b6 Binary files /dev/null and b/docs/itoopieImage.png differ diff --git a/docs/subscriptions.txt b/docs/subscriptions.txt new file mode 100644 index 0000000..8f4afb0 --- /dev/null +++ b/docs/subscriptions.txt @@ -0,0 +1,3 @@ +http://inr.i2p/export/alive-hosts.txt +http://stats.i2p/cgi-bin/newhosts.txt +http://i2p-projekt.i2p/hosts.txt diff --git a/docs/tunnels.conf b/docs/tunnels.conf new file mode 100644 index 0000000..fa92a56 --- /dev/null +++ b/docs/tunnels.conf @@ -0,0 +1,33 @@ +[IRC] +type = client +address = 127.0.0.1 +port = 6668 +destination = irc.postman.i2p +destinationport = 6667 +keys = irc-keys.dat + +#[SMTP] +#type = client +#address = 127.0.0.1 +#port = 7659 +#destination = smtp.postman.i2p +#destinationport = 25 +#keys = smtp-keys.dat + +#[POP3] +#type = client +#address = 127.0.0.1 +#port = 7660 +#destination = pop.postman.i2p +#destinationport = 110 +#keys = pop3-keys.dat + +#[MTN] +#type = client +#address = 127.0.0.1 +#port = 8998 +#destination = mtn.i2p-projekt.i2p +#destinationport = 4691 +#keys = mtn-keys.dat + +# see more examples in /usr/share/doc/i2pd/configuration.md.gz diff --git a/docs/usage.md b/docs/usage.md new file mode 100644 index 0000000..193fca5 --- /dev/null +++ b/docs/usage.md @@ -0,0 +1,131 @@ +Примеры использования +===================== + + +i2pd может быть использован для: + +* [анонимных веб-сайтов](#browsing-and-hosting-websites) +* [анонимных чатов](#using-and-hosting-chat-servers) +* [анонимного файлообмена](#file-sharing) + +и для много чего еще. + +## Посещение и создание веб-сайтов + +### Посещение анонимных веб-сайтов + +Чтобы посещать анонимные веб-сайты внутри Невидимого Интернета, настрой свой веб-браузер на использование HTTP прокси 127.0.0.1:4444 (включено по-умолчанию в i2pd). + +В Firefox: Настройки -> Дополнительные -> Сеть -> Соединение -> Настроить -> выберите Ручная настройка сервиса прокси, введите HTTP прокси 127.0.0.1, Порт 4444. + +В Chromium: запустите chromium с ключом + + chromium --proxy-server="http://127.0.0.1:4444" + +Если вы хотите остаться анонимным при посещении веб-сайтов, вам необходимо так же настроить свой веб-браузер для защиты от деанонимизации. Как именно это делается можно найти в интернете, например [здесь](https://habrahabr.ru/post/203680/). + +Большой список сайтов Невидимого Интернета на сайте [identiguy.i2p](http://identiguy.i2p). + +### Создание анонимных веб-сайтов + + +Если вы хотите запустить свой сайт в Невидимом Интернете, следуйте данной инструкции: + +1) Запустите веб-сервер и узнайте, какой хост:порт он использует (например, 127.0.0.1:8080). + +2) Настройте i2pd для создания серверного HTTP туннеля. В файл ~/.i2pd/tunnels.conf добавьте: + + [anon-website] + type = http + host = 127.0.0.1 + port = 8080 + keys = anon-website.dat + +3) Перезапустите i2pd. + +4) Найдите b32 destination вашего вебсайта. + +Зайдите в веб-консоль -> [страница I2P tunnels](http://127.0.0.1:7070/?page=i2p_tunnels). Ищите Sever tunnels и увидете адрес \<длинная строка\>.b32.i2p рядом с anon-website. + +Теперь веб-сайт доступен в Невидимом Интернете по этому адресу. + +5) (Опционально) Зарегистрируйте короткий и запоминающийся .i2p домен на [inr.i2p](http://inr.i2p). + + +## Использование и создание чат-серверов + +### Запуск анонимного IRC сервера + +1) Запустите свой IRC сервер и узнайте, какой хост:порт он использует (например, 127.0.0.1:5555). + +Для малых приватных IRC серверов вы можете использовать [miniircd](https://github.com/jrosdahl/miniircd), для больших публичных [UnreadIRCd](https://www.unrealircd.org/). + + +2) Настройте i2pd для создания серверного IRC туннеля. + +В самом простом случае, если ваш сервер не поддерживает WebIRC, добавьте следующее в ~/.i2pd/tunnels.conf: + + [anon-chatserver] + type = irc + host = 127.0.0.1 + port = 5555 + keys = chatserver-key.dat + +И этого достаточно. + +В случае, если ваш IRC сервер поддерживает WebIRC, например, это UnrealIRCd, добавьте следущее в конфиг UnrealIRCd: + + webirc { + mask 127.0.0.1; + password your_password; + }; + +Также измените строку: + + modes-on-connect "+ixw"; + +на + + modes-on-connect "+iw"; + +И добавьте это в ~/.i2pd/tunnels.conf: + + [anon-chatserver] + type = irc + host = 127.0.0.1 + port = 5555 + keys = chatserver-key.dat + webircpassword = your_password + +3) Перезапустите i2pd. + +4) Найдите b32 destination вашего анонимного IRC сервера. + +Зайдите в веб-консоль -> [страница I2P tunnels](http://127.0.0.1:7070/?page=i2p_tunnels). Ищите Sever tunnels и увидете адрес \<длинная строка\>.b32.i2p рядом с anon-chatserver. + +Пользователи будут использовать этот адрес для анонимного подключения к вашему серверу. + +### Connect to anonymous IRC server + +Чтобы подключиться к IRC серверу по адресу *walker.i2p*, добавьте следущее в ~/.i2pd/tunnels.conf: + + [IRC2] + type = client + address = 127.0.0.1 + port = 6669 + destination = walker.i2p + #keys = walker-keys.dat + +Перезапустите i2pd, после чего подключайтесь к irc://127.0.0.1:6669 в вашем IRC клиенте. + +## Файлообмен + +Вы можете качать и раздавать торренты клиентом [Transmission-I2P](https://github.com/l-n-s/transmission-i2p). + +Другие торрент-клиенты [Robert](http://en.wikipedia.org/wiki/Robert_%28P2P_Software%29) и [Vuze](https://en.wikipedia.org/wiki/Vuze). + +Robert использует протокол BOB, i2pd должен быть запущен с настройкой --bob.enabled=true. + +Vuze использует протокол I2CP, i2pd должен быть запущен с настройкой --i2cp.enabled=true. + +Используйте [трекер postman](http://tracker2.postman.i2p).