Linux-Bootloader
view release on metacpan or search on metacpan
lib/Linux/Bootloader.pm view on Meta::CPAN
@sections=$self->_info();
# Use default kernel to fill in missing info
my $default=$self->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, $_);
}
}
@{$self->{config}} = @newconfig;
if (defined $param{'make-default'}) {
$self->set_default($param{position});
}
}
# Update kernel args
sub update {
my $self=shift;
my %params=@_;
print ("Updating kernel.\n") if $self->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 $self->_check_config();
my @config = @{$self->{config}};
my @sections=$self->_info();
# if not a number, do title lookup
if ($params{'update-kernel'} !~ /^\d+$/) {
$params{'update-kernel'} = $self->_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;
}
}
}
@{$self->{config}} = @config;
}
# Remove kernel from config
sub remove {
my $self=shift;
my $position=shift;
my @newconfig;
return undef unless defined $position;
( run in 0.478 second using v1.01-cache-2.11-cpan-df04353d9ac )