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-5, CentOS-5 oder SL-5:
rpm -Uvh http://elrepo.org/elrepo-release-5-3.el5.elrepo.noarch.rpm
Für RHEL-6, CentOS-6 oder SL-6:
rpm -Uhv http://elrepo.org/elrepo-release-6-4.el6.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 von r8168-kmp aus dem OpenSUSE NIC drivers repo
OpenSUSE bietet fertige Kernel-Modul-Pakete. Dazu fügt man das Repository Zypper hinzu und installiert je nach Kernel das entsprechende Modulpaket. Hier im Beispiel OpenSuSE 11.4 mit dem -default-Kernel.
cd /etc/zypp/repos.d wget http://download.opensuse.org/repositories/drivers:/nic/openSUSE_11.4/drivers:nic.repo zypper update zypper install r8168-kmp-default
Vor dem abschließenden reboot muß noch verhindert werden, daß der r8169 Treiber geladen wird.
echo "blacklist r8169" >> /etc/modprobe.d/blacklist
Nach dem Neustart sollte der neue Treiber nur noch aktiv sein.
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`
Herunterladen und Entpacken der Quellen
cd /tmp wget http://download.hetzner.de/drivers/r8168-8.027.00.tar.bz2 tar xjf r8168-8.027.00.tar.bz2
Kompilieren des Treibers
cd r8168-8.027.00 make all
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 Debian 5.0 (lenny): echo "blacklist r8169" >> /etc/modprobe.d/blacklist
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 -u -k `uname -r`
Abschließen kann der Server neu gebootet werden.
Nach einer Aktualisierung des Kernels muss der Treiber gegebenenfalls neu kompiliert werden.

