Hetzner - DokuWiki

Installation des r8168-Treibers

Der r8169-Treiber für den Realtek-Netzwerkchip funktioniert nicht immer korrekt selbst in den neuesten Kernelversionen. Es können Timeouts entstehen, die Netzwerkkarte zwischen den Zuständen link up/link down wechseln 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. Dieser Treiber ist in keiner Distributionen enthalten. Er kann unter CentOS aus Fremdrepositories nachinstalliert werden. Bei Debian, Ubuntu und anderen Distributionen muß er aus den Quellen selbst kompiliert und aktiviert werden.

Dieser Artikel beschreibt, wie dabei vorzugehen ist.

Inhaltsverzeichnis

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.

Installation aus den Quellen

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`

Herunterladen und Entpacken der Quellen

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

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, daß das Kernelmodul ohne Fehler gebaut werden kann. Sie können dies zuvor durch 'make modules' überprüfen.

cd r8168-8.039.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.039.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.

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ßen wird diese neu erzeugt.

update-initramfs -v -t -u

Abschließen kann der Server neu gebootet werden.

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



© 2016. Hetzner Online GmbH. Alle Rechte vorbehalten.