i2pd icon indicating copy to clipboard operation
i2pd copied to clipboard

i2pd service does not start at OS boot time (Debian Stretch, Debian Buster)

Open LLE8 opened this issue 6 years ago • 30 comments

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

LLE8 avatar Feb 17 '19 15:02 LLE8

May be the same bug https://github.com/PurpleI2P/i2pd/issues/1275

LLE8 avatar Feb 17 '19 15:02 LLE8

systemctl enable i2pd.service ?

r4sas avatar Feb 17 '19 16:02 r4sas

Лежит на поверхности

LLE8 avatar Feb 17 '19 16:02 LLE8

Но при установке запускается автоматически с дефолтным конфигом, что несколько сбивает с толку.

LLE8 avatar Feb 17 '19 17:02 LLE8

@r4sas i2pd стартует сразу после установки? Может лучше дать пользователю время настроить конфиг, а потом пусть сам включает?

l-n-s avatar Feb 17 '19 18:02 l-n-s

Тоже так подумал. Обычно на 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.

LLE8 avatar Feb 17 '19 18:02 LLE8

@r4sas i2pd стартует сразу после установки? Может лучше дать пользователю время настроить конфиг, а потом пусть сам включает?

В этом направлении ничего не менялось уже долгое время. Надо смотреть как убрать автозапуск.

r4sas avatar Feb 18 '19 06:02 r4sas

На разных, но одинаковых по конфигурации машинках по-разному, на одной запускается при загрузке, на другой не запустился. Какой-то плавающий баг?

LLE8 avatar Mar 26 '19 18:03 LLE8

Это даже после ручного включения с помощью systemctl enable i2pd.service?

r4sas avatar Mar 26 '19 19:03 r4sas

Нет. Дело в том, что ни на одной из двух машинок, насколько я помню, не было systemctl enable i2pd.service после установки. Но на одной запускается, попробовал несколько раз подряд перезагрузить ее, а на другой не демон не запустился при первой перезагрузке после установки, ее я больше не перезагружал, жду совета, что и где поискать в логах.

LLE8 avatar Mar 26 '19 19:03 LLE8

А там в статусе ничего не пишет?

r4sas avatar Mar 26 '19 23:03 r4sas

Это?

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. Не помню, чтобы осознанно отключал.

LLE8 avatar Mar 27 '19 10:03 LLE8

Дефолтное значение disabled всегда, по крайней мере в момент после установки. Далее если сервис не включить, то он при перезапуске системы не запустится ибо он не был включен для автозапуска.

r4sas avatar Mar 28 '19 22:03 r4sas

Похоже не всегда/ У другого хостера # 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 И после перезагрузки работает, запустился автоматически

LLE8 avatar Mar 30 '19 16:03 LLE8

Тогда не знаю... Я ни разу не видал чего либо что относится к настройке автозапуска с помощью systemd в скриптах для пакетов, так что не знаю возможно ли такое. Вот в init.d такое проворачивалось через /etc/default/.

r4sas avatar Mar 30 '19 19:03 r4sas

Надо будет испытать override_dh_systemd_enable в rules.

r4sas avatar Mar 30 '19 21:03 r4sas

Я тоже не понимаю, какое-то неопределенное поведение. Взял новый 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) Куда смотреть? Какие особенности конфигурации искать?

LLE8 avatar Mar 30 '19 21:03 LLE8

Попробуй покрутить 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

r4sas avatar Mar 30 '19 21:03 r4sas

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

LLE8 avatar Mar 30 '19 21:03 LLE8

Хорошо, читаем: 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: Как видно, оно должно по дефолту и запускать, и включать в автозагрузку. Но вот почему этого не происходит - неизвестно.

r4sas avatar Mar 30 '19 21:03 r4sas

При установке на новый 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.

LLE8 avatar Mar 31 '19 12:03 LLE8

Может просто написать в документацию слова о необходимости включить в автозагрузку вручную.

LLE8 avatar Mar 31 '19 17:03 LLE8

Если отключить полностью выполнение dh_systemd_*, то да, надо будет написать.

r4sas avatar Mar 31 '19 19:03 r4sas

Попался пример не запускаемого автоматически при установке демона https://github.com/yggdrasil-network/yggdrasil-go/blob/master/contrib/systemd/yggdrasil.service . Предполагается, что пользователь добавит в конфиг пиров и только потом запустит. Этот проект описывают как развитие cjdns.

LLE8 avatar Mar 31 '19 20:03 LLE8

у нас в i2p ирке куча народу с ygg сидит

orignal avatar Mar 31 '19 22:03 orignal

Это другое вообще. Там перед запуском выполняется проверка и создание конфигурации, которая выполняется всегда при запуске сервиса.

r4sas avatar Apr 01 '19 00:04 r4sas

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)

Надо еще догадаться сюда заглянуть.

LLE8 avatar Apr 30 '20 19:04 LLE8

Кажется исправилось?

LLE8 avatar Feb 25 '21 20:02 LLE8

Дык это не от нас зависящее дело. Как отрабатывает dh_systemd хелпер так и не известно. Почему он у одних включает сервис, а у других нет - не понятно.

r4sas avatar Feb 26 '21 00:02 r4sas

Не уверен. 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 - то же самое

LLE8 avatar Feb 26 '21 22:02 LLE8