На днях собирал для тестового кластера Proxmox ноду в виде неттопа со встроенной сетевой картой RealTek. На удивление, она не заработала ни в Proxmox, ни в чистой Debian. Пришлось разбираться, в чем тут дело. Давно не сталкивался с подобными сетевыми проблемами. Когда на сервере нет сети, ты как без рук. Ничего установить или обновить нельзя, репозитории недоступны. Приходится через флешку что-то копировать и устанавливать.
Научиться настраивать MikroTik с нуля или систематизировать уже имеющиеся знания можно на углубленном онлайн-курcе по администрированию MikroTik. Автор курcа – сертифицированный тренер MikroTik Дмитрий Скоромнов. Более 40 лабораторных работ по которым дается обратная связь. В три раза больше информации, чем в MTCNA.
Полностью ошибка выглядела примерно так:
[01448.532276] r8169 0000:09:00.0 enp3s0: rtl_rxtx_empty_cond == 0 (loop: 42, delay: 100). [01458.532277] r8169 0000:09:00.0 enp3s0: rtl_rxtx_empty_cond == 0 (loop: 42, delay: 100). [01468.532278] r8169 0000:09:00.0 enp3s0: rtl_rxtx_empty_cond == 0 (loop: 42, delay: 100). [01478.532279] r8169 0000:09:00.0 enp3s0: rtl_rxtx_empty_cond == 0 (loop: 42, delay: 100).
Её было видно как в системном логе, так и на консоли сервера. Сеть не работала вообще. Меня это смутило, потому что во время работы инсталлятора Proxmox, проблем не было. Установщик получил по dhcp ip адрес на этой сетевой карте. А когда загрузилась система, сеть уже не работала.
Для проверки я установил чистый Debian 11. Ни установщик, ни сама система сеть не видели через сетевой интерфейс RealTek. Точная модель моей сетевой карты - RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller. Я немного погуглил и быстро нашёл причину ошибки. Стандартный драйвер Linux r8169 не поддерживает мою сетевую карту. Надо его отключать и вручную устанавливать другой - https://github.com/mtorromeo/r8168/releases. Звучит несложно, когда у тебя работает сеть. А вот когда её нет, все процессы усложняются.
Итак, нам надо передать на сервер исходники драйвера, которые можно скачать по ссылке выше. Нужен файл r8168-8.049.02.tar.gz. Версия может быть другой на момент вашего прочтения статьи. Я скачал файл, перекинул его на сервер и понял, что не смогу собрать, так как нужны некоторые пакеты и исходники ядра. Когда есть сеть, ты просто ставишь всё, что нужно, из репозитория. А когда ничего нет, ничего не получатся.
Для установки драйвера RealTek в Debian, необходимы следующие пакеты:
- build-essential
- linux-headers-`uname -r`
У первого будут какие-то зависимости. Сейчас уже точно не помню, какие именно. Так сети у нас нет, а вручную собирать пакеты со всеми зависимостями хлопотно, то я взял полный DVD-1 от Debian и подключил его в качестве репозитория. Для этого надо смонтировать флешку, куда записан этот DVD, в какую-то директорию, например /mnt. В /etc/apt/sources.list добавляем строку, закомментировав все остальные.
deb [trusted=yes] file:/mnt bullseye main
После этого обновляем кэш репозиториев и устанавливаем нужные пакеты:
# apt update # apt install build-essential linux-headers-`uname -r`
Так как я устанавливал систему с этого же диска, у меня версия linux-headers в системе и на диске совпали. Если это не так, то deb пакет нужной версии исходников ядра вам придётся скачать и закинуть на сервер вручную.
После того, как установили нужные пакеты, копируем туда же скачанные драйвера. Распаковываем их и запускаем установку:
# tar -xzvf r8168-8.049.02.tar.gz # cd r8168-8.049.02 # ./autorun.sh
Делать всё нужно с правами root. Скрипт сам автоматически соберет новый драйвер, отключит старый и загрузит новый. Вам останется только заблокировать загрузку оригинального драйвера при старте системы, добавив его в blacklist:
# echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf
В завершении перезагрузил nettop и сеть заработала. Я получил миниатюрный тестовый сервер с процессором i5 и 16 гб оперативной памяти.
Далее я установил поверх Proxmox и сеть снова отвалилась с описанной в заголовке ошибкой. Это не удивительно, так как у Proxmox свое ядро. Необходимо еще раз установить драйвер RealTek в это ядро. Так как у нас почти все настроено, необходимо только установить ядро нужной версии. Посмотрите, какое установлено сейчас:
# uname -r 5.11.22-4-pve
Возьмите установочный диск с proxmox и смонтируйте его в /mnt. В директории /mnt/dists/bullseye/pve/binary-amd64/ будет пакет с исходниками ядра - pve-headers-5.11.22-4-pve_5.11.22-8_amd64.deb. Установите его:
# dpkg -i pve-headers-5.11.22-4-pve_5.11.22-8_amd64.deb
После этого заново соберите и установите драйвер, как я это сделал ранее для Debian. Для Ubuntu инструкция будет такой же один в один, только локальный репозиторий нужно будет подключать с диска Ubuntu.
На углубленном курсе "Архитектура современных компьютерных сетей" вы с нуля научитесь работать с Wireshark и «под микроскопом» изучите работу сетевых протоколов. На протяжении курса надо будет выполнить более пятидесяти лабораторных работ в Wireshark.
Время идет а проблема остается...
Уже несколько дней бьюсь с драйверами Realtek и Proxmox VE 8.2.
При попытке установить proxmox на китайский миник, возникла проблема с сетевой картой, она просто не определяется.
Эта статья была самой понятной и подходящей, но выполнить установку драйвера не получается.
Затык, как мне кажется, в отсутствии linux-headers для версии 6.8.4-2-pve (результат uname -r), пробовал ставить те которые были и (linux-headers-6.8.12-common_6.8.12-1_all.deb). Подходящий пакет для 6.8.4 не знаю где взять...
При запуске скрипта выдает ошибку: No such file or directory.
Так же удалось выяснить, что /lib/ теперь симлинк на usr/lib/ может и в этом дело (замена путей в скрипте не дала результатов).
В общении с линуксом опыта очень мало, что делать уже и не знаю. Сетевой usb карты под рукой нет. Может с прошествием лет появились более простые решения???
Попробуйте сделать всё то, что описано в статье, а headers возьмите те, что есть в репозитории Proxmox. Поищите их так:
apt search pve-headers
И установите:
apt install pve-headers-6.2
У вас версия может быть другая.
Начал с нуля:
Поставил debian+mint, при этом wifi определяется. Обновил headers, поставил скрипт, lan есть.
Установил ядро ProxM (по инструкции с сайта Proxmox), сеть отпала, обновил headers от proxmox, запустил скрипт, lan есть
Установил Install the Proxmox VE packages, сеть отпала, скрипт не выполняется:
Check old driver and unload it.
rmmod r8168
Build the module and install
Skipping BTF generation for /home/nmed/driver/R81/r8168-8.054.00/src/r8168.ko due to unavailability of vmlinux
Warning: modules_install: missing 'System.map' file. Skipping depmod.
DEPMOD 6.8.12-4-pve
load module r8168
Updating initramfs. Please wait.
update-initramfs: Generating /boot/initrd.img-6.8.12-4-pve
Running hook script 'zz-proxmox-boot'..
Re-executing '/etc/kernel/postinst.d/zz-proxmox-boot' in new private mount namespace..
No /etc/kernel/proxmox-boot-uuids found, skipping ESP sync.
Completed.
Установка пакета r8168-dkms так же не проходит.
Установить r8168 из deb не получается просит dkms версии 3.0.11 но ее нет в репозитории.
Оставил попытки на сборке debian+mint
Но выход найден)!:
1. Установил голый proxmox - лан сети нет (при установке определяется только wifi)
2. С диска proxmox установил proxmox-headers-6.8.12-4-pve_6.8.12-4_amd64.deb. При этом указал в /etc/apt/sources.list : deb file:/mnt/ bookworm pve (иначе берется не та директория с диска и нужных deb-ов не находит).
3. С диска debian-12.8.0-amd64-DVD-1.iso поставил build-essential
4. Применил скрипт r8168-8.054.00 - чуда не произошло, но и ошибок как прежде не было.
5. Стал разбираться дальше с сетевыми подключениями. По статье https://umnoe-gelezo.ru/2021/05/438/ (Proxmox. Нет сети после обновления сетевой карты):
Проверяем карты dmesg | grep eth
Выключаем интерфейс на время настройки:
ip link set dev *** down
Меняем интерфейс в /etc/network/interfaces
После изменения запускаем сетевой интерфейс:
ip link set dev *** up
Перезапускаемся и радуемся! сесть есть!
Здравствуйте. Поясните, ибо не шарю: что вы сейчас сделали: скомпилировали модуль ядра, он же драйвер для сетевухи или что-то другое?
Если я сам всё правильно понял, то да. Скомпилировал модуль ядра на основе скачанного драйвера, взамен стандартного, который был в ядре.
Я раньше думал, что для этого нужно компилировать новое ядро. Довольное долгое занятие, вот благодаря этому видео:
https://www.youtube.com/watch?v=1Yc-u5IyufI&t=4461s&ab_channel=SpecialistTV
А оно оказывает вон как :).
Спасибо
Есть такая штука dkms называется. Посмотрите в её сторону. Смысл в том, что при переустановке ядра, подобное, вручную собранное, система пересобирает сама и устанавливает тоже сама. Исходники естественно нужны.
Спасибо, посмотрю. Очень актуально.
Как вариант можно было подключить проверенный USB-LAN Adapter (например, Lenovo или TP-Link - в Linux определяются), и либо с ним все и оставить, либо с ним доустановить с меньшими мучениями нужный драйвер для существующей сетевушки.
Хотя если бы вы пошли таким путем, то не получилось бы этой статьи потом :)
Это первое, что в голову пришло. Но не было под рукой такого устройства.
А что на счет работоспособности такой связки после выхода новой версии драйвера RTL8111/8168/8411 и apt upgrade?
Драйвер ставится вручную, так что apt ugrade к обновлению самого драйвера никакого отношения иметь не будет. А вот после обновления ядра, если я правильно понимаю, надо будет заново в него установить драйвер, который я сохранил на самом сервере. Надо не забывать это делать.