- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew update ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew install libressl miniupnpc ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then brew outdated boost || brew upgrade boost ; fi
script:
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$BUILD_TYPE" == "cmake" ]]; then cd build && cmake -DCMAKE_BUILD_TYPE=Release -DWITH_UPNP=${UPNP} && make ; fi
- if [[ "$TRAVIS_OS_NAME" == "linux" && "$BUILD_TYPE" == "make" ]]; then make USE_UPNP=${MAKE_UPNP} ; fi
- if [[ "$TRAVIS_OS_NAME" == "osx" ]]; then make HOMEBREW=1 USE_UPNP=${MAKE_UPNP} ; fi
* Alpine, ArchLinux, openSUSE, Gentoo, Debian, Ubuntu, etc.
* Windows - [![Build on Windows](https://github.com/PurpleI2P/i2pd/actions/workflows/build-windows.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build-windows.yml)
* Mac OS X - [![Build on OSX](https://github.com/PurpleI2P/i2pd/actions/workflows/build-osx.yml/badge.svg)](https://github.com/PurpleI2P/i2pd/actions/workflows/build-osx.yml)
All the ports ( -p HOSTPORT:DOCKERPORT ) is optional. However the command above enable all features (Webconsole, HTTP Proxy, BOB, SAM, i2cp, etc)
The volume ( -v HOSTDIR:DOCKERDIR ) is also optional, but if you don't use it, your config, routerid and private keys will die along with the container.
**Options**
Options are set via docker environment variables. This can be set at run with -e parameters.
* **ENABLE_IPV6** - Enable IPv6 support. Any value can be used - it triggers as long as it's not empty.
* **LOGLEVEL** - Set the loglevel.
* **ENABLE_AUTH** - Enable auth for the webconsole. Username and password needs to be set manually in i2pd.conf cause security reasons.
**Logging**
Logging happens to STDOUT as the best practise with docker containers, since infrastructure systems like kubernetes with ELK integration can automatically forward the log to say, kibana or greylog without manual setup. :)
{"<b>Note:</b> result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.",
"<b>Примечание:</b> полученная строка может быть использована только для регистрации доменов второго уровня. Для регистрации поддоменов используйте i2pd-tools."},
{"<b>Note:</b> result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.","<b>Примечание:</b> полученная строка может быть использована только для регистрации доменов второго уровня (example.i2p). Для регистрации поддоменов используйте i2pd-tools."},
{"Address","Адрес"},
{"Type","Тип"},
{"EncType","ТипШифр"},
{"Inbound tunnels","Входящие туннели"},
{"ms","мс"},
{"Outbound tunnels","Исходящие туннели"},
{"ms","мс"},// milliseconds
{"Tags","Теги"},
{"Incoming","Входящие"},
{"Outgoing","Исходящие"},
@ -152,14 +106,11 @@ namespace russian // language
{"Incoming Tags","Входящие Теги"},
{"Tags sessions","Сессии Тегов"},
{"Status","Статус"},
// ShowLocalDestination
{"Local Destination","Локальное назначение"},
{"Streams","Стримы"},
{"Close stream","Закрыть стрим"},
// ShowI2CPLocalDestination
{"I2CP session not found","I2CP сессия не найдена"},
{"I2CP is not enabled","I2CP не включен"},
// ShowLeasesSets
{"Invalid","Некорректный"},
{"Store type","Тип хранилища"},
{"Expires","Истекает"},
@ -168,51 +119,37 @@ namespace russian // language
{"<b>Note:</b> any action done here are not persistent and not changes your config files.",
"<b>Примечание:</b> любое действие произведенное здесь не является постоянным и не изменяет ваши конфигурационные файлы."},
{"<b>Note:</b> any action done here are not persistent and not changes your config files.","<b>Примечание:</b> любое действие произведенное здесь не является постоянным и не изменяет ваши конфигурационные файлы."},
{"cannot resolve upstream proxy","не удается определить вышестоящий прокси"},
{"hostname too long","имя хоста слишком длинное"},
{"cannot connect to upstream socks proxy","не удается подключиться к вышестоящему SOCKS прокси"},
{"Cannot negotiate with socks proxy","Не удается договориться с вышестоящим SOCKS прокси"},
{"CONNECT error","Ошибка CONNECT запроса"},
{"Failed to Connect","Не удалось подключиться"},
{"socks proxy error","ошибка SOCKS прокси"},
{"failed to send request to upstream","не удалось отправить запрос вышестоящему прокси"},
{"No Reply From socks proxy","Нет ответа от SOCKS прокси сервера"},
{"cannot connect","не удалось подключиться"},
{"http out proxy not implemented","поддержка внешнего HTTP прокси сервера не реализована"},
{"cannot connect to upstream http proxy","не удалось подключиться к вышестоящему HTTP прокси серверу"},
{"Host is down","Узел недоступен"},
{"Can't create connection to requested host, it may be down. Please try again later.","Не удалось установить соединение к запрошенному узлу, возможно он не в сети. Попробуйте повторить запрос позже."},
{"<b>Note:</b> result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.",
"<b>Примітка:</b> отриманий рядок може бути використаний тільки для реєстрації доменів другого рівня. Для реєстрації піддоменів використовуйте i2pd-tools."},
{"<b>Note:</b> result string can be used only for registering 2LD domains (example.i2p). For registering subdomains please use i2pd-tools.","<b>Примітка:</b> отриманий рядок може бути використаний тільки для реєстрації доменів другого рівня (example.i2p). Для реєстрації піддоменів використовуйте i2pd-tools."},
{"Address","Адреса"},
{"Type","Тип"},
{"EncType","ТипШифр"},
{"Inbound tunnels","Вхідні тунелі"},
{"ms","мс"},
{"Outbound tunnels","Вихідні тунелі"},
{"ms","мс"},// milliseconds
{"Tags","Теги"},
{"Incoming","Вхідні"},
{"Outgoing","Вихідні"},
{"Destination","Призначення"},
{"Amount","Кількість"},
{"Incoming Tags","Вхідні Теги"},
{"Tags sessions","Сесії тегів"},
{"Tags sessions","Сесії Тегів"},
{"Status","Статус"},
// ShowLocalDestination
{"Local Destination","Локальні Призначення"},
{"Streams","Потоки"},
{"Close stream","Закрити потік"},
// ShowI2CPLocalDestination
{"I2CP session not found","I2CP сесія не знайдена"},
{"I2CP is not enabled","I2CP не увікнуто"},
// ShowLeasesSets
{"Invalid","Некоректний"},
{"Store type","Тип сховища"},
{"Expires","Завершується"},
@ -167,51 +119,36 @@ namespace ukrainian // language
{"<b>Note:</b> any action done here are not persistent and not changes your config files.",
"<b>Примітка:</b> будь-яка зроблена тут дія не є постійною та не змінює ваші конфігураційні файли."},
{"<b>Note:</b> any action done here are not persistent and not changes your config files.","<b>Примітка:</b> будь-яка зроблена тут дія не є постійною та не змінює ваші конфігураційні файли."},
{"no transit tunnels currently built","немає побудованих транзитних тунелів"},
// ShowSAMSessions/ShowSAMSession
{"SAM disabled","SAM вимкнуто"},
{"SAM session not found","SAM сесія не знайдена"},
{"no sessions currently running","немає запущених сесій"},
{"SAM session not found","SAM сесія не знайдена"},
{"SAM Session","SAM сесія"},
// ShowI2PTunnels
{"Server Tunnels","Серверні Тунелі"},
{"Client Forwards","Клієнтські Переспрямування"},
{"Server Forwards","Серверні Переспрямування"},
// HandlePage
{"Unknown page","Невідома сторінка"},
// HandleCommand, ShowError
{"Invalid token","Невірний токен"},
{"SUCCESS","УСПІШНО"},
{"ERROR","ПОМИЛКА"},
{"Unknown command","Невідома команда"},
{"Command accepted","Команда прийнята"},
{"Back to commands list","Повернутися до списку команд"},
{"You will be redirected in 5 seconds","Ви будете переадресовані через 5 секунд"},
// HTTP_COMMAND_KILLSTREAM
{"Stream closed","Потік зачинений"},
{"Stream not found or already was closed","Потік не знайдений або вже зачинений"},
{"Destination not found","Точка призначення не знайдена"},
{"StreamID can't be null","Ідентифікатор потоку не може бути порожнім"},
{"Return to destination page","Повернутися на сторінку точки призначення"},
{"You will be redirected back in 5 seconds","Ви будете переадресовані назад через 5 секунд"},
// HTTP_COMMAND_LIMITTRANSIT
{"Transit tunnels count must not exceed 65535","Кількість транзитних тунелів не повинна перевищувати 65535"},
// HTTP_COMMAND_GET_REG_STRING
{"Back to commands list","Повернутися до списку команд"},
{"Register at reg.i2p","Зареєструвати на reg.i2p"},
{"Description","Опис"},
{"A bit information about service on domain","Трохи інформації про сервіс на домені"},
@ -219,14 +156,53 @@ namespace ukrainian // language
{"Domain can't end with .b32.i2p","Домен не може закінчуватися на .b32.i2p"},
{"Domain must end with .i2p","Домен повинен закінчуватися на .i2p"},
{"Such destination is not found","Така точка призначення не знайдена"},
{"Unknown command","Невідома команда"},
{"Command accepted","Команда прийнята"},
{"You will be redirected in 5 seconds","Ви будете переадресовані через 5 секунд"},
{"Proxy error","Помилка проксі"},
{"Proxy info","Інформація проксі"},
{"Proxy error: Host not found","Помилка проксі: Адреса не знайдена"},
{"Remote host not found in router's addressbook","Віддалена адреса не знайдена в адресній книзі маршрутизатора"},
{"You may try to find this host on jump services below","Ви можете спробувати знайти дану адресу на джамп сервісах нижче"},
{"Invalid request","Некоректний запит"},
{"Proxy unable to parse your request","Проксі не може розібрати ваш запит"},
{"addresshelper is not supported","addresshelper не підтримується"},
{"Host","Адреса"},
{"added to router's addressbook from helper","доданий в адресну книгу маршрутизатора через хелпер"},
{"Click","Натисніть"},
{"here","тут"},
{"to proceed","щоб продовжити"},
{"Addresshelper found","Знайдено addresshelper"},
{"already in router's addressbook","вже в адресній книзі маршрутизатора"},
{"to update record","щоб оновити запис"},
{"Invalid Request","Некоректний Запит"},
{"invalid request uri","некоректний URI запиту"},
{"Can't detect destination host from request","Не вдалось визначити адресу призначення з запиту"},
{"Outproxy failure","Помилка зовнішнього проксі"},
{"bad outproxy settings","некоректні налаштування зовнішнього проксі"},
{"not inside I2P network, but outproxy is not enabled","не в I2P мережі, але зовнішній проксі не включений"},
{"unknown outproxy url","невідомий URL зовнішнього проксі"},
{"cannot resolve upstream proxy","не вдається визначити висхідний проксі"},
{"hostname too long","ім'я вузла надто довге"},
{"cannot connect to upstream socks proxy","не вдається підключитися до висхідного SOCKS проксі"},
{"Cannot negotiate with socks proxy","Не вдається домовитися з висхідним SOCKS проксі"},
{"CONNECT error","Помилка CONNECT запиту"},
{"Failed to Connect","Не вдалося підключитися"},
{"socks proxy error","помилка SOCKS проксі"},
{"failed to send request to upstream","не вдалося відправити запит висхідному проксі"},
{"No Reply From socks proxy","Немає відповіді від SOCKS проксі сервера"},
{"cannot connect","не вдалося підключитися"},
{"http out proxy not implemented","підтримка зовнішнього HTTP проксі сервера не реалізована"},
{"cannot connect to upstream http proxy","не вдалося підключитися до висхідного HTTP проксі сервера"},
{"Host is down","Вузол недоступний"},
{"Can't create connection to requested host, it may be down. Please try again later.","Не вдалося встановити з'єднання до запитаного вузла, можливо він не в мережі. Спробуйте повторити запит пізніше."},
("conf",value<std::string>()->default_value(""),"Path to main i2pd config file (default: try ~/.i2pd/i2pd.conf or /var/lib/i2pd/i2pd.conf)")
("tunconf",value<std::string>()->default_value(""),"Path to config with tunnels list and options (default: try ~/.i2pd/tunnels.conf or /var/lib/i2pd/tunnels.conf)")
("tunnelsdir",value<std::string>()->default_value(""),"Path to extra tunnels' configs folder (default: ~/.i2pd/tunnels.d or /var/lib/i2pd/tunnels.d")
("certsdir",value<std::string>()->default_value(""),"Path to certificates used for verifying .su3, families (default: ~/.i2pd/certificates or /var/lib/i2pd/certificates")
("pidfile",value<std::string>()->default_value(""),"Path to pidfile (default: ~/i2pd/i2pd.pid or /var/lib/i2pd/i2pd.pid)")
("log",value<std::string>()->default_value(""),"Logs destination: stdout, file, syslog (stdout if not set)")
("logfile",value<std::string>()->default_value(""),"Path to logfile (stdout if not set, autodetect if daemon)")
LogPrint(eLogError,"TunnelMessage: Fragment ",m.nextFragmentNum," of message ",msgID,"exceeds max I2NP message size, message dropped");
LogPrint(eLogError,"TunnelMessage: Fragment ",fragmentNum," of message ",msgID,"exceeds max I2NP message size, message dropped");
m_IncompleteMessages.erase(it);
}
}
else
{
LogPrint(eLogWarning,"TunnelMessage: Unexpected fragment ",(int)m.nextFragmentNum," instead ",(int)msg.nextFragmentNum," of message ",msgID,", saved");
LogPrint(eLogError,"TunnelMessage: Fragment ",m_CurrentMessage.nextFragmentNum," of message ",m_CurrentMsgID," exceeds max I2NP message size, message dropped");