Автор Тема: iftab и 70-persistent-net.rules не отрабатывают  (Прочитано 3902 раз)

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 129
  • ^_^
Привет всем!

Есть сервер на p9 с четырьмя сетевыми интерфейсам - каждый раз при включении имена сетевых интерфейсам меняются местами, чередуются eth1-3 и один eno1.

Явное указание в файлах /etc/iftab и /etc/udev/rules.d/70-persistent-net.rules не приносит результата.

Куда нужно копать?

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 818
  • ITS
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #1 : 13.11.2020 14:59:51 »
выдержка из моей памятки:
10.1) В ветке p9 на sysvinit, скрипт udev-rule-generator-net,  не справляется со своим предназначением, обеспечить стабильность именования интерфейсов и может возникнуть ситуация когда кабель вставлен, а сетевая карта в статусе NO-CARRIER, при этом сетевая без патчкорда, в статусе "кабель подключен". Для исправления ситуации заглянем в файл 70-persistent-net.rules
# mcedit /etc/udev/rules.d/70-persistent-net.rules
...
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
...
Меняем "eth" на "ether" в 70-persistent-net.rules , пока до исправления ситуации.
И в /etc/net/ifaces соответственно имя каталога "eth" на "ether".
Должно стать так: ... NAME="ether0" и /etc/net/ifaces/ether0

# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="ether0"
...

Оффлайн zah

  • Давно тут
  • **
  • Сообщений: 129
  • ^_^
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #2 : 13.11.2020 15:03:21 »
выдержка из моей памятки:
10.1) В ветке p9 на sysvinit, скрипт udev-rule-generator-net,  не справляется со своим предназначением, обеспечить стабильность именования интерфейсов и может возникнуть ситуация когда кабель вставлен, а сетевая карта в статусе NO-CARRIER, при этом сетевая без патчкорда, в статусе "кабель подключен". Для исправления ситуации заглянем в файл 70-persistent-net.rules
# mcedit /etc/udev/rules.d/70-persistent-net.rules
...
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
...
Меняем "eth" на "ether" в 70-persistent-net.rules , пока до исправления ситуации.
И в /etc/net/ifaces соответственно имя каталога "eth" на "ether".
Должно стать так: ... NAME="ether0" и /etc/net/ifaces/ether0

# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="ether0"
...

Так же делал на других серверах всё отрабатывает. А конкретно на этом сервере нет.
Мы можем в таком случае говорить что проблема в железе?

Оффлайн rits

  • Завсегдатай
  • *
  • Сообщений: 818
  • ITS
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #3 : 13.11.2020 15:11:14 »
https://forum.altlinux.org/index.php?topic=42738.msg340721#msg340721 и ниже по дикусии, может chkconfig network on нельзя делать, как описывает Speccyfighter? Только chkconfig network reset?

перезагрузись попробуй )

Баг по теме https://bugzilla.altlinux.org/show_bug.cgi?id=32167
« Последнее редактирование: 13.11.2020 15:23:56 от rabochyITs »

Оффлайн Александр Ерещенко

  • Завсегдатай
  • *
  • Сообщений: 839
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #4 : 13.11.2020 18:54:05 »
Так ведь правило udev отработает только когда устройство "обнаруживается" системой, т.е. при начальной загрузке, либо PnP.
Иначе говоря, чтобы отработало изменённое правило "на ходу", надо как-то "отключить" сетевуху, а потом "включить". Проще просто перезагрузить систему

Оффлайн gosts 87

  • Завсегдатай
  • *
  • Сообщений: 1 422
  • Дмитрий/Dmitry/德米特里/दिमित्री
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #5 : 14.11.2020 00:08:38 »
выдержка из моей памятки:
10.1) В ветке p9 на sysvinit, скрипт udev-rule-generator-net,  не справляется со своим предназначением, обеспечить стабильность именования интерфейсов и может возникнуть ситуация когда кабель вставлен, а сетевая карта в статусе NO-CARRIER, при этом сетевая без патчкорда, в статусе "кабель подключен". Для исправления ситуации заглянем в файл 70-persistent-net.rules
# mcedit /etc/udev/rules.d/70-persistent-net.rules
...
# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"
...
Меняем "eth" на "ether" в 70-persistent-net.rules , пока до исправления ситуации.
И в /etc/net/ifaces соответственно имя каталога "eth" на "ether".
Должно стать так: ... NAME="ether0" и /etc/net/ifaces/ether0

# PCI device 0x10ec:0x8168 (r8169)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="f5:6d:24:66:7f:4f", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="ether0"
...
А у меня, не из-за этого модемы не заводились? Один даже со встроенной сетевой картой.
У меня как раз так и было как выделил красным цветом.
« Последнее редактирование: 14.11.2020 00:12:07 от gosts 87 »

Оффлайн Speccyfighter

  • Мастер
  • ***
  • Сообщений: 9 953
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #6 : 14.11.2020 01:15:17 »
может chkconfig network on нельзя делать, как описывает Speccyfighter? Только chkconfig network reset?

Это влияет только на runlevels и приоритеты start/stop:

man 8 chkconfig
Если после имени службы указан один из приоритетов on, off, reset или resetpriorities, chkconfig изменяет информацию о запуске для указанной службы. Флаги on и off вызывают запуск или остановку службы, соответственно, на изменяемых уровнях выполнения.
Флаг reset сбрасывает состояние on/off для всех уровней запуска службы до значения, указанного в рассматриваемом сценарии инициализации, в то время как флаг resetpriorities сбрасывает приоритеты start/stop для службы до значений, указанных в сценарии инициализации.


# grep 'chkconfig\|Default' /etc/rc.d/init.d/network
# chkconfig: 345 10 90
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6
# grep 'chkconfig\|Default' /etc/rc.d/init.d/network
# chkconfig: $уровни_старта $очередь_старта $очередь_стоп
# Default-Start: 3 4 5
# Default-Stop: 0 1 2 6

# find /etc/rc* -name "*network*" | sort
/etc/rc.d/init.d/network
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/K90network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/S10network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network
S/K - уровни выполнения (Start/Kill)
10/90 - очередь старт/стоп соответственно


- `chkconfig network reset` (в соответствии с man chkconfig) сбросит уровни старт/стоп на всех уровнях до указанного в
  '# chkconfig: $уровни_старта' скрипта.
- `chkconfig network resetpriorities` сбросит очередь старт/стоп на всех уровнях до указанного в скрипте '# chkconfig: $очередь_старт $очередь_стоп'.


resetpriorities действительно сбрасывает только очередь до указанного в init-скрипте
(не трогая start/stop на runlevel -ах)
# find /etc/rc*.d -name "*network*" | grep -v init.d | sort
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/K90network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/K91network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network
# chkconfig network resetpriorities
# find /etc/rc*.d -name "*network*" | grep -v init.d | sort
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/K90network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/K90network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network

но учтите, что man chkconfig врёт. И reset сбросит и старт/стоп на runlevel -ах и очерёдность старт/стоп
# chkconfig --del network
# chkconfig --list network
сервис network поддерживает chkconfig, но не используется ни на одном уровне выполнения (запустите 'chkconfig --add network')
# chkconfig network reset
# find /etc/rc*.d -name "*network*" | grep -v init.d | sort
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/K90network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/S10network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network

до указанного в init-скрипте
# grep chkconfig: /etc/init.d/network
# chkconfig: 345 10 90

И также учтите, что on, всегда включает старт на уровнях 2345
# pwd
/etc/rc.d/rc4.d
# rm S10network
rm: удалить символьная ссылка 'S10network'? y
# ln -s ../init.d/network /etc/rc.d/rc4.d/K90network
# find /etc/rc*.d -name "*network*" | grep -v init.d | sort
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/K90network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/K90network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network
# chkconfig network on
# find /etc/rc*.d -name "*network*" | grep -v init.d | sort
/etc/rc.d/rc0.d/K90network
/etc/rc.d/rc1.d/K90network
/etc/rc.d/rc2.d/S10network
/etc/rc.d/rc3.d/S10network
/etc/rc.d/rc4.d/S10network
/etc/rc.d/rc5.d/S10network
/etc/rc.d/rc6.d/K90network

И применение on на сетевых сервисах, будет игнорировать спецификацию на запуск сетевых сервисов в runlevel 2:
https://refspecs.linuxbase.org/
https://refspecs.linuxbase.org/lsb.shtml

22.5. Run Levels
...
https://refspecs.linuxbase.org/LSB_5.0.0/LSB-Core-generic/LSB-Core-generic/runlevels.html
0   halt
1   single user mode
2   multiuser with no network services exported
3   normal/full multiuser
4   reserved for local use, default is normal/full multiuser
5   multiuser with a display manager or equivalent
6   reboot



https://refspecs.linuxbase.org/LSB_1.1.0/gLSB.html#RUNLEVELS
Run Levels

0   halt
1   single user mode
2   multiuser with no network services exported
3   normal/full multiuser
4   reserved for local use, default is normal/full multiuser
5   multiuser with xdm or equivalent
6   reboot



Возможна ли ситуация, которая в принципе не решаема одной командой?

Возможна:
Это произойдёт в случае, когда установки start/kill на runlevel -ах выполненные администратором, отличаются от того что указано в init скрипте. Когда после `chkconfig $service off`, одной командой невозможно будет включить сервис на тех же уровнях. И потребуется двухкомандное включение сервиса по-памяти:
# chkconfig --level $levels_start $service on
# chkconfig --level $levels_stop $service off
« Последнее редактирование: 14.11.2020 06:44:55 от Speccyfighter »

Оффлайн asy

  • alt linux team
  • ***
  • Сообщений: 7 688
  • Sunny 273 RUS crew
Re: iftab и 70-persistent-net.rules не отрабатывают
« Ответ #7 : 14.11.2020 12:41:03 »
10.1) В ветке p9 на sysvinit, скрипт udev-rule-generator-net,  не справляется со своим предназначением, обеспечить стабильность именования интерфейсов и может возникнуть ситуация когда кабель вставлен, а сетевая карта в статусе NO-CARRIER, при этом сетевая без патчкорда, в статусе "кабель подключен".
Лучше, всё же, пояснять перевопричину. А первопричина в том, что в udev убрали код, отвечающий за переименование интерфейсов в том случае, если имя занято. По началу в ALT этот патч вернули (https://bugzilla.altlinux.org/29280), но теперь его нет и у нас. Потому использовать имена ethX теперь не выйдет.