#!/usr/bin/perl -w =head1 NAME dh_installmodules - register modules with modutils =cut use strict; use Debian::Debhelper::Dh_Lib; use File::Find; =head1 SYNOPSIS B [S>] [B<-n>] [B<--name=>I] =head1 DESCRIPTION dh_installmodules is a debhelper program that is responsible for registering kernel modules. Kernel modules are searched for in the package build directory and if found, postinst and postrm commands are automatically generated to run depmod 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. =item debian/I.modules These files were installed for use by modutils, but are now not used and dh_installmodules will warn if these files are present. =back =head1 OPTIONS =over 4 =item B<-n>, B<--noscripts> Do not modify postinst/postrm scripts. =item B<--name=>I When this parameter is used, dh_installmodules 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 (/\.k?o$/) { 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 keys %versions; } foreach my $package (@{$dh{DOPACKAGES}}) { my $tmp=tmpdir($package); my $modutils_file=pkgfile($package,"modules"); my $modprobe_file=pkgfile($package,"modprobe"); if (! -e $tmp) { doit("install","-d",$tmp); } if ($modutils_file) { warning("ignoring $modutils_file, since modutils is no longer in Debian"); } if ($modprobe_file) { if (! -e "$tmp/etc/modprobe.d") { doit("install","-d","$tmp/etc/modprobe.d"); } my $old="/etc/modprobe.d/".pkgfilename($package); my $new=$old.".conf"; doit("install","-m","0644",$modprobe_file,"$tmp/$new"); autoscript($package,"preinst","preinst-moveconffile","s!#OLD#!$old!g;s!#PACKAGE#!$package!g"); autoscript($package,"postinst","postinst-moveconffile","s!#OLD#!$old!g;s!#NEW#!$new!g"); } if (! $dh{NOSCRIPTS}) { foreach my $kvers (find_kernel_modules("$tmp/lib/modules")) { autoscript($package,"postinst","postinst-modules","s/#KVERS#/$kvers/g"); autoscript($package,"postrm","postrm-modules","s/#KVERS#/$kvers/g"); } } } =head1 SEE ALSO L This program is a part of debhelper. =head1 AUTHOR Joey Hess =cut