Get Rewarded! We will reward you with up to €50 credit on your account for every tutorial that you write and we publish!

Установка драйвера r8168

profile picture
Author
Hetzner Online
Published
2019-03-08
Time to read
4 minutes reading time

Введение

Linux r8169 драйвер для сетевых чипов Realtek не всегда работает корректно в ядре 4.16 и более ранних версиях. Могут случаться тайм-ауты, частые смены состояний link up/link down, проблемы с производительностью и даже крах системы.

Одно из решений — это использование официального драйвера Realtek r8168 (вместо r8169). Его можно установить из сторонних репозиториев или скомпилировать самостоятельно. Также можно обновить ядро до версии 4.17+.

Эта статья описывает, как установить сетевой драйвер.

Вариант А - Использование kmod-r8168 из elrepo.org

ELRepo — это RPM репозиторий пакетов для Enterprise Linux. ELRepo поддерживает Red Hat Enterprise Linux и её ответвления (CentOS, Scientific Linux и другие). Это самый простой способ получить r8168 драйвер для стандартных ядер.

ПРИМЕЧАНИЕ: Если используется особенное ядро: как Virtuozzo, OpenVZ или что-то подобное, то ПРИДЁТСЯ скомпилировать модуль самостоятельно!

Импорт публичного ключа:

rpm --import http://elrepo.org/RPM-GPG-KEY-elrepo.org

Установка ELRepo для RHEL 6, CentOS 6 или SL 6:

rpm -Uhv http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

Для RHEL 7, CentOS 7 или SL 7:

rpm -Uvh http://www.elrepo.org/elrepo-release-7.0-2.el7.elrepo.noarch.rpm

Установка kmod-r8168 Realtek r8168 драйвера:

yum --enablerepo=elrepo install kmod-r8168

Новый драйвер будет использован системой после перезагрузки. Он остаётся активным даже после обновления ядра.

Вариант Б - Установка из исходного кода

Шар 1 - Необходимые условия

Пожалуйста, убедитесь, что у вас работает самая последняя версия ядра с помощью команд yum или apt-get и перезагрузки сервера.

CentOS

Для замены драйвера в CentOS должны быть установлены пакеты kernel, kernel-devel и kernel-headers, а также компилятор:

yum install gcc gcc-c++ kernel-devel kernel-headers

Debian/Ubuntu

В Debian/Ubuntu название пакета заголовочных файлов зависит от выбранного ядра. Это может быть, например linux-headers-generic или linux-headers-server. Все остальные необходимые для сборки пакеты будут уставлены вместе пакетом build-essentials:

aptitude install build-essential linux-headers-`uname -r`

Proxmox

В Proxmox заголовочные файлы расположены в пакете pve-headers

aptitude install pve-headers-`uname -r`

Шаг 2 - Получение исходного кода

cd /tmp
wget http://mirror.hetzner.de/tools/Realtek/drivers/r8168-8.046.00.tar.bz2
tar xf r8168-8.046.00.tar.bz2

Шаг 3 - Компиляция драйвера

В пакете содержится скрипт autorun.sh, компилирующий драйвер и заменяющий используемый в настоящий момент драйвер r8169. При замене драйвера прерывается сетевое соединение — запускайте скрипт в сессии screen, чтобы выполнение скрипта гарантированно не прервалось. Также, чтобы убедиться в том, что модуль компилируется, можно вручную выполнить команду make modules.

cd r8168-8.046.00
make modules

или

make all

Если make modules не выдаёт ошибок, то можно заменить драйвер. В этом случае сетевое соединение будет прервано и драйвер r8169 отключится!

screen
cd r8168-8.046.00
./autorun.sh

Если вы не хотите прерывать работу системы или же хотите лишь временно отключить драйвер r8169, то можно скомпилировать драйвер, как это показано ниже.

Шаг 4 - Активирование нового драйвера

CentOS

Необходимо изменить драйвер для eth0. Для этого в файла /etc/modprobe.conf строка

alias eth0 r8169

должна быть заменена на

alias eth0 r8168

Для активирования нового драйвера создаём простой shell-скрипт, который выполняет необходимые действия.

echo "rmmod r8169" > /tmp/r8168
echo "depmod -a" >> /tmp/r8168
echo "modprobe r8168" >> /tmp/r8168
echo "service network restart" >> /tmp/r8168
echo "service ipaliases restart" >> /tmp/r8168

Запускаем скрипт:

sh /tmp/r8168

Через несколько секунд сервер должен вернуться в онлайн уже с новым сетевым драйвером. После этого можно удалить рабочую директорию:

rm -rf /root/r8168

Debian/Ubuntu

После установки драйвера обновите зависимости модуля.

depmod -a

Сначала сетевой драйвер r8169 необходимо занести в blacklist, чтобы предотвратить его загрузку ядром. Примечание Если на сервере установлены дополнительные сетевые интерфейсы, то модуль заносить в blacklist не надо.

Ubuntu/Debian 6.0 (Squeeze):

echo "blacklist r8169" >> /etc/modprobe.d/blacklist.conf

Далее надо указать, что драйвер должен быть включен в initrd. В случае если в сервере установлены дополнительные сетевые карты, это обеспечит загрузку модуля r8168 до загрузки r8169.

echo "r8168" >> /etc/initramfs-tools/modules

После этого надо пересоздать initrd.

update-initramfs -v -t -u

Теперь можно перезагрузить сервер.

После обновления ядра драйвер, возможно, придётся скомпилировать заново.

Вывод

Любой из двух способов, показанных здесь, должен устранить проблемы с сетевым чипом Realtek.

Want to contribute?

Get Rewarded: Get up to €50 in credit! Be a part of the community and contribute. Do it for the money. Do it for the bragging rights. And do it to teach others!

Report Issue

Discover our

Dedicated Servers

Configure your dream server. Top performance with an excellent connection at an unbeatable price!

Want to contribute?

Get Rewarded: Get up to €50 credit on your account for every tutorial you write and we publish!

Find out more