Andrea,
I like it! I would suggest the following changes, then implement it:
* Get rid of the --all-modules option. As it turns out, the way the
code progressed, it looks like we are already including all
modules right now by default (the safest thing to do). And of
course, be sure to remove the couple of references to $all_modules
in the code.
* Add your feature as "--my-modules". I think I like that name a
bit better. Could look like this:
--my-modules
Only include the modules that are currently loaded on this
machine when creating the UYOK (Use Your Own Kernel)
initrd.img.
Without this option, all available modules are included
whether or not they are currently in use (except for those
listed in the /etc/systemimager/UYOK.modules_to_exclude file).
Including all modules allows your UYOK kernel and initrd.img
to be used with a greater variety of client hardware, but
can make the resultant initrd.img much larger.
Cheers,
-Brian
Thus spake A Righi ([EMAIL PROTECTED]):
Brian,
I made a patch to reduce the size of the UYOK initrd.img, adding the
--optimize-uyok to si_prepareclient. Using this option only the modules
loaded in the golden client (and the mandatory modules from
UYOK.modules_to_include) are included into the initrd. Moreover I added
other useless modules to the UYOK.modules_to_exclude list.
I've successfully tested it with suse10 and the UYOK initrd.img has been
reduced from 24MB to 5.4MB.
What do you think? any suggestion?
Cheers,
-Andrea
Content-Description: systemimager-UYOK_optimize_initrd.patch
Index: lib/SystemImager/UseYourOwnKernel.pm
===================================================================
--- lib/SystemImager/UseYourOwnKernel.pm (revision 3581)
+++ lib/SystemImager/UseYourOwnKernel.pm (working copy)
@@ -29,12 +29,13 @@
#
# Usage:
-# SystemImager::UseYourOwnKernel->create_uyok_initrd($arch);
+# SystemImager::UseYourOwnKernel->create_uyok_initrd($arch, $optimize,
$all_modules, $verbose);
#
sub create_uyok_initrd() {
my $module = shift;
my $arch = shift;
+ my $optimize = shift;
my $all_modules = shift;
$verbose = shift;
@@ -84,11 +85,22 @@
#
# Copy modules
#
+ my @modules = get_load_ordered_list_of_running_modules();
print ">>> Copying modules to new initrd from:
/lib/modules/$uname_r...\n" if( $verbose );
mkdir("$staging_dir/lib/modules", 0755) or die "$!";
- $cmd = qq(rsync -a --exclude=build --exclude=source
$modules_to_exclude /lib/modules/$uname_r $staging_dir/lib/modules/);
- !system( $cmd ) or die( "Couldn't $cmd." );
-
+ unless ($optimize) {
+ $cmd = qq(rsync -a --exclude=build --exclude=source
$modules_to_exclude /lib/modules/$uname_r $staging_dir/lib/modules/);
+ !system( $cmd ) or die( "Couldn't $cmd." );
+ } else {
+ # Copy only loaded modules ignoring exclusions.
+ foreach my $module ( @modules ) {
+ $cmd = qq(rsync -aR $module $staging_dir);
+ !system( $cmd ) or die( "Couldn't $cmd." );
+ }
+ # Copy module configuration files.
+ $cmd = qq(rsync -R /lib/modules/$uname_r/* $staging_dir);
+ !system( $cmd ) or die( "Couldn't $cmd." );
+ }
#
# add modules and insmod commands
#
@@ -97,7 +109,6 @@
open( FILE,">>$file" ) or die( "Couldn't open $file for appending" );
print ">>> Appending insmod commands to
./my_modules_dir/INSMOD_COMMANDS...\n" if( $verbose );
- my @modules = get_load_ordered_list_of_running_modules();
foreach my $module ( @modules ) {
print " >> insmod $module\n" if( $verbose );
print FILE "insmod $module\n";
Index: sbin/si_prepareclient
===================================================================
--- sbin/si_prepareclient (revision 3581)
+++ sbin/si_prepareclient (working copy)
@@ -160,6 +160,11 @@
is advantageous if you know you don't need a UYOK kernel, and you
want this command to complete faster.
+ --optimize-uyok
+ Optimize UYOK (Use Your Own Kernel) initrd.img for size including
+ only the kernel modules loaded in the golden client and the modules
+ in /etc/systemimager/UYOK.modules_to_include.
+
--all-modules
Include every single module under /lib/modules/`uname -r`/ when
creating the UYOK (Use Your Own Kernel) initrd.img.
@@ -183,6 +188,7 @@
"quiet" => \my $quiet,
"rpm|rpm-install" => \my $rpm,
"no-uyok" => \my $no_uyok,
+ "optimize-uyok" => \my $optimize_uyok,
"all-modules" => \my $all_modules,
"version" => \my $version,
"server=s" => \my $server,
@@ -209,6 +215,24 @@
exit 1;
}
+if($no_uyok and $optimize_uyok) {
+ print "FATAL: --no_uyok option conflicts with --optimize_uyok!\n";
+ print qq(Try "$progname --help" for more info.\n);
+ exit 1;
+}
+
+if($no_uyok and $all_modules) {
+ print "FATAL: --no_uyok option conflicts with --all_modules!\n";
+ print qq(Try "$progname --help" for more info.\n);
+ exit 1;
+}
+
+if($optimize_uyok and $all_modules) {
+ print "FATAL: --optimize_uyok option conflicts with --all_modules!\n";
+ print qq(Try "$progname --help" for more info.\n);
+ exit 1;
+}
+
# Make sure we have certain tools that we need.
which('rsync') or croak("'rsync' is required for $progname to function properly.
Please see http://systemimager.org for more details.");
which('systemconfigurator') or croak("'systemconfigurator' is required for $progname
to function properly. Please see http://systemimager.org for more details.");
@@ -651,7 +675,7 @@
my $arch = get_arch();
my $verbose;
unless($quiet) { $verbose = 1; }
- SystemImager::UseYourOwnKernel->create_uyok_initrd( $arch,
$all_modules, $verbose );
+ SystemImager::UseYourOwnKernel->create_uyok_initrd( $arch,
$optimize_uyok, $all_modules, $verbose );
}
SystemImager::Common->write_auto_install_script_conf_footer($file);
Index: etc/UYOK.modules_to_exclude
===================================================================
--- etc/UYOK.modules_to_exclude (revision 3581)
+++ etc/UYOK.modules_to_exclude (working copy)
@@ -21,8 +21,11 @@
kernel/sound/*
kernel/drivers/video/*
kernel/drivers/parport/*
+kernel/net/ipv4/netfilter/*
+kernel/net/ipv6/netfilter/*
+kernel/drivers/input/joystick/*
+kernel/drivers/media/*
-
#
# Locally customized exclusions go here:
#
--
Brian Elliott Finley
Mobile: 630.631.6621
-------------------------------------------------------
All the advantages of Linux Managed Hosting--Without the Cost and Risk!
Fully trained technicians. The highest number of Red Hat certifications in
the hosting industry. Fanatical Support. Click to learn more
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=107521&bid=248729&dat=121642
_______________________________________________
Sisuite-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sisuite-devel