スタンドアローン状態のUbuntuにネットワークドライバをインストールする方法

# 背景
1. Among usっていうゲームやりたくてUbuntuのProtonの設定をいじってました。
2. GPUのドライバがインストールできてなかったことに気づきました。
3. 適当な以下のコマンド打ってみました。

```
sudo ubuntu-drivers autoinstall
```

ネットワークとサウンドが死にました。
もともと、マザーボードのEthernetソケットはドライバインストールが面倒だったので、USB-NICを使ってました。USB-NICは普通に認識できてたのですが、上記操作でそれすら使えなくなりました。なんか他にやっちゃったのか？
ま、とりあえず回復しましょう。
この際なので、マザーボードのEthernetソケット用に設定しましょう。

# 状況調査
以下で現在のカーネルバージョンを調べました。

```
$ uname -r
5.4.0-54-generic
``` 


次に、ネットワークチップの種類を調べました。

```
$ lspci | grep Ether
06:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8125 2.5GbE Controller (rev 05)
```
realtek RTL8125ですね。
所定の場所にドライバが存在するか調べました。すでに調べたカーネルVerのディレクトリ配下です。

```
$ls /lib/modules/5.4.0-54-generic/kernel/drivers/net/ethernet/realtek/
8139cp.ko  8139too.ko
```
RTL8125は無いですね。
こいつを作る必要があります。
RTL8125ドライバ生成用ファイル群は以下Realtek公式ページで取得できます。
https://www.realtek.com/en/component/zoo/category/network-interface-controllers-10-100-1000m-gigabit-ethernet-pci-express-software

以下が使えました。
![Screenshot from 2020-11-22 13-57-46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/485117/89405f40-190a-4edc-5cdf-65fdeec9cbcb.png)

Makefile、autorun.shの中身からドライバの生成にはmake、gccコマンドが必要だとわかるのですが、残念ながらそれらはインストールされていません。ネットも使えないのでapt installもできません。なので別のサブPCでドライバ生成し、それをUSBドライブで持ってくることとします。


# 環境
メインPC:

|  | 詳細 | 備考 |
|:-----------|------------:|:------------:|
| OS | Ubuntu 20.04 | |
| CPU | AMD Ryzen 9 3900XT |  |
| network chip| Realtek RTL8125 |

サブPC:  

|  | 詳細 | 備考 |
|:-----------|------------:|:------------:|
| OS | Ubuntu 18.04 | |
| CPU | Intel(R) Core(TM) i5-8400 |  |



# サブPC作業手順
1. VirtualBox上で、Ubuntu20.04をインストールし、`uname -r`でカーネルVerがメインPCと同一であることを確認。1回目は違ったので、upgradeしたら同一になりました。他の記事など参考にしてください。[これとか](https://kazuhira-r.hatenablog.com/entry/2020/02/28/000625)

2. 先述の公式ファイル群をVirtualBox上でダウンロードし、そのフォルダにて`./autorun.sh`を実行します。おそらくなにか足りない旨の表示がありますが、3の手順でドライバが生成されてれば問題ないです。

3. VirutualBox上で以下を実行し、`r8125.ko`があることを確認。

```
$ ls /lib/modules/5.4.0-54-generic/kernel/drivers/net/ethernet/realtek/
8139cp.ko  8139too.ko  atp.ko  r8125.ko  r8169.ko
```

4.VirutualBox上からサブPCに`r8125.ko`を移動。これはscpや共有フォルダなどで移動してください。

5.USBドライブを使って`r8125.ko`をサブPCからメインPCの以下フォルダに移動。

```
/lib/modules/5.4.0-54-generic/kernel/drivers/net/ethernet/realtek/
```

# メインPC作業手順
1. 以下コマンドで一時的にドライバとして適用。

 ```
 $ sudo insmod /lib/modules/5.4.0-54-generic/kernel/drivers/net/ethernet/realtek/r8125.ko
 ```

2.数秒後、ネットワークが復活していることを確認。

3.確認できたら、再起動後も有効化されるように以下コマンドを打つ。

```
sudo depmod -a

```

以上。

# (おまけ)サウンド復活方法。
設定の音声のOutputDeviceにて、Dummy Outputのみが出力されている状態でした。
以下コマンドを打ってみました。inxiはaptでインストールしました。

```
$ inxi -SMA
System:
  Host: ueda-System-Product-Name Kernel: 5.4.0-54-generic x86_64 bits: 64 
  Desktop: Gnome 3.36.4 Distro: Ubuntu 20.04.1 LTS (Focal Fossa) 
Machine:
  Type: Desktop Mobo: ASRock model: B550M Steel Legend 
  serial: <superuser/root required> BIOS: American Megatrends v: P1.10 
  date: 06/11/2020 
Audio:
  Device-1: NVIDIA GP107GL High Definition Audio driver: N/A
  Device-2: AMD Starship/Matisse HD Audio driver: N/A 
  Sound Server: ALSA v: k5.4.0-54-generic
```

AudioのdriverがN/Aになってます。
このdriverは以下コマンド実行でインストールされました。

```
sudo apt install linux-modules-extra-`uname -r`
```

もう一度見てみます。

```
$ inxi -SMA
System:
  Host: ueda-System-Product-Name Kernel: 5.4.0-54-generic x86_64 bits: 64 
  Desktop: Gnome 3.36.4 Distro: Ubuntu 20.04.1 LTS (Focal Fossa) 
Machine:
  Type: Desktop Mobo: ASRock model: B550M Steel Legend 
  serial: <superuser/root required> BIOS: American Megatrends v: P1.10 
  date: 06/11/2020 
Audio:
  Device-1: NVIDIA GP107GL High Definition Audio driver: snd_hda_intel 
  Device-2: AMD Starship/Matisse HD Audio driver: snd_hda_intel 
  Sound Server: ALSA v: k5.4.0-54-generic
```

driverがsnd_hda_intelになって、音も出るようになりました。

# あとがき
7年ほどUbuntu縛り生活をしてきて、ネット断絶は良く発生してました。その度毎にOS再インストールなどのダサい回避策を行ってきていましたが、上記対応が出来たことでUbuntistとしてレベルアップした気がします。
今回はVirtualBoxでクロスコンパイル的にドライバを生成しましたが、makeの引数指定でスマートに生成出来たかもしれませんね。作業中調べてもなかなかヒットしなかったのでその方法は諦めました。詳しい人いたら教えてください。

make,gccのインストールはOSインストール直後にやっておくべきですね。そうしたら、メインPCでコンパイルすれば良いだけの話になってたので。