LINUX.ORG.RU

knockd не стартует при загрузке системы (Debian Wheezy) в случае использования Network Manager

 , ,


0

1

при отключении network manager и установке конфигурации интерфейса eth0 вручками в /etc/network/interfaces в состояние iface eth0 inet static knockd при старте системы запускается.

$uname -a
Linux cit-debian-03 3.2.0-4-amd64 #1 SMP Debian 3.2.57-3 x86_64 GNU/Linux

$ cat /etc/issue
Debian GNU/Linux 7 \n \l

$ dpkg-query --list network-manager | grep network-manager
ii  network-manager                       0.9.4.0-10                         amd64        network management framework (daemon and userspace tools)

$ dpkg-query --list knockd | grep knockd
ii  knockd                                0.5-3                              amd64        small port-knock daemon

# chkconfig --list | grep -E '(knockd|network-manager)'
knockd                    0:off  1:off  2:on   3:on   4:on   5:on   6:off
network-manager           0:off  1:off  2:off  3:off  4:off  5:off  6:off

# ps aux | grep `cat /var/run/knockd.pid` | grep -v grep
root      2605  0.0  0.0   8312  4424 ?        Ss   09:08   0:00 /usr/sbin/knockd -d
стоит убрать из /etc/network/interfaces всё, связанное с eth0, и включить network-manager, как knockd стартовать при запуске системы перестаёт. Ошибка:
[FAIL] Starting Port-knock daemon: knockd failed (could not open eth0: eth0: that device is not up).
хочу странного, а именно - network-manager и старт knockd при запуске системы. Возможно ли?

★★

Ну так всё логично же, нет интерфейса - не на чем слушать. Правьте поле Required-Start в инитскрипте knockd, чтобы он ждал NM.

Axon ★★★★★ ()
Последнее исправление: Axon (всего исправлений: 1)
Ответ на: комментарий от Axon
~# grep Provides /etc/init.d/network-manager
# Provides:          network-manager

~# grep Required-Start /etc/init.d/knockd
# Required-Start:    $network $syslog $network-manager

~# insserv -d -v
insserv: creating .depend.boot
insserv: creating .depend.start
insserv: creating .depend.stop

не помогает :( И ситуация в этих моих /etc/rc?.d/* та же, что и до добавления $network-manager в Required-Start:

~# ls /etc/rc[2345].d/ | grep -E '(knockd|network-manager)'
S17knockd
S18network-manager
S17knockd
S18network-manager
S17knockd
S18network-manager
S17knockd
S18network-manager
Т.е. везде как и раньше network-manager стартует после knockd. Если я правильно понимаю содержание /etc/init.d/.depend.start, который переписывается командой insserv -d, то и там порядок именно такой:
~# grep -E '(^knockd|^network-manager)' /etc/init.d/.depend.start
knockd: rsyslog
network-manager: dbus rsyslog
Руками менять порядок в /etc/rc?.d тоже не помогло (пробовал в rc2.d и rc5.d). Как это всё правильно заделать?

spunky ★★ ()
Ответ на: комментарий от quest

руками вбив параметры IPv4 в /etc/network/interfaces я профит получаю, но не получаю удовольствие! Мне то хоца именно network-manager + knockd! Или я неверно тебя понял?

spunky ★★ ()
Ответ на: комментарий от Axon

перечитал на посвежевую голову, решил поправить не в самом /etc/init.d/knockd, а в /etc/insserv/overrides/knockd, не помогло.

~# cat /etc/insserv/overrides/knockd
### BEGIN INIT INFO
# Provides:          knockd
# Required-Start:    $network $syslog $network-manager
# Required-Stop:     $network $syslog $network-manager
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: port-knock daemon
### END INIT INFO
Пробовал так-же поменять порядок загрузки через update-rc.d (тоже не помогло):
~# update-rc.d knockd start 30 2 3 4 5 stop 30 0 1 6
update-rc.d: using dependency based boot sequencing
root@cit-debian-03:~# ls -l /etc/rc?.d/*knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc0.d/K01knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc1.d/K01knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc2.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc3.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc4.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc5.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 14 19:27 /etc/rc6.d/K01knockd -> ../init.d/knockd
Какого эта байбутня не меняет порядок загрузки?

spunky ★★ ()

man update-rc.d

If any files /etc/rcrunlevel.d/[SK]??name already exist then update-rc.d does nothing. The program was writ‐ ten this way so that it will never change an existing configuration, which may have been customized by the system administrator. The program will only install links if none are present, i.e., if it appears that the service has never been installed before.

ок, решил попробовать сначала update-rc.d remove а потом start руками:

~# update-rc.d knockd remove
update-rc.d: using dependency based boot sequencing
root@cit-debian-03:~# ls -l /etc/rc?.d/*knockd
ls: невозможно получить доступ к /etc/rc?.d/*knockd: Нет такого файла или каталога
root@cit-debian-03:~# update-rc.d knockd start 30 2 3 4 5 stop 30 0 1 6
update-rc.d: using dependency based boot sequencing
root@cit-debian-03:~# ls -l /etc/rc?.d/*knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc0.d/K01knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc1.d/K01knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc2.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc3.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc4.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc5.d/S17knockd -> ../init.d/knockd
lrwxrwxrwx 1 root root 16 Май 17 06:30 /etc/rc6.d/K01knockd -> ../init.d/knockd
Т.е. удалить ссылки она удалила, а добавить обратно добавила не с указанным порядком, а по посчитанному dependency based boot sequenceing

spunky ★★ ()

Ох сам себе нафлужу!

man update-rc.d

update-rc.d has two modes of operation for installing scripts into the boot sequence. A legacy mode where command line arguments are used to decide the sequence and runlevel configuration, and the default mode where dependency and runlevel information in the init.d script LSB comment header is used instead. Such header is required to be present in init.d scripts. See the insserv(8) manual page for details about the LSB header format. The boot sequencing method is decided during installation or upgrades. During upgrades, if there are no loops in the dependencies declared by LSB headers of all installed init.d scripts and no obsolete init.d scripts, the boot system is converted to dependency based boot sequencing. The conversion to dependency based boot sequencing is one-way. The machines using the legacy mode will have a file /etc/init.d/.legacy-bootordering .

~# touch /etc/init.d/.legacy-bootordering
~# update-rc.d -f knockd remove
 Removing any system startup links for /etc/init.d/knockd ...
   /etc/rc0.d/K01knockd
   /etc/rc1.d/K01knockd
   /etc/rc2.d/S17knockd
   /etc/rc3.d/S17knockd
   /etc/rc4.d/S17knockd
   /etc/rc5.d/S17knockd
   /etc/rc6.d/K01knockd
root@cit-debian-03:~# ls -l /etc/rc?.d/*knockd
ls: невозможно получить доступ к /etc/rc?.d/*knockd: Нет такого файла или каталога
root@cit-debian-03:~# update-rc.d knockd start 30 2 3 4 5 . stop 15 0 1 6 .
 Adding system startup for /etc/init.d/knockd ...
   /etc/rc0.d/K15knockd -> ../init.d/knockd
   /etc/rc1.d/K15knockd -> ../init.d/knockd
   /etc/rc6.d/K15knockd -> ../init.d/knockd
   /etc/rc2.d/S30knockd -> ../init.d/knockd
   /etc/rc3.d/S30knockd -> ../init.d/knockd
   /etc/rc4.d/S30knockd -> ../init.d/knockd
   /etc/rc5.d/S30knockd -> ../init.d/knockd

теперь надо оканчивать start-stop блоки в update-rc.d точками, зато сработало изменение порядка работы скриптов. Видимо, до следующего upgrade, который вернёт всё к дефолту.

spunky ★★ ()
Ответ на: комментарий от spunky

при загрузке вообще не успеваю увидеть какое-либо сообщение об ошибке запуска knockd. Либо он не запускается вообще, либо запускается перед самыми иксиками.

spunky ★★ ()
Ответ на: комментарий от quest

я хотел network-manager - и это проблема. Возможно, проблема не для General или Admin, а для толксов или психиатра, но всё равно проблема. Но тут мне мой коллега подсказал, что network-manager после загрузки ещё долго не настроит интерфейсы в нужное состояние, так что, возможно, проблема решается только статической настройкой интерфейса. И что, мол, если network-manager какой интерфейс в /etc/network/interfaces увидит, так он им и управлять не будет.

spunky ★★ ()
Ответ на: комментарий от quest

уже не работает :) Что-то я на*л такого, что без него система зависает (точнее, не продолжает загрузку, но не висит)

[ ok ] Setting kernel variables ...done.
[....] Configuring network interfaces...[   8.566627] r8169 000:03:00.0: firmware: agent aborded loading trl_nic/rtl8186f-1.fw (not found?)
В режиме восстановления тоже не грузится с аналогичным (вроде бы, не сделал снимок) сообщением, пришлось загрузиться в режиме восстановления с установочного диска и то-ли через rcconf, то ли как иначе указать запус network-manager, после чего система нормально загрузилась (за исключением стартовой проблемы с knockd).

spunky ★★ ()
Ответ на: комментарий от quest

поставил, только без --reinstall, после этого загрузка останавливается в том же самом месте, но с другим сообщением:

[....] Configuring network interfaces...
загрузил без конфигуации eth0 в /etc/network/interfaces, раскомментировал всё, что к eth0 относится, запустил /etc/init.d/networking start... и вижу именно это же :)
~# grep -A 10 eth0 /etc/network/interfaces 
auto eth0
iface eth0 inet static
	address 10.168.99.13
	netmask 255.255.255.224
	gateway 10.168.99.30

~# /etc/init.d/networking start
[....] Configuring network interfaces...
и висит ровно как при загрузке, при этом сеть поднимается (и позволяет писать из горящего танка :))

spunky ★★ ()
Ответ на: комментарий от spunky

наверно стоит подумать как оно могло слететь? может файловая система поехала?

quest ★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.