Hi, I packaged a few of Intel's out of tree NIC drivers from http://sourceforge.net/projects/e1000/ as dkms based .debs and included them in a custom grml image.
I'll explain how; if there is interest, I can also share my packages (although, as you'll see, they're likely sub-par, because I did not take the time to really understand what I was doing; in particular, I fear the e1000e module may not always build correctly at grml-live time, while it builds correctly on the live system). 1. I grabbed some tarballs from http://sourceforge.net/projects/e1000/: -rw-r--r-- 1 root root 269997 Sep 5 16:25 e1000e-2.5.4.tar.gz -rw-r--r-- 1 root root 303648 Sep 17 02:23 igb-5.0.6.tar.gz -rw-r--r-- 1 root root 362747 Sep 30 23:21 ixgbe-3.18.7.tar.gz -rw-r--r-- 1 root root 140096 Sep 30 23:31 ixgbevf-2.11.3.tar.gz 2. I extracted each. 3. I moved the contents of foo-1.2.3/src to foo-1.2.3 itself in each. 4. I created a dkms.conf like the following in the root of every driver root directory (i.e. foo-1.2.3/): AUTOINSTALL="yes" BUILT_MODULE_NAME[0]="igb" CLEAN="make clean" DEST_MODULE_LOCATION="/updates" DEST_MODULE_NAME[0]="igb" PACKAGE_NAME="igb" PACKAGE_VERSION="5.0.6" 5. I made sure the Makefiles get the kernel version to build for from the KERNELRELEASE ennvar (not BUILD_KERNEL or similar), because this is what dkms sets: sed -i 's/BUILD_KERNEL/KERNELRELEASE/g' Makefile (In at least one case, I also replaced an #ifdef CONFIG_PM_SLEEP with #ifdef CONFIG_PM in netdev.c because the module didn't build for my kernel otherwise, but this problem doesn't manifest with the grml kernel because it defines either both or neither.) 6. I issued the following dkms commands (from the source directories): dkms add -m foo -v 1.2.3 dkms mkdeb -m foo -v 1.2.3 --source-only (Naturally, you have to replace 'foo' with the name of the module and 1.2.3 with the actual version number.) The second command will create a .deb and dump it somewhere under /var/lib/dkms/. 7. I imported the .debs into my private repository (managed by reprepro). 8. I installed grml-live. I created a new fai 'class', called EXTRANIC. This involved creating the following files: /etc/grml/fai/config/hooks/instsoft.EXTRANIC (mode 755): #!/bin/bash set -u set -e . "$GRML_LIVE_CONFIG" $ROOTCMD apt-get --yes --force-yes install \ dkms build-essential linux-headers-3.10-1-grml-amd64 (You'll note this is inelegant because it hardcodes the kernel version; the point here is to make sure the kernel-headers are already installed by the time the driver packages are installed.) /etc/grml/fai/config/scripts/EXTRANIC/50-dkms (mode 755): #!/bin/zsh set -u set -e . "$GRML_LIVE_CONFIG" for kernelversion in $(${=ROOTCMD} sh -c 'ls -1 /boot/vmlinuz-*' \ | sed 's@.*boot/vmlinuz-@@'); do echo "Building dkms modules for kernel $kernelversion." ${=ROOTCMD} /etc/kernel/postinst.d/dkms "$kernelversion" done (This may not be necessary. It attempts to build all dkms modules once more, after all requested packages have been installed.) /etc/grml/fai/config/package_config/EXTRANIC: e1000e-dkms igb-dkms ixgbe-dkms ixgbevf-dkms broadcom-sta-dkms r8168-dkms (Yeah, so not just Intel. The others come from regular Debian.) /etc/grml/fai/config/files/etc/apt/sources.list.d/myrepo.list/EXTRANIC: (Contains the deb http://... line for my repository.) /etc/grml/fai/config/package_config/ZFSONLINUX.asc: (Contains the public key of the repository signing key; I'm not sure this is really the correct way of injecting it in the build process.) 9. In /etc/grml/grml-live.local, I have: OUTPUT=/tmp/grml/grml-live SUITE="sid" FAI_DEBOOTSTRAP="sid http://cdn.debian.net/debian" VERSION=$(date +%F) RELEASENAME="grml64-extranic" GRML_NAME="grml64-extranic" HOSTNAME="grml-extranic" ARCH="amd64" DISTRI_NAME="grml-extranic" NO_ADDONS_BSD4GRML='1' EXIT_ON_MISSING_PACKAGES='1' DEFAULT_BOOTOPTIONS="ssh=sekrit" # Be sure you understand what this does before using it 10. I built a new iso using the following command: echo 'y\nn\ny\ny'\ | env -u TMPDIR -u TMP \ nice -n 20 \ grml-live -A -u -e /path/to/grml64-full_sid_20131001.iso \ -c DEBORPHAN,GRMLBASE,RELEASE,AMD64,IGNORE,EXTRANIC I'm posting this in the hope someone finds it useful. I'm not subscribed to the list, so please Cc: me on replies. The resulting image is larger than regular grml as it includes build-essential and its dependencies; if that's a problem, I suppose you can add a script after 50-dkms that purges now-unneeded packages. Incidentally, zfsonlinux can be added to grml in much the same way (that was the original point of the exercise for me). András -- At some point in the project you're going to have to break down and finally define the problem. _______________________________________________ Grml mailing list - [email protected] http://ml.grml.org/mailman/listinfo/grml join #grml on irc.freenode.org grml-devel-blog: http://blog.grml.org/
