Package: kmod Version: 6-1 Severity: important
I build custom kernels and use them primarily, but I always keep a
Debian kernel installed in case I do something stupid and my custom
kernel ends up unusable.
When kmod-6-1 became available on Sid, I installed it. There was no
reason to reboot at that time, but soon after I decided to test the
kernel update from linux-image-3.2.0-1-amd64 (upstream stable 3.2.7) to
linux-image-3.2.0-2-amd64 (upstream stable 3.2.9). At this point, I had
3 linux-image packages installed,
linux-image-3.2.0-1-amd64
linux-image-3.2.0-2-amd64
linux-image-3.2.9-3+dwlocal1
the latter being my latest custom kernel. I did a reboot to test
3.2.0-2, and was amazed to find that it would not complete the boot
process: I was dropped to the busybox prompt, and was able to scroll
back through the boot messages to find
ALERT: /dev/sda1 does not exist. Dropping to a shell!
Assuming the problem was limited to this newest Debian kernel, I decided
to reboot and prove to myself that the older Debian kernel was still
working. It didn't.
Now in panic mode, I rebooted again to try my custom kernel. It was
fine. I concluded that something else had been installed that was
causing Debian kernels to fail, leaving my own custom kernels
untouched. After a quick look at /var/log/aptitude, I noticed the
recent upgrade of kmod, from 5-2 to 6-1.
I have had enough experience with Sid that I learned to keep old
versions of important packages around; I sometimes clear out
/var/cache/apt/archives, so I regularly copy packages to a backup
directory. So I immediately backed up the 5-2 versions of 'kmod',
'libkmod2', and 'module-init-tools', and then downgraded them all back
to 5-2. Afterwards, I also ran
update-initramfs -k all -u
and then tried rebooting. Both Debian kernels now worked, and my custom
kernel was also still working.
Now, I have some customizations in place regarding GRUB2. Particularly
I have uncommented a line in /etc/default/grub:
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to
Linux
GRUB_DISABLE_LINUX_UUID=true
I do this because my custom kernels do not use an initrd, and attempting
to use the UUID magic for the root device will prevent them from
booting. I suspected that this GRUB option might be causing the
problem, until I listed the contents of a version of an initrd built
with kmod-5-2 installed and one built using version 6-1. I have
attached those two listings (listings.tar.gz), but the diff alone is
most revealing:
$ diff list-initrd.img-3.2.0-2-amd64+kmod-5-2.txt
list-initrd.img-3.2.0-2-amd64+kmod-6-1.txt
60,68d59
< lib/firmware/rtl_nic
< lib/firmware/rtl_nic/rtl8168e-1.fw
< lib/firmware/rtl_nic/rtl8168f-2.fw
< lib/firmware/rtl_nic/rtl8168d-1.fw
< lib/firmware/rtl_nic/rtl8168d-2.fw
< lib/firmware/rtl_nic/rtl8168e-3.fw
< lib/firmware/rtl_nic/rtl8168f-1.fw
< lib/firmware/rtl_nic/rtl8168e-2.fw
< lib/firmware/rtl_nic/rtl8105e-1.fw
146,147d136
< lib/modules/3.2.0-2-amd64/kernel/fs/nfs
< lib/modules/3.2.0-2-amd64/kernel/fs/nfs/nfs.ko
173,174d161
< lib/modules/3.2.0-2-amd64/kernel/fs/lockd
< lib/modules/3.2.0-2-amd64/kernel/fs/lockd/lockd.ko
178,181d164
< lib/modules/3.2.0-2-amd64/kernel/net/sunrpc
< lib/modules/3.2.0-2-amd64/kernel/net/sunrpc/auth_gss
< lib/modules/3.2.0-2-amd64/kernel/net/sunrpc/auth_gss/auth_rpcgss.ko
< lib/modules/3.2.0-2-amd64/kernel/net/sunrpc/sunrpc.ko
204d186
< lib/modules/3.2.0-2-amd64/kernel/drivers/block/loop.ko
241d222
< lib/modules/3.2.0-2-amd64/kernel/drivers/ata/libata.ko
256d236
< lib/modules/3.2.0-2-amd64/kernel/drivers/ata/pata_atiixp.ko
272d251
< lib/modules/3.2.0-2-amd64/kernel/drivers/ata/ahci.ko
278,279d256
< lib/modules/3.2.0-2-amd64/kernel/drivers/ata/libahci.ko
< lib/modules/3.2.0-2-amd64/kernel/drivers/ata/pata_jmicron.ko
292d268
< lib/modules/3.2.0-2-amd64/kernel/drivers/usb/host/ehci-hcd.ko
301d276
< lib/modules/3.2.0-2-amd64/kernel/drivers/usb/storage/usb-storage.ko
309,310d283
< lib/modules/3.2.0-2-amd64/kernel/drivers/usb/core
< lib/modules/3.2.0-2-amd64/kernel/drivers/usb/core/usbcore.ko
318,319d290
< lib/modules/3.2.0-2-amd64/kernel/drivers/i2c/algos
< lib/modules/3.2.0-2-amd64/kernel/drivers/i2c/algos/i2c-algo-bit.ko
329,332d299
< lib/modules/3.2.0-2-amd64/kernel/drivers/hid/usbhid
< lib/modules/3.2.0-2-amd64/kernel/drivers/hid/usbhid/usbhid.ko
< lib/modules/3.2.0-2-amd64/kernel/drivers/hid/hid.ko
< lib/modules/3.2.0-2-amd64/kernel/drivers/hid/hid-apple.ko
365d331
< lib/modules/3.2.0-2-amd64/kernel/drivers/scsi/sr_mod.ko
451d416
< lib/modules/3.2.0-2-amd64/kernel/drivers/scsi/scsi_mod.ko
623d587
< lib/modules/3.2.0-2-amd64/kernel/drivers/net/ethernet/realtek/r8169.ko
689d652
< lib/modules/3.2.0-2-amd64/kernel/drivers/firewire/firewire-ohci.ko
691d653
< lib/modules/3.2.0-2-amd64/kernel/drivers/acpi/thermal.ko
All of the changes reveal that modules were no longer being added to the
initrd with 6-1 installed. Having painstaking crafted my own '.config'
file for my custom kernel, I can tell you that most of these changes
involved options I have built into my custom kernel directly. In short,
these modules do not exist in /lib/modules for my custom kernel because
they are built-in.
Previous versions of 'kmod' did The Right Thing: they caused
'update-initramfs' to include the modules which would be needed by a
Debian kernel into its corresponding initrd. The current version is no
longer doing that. I no longer believe that my local modifications in
/etc/kernel/ and /etc/default/grub are responsible, since kmod-5-2 works
while kmod-6-1 fails with the same settings in /etc.
(No change in behavior was observed when upgrading initramfs-tools from
0.100 to 0.101: only changing the version of 'kmod' causes a change in
system behavior.)
-- System Information:
Debian Release: wheezy/sid
APT prefers unstable
APT policy: (990, 'unstable'), (350, 'experimental')
Architecture: amd64 (x86_64)
Kernel: Linux 3.2.9-3+dwlocal1 (SMP w/4 CPU cores; PREEMPT)
Locale: LANG=en_US.UTF-8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8)
Shell: /bin/sh linked to /bin/dash
listings.tar.gz
Description: GNU Zip compressed data

