Question:
AWS docs state that you need to build the source to get enhanced networking enabled for Ubuntu AMIs:
http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/sriov-networking.html#enhanced-networking-ubuntu
The current AMI for us-west-2 xenial, ami-835b4efa, fails with:
Building module:
cleaning build area....
cd src/; make BUILD_KERNEL=4.4.0-1020-aws....(bad exit status: 2)
ERROR (dkms apport): binary package for ixgbevf: 3.1.2 not found
Error! Bad return status for module build on kernel: 4.4.0-1020-aws (x86_64)
Consult /var/lib/dkms/ixgbevf/3.1.2/build/make.log for more information.
Answer:
This is a problem with the AWS kernel naming convetion.
Looking at the log file:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
root@ip-10-16-80-225:/home/ubuntu# cat /var/lib/dkms/ixgbevf/3.1.2/build/make.log DKMS make.log for ixgbevf-3.1.2 for kernel 4.4.0-1020-aws (x86_64) Wed Jun 28 15:34:22 PDT 2017 make -C /lib/modules/4.4.0-1020-aws/build SUBDIRS=/var/lib/dkms/ixgbevf/3.1.2/build/src modules make[1]: Entering directory '/usr/src/linux-headers-4.4.0-1020-aws' CC [M] /var/lib/dkms/ixgbevf/3.1.2/build/src/ixgbevf_main.o In file included from /var/lib/dkms/ixgbevf/3.1.2/build/src/ixgbevf.h:41:0, from /var/lib/dkms/ixgbevf/3.1.2/build/src/ixgbevf_main.c:53: /var/lib/dkms/ixgbevf/3.1.2/build/src/kcompat.h:755:2: error: #error UTS_UBUNTU_RELEASE_ABI is too large... #error UTS_UBUNTU_RELEASE_ABI is too large... ^ scripts/Makefile.build:258: recipe for target '/var/lib/dkms/ixgbevf/3.1.2/build/src/ixgbevf_main.o' failed |
it’s complaining about UTS_UBUNTU_RELEASE_ABI
Ubuntu kernel docs state that the kernel version’s 4th number is the ABI, https://wiki.ubuntu.com/KernelTeam/BuildSystem/ABI, but the current AWS kernel version is:
Linux ip-10-16-89-81 4.4.0-1020-aws
Looking at the offending code in /usr/src/ixgbevf/src/kcompat.h:
1 2 3 4 |
#if UTS_UBUNTU_RELEASE_ABI > 255 #error UTS_UBUNTU_RELEASE_ABI is too large... #endif /* UTS_UBUNTU_RELEASE_ABI > 255 */ |
one can see this won’t fly, 1020 being > than 255
Here’s a script that I use as a custom package postinst to fix this. This script can also be run directly from a shell if you have the source tgz from here https://sourceforge.net/projects/e1000/files/ixgbevf%20stable/3.1.2/ in ~/
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
%> cat src/deb/control/postinst #!/bin/bash -e [ "${DEBUG}" ] && set -x cd ~/ixgbevf ver="3.1.2" tar -xzf ~/ixgbevf-${ver}.tar.gz rm -rf /usr/src/ixgbevf-${ver} mv ixgbevf-${ver} /usr/src/ touch /usr/src/ixgbevf-${ver}/dkms.conf kernelver=$(uname -r) cat <<-EOT > /usr/src/ixgbevf-${ver}/dkms.conf PACKAGE_NAME="ixgbevf" PACKAGE_VERSION="${ver}" CLEAN="cd src/; make clean" MAKE="cd src/; make BUILD_KERNEL=\${kernelver}" BUILT_MODULE_LOCATION[0]="src/" BUILT_MODULE_NAME[0]="ixgbevf" DEST_MODULE_LOCATION[0]="/updates" DEST_MODULE_NAME[0]="ixgbevf" AUTOINSTALL="yes" EOT # Hack for /usr/src/ixgbevf-3.1.2/src/kcompat.h:755:2: error: #error UTS_UBUNTU_RELEASE_ABI is too large... # #if UTS_UBUNTU_RELEASE_ABI > 255 # sed -i 's/#if UTS_UBUNTU_RELEASE_ABI > 255/#if UTS_UBUNTU_RELEASE_ABI > 99255/' /usr/src/ixgbevf-${ver}/src/kcompat.h dkms remove ixgbevf -v ${ver} --all 2>/dev/null || true dkms add -m ixgbevf -v ${ver} dkms build -m ixgbevf -v ${ver} dkms install -m ixgbevf --all dkms autoinstall -m ixgbevf update-initramfs -c -k all modinfo ixgbevf |
I’ve notified AWS of this, but in the interim, hopefully this will save someone else the WTF moment of ‘this is not what I wanted to do today’
Edit:
Got a followup from AWS – They are pushing this out to the Intel driver support team. It’s the driver’s check that’s assuming the ABI < 255 that is broken, not the AWS kernel versioning scheme.