1

I have an odd experience. Scenario: I am writing a Linux installer (based on OpenSUSE 12.2) that runs in an initrd (actually initramfs), and I'm trying to update the bootloader. A copy of the freshly-installed filesystem is mounted on /root.

So I run this command and get this output:

+ echo 'Installing boot loader'
Installing boot loader
+ chroot /root bash -c '(ls -l /lib/modules/*/modules.dep; grub2-install /dev/sda)'
-rw-r--r-- 1 root root 45590 Apr 24 15:32 /lib/modules/3.4.47-default/modules.dep
modprobe: FATAL: Could not load /lib/modules/3.4.47-default/modules.dep: No such file or directory

The error is repeated several times, followed by an "Installation finished. No error reported." message.

If I put this code just before the command though:

mkdir -p /lib/modules/
ln -s ../../root/lib/modules/3.4.47-default/ /lib/modules

it works just fine!

Installing boot loader
Installation finished. No error reported.

Can anyone explain this?

4
  • Are you sure that it's the command in the chroot that's calling modprobe? Make that strace -o /tmp/chroot.strace -f chroot /root bash -c … and look at the trace to see what's going on. Commented Apr 25, 2015 at 12:48
  • Good suggestion. Yes, I had verified it using strace, but as it turns out that's not necessary -- grub2-install is a shell script. You inspired me to search the grub2 source (I had it ready) and discovered this. The comment says "On Linux, we need the efivars kernel modules. If no EFI is available this module just does nothing besides a small hello and if we detect efi we'll load it anyway later. So it should be safe to try to load it here." The line itself is modprobe -q efivars 2>/dev/null || true ;; . Commented Apr 26, 2015 at 18:49
  • But that line executed from grub2-install is executed in the chroot, so changing /lib/modules outside the chroot shouldn't have any effect. Commented Apr 26, 2015 at 19:04
  • Ah, @Gilles, so you understand my point and my question. I ran modprobe using the same parameters by itself in the same environment and it works without error. But I can't imagine anything in the grub2-install shell script that would cause us to escape from the chroot jail before invoking modprobe. I am truly stymied. Commented Apr 27, 2015 at 15:21

1 Answer 1

0

This is Linux module autoloading in action, grub2-install tries mounting many types of filesystems which causes Linux to load the modules the implement them.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .