AUR keeps a running list of ALL modules ever probed on a system and allow for easy recall. This is very useful for users wishing to build a minimal kernel via a
make localmodconfig which simply takes every module currently probed and switches everything BUT them off in the
.config for a kernel resulting in smaller kernel packages and reduced compilation times.
The AUR.AUR package is available from the
modprobed-dbwhich will create
$XDG_CONFIG_HOME/modprobed-db.confif one does not already exist.
modprobed-db storeto store the current loaded modules.
Optionally: add modules in the ignore array that you do NOT want counted, for example modules that get built or that are provided by another package. Some common ones are included by default:
$ cat ~/.config/modprobed-db.conf
IGNORE=(nvidia vboxdrv vboxnetflt vboxnetadp vboxpci lirc_dev lirc_i2c osscore oss_hdaudio oss_usb tp_smapi thinkpad_ec zavl znvpair zunicode zcommon zpios zfs spl splat)
Once the initial database has been created, use
modprobed-db list to show the current database modules.
Now simply use the system (insert USB sticks and devices, use hardware and mount filesystems requiring modules, etc.) and periodically update the database with
modprobed-db store or one of these automatic methods:
The most convenient method to use modprobed-db is to simply add a crontab entry invoking
/usr/bin/modprobed-db store at some regular interval.
Example running the script once every hour:
$ crontab -e 0 */1 * * * /usr/bin/modprobed-db store &> /dev/null
Systemd users not wishing to use cron may use the included user service:
modprobed-db.service. It will run modprobed-db in store mode once per hour, and at boot and on shutdown.
$ systemctl --user enable --now modprobed-db.service
Status of the service and of the timer can be queried like any service and timer:
$ systemctl --user status modprobed-db $ systemctl --user list-timers
After the database has been adequately populated, it can be read directly by make localmodconfig
Using the official Arch kernel PKGBUILD
The official Arch kernel PKGBUILD can be modified as shown to do this automatically:
... msg2 "Applying patch $src..." patch -Np1 < "../$src" done msg2 "Setting config..." cp ../config .config make olddefconfig make LSMOD=$HOME/.config/modprobed.db localmodconfig # <---- insert this line make -s kernelrelease > ../version ...
It is recommended that users install the package and then "use" the system for a good amount of time to allow the database to grow based on usage and capture everything the system needs before building a kernel with a make localmodconfig. Some suggested actions to allow appropriate modules to load and get cataloged:
- Insert every kind of removable media (USB, DVD, CD, etc.)
- Use every device on the machine (wifi, network, USB stuff like cameras, ipods, etc.)
- Mount every kind of filesystem one might typically use including ext2/3/4, fat, vfat, CIFS shares, NFS shares, etc.
- Use as many applications (that one would normally use) as possible in order to capture modules on which they depend. For example, IP blocking/filtering software like AUR.
- Users who plan to mount iso image file should do so (this will make sure to capture the loop and isofs modules).
- Users requiring encryption software such as should make sure to load it, and mount some encrypted containers to ensure that the needed crypto modules are in the db.
- Try-out different Linux-kernels; they may include modules not enabled in the default/other kernel(s)
Benefits of modprobed-db with "make localmodconfig" in custom kernels
- Reduced kernel footprint on FS
- Reduced compilation time
Comparisons using version 3.8.8-1 of the Arch kernel (from ABS):
|Machine CPU||# of threads||make localmodconfig||# of Modules||Modules' Size on HDD||Compilation Time|
|Intel i7-3770K @ 4.50 GHz||8||No||3,025||129 MB||7 min 37 sec|
|Intel i7-3770K @ 4.50 GHz||8||Yes||230||18 MB||1 min 13 sec|
|Intel Q9550 @ 3.40 GHz||4||No||3,025||129 MB||14 min 21 sec|
|Intel Q9550 @ 3.40 GHz||4||Yes||230||18 MB||2 min 20 sec|
|Intel E5200 @ 3.33 GHz||2||No||3,025||129 MB||34 min 35 sec|
|Intel E5200 @ 3.33 GHz||2||Yes||230||18 MB||5 min 46 sec|
- 13x less modules built
- 7x less space
- 6x less compilation time
Number of modules found by:
find /scratch/linux-3.8 -name '*.ko' | wc -l
Size on HDD found by:
find /scratch/linux-3.8 -name '*.ko' -print0 | xargs -0 du -ch
Compilation time found by entering a preconfigured linux-3.8.8 (using stock Arch config):
$ time make -jx modules