ubuntu 22.04 の FCドライバインストール

# 課題

対象サーバには Brocade OEM の Emulex LPe35002 というFCカードが刺さっている。

```
$ lspci | grep Emulex
b1:00.0 Fibre Channel: Emulex Corporation LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (rev 10)
b1:00.1 Fibre Channel: Emulex Corporation LPe35000/LPe36000 Series 32Gb/64Gb Fibre Channel Adapter (rev 10)
```

これに ubuntu 22.04 をインストールして FC-SAN のディスクを割り当てようとしたところ、内部ストレージしか認識しない。

以下は RockyLinux 9.1 のインストーラで認識させたもの。 3.64TiB のものが FC-SAN 接続先にあるストレージのディスク。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/579756/a91a01b9-7dc6-9e65-e498-74f1e2928982.png)

色々ググって調べたところ、 ubuntu 22.04 の FCドライバが古いのでは？というQAを見かけた。


ubuntu 22.04 の FCドライバのバージョンは 14.0.0.4
```
$ modinfo lpfc
filename:       /lib/modules/5.15.0-70-generic/kernel/drivers/scsi/lpfc/lpfc.ko
version:        0:14.0.0.4
author:         Broadcom
description:    Emulex LightPulse Fibre Channel SCSI driver 14.0.0.4
license:        GPL
srcversion:     AA59CA7813B3B325F81A3F1
...
```
[Brocade のサイト](https://www.broadcom.com/support/download-search?pg=Storage+Adapters,+Controllers,+and+ICs&pf=Storage+Adapters,+Controllers,+and+ICs&pn=&pa=&po=Emulex&dk=&pl=&l=false)を見ると、最新ドライバは 14.0.639.23 が提供されているがLinux系は RHEL, SUSE しか無い。 (ubuntu 22.04用のソースコードはあるが、ドライバパッケージは未提供)


# FCドライバ更新

Brocadeのサイト [カーネルモジュール用のソースコード](https://docs.broadcom.com/docs/elx_lpfcdriver-ubuntu22.04-14.0.639.23.tar.gz) を取得する。

## ビルド

```
$ tar xzf lpfcdriver-ubuntu22.04-14.0.639.23.tar.gz
$ cd lpfcdriver-ubuntu22.04-14.0.639.23/
$ make -j4
GNUmakefile setting EXTRA_CFLAGS to -DCONFIG_SCSI_LPFC_DEBUG_FS
make -C /lib/modules/5.15.0-71-generic/build M=/tmp/lpfcdriver-ubuntu22.04-14.0.639.23 CONFIG_SCSI_LPFC=m modules
make[1]: Entering directory '/usr/src/linux-headers-5.15.0-71-generic'
warning: the compiler differs from the one used to build the kernel
  The kernel was built by: gcc (Ubuntu 11.3.0-1ubuntu1~22.04.1) 11.3.0
  You are using:           gcc (Ubuntu 11.3.0-1ubuntu1~22.04) 11.3.0
  CC [M]  /tmp/lpfcdriver-ubuntu22.04-14.0.639.23/lpfc_mem.o

  ...

  LD [M]  /tmp/lpfcdriver-ubuntu22.04-14.0.639.23/lpfc.ko
  BTF [M] /tmp/lpfcdriver-ubuntu22.04-14.0.639.23/lpfc.ko
Skipping BTF generation for /tmp/lpfcdriver-ubuntu22.04-14.0.639.23/lpfc.ko due to unavailability of vmlinux
make[1]: Leaving directory '/usr/src/linux-headers-5.15.0-71-generic'
```

## カーネルモジュール更新

現バージョンの確認。

```
$ modinfo lpfc
filename:       /lib/modules/5.15.0-71-generic/kernel/drivers/scsi/lpfc/lpfc.ko
version:        0:14.0.0.4
...
```

念の為バックアップしておく。
```
$ sudo cp /lib/modules/5.15.0-71-generic/kernel/drivers/scsi/lpfc/lpfc.ko /lib/modules/5.15.0-71-generic/kernel/drivers/scsi/lpfc/lpfc.ko.bak
```

モジュール更新し、再ロード

```
$ sudo cp lpfc.ko /lib/modules/5.15.0-71-generic/kernel/drivers/scsi/lpfc/lpfc.ko
$ sudo modprobe lpfc
$ modinfo lpfc
filename:       /lib/modules/5.15.0-71-generic/kernel/drivers/scsi/lpfc/lpfc.ko
supported:      external
version:        0:14.0.639.23
author:         Broadcom
description:    Emulex LightPulse Fibre Channel SCSI driver 14.0.639.23
license:        GPL v2
srcversion:     219A0B35AC907142F4FD9AD
alias:          pci:v000010DFd0000F500sv*sd*bc*sc*i*
alias:          pci:v000010DFd0000F400sv*sd*bc*sc*i*
alias:          pci:v000010DFd0000E300sv*sd*bc*sc*i*
depends:        scsi_transport_fc,nvme-fc
retpoline:      Y
name:           lpfc
vermagic:       5.15.0-71-generic SMP mod_unload modversions 

...

```

以上の操作で 14.0.0.4 -> 14.0.639.23 に更新された。

## 動作確認

割り当てたボリュームを認識したぽい。

```
$ lsscsi
[0:3:111:0]  disk    DELL     PERC H755 Front  5.21  /dev/sda 
[1:0:0:0]    disk    DellEMC  ME5              I200  /dev/sdb 
...
```

multipath でも見えている。

```
$ sudo multipath -ll
mpatha (****************************) dm-4 DellEMC,ME5
size=3.6T features='0' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=50 status=active
...
```