i2pd
i2pd copied to clipboard
i2pd service does not start at OS boot time (Debian Stretch, Debian Buster)
Doesn't start without any logs i2pd versions from 2.19 to 2.23 and fresh trunk Debian Stretch 64 bit 1st vds Debian 9.5, systemd 232-25+deb9u4, linux-image-4.9.0-7-amd64 4.9.110-3+deb9u2 2nd vds Debian 9.8, systemd 232-25+deb9u8, linux-image-4.9.0-8-amd64 4.9.144-3 /lib/systemd/system/i2pd.service
[Unit]
Description=I2P Router written in C++
Documentation=man:i2pd(1) https://i2pd.readthedocs.io/en/latest/
After=network.target
[Service]
User=i2pd
Group=i2pd
#RuntimeDirectory=i2pd
#RuntimeDirectoryMode=0700
#LogsDirectory=i2pd
#LogsDirectoryMode=0700
Type=forking
ExecStart=/usr/sbin/i2pd --conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --tunnelsdir=/etc/i2pd/tunnels.conf.d --pidfile=/var/run/i2pd/i2pd.pid --logfile=/var/log/i2pd/i2pd.log --daemon --service
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/i2pd/i2pd.pid
### Uncomment, if auto restart needed
#Restart=on-failure
KillSignal=SIGQUIT
# If you have the patience waiting 10 min on restarting/stopping it, uncomment this.
# i2pd stops accepting new tunnels and waits ~10 min while old ones do not die.
#KillSignal=SIGINT
#TimeoutStopSec=10m
# If you have problems with hanging i2pd, you can try increase this
LimitNOFILE=4096
# To enable write of coredump uncomment this
#LimitCORE=infinity
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
May be the same bug https://github.com/PurpleI2P/i2pd/issues/1275
systemctl enable i2pd.service
?
Лежит на поверхности
Но при установке запускается автоматически с дефолтным конфигом, что несколько сбивает с толку.
@r4sas i2pd стартует сразу после установки? Может лучше дать пользователю время настроить конфиг, а потом пусть сам включает?
Тоже так подумал. Обычно на vds настраиваю это
root@debian:/etc/i2pd# diff i2pd.conf.orig i2pd.conf
33a34
> loglevel = warn
35a37
> logclftime = true
58a61
> ifname = eth0 # -- в разных ОС по разному --
72a76
> nat = false
78a83
> bandwidth = X
84a90
> notransit = false
87a94
> floodfill = false
даже если что-то из этого по умолчанию такое же. Еще увеличиваю лимит открытых файлов до 8192 (видел более 4500 tcp-соединений), разрешаю coredump неограниченного размера, можно количество транзитных туннелей написать 3000.
@r4sas i2pd стартует сразу после установки? Может лучше дать пользователю время настроить конфиг, а потом пусть сам включает?
В этом направлении ничего не менялось уже долгое время. Надо смотреть как убрать автозапуск.
На разных, но одинаковых по конфигурации машинках по-разному, на одной запускается при загрузке, на другой не запустился. Какой-то плавающий баг?
Это даже после ручного включения с помощью systemctl enable i2pd.service
?
Нет. Дело в том, что ни на одной из двух машинок, насколько я помню, не было systemctl enable i2pd.service
после установки. Но на одной запускается, попробовал несколько раз подряд перезагрузить ее, а на другой не демон не запустился при первой перезагрузке после установки, ее я больше не перезагружал, жду совета, что и где поискать в логах.
А там в статусе ничего не пишет?
Это?
root@vds:~# systemctl status i2pd.service
i2pd.service - I2P Router written in C++
Loaded: loaded (/lib/systemd/system/i2pd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:i2pd(1)
https://i2pd.readthedocs.io/en/latest/
Не понимаю, почему disabled. Не помню, чтобы осознанно отключал.
Дефолтное значение disabled всегда, по крайней мере в момент после установки. Далее если сервис не включить, то он при перезапуске системы не запустится ибо он не был включен для автозапуска.
Похоже не всегда/
У другого хостера
# apt-get purge i2pd
уничтожил все следы предыдущего
# shutdown -r now
на всякий случай
# dpkg -i ./i2pd_2.24.0-1_amd64.deb
свежий транк
# systemctl status i2pd.service
увидел такое
Loaded: loaded (/lib/systemd/system/i2pd.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2019-03-30 16:05:18 GMT; 40s ago
И после перезагрузки работает, запустился автоматически
Тогда не знаю... Я ни разу не видал чего либо что относится к настройке автозапуска с помощью systemd в скриптах для пакетов, так что не знаю возможно ли такое.
Вот в init.d такое проворачивалось через /etc/default/
.
Надо будет испытать override_dh_systemd_enable
в rules.
Я тоже не понимаю, какое-то неопределенное поведение.
Взял новый VDS у того же хостера, где после перезагрузки не запускается (7 руб в сутки не жалко). На нем в первый момент не совсем свежий Debian Stretch 9.5, решил не обновлять пока. Из свежего транка собрал deb-пакет по инструкции, установил.
Демон при установке запустился автоматически.
# systemctl status i2pd.service
Loaded: loaded (/lib/systemd/system/i2pd.service; disabled; vendor preset: enabled)
Active: active (running) since Sat 2019-03-30 23:44:17 MSK; 12min ago
После перезагрузки shutdown -r now
i2pd не запустился
# systemctl status i2pd.service
Loaded: loaded (/lib/systemd/system/i2pd.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Куда смотреть? Какие особенности конфигурации искать?
Попробуй покрутить rules
%:
- dh $@ --parallel
-# dh_apparmor --profile-name=usr.sbin.i2pd -pi2pd
+ dh $@ --with systemd
override_dh_strip:
dh_strip --dbg-package=i2pd-dbg
@@ -20,3 +25,9 @@ override_dh_strip:
## uncomment this if you have "missing info" problem when building package
#override_dh_shlibdeps:
# dh_shlibdeps --dpkg-shlibdeps-params=--ignore-missing-info
+
+override_dh_systemd_enable:
+ # Do not start daemon at boot by default
+
+override_dh_systemd_start:
+ # Do not start daemon after install
И в Build-Depends в control надо добавить dh-systemd
Было бы интересно сначала найти причину, чтобы не наугад. Почему программа, собранная из одинаковых исходников в т.ч. с одинаковым rules в одинаковых (почти) ОС, ведет себя по разному?
Влияет незначительная почти незаметная разница программного окружения?
В contrib/i2pd.service перед сборкой внесены 2 изменения
LimitNOFILE=8192
и LimitCORE=infinity
В результате /lib/systemd/system/i2pd.service такой
[Unit]
Description=I2P Router written in C++
Documentation=man:i2pd(1) https://i2pd.readthedocs.io/en/latest/
After=network.target
[Service]
User=i2pd
Group=i2pd
#RuntimeDirectory=i2pd
#RuntimeDirectoryMode=0700
#LogsDirectory=i2pd
#LogsDirectoryMode=0700
Type=forking
ExecStart=/usr/sbin/i2pd --conf=/etc/i2pd/i2pd.conf --tunconf=/etc/i2pd/tunnels.conf --tunnelsdir=/etc/i2pd/tunnels.conf.d --pidfile=/var/run/i2pd/i2pd.pid --logfile=/var/log/i2pd/i2pd.log --daemon --service
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/var/run/i2pd/i2pd.pid
### Uncomment, if auto restart needed
#Restart=on-failure
KillSignal=SIGQUIT
# If you have the patience waiting 10 min on restarting/stopping it, uncomment this.
# i2pd stops accepting new tunnels and waits ~10 min while old ones do not die.
#KillSignal=SIGINT
#TimeoutStopSec=10m
# If you have problems with hanging i2pd, you can try increase this
#LimitNOFILE=4096
LimitNOFILE=8192
# To enable write of coredump uncomment this
LimitCORE=infinity
PrivateDevices=yes
[Install]
WantedBy=multi-user.target
Хорошо, читаем: https://manpages.debian.org/testing/debhelper/dh_systemd_enable.1.en.html https://manpages.debian.org/testing/debhelper/dh_systemd_start.1.en.html
add: https://unix.stackexchange.com/a/481243
add2: Как видно, оно должно по дефолту и запускать, и включать в автозагрузку. Но вот почему этого не происходит - неизвестно.
При установке на новый vds не образуется симлинк /etc/systemd/system/multi-user.target.wants/i2pd.service
на /lib/systemd/system/i2pd.service
, т.е. в автозагрузку не включается. Если при какой-то прошлой установке i2pd была принудительно выполнена команда systemctl enable i2pd
, то симлинк образовался, но при удалении i2pd apt-get purge i2pd
он автоматически не уничтожается, остается broken symbolic link, поэтому при следующей установке i2pd уже включен в автозагрузку, как будто автоматически.
Поведение воспризводится, если не забывать убивать
/etc/systemd/system/multi-user.target.wants/i2pd.service.
Может просто написать в документацию слова о необходимости включить в автозагрузку вручную.
Если отключить полностью выполнение dh_systemd_*, то да, надо будет написать.
Попался пример не запускаемого автоматически при установке демона https://github.com/yggdrasil-network/yggdrasil-go/blob/master/contrib/systemd/yggdrasil.service . Предполагается, что пользователь добавит в конфиг пиров и только потом запустит. Этот проект описывают как развитие cjdns.
у нас в i2p ирке куча народу с ygg сидит
Это другое вообще. Там перед запуском выполняется проверка и создание конфигурации, которая выполняется всегда при запуске сервиса.
i2pd 2.31 И Buster, и Stretch Теперь поведение определенное. В конфигурации по умолчанию стабильно НЕ запускается при перезагрузке ОС, но запускается при установке, такое поведение явно нетрадиционно.
# systemctl status i2pd.service
i2pd.service - I2P Router written in C++
Loaded: loaded (/lib/systemd/system/i2pd.service; disabled; vendor preset: enabled)
Надо еще догадаться сюда заглянуть.
Кажется исправилось?
Дык это не от нас зависящее дело. Как отрабатывает dh_systemd хелпер так и не известно. Почему он у одних включает сервис, а у других нет - не понятно.
Не уверен. Debian Stretch 9.9 64 bit, systemd 232-25+deb9u11 Перебрал последовательно несколько последних версий i2pd, при этом все компоненты ОС оставались неизменным. i2pd версии 2.34 и старее не запускаются автоматически при загрузке ОС, systemctl status i2pd.service показывает Loaded: loaded (/lib/systemd/system/i2pd.service; disabled; vendor preset: enabled), i2pd версии 2.35 и 2.36 (точнее свежий транк после 2.36) автоматически запускаются при загрузке ОС, systemctl status i2pd.service показывает Loaded: loaded (/lib/systemd/system/i2pd.service; enabled; vendor preset: enabled). При этом все рассмотренные версии запускаются самостоятельно при установке. В общем для одних версий включается сервис, а для других нет, все на одной машине и с неизменным окружением. Что изменилось между 2.34 и 2.35 - непонятно.
ADD: Debian 9.13 - то же самое. Debian 10.8, systemd 241-7~deb10u6 - то же самое