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

Installation des r8168 Treibers

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

Einleitung

Der r8169-Treiber für den Realtek-Netzwerkchip funktioniert bis zur Kernelversion 4.16 nicht immer korrekt. Es können Timeouts entstehen, die Netzwerkkarte zwischen den Zuständen link up/link down wechseln sowie Bandbreitenprobleme oder sogar Systemabstürze vorkommen.

Eine Lösung des Problems besteht in der Installation des offiziellen r8168 Treibers von Realtek statt dem r8169 des Linux Kernels. Er kann aus Fremdrepositories nachinstalliert oder selbst kompiliert werden. Alternativ kann der Kernel auf Version 4.17+ aktualisiert werden.

Dieser Artikel beschreibt, wie dabei vorzugehen ist.

Option A - Installation von kmod-r8168 aus elrepo.org

Die elrepo.org-Webseite bietet zusätzliche Pakete rund um Redhat Enterprise Linux Distributionen an, zu denen auch CentOS gehört. Um Pakete aus diesem Repository nutzen zu können, muss man dieses zunächst im System einbinden.

HINWEIS: Wenn kein Standard-Kernel verwendet wird (Virtuozzo, OpenVZ, etc.) muss das Modul selbst kompiliert werden!

Zuerst muß der öffentliche GPG-Schlüssel importiert werden.

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

Für RHEL-6, CentOS-6 oder SL-6:

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

Für RHEL-7, CentOS-7 oder SL-7:

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

Zum Schluß kann nun einfach das Paket mit dem neuen Kernel-Modul installiert werden.

yum --enablerepo=elrepo install kmod-r8168

Nach einem Neustart wird der geänderte Treiber verwendet. Er bleibt auch nach einer Aktualisierung des Kernels aktiv.

Option B - Installation aus den Quellen

Schritt 1 - Voraussetzungen

Es sollte zunächst der neueste Kernel via yum beziehungsweise apt-get installiert werden und gebootet sein.

CentOS

Zum Übersetzen müssen nun noch die Header-Pakete des Kernels, kernel-devel und kernel-headers, sowie der Compiler installiert werden, um den Treiber zu übersetzen:

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

Debian/Ubuntu

Bei Debian/Ubuntu hängt der Name des Header-Pakets vom ausgewählten Kernel ab. Alle weiteren zur Übersetzung notwendigen Pakete werden durch build-essentials installiert:

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

Proxmox

Bei Proxmox liegen die Header im Paket pve-headers

aptitude install pve-headers-`uname -r`

Schritt 2 - Herunterladen und Entpacken der Quellen

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

Schritt 3 - Kompilieren des Treibers

Das Paket enthält ein autorun.sh Skript, welches automatisch den Treiber kompiliert und den vorhanden r8169 Treiber ersetzt. Hierbei wird die Netzwerkverbindung getrennt. Sie sollten dieses Skript daher in einer screen-Sitzung starten und nur dann benutzen, wenn Sie sich absolut sicher sind, dass das Kernelmodul ohne Fehler gebaut werden kann. Sie können dies zuvor durch make modules überprüfen.

cd r8168-8.046.00
make modules

oder

make all

Falls bei make modules keine Fehler aufgetreten sind, können Sie den Treiber im laufenden System ersetzen. Hierbei wird die Netzwerkverbindung unterbrochen und der r8169 dauerhaft deaktiviert!

# screen
# cd r8168-8.046.00
# ./autorun.sh

Falls Sie keine Unterbrechung im laufenden Betrieb möchten oder den r8169 Treiber nur temporär deaktivieren möchten, können Sie stattdessen den Treiber wie unten beschrieben aktivieren.

Schritt 4 - Aktivieren des Treibers

CentOS

In der Datei /etc/modprobe.conf muss der zuständige Treiber für die Schnittstelle `eth0 geändert werden. Hierfür muss der Eintrag

alias eth0 r8169

zu

alias eth0 r8168

geändert werden.

Der kompilierte Treiber muss nun noch aktiviert werden. Da der Server währenddessen für einige Sekunden nicht übers Netzwerk erreichbar sein wird, werden die nötigen Befehle in ein Shell-Skript geschrieben.

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

Das angelegte Skript ausführen:

sh /tmp/r8168

Nach wenigen Sekunden sollte der Server mit dem neuen Netzwerkkartentreiber wieder übers Netzwerk erreichbar sein. Das Arbeitsverzeichnis kann nun gelöscht werden:

rm -rf /root/r8168

Debian/Ubuntu

Nach der Installation des Treibers müssen zunächst die Modulabhängigkeiten aktualisiert werden:

depmod -a

Als erstes muss verhindert werden, dass der Kernel den r8169 Treiber automatisch lädt. Hinweis: Sind zusätzliche Gbit-Netzwerkkarten im Server verbaut, darf der Treiber nicht auf die Blacklist gesetzt werden.

Ubuntu / Debian 6.0 (squeeze):

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

Als nächstes wird das Einbinden des neuen Treibers in die initrd erzwungen. Dies sorgt auch bei zusätzlich eingebauten Netzwerkkarten dafür, daß das r8168-Modul vor dem r8169-Modul geladen wird.

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

Anschließend wird diese neu erzeugt.

update-initramfs -v -t -u

Abschließend kann der Server neu gebootet werden.

Nach einer Aktualisierung des Kernels muss der Treiber gegebenenfalls neu kompiliert werden.

Schluss

Hier wurden zwei verschiedene Wege gezeigt, das Treiberproblem bei Realtek-Netzwerkchips zu beheben

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