Запускаем i2pd в контейнере Docker на CentOS 7

image На Хабрахабре есть отличная статья по i2pd. Единственный недостаток проекта в том, что его авторы предоставляют пакеты только для Ubuntu и Debian, что составляет определённое неудобство для пользователей CentOS.


Владельцу домашнего NAS на CentOS 7 вроде меня остаётся либо собирать i2pd из исходников, либо воспользоваться Docker, чтобы установить его поверх образа Debian Jessie.


Итак, статья посвящена созданию контейнера с i2pd в Docker под CentOS 7.


Установка Docker


Docker имеет свой репозиторий с актуальными версиями. Чтобы его подключить, создадим в каталоге /etc/yum.repos.d файл docker.repo со следующим содержимым:


[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/7/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg

После чего установим нужный нам пакет:


$ sudo yum install docker
$ sudo yum install docker-engine
$ sudo systemctl enable docker.service
$ sudo systemctl start docker

Теперь можно проверить корректность установки:


$ sudo docker run --rm hello-world

И если всё ок, то нам осталось добавить пользователя, который будет баловаться контейнерами, в группу docker:


$ sudo usermod -aG docker cube

Создаём образ


Для этого нам потребуется создать файл Dockerfile со следующим содержимым:


FROM debian:jessie
MAINTAINER Cube <kyb.6.granei@yandex.ru>

# Эти порты нужны для того, чтобы наш контейнер был доступен
# как прокси и у нас был бы доступ на его консоль
EXPOSE 4444 4447 7070 9439

# Обновим образ
RUN apt-get update && apt-get upgrade

# Установим зависимости i2pd
RUN apt-get install -y  wget                \
            libboost-date-time1.55.0        \
            libboost-filesystem1.55.0       \
            libboost-program-options1.55.0  \
            libboost-system1.55.0           \
            libminiupnpc10

# Скачаем последнюю версию i2pd и установим пакет
RUN cd /tmp && wget https://github.com/PurpleI2P/i2pd/releases/download/2.9.0/i2pd_2.9.0-1jessie1_amd64.deb
RUN dpkg -i /tmp/i2pd_2.9.0-1jessie1_amd64.deb
RUN rm /tmp/i2pd_2.9.0-1jessie1_amd64.deb

# Делаем пользователя i2pd доступным - назначаем
# ему рабочий shell
RUN usermod -s /bin/bash i2pd 

# Копируем конфиг i2pd и файл с подписками 
# внутрь контейнера
COPY i2pd.conf /etc/i2pd/i2pd.conf
COPY subscriptions.txt /etc/i2pd/subscriptions.txt 

# Определяем точку входа нашего контейнера.
# Эта команда запустится при его запуске
ENTRYPOINT exec su - i2pd -c "/usr/sbin/i2pd --conf ~/i2pd.conf"

Рядом с Dockerfile должны лежать два файла.


  • i2pd.conf (конфиг рабочий, но если есть желание, можно исправить его по своему вкусу):

log = stdout

daemon = false
service = false

## Port to listen for connections
## By default i2pd picks random port. You MUST pick a random number too,
## don't just uncomment this
port = 9439 

## Enable communication through ipv4
ipv4 = true

## Enable communication through ipv6
ipv6 = 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 = O

## Router will be floodfill
# floodfill = true

[http]
## Uncomment and set to 'false' to disable Web Console
enabled = true
## Address and port service will listen on
address = 0.0.0.0
port = 7070

[httpproxy]
## Uncomment and set to 'false' to disable HTTP Proxy
enabled = true
## Address and port service will listen on
address = 0.0.0.0
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 = 0.0.0.0
port = 4447

  • subscriptions.txt — это файл с подписками

http://inr.i2p/export/alive-hosts.txt
http://stats.i2p/cgi-bin/newhosts.txt
http://i2p-projekt.i2p/hosts.txt
http://i2host.i2p/cgi-bin/i2hostetag
http://no.i2p/export/alive-hosts.txt
http://rus.i2p/hosts.txt
http://udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p/hosts.txt

Теперь запустим команду создания нашего образа. Docker автоматически загрузит и установит нужные слои:


$ docker build -t i2pd .

Запускаем контейнер


$ docker run --name=i2pd  -td -p 7070:7070 -p 4444:4444 -p 4447:4447 -p 9439:9439 i2pd

Ключ -p указывает, какие порты открывать наружу, а -td запускает процесс в фоне, при этом он продолжает писать лог в stdout, что является стандарной практикой при использовании контейнеров и позволяет удобно просматривать его вывод командой:


$ docker logs -t i2pd

После запуска консоль нашего i2pd доступна по порту 7070, а http- и socks-proxy по портам 4444 и 4447 соответственно.


Для ленивых


Для тех, кто не хочет создавать контейнер самостоятельно, я сделал готовый на Docker hub. Устанавливается он одной командой:


$ docker pull hexaedron/i2pd

Запускается он точно так же, как описано выше.


Заключение


Закончу статью сcылкой на github — там лежит сам Dockefile, парочка скриптов для запуска-остановки и конфиги. Надеюсь, кому-нибудь информация пригодится. Буду рад конструктивной критике.

Share post

Comments 7

    +2
    Пользуясь случаем, хочу сообщить, что сегодня вышел релиз 2.10.0 i2pd, проверенный, в частности, при работе в docker-е.
      0
      Спасибо! Обновил скрипт на Github и образ на Docker hub.
      +1
      Владельцу домашнего NAS на CentOS 7 вроде меня остаётся либо собирать i2pd из исходников, либо воспользоваться Docker, чтобы установить его поверх образа Debian Jessie.

      Хороший у Вас NAS…
      … просто оставлю это тут.
      Фокус на i2pd-2.10.0-1.fc24.2.src.rpm
      Как пользоваться rpmbuild, думаю знаете.

        0
        Спасибо, я рассматривал этот вариант. Дело в том, что судя по документации:
        Centos 7 has CMake 2.8.11 in the official repositories that too old to build i2pd, CMake >=2.8.12 is required.

        сборка i2pd из src-пакета потянет за собой как минимум сборку из src ещё и cmake. Это всё относительно трудоёмко и небыстро. Контейнер же собирается и обновляется при необходимости на минуту, и не создаёт мусора в системе. Это ж не девелоперская среда, а простой NAS.
          0

          Да, да… они, разработчики, точно знают что есть в пакетной базе)

            +1
            Дело в том, что судя по документации:

            Не верьте никому, все врут.
            Так вот, в C6 и C7 есть CMake 3.x, а находится он в EPEL. Появился он там, где-то в марте 2016.
            Небольшие манипуляции, решают почти все вопросы:


            %if 0%{?rhel}  == 7
            BuildRequires:  cmake3
            %else
            BuildRequires:  cmake
            %endif

            Готовые пакеты для C7 можете забрать тут, https://copr.fedorainfracloud.org/coprs/vorona/i2pd/, как-то так:


            curl -s https://copr.fedorainfracloud.org/coprs/vorona/i2pd/repo/epel-7/vorona-i2pd-epel-7.repo -o /etc/yum.repos.d/i2pd-epel-7.repo
            yum install i2pd-systemd -y
              0
              Век живи — век учись!
              Спасибо!

      Only users with full accounts can post comments. Log in, please.