blob: aaa42bf5196237c7da1d4dfb70f031683b5495e6 (
plain) (
tree)
|
|
# Copyright (c) 2008 - OpenSLX GmbH
#
# This program is free software distributed under the GPL version 2.
# See http://openslx.org/COPYING
#
# If you have any feedback please consult http://openslx.org/feedback and
# send your suggestions, praise, or complaints to feedback@openslx.org
#
# General information about OpenSLX can be found at http://openslx.org/
# -----------------------------------------------------------------------------
# BootEnvironment::PrebootCD.pm
# - provides CD-specific implementation of the BootEnvironment API.
# -----------------------------------------------------------------------------
package OpenSLX::BootEnvironment::PrebootCD;
use strict;
use warnings;
use base qw(OpenSLX::BootEnvironment::Preboot);
use Clone qw(clone);
use File::Basename;
use File::Path;
use OpenSLX::Basics;
use OpenSLX::Utils;
sub _createImage
{
my $self = shift;
my $client = shift;
my $info = shift;
vlog(
0,
_tr(
"\ncreating CD-image for client %s (based on %s) ...",
$client->{name}, $info->{name}
)
);
my $imageDir = "$openslxConfig{'public-path'}/images/$client->{name}";
mkpath($imageDir) unless $self->{'dry-run'};
# copy static data
my $dataDir = "$openslxConfig{'base-path'}/share/boot-env/preboot/cd";
slxsystem(qq{rsync -rlpt $dataDir/iso "$imageDir/"})
unless $self->{'dry-run'};
# copy kernel (take the one from the given system info)
my $kernelFile = $info->{'kernel-file'};
my $kernelName = basename($kernelFile);
slxsystem(qq{cp -p "$kernelFile" "$imageDir/iso/isolinux/vmlinuz"})
unless $self->{'dry-run'};
# create initramfs
my $initramfsName = qq{"$imageDir/iso/isolinux/initramfs"};
$self->_makePrebootInitRamFS($info, $initramfsName, $client);
# write trivial isolinux config
my $isolinuxConfig = unshiftHereDoc(<<" End-of-Here");
PROMPT 0
TIMEOUT 100
DEFAULT menu.c32
MENU TITLE Welcome to OpenSLX PreBoot ISO/CD (Mini Linux/Kexec)
LABEL SLXSTDBOOT
MENU LABEL OpenSLX PreBoot - Direct Boot / Direct Start
MENU DEFAULT
KERNEL vmlinuz
APPEND initrd=initramfs vga=0x317
TEXT HELP
Use this (default) entry if you have configured your client.
You have chance to edit the kernel commandline by hitting the
TAB key (e.g. for adding debug=3 to it for bug hunting) ...
ENDTEXT
LABEL SLXKIOSKBOOT
MENU LABEL OpenSLX PreBoot - Kiosk / Direct Start
KERNEL vmlinuz
APPEND initrd=initramfs vga=0x317 type=directkiosk
TEXT HELP
Use this entry if you would like to start your machine into
the standard SLX kiosk. At the same time you have the chance
to edit the kernel commandline by hitting the TAB key ...
ENDTEXT
LABEL SLXCFGBOOT
MENU LABEL OpenSLX PreBoot - Client Configuration Interface
KERNEL vmlinuz
APPEND initrd=initramfs vga=0x317 type=slxconfig
TEXT HELP
Use this entry if you would like to configure/modify your
SLX client. At the same time you have the chance to edit
the kernel commandline by hitting the TAB key ...
ENDTEXT
LABEL SLXCFGKIOSK
MENU LABEL OpenSLX PreBoot - Kiosk Configuration Interface
KERNEL vmlinuz
APPEND initrd=initramfs vga=0x317 type=cfgkiosk
TEXT HELP
Use this entry if you would like to configure / modify your
OpenSLX kiosk. At the same time you have the chance to edit
the kernel commandline by hitting the TAB key ...
ENDTEXT
End-of-Here
spitFile("$imageDir/iso/isolinux/isolinux.cfg", $isolinuxConfig);
my $mkisoCmd = unshiftHereDoc(<<" End-of-Here");
mkisofs
-o "$imageDir/../$client->{name}.iso"
-b isolinux/isolinux.bin -no-emul-boot -boot-load-size 4
-r -J -l -boot-info-table -joliet-long
-publisher "OpenSLX Project - http://www.openslx.org"
-p "OpenSLX Project - openslx-devel\@openslx.org"
-V "OpenSLX BootISO"
-volset "OpenSLX Project - PreBoot ISO/CD for non PXE/TFTP start of a Linux Stateless Client"
-c isolinux/boot.cat "$imageDir/iso"
End-of-Here
$mkisoCmd =~ s{\n\s*}{ }gms;
my $logFile = "$imageDir/../$client->{name}.iso.log";
if (slxsystem(qq{$mkisoCmd 2>"$logFile"})) {
my $log = slurpFile($logFile);
die _tr("unable to create ISO-image - log follows:\n%s", $log);
}
rmtree($imageDir);
return 1;
}
1;
|