Ubuntu 16.04 HWE内核安装Xtables-addons

05/30/2017

Ubuntu长期支持版的HWE(硬件加强)是快速升级Linux内核的便捷方法,目前Ubuntu 16.04的HWE提供了4.8(linux-generic-hwe-16.04)和4.10(linux-generic-hwe-16.04-edge)两个内核版本。

通常为了采用新的或改进的技术,例如TCP_BBR和更新的KVM等等,Kaijia会将服务器升级到最新的HWE。然而HWE内核通常也会带来一个衍生问题——仅Linux内核获得了升级,动态内核模块(DKMS)等组件在APT仓库中均停留在原先的版本上,因此可能会产生不兼容无法通过编译的问题。这次Kaijia遇到的Xtables-addons DKMS无法通过编译就是在升级到HWE内核后产生的:

——————————
Deleting module version: 2.10
completely from the DKMS tree.
——————————
Done.
Loading new xtables-addons-2.10 DKMS files…
Building only for 4.10.0-21-generic
Building initial module for 4.10.0-21-generic
Error! Build of xt_ACCOUNT.ko failed for: 4.10.0-21-generic (x86_64)
Consult the make.log in the build directory
/var/lib/dkms/xtables-addons/2.10/build/ for more information.

安装了最新的内核时显示了上述错误提示,查看/var/lib/dkms/xtables-addons/2.10/build/make.log编译日志文件可以看到错误位置:

/var/lib/dkms/xtables-addons/2.10/build/extensions/compat_xtables.h: In function ‘par_net’:
/var/lib/dkms/xtables-addons/2.10/build/extensions/compat_xtables.h:86:12: error: ‘const struct xt_action_param’ has no member named ‘net’
return par->net;

错误显示par变量的结构在新内核下发生了变化,在Xtables-addons支持Linux 4.10内核改动的最新提交中可以看到结构变化为了par->state(包含在2.12版以后,而Ubuntu 16.04使用的是2.10版)。需要在HWE内核下成功编译Xtables-addons需要使用使用Ubuntu 17.04的相关包:

手动安装之后即会看到成功编译的提示:

# dkms status
xtables-addons, 2.12, 4.10.0-21-generic, x86_64: installed

7月17日更新:xenial-updates渠道已经向后移植了此版本,现在无需手动下载安装包即可按原步骤顺利安装。