Bug 11786

Summary: Не поднимаются некоторые ethernet интерфейсы при старте сети
Product: Sisyphus Reporter: Yuriy Kashirin <uka>
Component: etcnetAssignee: Mikhail Efremov <sem>
Status: CLOSED WORKSFORME QA Contact: qa-sisyphus
Severity: minor    
Priority: P2 CC: dd1email, ender, evg, imz, inger, lav, ldv, mike, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   
Bug Depends on: 14837    
Bug Blocks:    
Attachments:
Description Flags
try to guess eth iface name during create none

Description Yuriy Kashirin 2007-05-17 11:44:34 MSD
Баг проявляется, если для интерфейса выполняются такие условия:
1) В /etc/net/iftab имеется строка для переименования интерфейса:
# cat /etc/net/iftab
ether mac 00:0A:E4:40:BA:D9

2) В опциях интерфейса /etc/net/ifaces/ether нет параметра MODULE=
Модули интерфейса загружаются до старта сети (udev'ом?), интерфейс eth0 
создается (не поднят)

В этом случае после загрузки имеем:
# ip link show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:0a:e4:40:ba:d9 brd ff:ff:ff:ff:ff:ff

# ifup ether
!#

Интерфейс не поднимается, не переименовывается - по прежнему называется eth0

Конфигурация интерфейса была рабочая на etcnet-0.8.4
Сеть пропала после перезагрузки после обновления до 0.9.2-alt1

Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options
Но ведь отсутствие этого параметра не есть ошибка в конфигурации?
Comment 1 Yuriy Kashirin 2007-05-17 11:56:18 MSD
В /etc/net/scripts/create-eth:

if [ -n "$MODULE" ]; then
        for oneword in $MODULE; do
                $MODPROBE $oneword
        done
else
        $IP link set dev $NAME down
fi

То есть, если $MODULE для интерфейса не определен, то выполняется
 $IP link set dev $NAME down
который и возвращает ошибку, поскольку create-eth вызывается из ifup _до_ 
ifrename, и в ip передается новое имя интерфейса ($NAME), а не текущее после 
загрузки модуля (eth0).

Такой work-around пока решает проблему:
-        $IP link set dev $NAME down
+        $IP link set dev $NAME down || :

Хотя, это, наверное, и не совсем правильно. Кстати, зачем делать down, если до 
вызова create-eth ifup убедился, что интерфейс не поднят?
Comment 2 Denis Ovsienko 2007-08-23 23:08:47 MSD
> Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options
> Но ведь отсутствие этого параметра не есть ошибка в конфигурации?

Вообще-то --- ошибка. То есть если мы конфигурируем сеть сами, то должны уметь
делать это от начала до конца, а если полагаемся на udev, то ждём отмашки с его
стороны. Я подумаю, что можно улучшить для данной конкретной ситуации, спасибо.
Comment 3 Michael Shigorin 2007-11-08 15:12:41 MSK
Бывает ещё и так...

Поймал нечто подобное в ситуации, когда может быть один или два интерфейса, по
которым заранее не известно ничего (ни модуля, ни MAC, ни busid), но один из
которых надо настроить на известный статический IP.  Какой -- без разницы, но в
дальнейшем при перезагрузках прыгать не должны (чтоб подбирать шнурки пришлось
максимум один раз).  Это решается указанием однократно запустить настройку сети
(альтераторовый модуль) и нажать "применить".

(поскольку об интерфейсах заранее ничего не известно, то переименовать их в ext
и int, например -- не получается, прибить не по чему; модули грузит udevd)

С /etc/iftab -- работает.  Переместив его в /etc/net/iftab, поймал вместо eth1
-- eth (!!):

$ cat /etc/net/iftab
eth0    mac 00:a0:cc:a2:4c:eb
eth1    mac 00:15:f2:25:d1:84
$ /sbin/ip ad
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
2: eth0: <BROADCAST,MULTICAST,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 00:a0:cc:a2:4c:eb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.185/24 brd 192.168.1.255 scope global eth0
3: eth: <NO-CARRIER,BROADCAST,MULTICAST,NOTRAILERS,UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 00:15:f2:25:d1:84 brd ff:ff:ff:ff:ff:ff
$ head -100 /etc/net/ifaces/eth*/options
==> /etc/net/ifaces/eth0/options <==
USE_HOTPLUG=no
BOOTPROTO=dhcp
NEVER_RMMOD=yes
ONBOOT=yes
DISABLED=no

==> /etc/net/ifaces/eth1/options <==
USE_HOTPLUG=no
BOOTPROTO=static
NEVER_RMMOD=yes
ONBOOT=no
DISABLED=no
Comment 4 Andrew Kornilov 2007-11-08 15:18:46 MSK
(In reply to comment #3)
> С /etc/iftab -- работает.  Переместив его в /etc/net/iftab, поймал вместо eth1
Так в этом-то и проблема. eth* интерфейсы сделать сейчас через /etc/net/iftab
нельзя. Почему и полезли все в /etc/iftab
Comment 5 Michael Shigorin 2007-11-08 15:24:49 MSK
Мужики, исправьте это хоть кто-то :(  Я не понимаю всего происходящего тут, но
было бы крайне досадно в гипотетическом Master 4.0 иметь несогласованность между
настраивалкой и подсистемой, которую она конфигурирует, или несовместимость этой
подсистемы с довольно распространёнными привычками администраторов (которую
объезжает /etc/iftab, но получаем несогласованность).

Если это чем-то поможет -- пиво с меня точно причитается.  Или скажите, куда
копать -- я-то заказчику отдам и как есть (на гвоздиках с /etc/iftab), но лучше
бы воспользоваться случаем и исправить.

PS: по поводу "Модули интерфейса загружаются до старта сети (udev'ом?)" -- при
этом USE_HOTPLUG для них должен быть yes или no? (MODULE не указываю -- в моём
разе это невозможно)
Comment 6 Alexey Gladkov 2007-11-08 15:28:48 MSK
Люди, спорим дольше.
У ifrename есть ключ -t. Его нужно добавить к вызову из etcnet.
И только (!).
Comment 7 Michael Shigorin 2007-11-08 15:42:53 MSK
Добавил (в functions, ifup, ifup-removable, шоб под патч) -- огрёб

2: eth2: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:15:f2:25:d1:84 brd ff:ff:ff:ff:ff:ff
3: eth0: <BROADCAST,MULTICAST,NOTRAILERS,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast
qlen 1000
    link/ether 00:a0:cc:a2:4c:eb brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.185/24 brd 192.168.1.255 scope global eth0
Comment 8 Alexey Gladkov 2007-11-08 15:43:29 MSK
Помню только что при создании сервиса ifrename мне не удалось научить etcnet
этому ключу.
Comment 9 Denis Ovsienko 2007-12-12 02:16:13 MSK
takeover для hotplug-интерфейсов может работать корректно только при условии,
что udev будет накапливать необработанные события для сетевых интерфейсов не по
их имени, а по ifindex. Точно такая же проблема решалась в своё время для
cardmgr из pcmcia-cs. Я успел выяснить это до того, как у меня закончилось
свободное время.
Comment 10 Denis Ovsienko 2008-03-15 17:00:58 MSK
Вопрос решён, побочный процесс продолжен в #14837.
Comment 11 Ivan Zakharyaschev 2008-12-31 20:40:52 MSK
etcnet-0.9.7-alt0.M41.1, проблема сохраняется (причём в моём случае udev меня вовсе не интересует).

(In reply to comment #2)
> > Пока это полечилось добавлением MODULE=e100 в /etc/net/ifaces/ether/options
> > Но ведь отсутствие этого параметра не есть ошибка в конфигурации?
> 
> Вообще-то --- ошибка. То есть если мы конфигурируем сеть сами, то должны уметь
> делать это от начала до конца, 

А зачем ещё лишний раз писать модуль? У меня и так всё однозначно задано в iftab (и традиционный ifrename справился бы): 

[root@localhost net]# ifrename -i lan -n test
test
[root@localhost net]# ip link
1: lo: <LOOPBACK> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff
3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000
    link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
[root@localhost net]# ls ifaces/
default/ lan/     lo/      unknown/ 
[root@localhost net]# ls ifaces/lan/
options
[root@localhost net]# cat ifaces/lan/options 
TYPE=eth
DISABLED=no
NM_CONTROLLED=no
# I have a reasonable self-configuring default:
#BOOTPROTO=dhcp,ipv4ll
[root@localhost net]# ls iftab*
iftab
[root@localhost net]# cat iftab
# -*- conf-space -*-

# (eth0 is evil!)

lan driver sky2
[root@localhost net]# 

Но etcnet не справляется из-за этого странного вызова "$IP link set dev $NAME down" ещё до того, как к устройству можно обращаться по указанному имени (имя-то меняется в scripts/ifup на следующем шаге!):

[root@localhost net]# service network start
Computing interface groups: .. 2 interfaces found
Starting group 0/virtual (1 interfaces)
	Starting lo: .....OK
Starting group 1/realphys (1 interfaces)
	Starting lan: Cannot find device "lan"
!FAILED
Processing /etc/net/vlantab: empty.
[root@localhost net]# 

А ifrename бы справился:

[root@localhost net]# ip link
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff
3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000
    link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
[root@localhost net]# ifrename -c iftab 
[root@localhost net]# service network start
Computing interface groups: .. 2 interfaces found
Starting group 0/virtual (1 interfaces)
	Starting lo:  'lo' is already up SKIPPED
Starting group 1/realphys (1 interfaces)
	Starting lan: ..OK
Processing /etc/net/vlantab: empty.
[root@localhost net]# 

Буду пробовать workaround.

Мне это нужно, чтобы иметь профили iftab, и чтобы в разных профилях физическое утсройство называлось разными именами.
Comment 12 Ivan Zakharyaschev 2008-12-31 20:53:06 MSK
(In reply to comment #1)

> Такой work-around пока решает проблему:
> -        $IP link set dev $NAME down
> +        $IP link set dev $NAME down || :

Спасибо! Подтверждаю, сработало:

[root@localhost net]# git merge program-iftab-without-MODULE
Merge made by recursive.
 scripts/create-eth |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)
[root@localhost net]# ifrename -i lan -n test
test
[root@localhost net]# ip link
1: lo: <LOOPBACK> mtu 16436 qdisc noqueue 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: test: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast qlen 1000
    link/ether 00:13:a9:91:2a:52 brd ff:ff:ff:ff:ff:ff
3: wmaster0: <BROADCAST,MULTICAST> mtu 1500 qdisc ieee80211 qlen 1000
    link/ieee802.11 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
4: wlan0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop qlen 1000
    link/ether 00:19:d2:8b:85:51 brd ff:ff:ff:ff:ff:ff
[root@localhost net]# service network start
Computing interface groups: .. 2 interfaces found
Starting group 0/virtual (1 interfaces)
	Starting lo: .....OK
Starting group 1/realphys (1 interfaces)
	Starting lan: Cannot find device "lan"
..OK
Processing /etc/net/vlantab: empty.
[root@localhost net]# ifconfig 
lan       Link encap:Ethernet  HWaddr 00:13:A9:91:2A:52  
          inet addr:10.1.1.11  Bcast:10.1.1.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:225642 errors:0 dropped:0 overruns:0 frame:0
          TX packets:130225 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:334253820 (318.7 MiB)  TX bytes:7710270 (7.3 MiB)
          Interrupt:17 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@localhost net]# 
Comment 13 Anton Farygin 2009-03-24 15:13:59 MSK
Тоже нарвался. Выкрутился, добавив MODULE=ext3 в /etc/net/ifaces/<имя интерфейса/options


Денис, есть предложение - перед create-exh, в случае, если есть /etc/net/iftab - попытаться вычислить текущее имя интерфейса и именно ему сделать down.

Вычислить текущий можно, распарсив /etc/net/iftab (с помощью Dry-run у ifrename - он напишет что и куда переименовывает).
Comment 14 Sergey Bolshakov 2009-03-24 16:31:27 MSK
Created attachment 3388 [details]
try to guess eth iface name during create

примерный патч по предыдущему комменту
я не разобрался с profiled_filename, в остальном работает
Comment 15 Alexey Gladkov 2009-03-24 16:37:31 MSK
(В ответ на комментарий №14)
> я не разобрался с profiled_filename

А в чём трудность?
Comment 16 Sergey Bolshakov 2009-03-24 16:43:48 MSK
> А в чём трудность?
в вызове ifrename IFTAB_FILE пустой -- 
я на скорую руку поменял на /etc/net/iftab.
собссно, патч изготовлен для иллюстрации идеи.
Comment 17 Alexey Gladkov 2009-03-24 17:28:55 MSK
(В ответ на комментарий №16)
> в вызове ifrename IFTAB_FILE пустой -- 
> я на скорую руку поменял на /etc/net/iftab.
> собссно, патч изготовлен для иллюстрации идеи.

Ты хочешь сказать что в 0.9.8-alt2 вызов: 

profiled_filename IFTAB_FILE "$IFTAB"

возвращает 0 и IFTAB_FILE пуст?
Comment 18 Denis Ovsienko 2009-03-25 12:46:34 MSK
На первый взгляд патч не относится к текущему делу. Нельзя ли заново в простых выражениях, вкратце, сформулировать суть претензии, используя мимимум вовлечённых элементов? Спасибо.
Comment 19 Anton Farygin 2009-03-25 13:05:05 MSK
Суть претензии отражена в первом посте от   Yuriy Kashirin.

Можно повторить ещё раз:
интерфейс не переименовывается при старте сети, если в его опциях отсутствует "MODULE=<тра-та-та>"

Собственнно - посмотри create-eth в текущей реализации, и ты всё поймёшь. Не надо читать весь тред.
Comment 20 Denis Ovsienko 2009-03-25 13:21:47 MSK
Попробую внести ясность.
"$IP link set dev $NAME down" --- эта конструкция сохранилась со времён ядра 2.4, в то время это был неплохой способ получить эффект от строки alias в /etc/modules.conf, не уточняя, что же именно записано в этом alias. Похоже, пора менять тактику, нужно подумать.

Кстати, опцию dry-run к ifrename в своё время добавил я. Поэтому про неё никогда не забываю ;-)
Comment 21 Evgenii Terechkov 2015-02-18 09:47:08 MSK
Похоже, тоже нарвался при установке с http://ftp.altlinux.ru/pub/people/rider/sisyphus-1.9.3-20150203-server-light-systemd-x86_64-ru-install-cd.iso

Причем journalctl -b 0 -u network упорно показывал ругань 'Cannot find device "enp0s3"' пока не добавил MODULE= И не прописал привязку к маку в /etc/net/iftab (/etc/iftab не влиял).

Хак с '$IP link set dev $NAME down || :' не помогал, проверял.

Очень печально.
Comment 22 Anton Farygin 2015-02-18 09:50:44 MSK
iftab уже не актуален, переименование делается в udev rules:

# cat /etc/udev/rules.d/70-persistent-net.rules 

# This file was automatically generated by the /lib/udev/write_net_rules
# program, run by the persistent-net-generator.rules rules file.
#
# You can modify it, as long as you keep each rule on a single
# line, and change only the value of the NAME= key.

# PCI device 0x8086:0x10cc (e1000e)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:15:17:ce:4d:b0", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="res2"

Если такого файла нет, то надо разбираться.
Comment 23 Anton Farygin 2015-02-18 09:52:53 MSK
И это, похоже, на конфигурации с systemd вылез какой-то очередной race на предмет того, кто же раньше поднимается - сеть или модули ядра.

А что после загрузки, интерфейс есть ? ifup отрабатывал ?
Comment 24 Evgenii Terechkov 2015-02-18 10:20:44 MSK
Такого файла нет, т.к. в указанной исошке инсталлятор не устанавливает пакет udev-rule-generator-net, как я понимаю.

Хм... да, это race, т.к. после загрузки интерфейс есть (в состоянии DOWN) и ifup enp0s3 или systemctl restart network его поднимают успешно.

Как бы это отладить и на что перевесить?
Comment 25 Michael Shigorin 2015-02-18 16:43:43 MSK
(В ответ на комментарий №24)
> Такого файла нет, т.к. в указанной исошке инсталлятор не устанавливает
> пакет udev-rule-generator-net, как я понимаю.
Помнится, с ним надо было собирать initrd -- в m-p оформлено так (+net-eth):
http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git;a=blob;f=features.in/net-eth/config.mk;hb=HEAD
http://git.altlinux.org/people/mike/packages/?p=mkimage-profiles.git;a=blob;f=features.in/stage2/config.mk;hb=HEAD
Comment 26 Evgenii Terechkov 2015-02-18 19:28:13 MSK
(про переименование интерфейсов: я может быть этого не указал четко, но помогло прописывание MODULE и "переименование" в то же самое имя, что выдано интерфейсу ещё в инсталляторе, т.е. enp0s3. Впрочем, я пробовал переименовывать и в "eth0" и в "lan" - работает также успешно)
Comment 27 Anton Farygin 2018-11-06 14:06:30 MSK
Сейчас для переименовывания интерфейсов лучше всего пользоваться правилами в udev, в этом случае всё срабатывает хорошо и вовремя.