diff options
Diffstat (limited to 'src/os-plugins/plugins/bootsplash/OpenSLX/OSPlugin')
-rw-r--r-- | src/os-plugins/plugins/bootsplash/OpenSLX/OSPlugin/bootsplash.pm | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/src/os-plugins/plugins/bootsplash/OpenSLX/OSPlugin/bootsplash.pm b/src/os-plugins/plugins/bootsplash/OpenSLX/OSPlugin/bootsplash.pm new file mode 100644 index 00000000..ef1db778 --- /dev/null +++ b/src/os-plugins/plugins/bootsplash/OpenSLX/OSPlugin/bootsplash.pm @@ -0,0 +1,253 @@ +# Copyright (c) 2007..2010 - 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/ +# ----------------------------------------------------------------------------- +# bootsplash.pm +# - implementation of the 'bootsplash' plugin, which installs splashy +# into the ramfs, including changeing theme +# ----------------------------------------------------------------------------- +package OpenSLX::OSPlugin::bootsplash; + +use strict; +use warnings; + +use base qw(OpenSLX::OSPlugin::Base); + +use File::Path; + +use OpenSLX::Basics; +use OpenSLX::Utils; +use OpenSLX::DistroUtils; + +sub new +{ + my $class = shift; + + my $self = { + name => 'bootsplash', + }; + + mkpath("$openslxConfig{'config-path'}/plugins/bootsplash/themes"); + + return bless $self, $class; +} + +sub getInfo +{ + my $self = shift; + + return { + description => unshiftHereDoc(<<' End-of-Here'), + Installs Splashy as bootsplash into ramfs and sets a Theme. + End-of-Here + precedence => 30, + }; +} + +sub getAttrInfo +{ + my $self = shift; + + return { + 'bootsplash::active' => { + applies_to_systems => 1, + applies_to_clients => 1, + description => unshiftHereDoc(<<' End-of-Here'), + should the 'bootsplash'-plugin be executed during boot? + End-of-Here + content_regex => qr{^(0|1)$}, + content_descr => '1 means active - 0 means inactive', + default => '1', + }, + + 'bootsplash::theme' => { + applies_to_systems => 1, + applies_to_clients => 1, + description => unshiftHereDoc(<<' End-of-Here'), + name of the theme to apply to bootsplash (unset for no theme) + End-of-Here + content_regex => undef, + content_descr => undef, + default => 'openslx', + }, + }; +} + +sub suggestAdditionalKernelParams +{ + my $self = shift; + my $makeInitRamFSEngine = shift; + + my @suggestedParams; + + # add vga=0x317 unless explicit vga-mode is already set + if (!$makeInitRamFSEngine->haveKernelParam(qr{\bvga=})) { + push @suggestedParams, 'vga=0x317'; + } + + # add quiet, if not already set + if (!$makeInitRamFSEngine->haveKernelParam('quiet')) { + push @suggestedParams, 'quiet'; + } + + return @suggestedParams; +} + +sub suggestAdditionalKernelModules +{ + my $self = shift; + my $makeInitRamFSEngine = shift; + + my @suggestedModules; + + # Ubuntu needs vesafb and fbcon (which drags along some others) + #if ($makeInitRamFSEngine->{'distro-name'} =~ m{^ubuntu}i) { + push @suggestedModules, qw( i810 i830 i915 mga nouveau r128 radeon savage sis tdfx ttm via drm fbcon vesafb ); + #} + + return @suggestedModules; +} + +sub installationPhase +{ + my $self = shift; + my $info = shift; + + $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'}; + $self->{openslxBasePath} = $info->{'openslx-base-path'}; + + my $splashyPath = + "$self->{openslxBasePath}/lib/plugins/bootsplash/files"; + my $pluginRepoPath = "$self->{pluginRepositoryPath}"; + + my $initFile = newInitFile(); + my $do_stop = unshiftHereDoc(<<' End-of-Here'); + /opt/openslx/plugin-repo/bootsplash/bin/splashy shutdown + sleep 1 + /opt/openslx/plugin-repo/bootsplash/bin/splashy_update \ + "progress 100" 2>/dev/null + End-of-Here + + # add helper functions to initfile + # first parameter name of the function + # second parameter content of the function + $initFile->addFunction('do_start', " : # do nothing here"); + $initFile->addFunction('do_stop', $do_stop); + $initFile->addFunction('do_restart', " : # do nothing here"); + + # place a call of the helper function in the stop block + # of the init file + # first parameter name of the function + # second parameter name of the block + $initFile->addFunctionCall('do_start', 'start'); + $initFile->addFunctionCall('do_stop', 'stop'); + $initFile->addFunctionCall('do_restart', 'restart'); + + my $distro = (split('-',$self->{'os-plugin-engine'}->distroName()))[0]; + + # write initfile to filesystem + spitFile( + "$pluginRepoPath/bootsplash.halt", + getInitFileForDistro($initFile, ucfirst($distro)) + ); + + # copy splashy(_update) into plugin-repo folder + mkpath("$pluginRepoPath/sbin"); + mkpath("$pluginRepoPath/lib"); + mkpath("$pluginRepoPath/usr/lib"); + slxsystem("cp -a $splashyPath/sbin/* $pluginRepoPath/sbin/; + cp -p $splashyPath/lib/* $pluginRepoPath/lib/; + cp -p $splashyPath/usr/lib/* $pluginRepoPath/usr/lib/") == 0 + or die _tr( + "unable to copy splashy to $pluginRepoPath" + ); + # create a proper (distro specific) runlevel script for halt + #my $initfile = newInitFile(); + #$initfile->addDaemon(""); + # + #my $runlevelscript = getInitFileForDistro($initfile, "ubuntu"); + + return; +} + +sub removalPhase +{ + my $self = shift; + my $info = shift; + + return; +} + + +sub copyRequiredFilesIntoInitramfs +{ + my $self = shift; + my $targetPath = shift; + my $attrs = shift; + my $makeInitRamFSEngine = shift; + + my $bootsplashDir = "$openslxConfig{'base-path'}/lib/plugins/bootsplash"; + my $bootsplashConfigDir + = "$openslxConfig{'config-path'}/plugins/bootsplash"; + my $bootsplashTheme = $attrs->{'bootsplash::theme'} || ''; + my $splashyThemeDir = ''; + + if ($bootsplashTheme) { + my $bootsplashThemeDir = "$bootsplashDir/files/themes/$bootsplashTheme"; + my $altThemeDir = "$bootsplashConfigDir/themes/$bootsplashTheme"; + if (-d $bootsplashThemeDir) { + $splashyThemeDir = "$bootsplashThemeDir"; + } + elsif (-d $altThemeDir) { + $splashyThemeDir = "$altThemeDir"; + } + if (-d $splashyThemeDir) { + my $splashyPath = "$bootsplashDir/files"; + $makeInitRamFSEngine->addCMD( + "cp -p $splashyPath/sbin/splashy* $targetPath/sbin/; + cp -p $splashyPath/lib/lib* $targetPath/lib/; + cp -p $splashyPath/usr/lib/lib* $targetPath/usr/lib/" + ); + $makeInitRamFSEngine->addCMD( + "mkdir -p $targetPath/etc/splashy/themes" + ); + $makeInitRamFSEngine->addCMD( + "cp -a $splashyThemeDir $targetPath/etc/splashy/themes/" + ); + my $defSplashyTheme = "/etc/splashy/themes/$bootsplashTheme"; + my $splashyConfig = unshiftHereDoc(<<" End-of-Here"); + <?xml version="1.0" encoding="UTF-8"?> + <!-- Autogenerated by OpenSLX-plugin 'bootsplash' --> + <splashy> + <!-- themes directory: --> + <themes>/etc/splashy/themes</themes> + <!-- current theme (relative path) --> + <current_theme>$bootsplashTheme</current_theme> + <!-- full path to theme, fall back in case of problems --> + <default_theme>$defSplashyTheme</default_theme> + <pid>/etc/splashy/splashy.pid</pid> + <fifo>/dev/.initramfs/splashy.fifo</fifo> + </splashy> + End-of-Here + $makeInitRamFSEngine->addCMD( { + file => "$targetPath/etc/splashy/config.xml", + content => $splashyConfig, + } ); + } + } + else { + $bootsplashTheme = '<none>'; + } + + vlog(1, _tr("bootsplash-plugin: bootsplash=%s", $bootsplashTheme)); + + return; +} + +1; |