Linux-Bootloader
view release on metacpan or search on metacpan
contrib/boottool.pl view on Meta::CPAN
push ( @newkernel, "$line\n" );
} else {
$line = "\tkernel $sections[$default]{kernel}";
$line .= " $sections[$default]{root}" if defined $sections[$default]{root};
$line .= " $sections[$default]{args}" if defined $sections[$default]{args};
push( @newkernel, "$line\n" );
}
$line = "\tmodule $param{'add-kernel'}" if defined $param{'add-kernel'};
$line .= " root=$param{root}" if defined $param{root};
$line .= " $param{args}" if defined $param{args};
push( @newkernel, "$line\n" );
push( @newkernel, "\tmodule $param{initrd}\n" ) if defined $param{initrd};
} else {
$line = "\tkernel $param{'add-kernel'}" if defined $param{'add-kernel'};
$line .= " root=$param{root}" if defined $param{root};
$line .= " $param{args}" if defined $param{args};
push( @newkernel, "$line\n" );
push( @newkernel, "\tinitrd $param{initrd}\n" ) if defined $param{initrd};
}
push( @newkernel, "\tsavedefault $param{savedefault}\n" )
if defined $param{savedefault};
push( @newkernel, "\n" );
if ( !defined $param{position} || $param{position} !~ /end|\d+/ ) {
$param{position} = 0;
}
my @newconfig;
if ( $param{position} =~ /end/ || $param{position} >= $#sections ) {
$param{position} = $#sections;
push( @newconfig, @config );
if ( $newconfig[$#newconfig] =~ /\S/ ) {
push( @newconfig, "\n" );
}
push( @newconfig, @newkernel );
}
else {
my $index = 0;
foreach (@config) {
if ( $_ =~ /^\s*title/i ) {
if ( $index == $param{position} ) {
push( @newconfig, @newkernel );
}
$index++;
}
push( @newconfig, $_ );
}
}
@bootconfig = @newconfig;
if ( defined $param{'make-default'} || defined $param{'boot-once'} ) {
&set_default( $param{position} );
}
print "Added: $param{'title'}.\n";
}
# Update kernel args
sub update_grub {
my %params = @_;
print("Updating kernel.\n") if &debug() > 1;
if ( !defined $params{'update-kernel'} && !defined $params{'xenhyper-args'}
|| ( !defined $params{'args'} && !defined $params{'remove-args'}
&& !defined $params{'xenhyper-args'} ) )
{
warn
"ERROR: kernel position or title (--update-kernel) and args (--args or --remove-args) required.\n";
return undef;
}
return undef unless &_check_config();
my @config = @bootconfig;
my @sections = &_info();
# if not a number, do title lookup
if ( $params{'update-kernel'} !~ /^\d+$/ ) {
$params{'update-kernel'} = &_lookup( $params{'update-kernel'} );
}
my $kcount = $#sections - 1;
if ( $params{'update-kernel'} !~ /^\d+$/
|| $params{'update-kernel'} < 0
|| $params{'update-kernel'} > $kcount )
{
warn "ERROR: Enter a default between 0 and $kcount.\n";
return undef;
}
my $kregex = '(^\s*kernel\s+\S+)(.*)';
if ( !defined $params{'update-xenhyper'} && defined $params{'xen'} )
{
$kregex = '(^\s*module\s+\S+vmlinuz\S+)(.*)' if defined $params{'xen'};
}
my $index = -1;
foreach (@config) {
if ( $_ =~ /^\s*title/i ) {
$index++;
}
if ( $index == $params{'update-kernel'} ) {
if ( $_ =~ /$kregex/i ) {
my $kernel = $1;
my $args = $2;
$args =~ s/\s+$params{'remove-args'}(\=\S+|\s+|$)/ /ig
if defined $params{'remove-args'};
if ( defined $params{'args'} || defined $params{'xenhyper-args'} ) {
$params{'args'} = $params{'xenhyper-args'} if defined $params{'xenhyper-args'};
my $base_arg = $params{'args'};
$base_arg =~ s/\=.*//;
$args =~ s/\s+$base_arg(\=\S+|\s+|$)/ /ig;
$args = $args . " " . $params{'args'};
}
if ( $_ eq $kernel . $args . "\n" ) {
warn "WARNING: No change made to args.\n";
return undef;
}
contrib/boottool.pl view on Meta::CPAN
# Use default kernel to fill in missing info
my $default = &get_default();
$default++;
foreach my $p ( 'args', 'root' ) {
if ( !defined $param{$p} ) {
$param{$p} = $sections[$default]{$p};
}
}
# use default entry to determine if path (/boot) should be removed
if ( $sections[$default]{'kernel'} !~ /^\/boot/ ) {
$param{'add-kernel'} =~ s/^\/boot//;
$param{'initrd'} =~ s/^\/boot// unless ( !defined $param{'initrd'} );
}
my @newkernel;
push( @newkernel,
"image=$param{'add-kernel'}\n",
"\tlabel=$param{title}\n" );
push( @newkernel, "\tappend=\"$param{args}\"\n" ) if defined $param{args};
push( @newkernel, "\tinitrd=$param{initrd}\n" ) if defined $param{initrd};
push( @newkernel, "\troot=$param{root}\n" ) if defined $param{root};
push( @newkernel, "\tread-only\n\n" );
if ( !defined $param{position} || $param{position} !~ /end|\d+/ ) {
$param{position} = 0;
}
my @newconfig;
if ( $param{position} =~ /end/ || $param{position} >= $#sections ) {
$param{position} = $#sections;
push( @newconfig, @config );
if ( $newconfig[$#newconfig] =~ /\S/ ) {
push( @newconfig, "\n" );
}
push( @newconfig, @newkernel );
}
else {
my $index = 0;
foreach (@config) {
if ( $_ =~ /^\s*(image|other)/i ) {
if ( $index == $param{position} ) {
push( @newconfig, @newkernel );
}
$index++;
}
push( @newconfig, $_ );
}
}
@bootconfig = @newconfig;
if ( defined $param{'make-default'} ) {
&set_default( $param{position} );
}
}
# Update kernel args
sub update {
my %params = @_;
return &update_grub(%params) if ( $bootloader eq 'grub' );
print("Updating kernel.\n") if &debug() > 1;
if ( !defined $params{'update-kernel'}
|| ( !defined $params{'args'} && !defined $params{'remove-args'} ) )
{
warn
"ERROR: kernel position or title (--update-kernel) and args (--args or --remove-args) required.\n";
return undef;
}
return undef unless &_check_config();
my @config = @bootconfig;
my @sections = &_info();
# if not a number, do title lookup
if ( $params{'update-kernel'} !~ /^\d+$/ ) {
$params{'update-kernel'} = &_lookup( $params{'update-kernel'} );
}
my $kcount = $#sections - 1;
if ( $params{'update-kernel'} !~ /^\d+$/
|| $params{'update-kernel'} < 0
|| $params{'update-kernel'} > $kcount )
{
warn "ERROR: Enter a default between 0 and $kcount.\n";
return undef;
}
my $index = -1;
foreach (@config) {
if ( $_ =~ /^\s*(image|other)/i ) {
$index++;
}
if ( $index == $params{'update-kernel'} ) {
if ( $_ =~ /(^\s*append[\s\=]+)(.*)\n/i ) {
my $append = $1;
my $args = $2;
$args =~ s/\"|\'//g;
$args =~ s/\s*$params{'remove-args'}\=*\S*//ig
if defined $params{'remove-args'};
$args = $args . " " . $params{'args'}
if defined $params{'args'};
if ( $_ eq "$append\"$args\"\n" ) {
warn "WARNING: No change made to args.\n";
return undef;
}
else {
$_ = "$append\"$args\"\n";
}
next;
}
}
}
@bootconfig = @config;
}
( run in 0.500 second using v1.01-cache-2.11-cpan-df04353d9ac )