На Хабрахабре есть отличная статья по 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, парочка скриптов для запуска-остановки и конфиги. Надеюсь, кому-нибудь информация пригодится. Буду рад конструктивной критике.
