Realtek 8125 NIC をCentOS8で動かす

# 最初の出会い

私が入手したのは、AREA SD-PE25GLAN-1L というパッケージの商品でした。
適当に選びました。
大体どれでも使えるよな。って軽い気持ちでした。
なんでも2.5Gbpsだとかで凄いってことだったので。

# お持ち帰り

家について母艦の富士通PRIMERGY TX1310 M3に取り付けました。

     # ip a

してみても本体のLANポートしか認識されません。
これは・・・・少し冷や汗が流れ、鼓動が大きく速くなるのが分かりました。
おちついて、

    # lspci
       :
    00:1f.6 Ethernet controller: Intel Corporation Ethernet Connection (2) I219-LM (rev 31)
    01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. Device 8125

Realtek 8125って事じゃないか、カニさんチップなんてポピュラーだから大丈夫って思っていたけどそうでもなかった。

# ドライバを探す in 自マシン

落ち着き払って

    # ls -l /lib/modules/4.18.0-147.8.1.el8_1.x86_64/kernel/drivers/net/ethernet/realtek/
    -rw-r--r-- 1 root root   15348 Apr  9 23:03 8139cp.ko.xz
    -rw-r--r-- 1 root root   16936 Apr  9 23:03 8139too.ko.xz
    -rw-r--r-- 1 root root   33444 Apr  9 23:03 r8169.ko.xz

ない。8125の文字がない。
8139だって8169だって大は小を兼ねるでダメなの？！
駄目です。と冷酷無比な声が聞こえた。

# ドライバを探す 本家サイトで

そこで、本家に行きました。

[Realtek PCIe FE/GBE/2.5G/Gaming Ethernet Family Controller Software](https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software)

ここで、一覧表示されるものの中でUnix(Linux)のセクションにあるドライバの中から

![Screenshot from 2020-05-01 23-44-08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/128548/170841f2-10c8-b095-37a6-58b73e35fb81.png)

**2.5G Ethernet LINUX driver r8125 for kernel up to 4.15**

を選択してダウンロードします。
メールアドレスを聞かれて、無意味な英数字を入力させられます。

# コンパイル

展開するとほぼすべてmode 777でファイルが展開されます。
気持ちが悪いので autorun.sh 以外はxビットを落としたり、wビットを落としたりしました。(まったく個人的嗜好なので)
サイトのdescriptionにもあるようにkernel up to 4.15のためなのか解りませんが、このままautorun.shしてもエラーになります。そこで、足りないものが解ったのでinstallします。
## ここからが重要
私の母艦はファイルサーバにするつもりだったので開発キットの類は一切インストールしていなかったのでした。そのため、コンパイラがないだとか、カーネルインクルードファイルがないだとか・・・・
それらの問題を一気に解決する呪文です。

    # dnf group install "Development Tools"
    # dnf install elfutils-libelf-devel

この呪文の後にautorun.shのあるディレクトリにcdして、

    # ./autorun.sh

を入力したらインストールしてinsmodまでしてくれます。そこで、ip a したら、

    # ip a
    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host 
           valid_lft forever preferred_lft forever
    2: eno2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 4c:52:62:58:df:8d brd ff:ff:ff:ff:ff:ff
        inet 192.168.31.183/24 brd 192.168.31.255 scope global dynamic noprefixroute eno2
           valid_lft 161937sec preferred_lft 161937sec
        inet6 2001:a452:708:6500:4e52:62ff:fe58:df8d/64 scope global dynamic mngtmpaddr 
           valid_lft 13621sec preferred_lft 11821sec
        inet6 fe80::4e52:62ff:fe58:df8d/64 scope link noprefixroute 
           valid_lft forever preferred_lft forever
    3: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
        link/ether 00:13:3b:b0:1e:b3 brd ff:ff:ff:ff:ff:ff

ここで8125は3番目のenp1s0に相当します。

# 最後に
再起動させてみて起動後にちゃんとNICが認識されているか確認して大丈夫だったら完成です。

## わすれずに depmod
再起動後にNICが認識されていないケースの殆どは、depmod忘れです。

    # depmod -a

などとして、/lib/modules/4.18.0-147.8.1.el8_1.x86_64/modules.dep の内容の更新を忘れずに。

## 確認してみる

    # ls -l /lib/modules/4.18.0-147.8.1.el8_1.x86_64/kernel/drivers/net/ethernet/realtek/                 
    total 2596                                                                                                          
    -rw-r--r-- 1 root root   15348 Apr  9 23:03 8139cp.ko.xz                                                            
    -rw-r--r-- 1 root root   16936 Apr  9 23:03 8139too.ko.xz                                                           
    -rw-r--r-- 1 root root 2582552 May  1 20:52 r8125.ko                                                                
    -rw-r--r-- 1 root root   33444 Apr  9 23:03 r8169.ko.xz

## xz圧縮形式にしなくて良いのか
わからないけど、とりあえずこのままにしてましたが、xzコマンドで簡単に圧縮できるので

    # xz r8125.ko

として圧縮しましょう。なお、この圧縮をしたあとは、modules.depの内容更新のため、再度、

    # depmod -a

を忘れずに。

## kernel updateの時に
自動的にドライバを更新させる方法はしらないので原始的に毎回autorunしているのでそこらへんはなんとかしていきたいと思っています。