#!/usr/bin/perl =head1 NAME dh_installmodules - register kernel modules =cut use strict; use warnings; use Debian::Debhelper::Dh_Lib; use File::Find; our $VERSION = DH_BUILTIN_VERSION; =head1 SYNOPSIS B [S>] [B<-n>] [B<--name=>I] =head1 DESCRIPTION B is a debhelper program that is responsible for registering kernel modules. Kernel modules are searched for in the package build directory and if found, F, F and F commands are automatically generated to run B and register the modules when the package is installed. These commands are inserted into the maintainer scripts by L. =head1 FILES =over 4 =item debian/I.modprobe Installed to etc/modprobe.d/I.conf in the package build directory. =back =head1 OPTIONS =over 4 =item B<-n>, B<--no-scripts> Do not modify F/F/F scripts. =item B<--name=>I When this parameter is used, B looks for and installs files named debian/I.I.modprobe instead of the usual debian/I.modprobe =back =head1 NOTES Note that this command is not idempotent. L should be called between invocations of this command. Otherwise, it may cause multiple instances of the same text to be added to maintainer scripts. =cut init(); # Looks for kernel modules in the passed directory. If any are found, # returns the kernel version (or versions) that the modules seem to be for. sub find_kernel_modules { my $searchdir=shift; my %versions; return unless -d $searchdir; find(sub { if (m/ [.]k?o (?:[.](?:[gx]z|bz2))? $/x) { my ($kvers)=$File::Find::dir=~m!lib/modules/([^/]+)/!; if (! defined $kvers || ! length $kvers) { warning("Cannot determine kernel version for module $File::Find::name"); } else { $versions{$kvers}=1; } } }, $searchdir); return sort(keys(%versions)); } # PROMISE: DH NOOP WITHOUT modprobe tmp(lib/modules) cli-options() foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $modprobe_file = pkgfile( { 'named' => 0, 'support-architecture-restriction' => 0, }, $package, "modprobe", ); if ($modprobe_file) { my $path = '/etc/modprobe.d/' . pkgfilename($package) . '.conf'; install_dir("$tmp/etc/modprobe.d"); install_file($modprobe_file, "$tmp/$path"); } if (! $dh{NOSCRIPTS}) { foreach my $kvers (find_kernel_modules("$tmp/lib/modules")) { autoscript($package, 'postinst', 'postinst-modules', { 'KVERS' => $kvers }); autoscript($package, 'postrm', 'postrm-modules', { 'KVERS' => $kvers }); } } } =head1 SEE ALSO L This program is a part of debhelper. =head1 AUTHOR Joey Hess =cut