Bug 45226

Summary: initconf: не сохраняет текущий конфиг в /etc/net/ifaces для типа сетевой карты с именем, отличным от eth*
Product: Sisyphus Reporter: Николай Степаненко <nixtrian>
Component: etcnetAssignee: Alexey Shabalin <shaba>
Status: NEW --- QA Contact: qa-sisyphus
Severity: major    
Priority: P5 CC: alimektor, ldv, rider, sem, shaba, vseleznv
Version: unstable   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Грязный патч, решающий проблему
none
etcnet-0.9.27-alt1.noarch
none
менее грязный патч
none
Исправление для определения типа сетевого интерфейса по имени none

Description Николай Степаненко 2023-02-09 17:46:14 MSK
Created attachment 12477 [details]
Грязный патч, решающий проблему

Доброго дня!


# /etc/net/scripts/contrib/initconf write 
выдает ошибку об отсутствии файла при условии, что имя сетевой карты enp4s0 например

Вот такой dirty hack решил проблему (во вложении).

Готов по возможности оказать содействие в тестировании, переписывании, дописывании при необходимости

tlg: @NikolayStepanenko
Comment 1 Evgeny Shesteperov 2023-02-09 17:52:20 MSK
Добрый день!

Пожалуйста, дополнительно предоставьте следующую информацию:

1. Операционная система, версия, на которой воспроизвелась ошибка.
2. Выводы следующих команд:

        $ uname -a
        $ cat /etc/os-release
        $ apt-repo

3. Опишите, пожалуйста, по шагам, что Вы хотели сделать и какого результата ожидали.
Comment 2 Николай Степаненко 2023-02-10 16:48:03 MSK
Created attachment 12494 [details]
etcnet-0.9.27-alt1.noarch
Comment 3 Николай Степаненко 2023-02-10 16:50:33 MSK
Доброго дня,

1. ОС - свежеустановленный alt p10 JeOS
Думал что проблема пофикшена в версии etcnet-0.9.27-alt1.noarch
(до этого стояла 0.9.26)
Сегодня воспроизвел проблему на виртуалке, затем обновился и снова воспроизвел (скрин приложил предыдущим комментарием)

2. 

[root@host-15 ~]# uname -a
Linux host-15 5.10.156-std-def-alt1 #1 SMP Wed Nov 30 09:36:34 UTC 2022 i686 GNU/Linux
[root@host-15 ~]#          cat /etc/os-release
NAME="starter kit"
VERSION="p10 (Hypericum)"
ID=altlinux
VERSION_ID=p10
PRETTY_NAME="ALT Starterkit (Hypericum)"
ANSI_COLOR="1;33"
CPE_NAME="cpe:/o:alt:starterkit:p10"
HOME_URL="http://en.altlinux.org/starterkits"
BUG_REPORT_URL="https://bugs.altlinux.org/"
[root@host-15 ~]# 
[root@host-15 ~]#          apt-repo
-bash: apt-repo: command not found
[root@host-15 ~]# cat /etc/apt/sources.list.d/alt.list 
# ftp.altlinux.org (ALT Linux, Moscow)

# ALT Platform 10
#rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/i586 classic
#rpm [p10] ftp://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic

rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/i586 classic
rpm [p10] http://ftp.altlinux.org/pub/distributions/ALTLinux p10/branch/noarch classic

#rpm [p10] rsync://ftp.altlinux.org/ALTLinux p10/branch/i586 classic
#rpm [p10] rsync://ftp.altlinux.org/ALTLinux p10/branch/noarch classic

[root@host-15 ~]# rpm -q -l | grep etcnet
rpm: no arguments given for query
[root@host-15 ~]# rpm -q -a | grep etcnet
etcnet-defaults-server-0.9.27-alt1.noarch
etcnet-0.9.27-alt1.noarch
Comment 4 Evgeny Shesteperov 2023-02-10 16:51:32 MSK
(Ответ для Николай Степаненко на комментарий #2)
> Создано вложение 12494 [details] [подробности]
> etcnet-0.9.27-alt1.noarch

Система установлена в минимальном профиле?
Comment 5 Evgeny Shesteperov 2023-02-10 16:57:02 MSK
(Ответ для Evgeny Shesteperov на комментарий #4)
> Система установлена в минимальном профиле?

Увидел комментарий #3, попробую воспроизвести на ALT Server 10.0 в минимальном профиле.
Comment 6 Николай Степаненко 2023-02-10 17:01:18 MSK
Я так понимаю, там на искомой строке должно быть

if [[ "${iface//[0-9]*/}" = "eth" || "${iface//[0-9]*/}" = "enp" ]];

Но это опять же только кейс с enp*, а бывают еще всякие ens*
Comment 7 Николай Степаненко 2023-02-10 17:04:53 MSK
[root@host-15 ~]#  /etc/net/scripts/contrib/initconf write
WARNING: /usr/sbin/ethtool is not available, module detection will be skipped
Processing interface 'lo': configuration exists
Processing interface 'enp0s3': finished
[root@host-15 ~]# diff /etc/net/scripts/contrib/initconf write
92c92
<                               if [[ "${iface//[0-9]*/}" = "eth" || "${iface//[0-9]*/}" = "enp" ]]; then
---
>                               if [ "${iface//[0-9]*/}" = "eth" ]; then
[root@host-15 ~]# diff -Naur /etc/net/scripts/contrib/initconf write
--- /etc/net/scripts/contrib/initconf   2023-02-10 14:02:55.232141663 +0000
+++ write       2023-02-10 12:55:08.718191588 +0000
@@ -89,7 +89,7 @@
                                        esac
                                fi
                                # many others try to look as ethernet, so let's filter by iface name...
-                               if [[ "${iface//[0-9]*/}" = "eth" || "${iface//[0-9]*/}" = "enp" ]]; then
+                               if [ "${iface//[0-9]*/}" = "eth" ]; then
                                        # find and use link-level address
                                        LLADDR=`$IP li sh dev $iface | fgrep 'link/ether' | sed 's/^ *link\/ether //' | cut --delimiter=' ' --fields=1`
                                        # ...and by valid MAC address
Comment 8 Николай Степаненко 2023-02-10 17:05:39 MSK
Created attachment 12495 [details]
менее грязный патч
Comment 9 Николай Степаненко 2023-02-10 17:45:13 MSK
Вот тут коллега подсказывает

if [[ "${iface}" =~ (enp|eth) ]];
Comment 10 Николай Степаненко 2023-02-10 17:46:20 MSK
[[ "$iface" =~ ^(en[a-z]|eth) ]]
Comment 11 Николай Степаненко 2023-02-10 17:49:49 MSK
Created attachment 12497 [details]
Исправление для определения типа сетевого интерфейса по имени

en[a-z]|eth
Comment 12 Evgeny Shesteperov 2023-02-10 18:55:35 MSK
Версия
======

- etcnet-0.9.27-alt1

Дистрибутивы
============

- P10 ALT Server 10.0, установленный в профиле Minimal, обновленный до текущего Sisyphus

Окружение
=========

Виртуальная машина на Proxmox Virtual Environment. По умолчанию интерфейсам присваиваются имена ens19, ens20 и так далее. Раздаётся DHCP.

Конфигурация ens19:

    # cat /etc/net/ifaces/ens19/options 
    BOOTPROTO=dhcp
    TYPE=eth
    CONFIG_WIRELESS=no
    SYSTEMD_BOOTPROTO=dhcp4
    CONFIG_IPV4=yes
    DISABLED=no
    NM_CONTROLLED=no
    SYSTEMD_CONTROLLED=no

Шаги воспроизведения
====================

1. Добавить к виртуальной машине ещё один интерфейс (ens20). 
2. На данном этапе интерфейс ens20 не сконфигурирован, так что, скопировать конфигурацию ens19 в ens20:

        # cp -r /etc/net/ifaces/ens19/ /etc/net/ifaces/ens20

3. Перезапустить network:
   
        # systemctl restart network
   
4. На данном этапе ens20 сконфигурирован, так что, удалить его конфигурацию:

        # rm -rf /etc/net/ifaces/ens20

5. Выполнить тест initconf:
   
        # /etc/net/scripts/contrib/initconf
        WARNING: /usr/sbin/ethtool is not available, module detection will be skipped
        Processing interface 'lo': configuration exists
        Processing interface 'ens19': configuration exists
        Processing interface 'ens20':TEST: will write to file /etc/net/ifaces/ens20/ipv4address:
        --------8<--------8<--------8<--------8<
        XX.XX.XX.XX/XX
        
        --------8<--------8<--------8<--------8<
        TEST: will write to file /etc/net/ifaces/ens20/ipv4route:
        --------8<--------8<--------8<--------8<
        default via XX.XX.XX.XX proto dhcp src XX.XX.XX.XX metric 1003 
        
        --------8<--------8<--------8<--------8<
         finished

6. Как видно из описания https://www.altlinux.org/Etcnet#Общие_сведения, шаг 4, данный сценарий с аргументом write должен записать показанные изменения:

        # /etc/net/scripts/contrib/initconf write

Ожидаемый результат: создание конфигурации ens20 в папке /etc/net/ifaces.

Фактический результат: ошибка, несмотря на то, что тест (то есть запуск без опции write) проходит успешно

    Processing interface 'ens20':/etc/net/scripts/contrib/initconf: строка 38: /etc/net/ifaces/ens20/ipv4address: Нет такого файла или каталога
    /etc/net/scripts/contrib/initconf: строка 38: /etc/net/ifaces/ens20/ipv4route: Нет такого файла или каталога
     finished

Дополнительно: если переименовать интерфейс, например, в eth0 (eth1, eth2, и т.д.), то всё работает корректно, например (согласно https://www.altlinux.org/Настройка_сетевой_карты,_краткое_пособие_для_начинающих#Переименование_имени_сетевого_интерфейса):

    # ip link set ens20 down
    # ip link set ens20 name eth0
    # cp -r /etc/net/ifaces/ens19/ /etc/net/ifaces/eth0
    # systemctl restart network
    # ip -c address show eth0 ### адрес получен
    # rm -rf /etc/net/ifaces/eth0
    # /etc/net/scripts/contrib/initconf write
    # stat /etc/net/ifaces/eth0/ipv4address

Воспроизводится в P10.