Hetzner - DokuWiki

Installation des r8168-Treibers/ru

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

Одно из решений — это использование официального драйвера Realtek r8168. К сожалению, этот драйвер не включен ни в один дистрибутив. Для CentOS его можно установить из сторонних репозиториев. Для Debian, Ubuntu и большинства других дистрибутивов он должен быть скомпилирован пользователем.

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

Inhaltsverzeichnis

Использование 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 -Uvh http://elrepo.org/elrepo-release-6-4.el6.elrepo.noarch.rpm

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

yum --enablerepo=elrepo install kmod-r8168

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

Использование r8168-kmp из репозитория сетевых драйверов OpenSUSE

OpenSUSE предлагает пакеты модулей ядра kernel module packages (kmp). Для их использования достаточно добавить репозиторий в zypper и установить соответствующий пакет. В примере использовался дистрибутив OpenSUSE с ядром по умолчанию.

cd /etc/zypp/repos.d
wget http://download.opensuse.org/repositories/drivers:/nic/openSUSE_Tumbleweed/drivers:nic.repo
zypper refresh
zypper install r8168-kmp-default

Перед перезагрузкой сервера нужно запретить загрузку модуля r8169.

echo "blacklist r8169" >> /etc/modprobe.d/99-local.conf

После перезагрузки должен быть активен и отображаться в 'lsmod' только модуль r8168.

Установка из исходного кода

Необходимые условия

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

CentOS

Для замены драйвера в CentOS должны быть установлены пакеты '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`

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

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

Компиляция драйвера

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

cd r8168-8.039.00
make modules
# или
make all

Если «make modules» не выдаёт ошибок, то можно заменить драйвер:

screen
cd r8168-8.039.00
./autorun.sh

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


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

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 -u -k

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

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



© 2017. Hetzner Online GmbH. Alle Rechte vorbehalten.