summaryrefslogblamecommitdiffstats
path: root/boot-env/OpenSLX/BootEnvironment/PrebootCD.pm
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;