Ubuntu server 22.04でWLI UC GNPを使えるようにした

Raspberry Pi 2B に入れたUbuntu Server 22.04で、Baffaloの古いUSB WIFI [WLI UC GNP](https://www.buffalo.jp/product/series/WLI-UC-GNP)を使えるようにしたときの手順

# 最初に
## 環境
 * Raspberry Pi 2B
 * Ubuntu 22.04 LTS
 * Baffalo WLI UC GNP
### HWの認識はされている様子
とりあえずraspberry pi のUSBに刺したらなにかは認識はされている
```
$ lsusb
Bus 001 Device 004: ID 0411:019e BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNP Wireless LAN Adapter
```

がwlanが無くWIFIデバイスとしては認識されてない
```
$ ip add
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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether b8:27:eb:d2:2b:d0 brd ff:ff:ff:ff:ff:ff
```

# 解決方法
## デバイスの認識
### linux-modules-extraのインストール
Ubuntu serverだと必要なモジュールが入ってないので、入れておく。これを行わないと`modprobe`が失敗する。aptを使うので有線でEthernetにつないでおく。
```
# apt-get install linux-modules-extra-$(uname -r)
```

### デバイスのIDを確認する
```
$ lsusb
Bus 001 Device 004: ID 0411:019e BUFFALO INC. (formerly MelCo., Inc.) WLI-UC-GNP Wireless LAN Adapter
```
ここからvendorのIDが`0411`, productのIDが`019e`だとわかる

### モジュールオプション用のファイルを追加する
環境によってmodprobeの場所が違うかもしれないので、`which modprobe`などでパスを確認するとよい。先ほどのIDも使用する。
```
# vi /etc/modprobe.d/wireless.conf 
install rt2800usb /usr/sbin/modprobe --ignore-install rt2800usb $CMDLINE_OPTS;/bin/echo "0411 019e" > /sys/bus/usb/drivers/rt2800usb/new_id
```

### デバイス管理用のファイルを追加する
接続時に読み込まれるように設定する。先ほどのIDを入れてmodprobeされるようにしておく。
```
# echo 'ACTION=="add",SUBSYSTEM=="usb",ATTR{idVendor}=="0411",ATTR{idProduct}=="019e",RUN+="/usr/sbin/modprobe -qba rt2800usb"'
 > /etc/udev/rules.d/99-wireless.rules 
```

### デバイスが読み込まれているか確認
再起動するなりUSBをさしなおすなどしてから
```
$ ip add
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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether b8:27:eb:d2:2b:d0 brd ff:ff:ff:ff:ff:ff
3: wlx0024a56bad35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:24:a5:6b:ad:35 brd ff:ff:ff:ff:ff:ff
```
`wlx0024a56bad35`とかいうデバイスが認識されている様子。ここは人によって変わると思われる。wlan0とか。

## wifiの設定
### 設定ファイルの追加
`/etc/netplan/99-network.yaml`など適当なyamlファイルを作って以下のように設定しておく。さっきのデバイス名が`wlx0024a56bad35`だったので、そのように設定。
```
network:
    version: 2
    wifis:
        renderer: networkd
        wlx0024a56bad35:
            access-points:
                "set your SSID":
                    password: "set your WIFI password"
            dhcp4: true
            optional: true
```

### wifi設定の反映
```
# netplan apply
```

### 確認
WIFIが繋がってIPが取れた
```
$ ip add
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: eth0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether b8:27:eb:d2:2b:d0 brd ff:ff:ff:ff:ff:ff
3: wlx0024a56bad35: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 00:24:a5:6b:ad:35 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.21/24 metric 600 brd 192.168.0.255 scope global dynamic wlx0024a56bad35
       valid_lft 81900sec preferred_lft 81900sec
    inet6 240f:38:31be:1:224:a5ff:fe6b:ad35/64 scope global dynamic mngtmpaddr noprefixroute
       valid_lft 267sec preferred_lft 267sec
    inet6 fe80::224:a5ff:fe6b:ad35/64 scope link
       valid_lft forever preferred_lft forever
```
# 補足
## 参考記事
### ドライバ関連
下記からWLI UC GNPのdriverがrt2800usbであると推測した
* [debian wiki rt2800usb](https://wiki.debian.org/rt2800usb)
* [OpenRTM-aist USB無線LANデバイスのリスト](https://www.openrtm.org/openrtm/ja/content/%E3%82%AB%E3%83%BC%E3%83%8D%E3%83%AB%E3%81%A8%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%A9%E3%83%B3%E3%83%89%E3%81%AE%E8%A8%AD%E5%AE%9A-%E7%84%A1%E7%B7%9Alan%E3%83%89%E3%83%A9%E3%82%A4%E3%83%90%E7%B7%A8)