RHEL8 系で Error: Specified qdisc not found. が出たときの対処方法

RHEL8 系(Rocky でも CentOS Stream でも良いが)で netem を利用しようとしたら、Specified qdisc not found. が出た。

$ sudo tc qdisc add dev eth0 root netem delay 100ms
Error: Specified qdisc not found.

netem が存在しないらしい。RHEL 7 系では動いてたのに…そんな馬鹿な

で、netem モジュールを検索すると確かに存在しない。

$ find /lib/modules/$(uname -r) -name "*netem*"

RHEL 7 では 次のように netem モジュールは kernel パッケージに入っていた(デフォルトで入っていた)が、

$ rpm -qf /lib/modules/3.10.0-1160.el7.x86_64/kernel/net/sched/sch_netem.ko.xz
kernel-3.10.0-1160.el7.x86_64

RHEL 8 からは利用頻度の低いモジュールは一式 kernel-modules-extra パッケージに移されたらしい。 ということで現在利用しているカーネルバージョンに合わせて kernel-modules-extra パッケージをインストールすれば解決する。 Rocky や CentOS Stream などの場合、あまり古いパッケージはリポジトリに存在しないので、今回はカーネルもすべて最新版にすることで対応した。

$ sudo yum install -y kernel-modules-extra-$(uname -r)
Last metadata expiration check: 0:14:45 ago on Thu 17 Feb 2022 11:49:00 PM UTC.
No match for argument: kernel-modules-extra-4.18.0-305.3.1.el8.x86_64

$ sudo yum install -y kernel kernel-modules-extra

$ sudo reboot

$ modprobe sch_netem
$ sudo tc qdisc add dev eth0 root netem delay 100ms
$ ping google.com
PING google.com (172.217.175.14) 56(84) bytes of data.
64 bytes from nrt20s18-in-f14.1e100.net (172.217.175.14): icmp_seq=1 ttl=104 time=104 ms
64 bytes from nrt20s18-in-f14.1e100.net (172.217.175.14): icmp_seq=2 ttl=104 time=104 ms