Linux::Bootloader::Elilo - Parse and modify ELILO configuration files.


Linux-Bootloader documentation Contained in the Linux-Bootloader distribution.

Index


Code Index:

NAME

Top

Linux::Bootloader::Elilo - Parse and modify ELILO configuration files.

SYNOPSIS

Top

	use Linux::Bootloader;
	use Linux::Bootloader::Elilo;

	my $bootloader = Linux::Bootloader::Elilo->new();
	my $config_file='/etc/elilo.conf';

	$bootloader->read($config_file)

	# add a kernel	
	$bootloader->add(%hash)

	# remove a kernel
	$bootloader->remove(2)

	# set new default
	$bootloader->set_default(1)

	$bootloader->write($config_file)




DESCRIPTION

Top

This module provides functions for working with ELILO configuration files.

	Adding a kernel:
	- add kernel at start, end, or any index position.
	- kernel path and title are required.
	- root, kernel args, initrd are optional.
	- any options not specified are copied from default.
	- remove any conflicting kernels if force is specified.

	Removing a kernel:
	- remove by index position
	- or by title/label




FUNCTIONS

Top

Also see Linux::Bootloader for functions available from the base class.

new()

	Creates a new Linux::Bootloader::Elilo object.

install()

        Attempts to install bootloader.
        Takes: nothing.
        Returns: undef on error.

AUTHOR

Top

Open Source Development Labs, Engineering Department <eng@osdl.org>

COPYRIGHT

Top

SEE ALSO

Top

Linux::Bootloader


Linux-Bootloader documentation Contained in the Linux-Bootloader distribution.
package Linux::Bootloader::Elilo;


use strict;
use warnings;
use Linux::Bootloader

@Linux::Bootloader::Elilo::ISA = qw(Linux::Bootloader);
use base 'Linux::Bootloader';


use vars qw( $VERSION );
our $VERSION = '1.2';


sub new {
    my $this = shift;
    my $class = ref($this) || $this;
    my $self = bless({}, $class);

    $self->SUPER::new();

    return $self;
}

sub _set_config_file {
    my $self=shift;
    $self->{'config_file'}='/etc/elilo.conf';
}


### ELILO functions ###


# Run command to install bootloader

sub install {
  my $self=shift;

  system("/usr/sbin/elilo");
  if ($? != 0) { 
    warn ("ERROR:  Failed to run elilo.\n") && return undef; 
  }
  return 1;
}

# Set kernel to be booted once

sub boot_once {
    my $self=shift;
    my $label = shift;

    return undef unless defined $label;

    $self->read( '/etc/elilo.conf' );
    my @config=@{$self->{config}};

    if ( ! grep( /^checkalt/i, @config ) ) {
        warn("ERROR:  Failed to set boot-once.\n");
        warn("Please add 'checkalt' to global config.\n");
        return undef;
    }

    my @sections = $self->_info();
    my $position = $self->_lookup($label);
    $position++;
    my $efiroot = `grep ^EFIROOT /usr/sbin/elilo | cut -d '=' -f 2`;
    chomp($efiroot);

    my $kernel = $efiroot . $sections[$position]{kernel};
    my $root = $sections[$position]{root};
    my $args = $sections[$position]{args};

    #system( "/usr/sbin/eliloalt", "-d" );
    if ( system( "/usr/sbin/eliloalt", "-s", "$kernel root=$root $args" ) ) {
        warn("ERROR:  Failed to set boot-once.\n");
        warn("1) Check that EFI var support is compiled into kernel.\n");
        warn("2) Verify eliloalt works.  You may need to patch it to support sysfs EFI vars.\n");
        return undef;
    }
    return 1;
}


1;