Запускаємо 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 through communication ipv4
ipv4 = true

## Enable through communication ipv6
ipv6 = true

## Bandwidth configuration
## L bandwidth limit to 32Kbs/sec, O - to 256Kbs/sec, P - to 2048Kbs/sec,
## X - unlimited
## Default is for X 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 service port will listen on
address = 0.0.0.0
port = 7070

[httpproxy]
## Uncomment and set to 'false' to disable HTTP Proxy
enabled = true
## Address and service port 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 service port 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-проксі з портів
4444
та
4447
відповідно.
Для ледачих
Для тих, хто не хоче створювати контейнер самостійно, я зробив готовий на Docker hub. Встановлюється він однією командою:
$ docker pull hexaedron/i2pd

Запускається він точно так само, як описано вище.
Висновок
Закінчу статтю посиланням на github — там лежить сам Dockefile, парочка скриптів для запуску, зупинки і конфіги. Сподіваюся, кому-небудь інформація стане в нагоді. Буду радий конструктивній критиці.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.