diff options
Diffstat (limited to 'os-plugins/plugins/xserver/OpenSLX/OSPlugin/xserver.pm')
-rw-r--r-- | os-plugins/plugins/xserver/OpenSLX/OSPlugin/xserver.pm | 396 |
1 files changed, 0 insertions, 396 deletions
diff --git a/os-plugins/plugins/xserver/OpenSLX/OSPlugin/xserver.pm b/os-plugins/plugins/xserver/OpenSLX/OSPlugin/xserver.pm deleted file mode 100644 index b172dc22..00000000 --- a/os-plugins/plugins/xserver/OpenSLX/OSPlugin/xserver.pm +++ /dev/null @@ -1,396 +0,0 @@ -# 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/ -# ----------------------------------------------------------------------------- -# xserver.pm -# ----------------------------------------------------------------------------- -package OpenSLX::OSPlugin::xserver; - -use strict; -use warnings; - -use base qw(OpenSLX::OSPlugin::Base); - -use OpenSLX::Basics; -use OpenSLX::Utils; - -use File::Basename; - -################################################################################ -# if you have any questions regarding the concept of OS-plugins and their -# implementation, please drop a mail to: ot@openslx.com, or join the IRC-channel -# '#openslx' (on freenode). -################################################################################ -sub new -{ - my $class = shift; - - my $self = { - name => 'xserver', - }; - - return bless $self, $class; -} - -sub getInfo -{ - my $self = shift; - - return { - description => unshiftHereDoc(<<' End-of-Here'), - This plugin tries to configure the local Xorg-Server and - integrates binary graphics drivers (closed sourced) into the system. - Notice that you need to have kernel-headers installed to work properly. - in some cases. You need to download the driver packages yourself and - supply the download folder into the pkgpath option. - End-of-Here - precedence => 80, - }; -} - -sub getAttrInfo -{ # returns a hash-ref with information about all attributes supported - # by this specific plugin - my $self = shift; - - # This default configuration will be added as attributes to the default - # system, such that it can be overruled for any specific system by means - # of slxconfig. - return { - # attribute 'active' is mandatory for all plugins - 'xserver::active' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the 'xserver'-plugin be executed during boot? - End-of-Here - content_regex => qr{^(0|1)$}, - content_descr => '1 means active - 0 means inactive', - default => '1', - }, - 'xserver::ddcinfo' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the 'xserver'-plugin use the ddcinfo (if available) for - the monitor/tft setup? Might help in scenarios with resolutions - configured much lower than physically possible. (0 ignore, 1 use) - End-of-Here - content_regex => qr{^(0|1)$}, - content_descr => '0 ignore ddcinfo, 1 use ddcinfo if available', - default => '0', - }, - 'xserver::driver' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - force to use defined driver - End-of-Here - content_regex => undef, - content_descr => 'force to use defined driver', - default => undef, - }, - 'xserver::prefnongpl' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the 'xserver'-plugin use the non-gpl drivers for some graphic - adaptors if available (0 prefer gpl, 1 use the nongpl) - End-of-Here - content_regex => qr{^(0|1)$}, - content_descr => '0 prefer gpl, 1 use the nongpl', - default => '0', - }, - 'xserver::multihead' => { - applies_to_systems => 1, - applies_to_clients => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the 'xserver'-plugin configure multi-head setups of Xorg - for different scenarios and dynamically added displays - (not implemented yet) - End-of-Here - content_regex => undef, - content_descr => '', - default => '1', - }, - - # plugin specific attributes start here ... - - # stage1 - # Currently not needed in scenarios where distro specific packages are - # available, but for example in SUSE 10.2 we use this method - # -> provide downloaded packages here. - 'xserver::pkgpath' => { - applies_to_vendor_os => 1, - description => unshiftHereDoc(<<' End-of-Here'), - Path to downloaded ATI or Nvidia package - End-of-Here - content_regex => qr{^.+$}, # not empty - content_descr => 'Path to Nvidia or ATI packages', - default => '/root/xserver-pkgs', - }, - 'xserver::ati' => { - applies_to_vendor_os => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the non-gpl ATI drivers be available (installed in vendor-OS - not implemented yet)? - End-of-Here - content_regex => qr{^0|1$}, - content_descr => '"0", "1"', - default => '0', - }, - 'xserver::nvidia' => { - applies_to_vendor_os => 1, - description => unshiftHereDoc(<<' End-of-Here'), - should the non-gpl NVidia drivers be available (installed in vendor-OS - not implemented yet)? - End-of-Here - content_regex => qr{^0|1$}, - content_descr => '"0", "1"', - default => '0', - }, - #'xserver::matrox' => { - # applies_to_vendor_os => 1, - # description => unshiftHereDoc(<<' End-of-Here'), - # should the non-gpl Matrox drivers (e.g. for the Parhelia) be - # available (installed in vendor-OS)? - # End-of-Here - # content_regex => qr{^0|1$}, - # content_descr => '"0", "1"', - # default => '0', - #}, - }; -} - - -sub preInstallationPhase() -{ - my $self = shift; - my $info = shift; - - $self->{pluginRepositoryPath} = $info->{'plugin-repo-path'}; - $self->{pluginTempPath} = $info->{'plugin-temp-path'}; - $self->{openslxBasePath} = $info->{'openslx-base-path'}; - $self->{openslxConfigPath} = $info->{'openslx-config-path'}; - $self->{attrs} = $info->{'plugin-attrs'}; - $self->{vendorOsPath} = $info->{'vendor-os-path'}; - - - my $pkgpath = $self->{attrs}->{'xserver::pkgpath'}; - $pkgpath ||= ""; - my $installAti = $self->{attrs}->{'xserver::ati'}; - my $installNvidia = $self->{attrs}->{'xserver::nvidia'}; - - if (! -d $pkgpath && ($installAti == 1 || $installNvidia == 1)) { - print "\n\n * xserver::pkgpath: no such directory!\n"; - print " * xserver plugin can only install ATI or Nvidia driver\n"; - print " via operating system packaging (e.g. != SuSE-10.2)!\n"; - # exit 1 => xserver plugin is not getting installed because ati - # or nvidia where selected but are not installable! - # exit 1; - } - - if (-d $pkgpath && ($installNvidia == 1 || $installAti == 1)) { - system("cp -r $pkgpath $self->{pluginRepositoryPath}/packages"); - } - -} - - -sub installationPhase -{ # called while chrooted to the vendor-OS root in order to give the plugin - # a chance to install required files into the vendor-OS. - my $self = shift; - my $info = shift; - - # ehh... every plugin has it's own different installationPhase - # variable definition? - my $pluginRepoPath = $info->{'plugin-repo-path'}; - # The folder where the stage1-plugin should store all files - # required by the corresponding stage3 runlevel script. - # As this method is being executed while chrooted into the vendor-OS, - # this path is relative to that root (i.e. directly usable). - my $pluginTempPath = $info->{'plugin-temp-path'}; - # A temporary playground that will be cleaned up automatically. - # As this method is being executed while chrooted into the vendor-OS, - # this path is relative to that root (i.e. directly usable). - my $openslxBasePath = $info->{'openslx-base-path'}; - # the openslx base path (/opt/openslx) bind-mounted into the chroot - my $openslxConfigPath = $info->{'openslx-config-path'}; - # the openslx config path (/etc/opt/openlsx) bind-mounted into the - # chroot - my $attrs = $info->{'plugin-attrs'}; - # attributes in effect for this installation - my $vendorOSName = $self->{'os-plugin-engine'}->{'vendor-os-name'}; - - # write the distro specific extension (inclusion) of XX_xserver.sh - my $script = $self->{distro}->setupXserverScript($pluginRepoPath); - spitFile("$pluginRepoPath/xserver.sh", $script); - - # if defined: build nvidia or ati binarys - my $pluginFilesPath = - "$openslxBasePath/lib/plugins/$self->{'name'}/files"; - my $installationPath = "$pluginRepoPath/"; - my $binDrivers = 0; - my $engine = $self->{'os-plugin-engine'}; - - # removeLinks is to remove Links to the files - # TODO: In future versions this call can be removed - deprecated version - $self->removeLinks(); - - if ($attrs->{'xserver::nvidia'} == 1 || $attrs->{'xserver::ati'} == 1 ) { - if($vendorOSName =~ /.*?ubuntu.*?/i) - { - if($vendorOSName =~ /.*?8.10|9.04|9.10.*?/i) - { - copyFile("$pluginFilesPath/ubuntu-ng-gfx-install.sh", - "$installationPath"); - rename("$installationPath/ubuntu-ng-gfx-install.sh", - "$installationPath/ubuntu-gfx-install.sh"); - } - else - { - copyFile("$pluginFilesPath/ubuntu-gfx-install.sh", "$installationPath"); - } - } - $binDrivers = 1; - } - if ($attrs->{'xserver::ati'} == 1 ) { - $self->{distro}->installAti($pluginRepoPath,"packages"); - } - if ($attrs->{'xserver::nvidia'} == 1 ) { - $self->{distro}->installNvidia($pluginRepoPath,"packages"); - } - - if ($binDrivers == 1) { - $self->ldconf($info); - system("chmod -R 755 $installationPath"); - } - - return; -} - -sub removalPhase -{ # called while chrooted to the vendor-OS root in order to give the plugin - # a chance to uninstall no longer required files from the vendor-OS. - my $self = shift; - my $info = shift; - - my $pluginRepoPath = $info->{'plugin-repo-path'}; - # The folder where the stage1-plugin should store all files - # required by the corresponding stage3 runlevel script. - # As this method is being executed while chrooted into the vendor-OS, - # this path is relative to that root (i.e. directly usable). - my $pluginTempPath = $info->{'plugin-temp-path'}; - # A temporary playground that will be cleaned up automatically. - # As this method is being executed while chrooted into the vendor-OS, - # this path is relative to that root (i.e. directly usable). - - - # TODO (in far future): Remove - linking is deprecated - # Make sure nobody has installed the old plugin version - $self->removeLinks(); - - return; -} - - - -# Create ld.so.conf for the binary drivers -sub ldconf -{ - my $self = shift; - my $info = shift; - - my $attrs = $info->{'plugin-attrs'}; - my $ldincl = $info->{'plugin-repo-path'}.'/'; - my $ldpl = "/etc/ld.conf.preload"; - my $ldconf = "/etc/ld.so.conf"; - my $ldcache = ""; - - if( -d $ldincl.'nvidia/') { - - ## WRITE ld.so.conf ## - - open(IN,'>'.$ldincl.'nvidia/ld.so.conf'); - print IN $ldincl."nvidia/usr/lib\n".$ldincl.'nvidia/usr/X11R6/lib'; - close(IN); - - ## CREATE DIFFERENT 'ld.so.cache' ## - - $ldcache = $ldincl.'/nvidia/ld.so.cache'; - system('sed -e "1s,^,include '.$ldincl.'nvidia/ld.so.conf\n,g" -i '.$ldconf); - #print "Calling ldconfig to create $ldcache ... Please Wait\n"; - system('ldconfig -C '.$ldcache); - system('sed -e "1d" -i '.$ldconf); - } - - - if( -d $ldincl.'ati/') { - open(IN,'>'.$ldincl.'ati/ld.so.conf'); - print IN $ldincl."ati/usr/lib\n".$ldincl.'ati/usr/X11R6/lib'; - close(IN); - - $ldcache = $ldincl.'/ati/ld.so.cache'; - system('sed -e "1s,^,include '.$ldincl.'ati/ld.so.conf\n,g" -i '.$ldconf); - #print "Calling ldconfig to create $ldcache ... Please Wait\n"; - system('ldconfig -C '.$ldcache); - system('sed -e "1d" -i '.$ldconf); - } -} - - -# deprecated -# removes linked libraries from /usr/lib/ -sub removeLinks -{ - my $instFolders = "/usr/lib"; - if(-d "/usr/X11R6/lib") { - $instFolders .= " /usr/X11R6/lib"; - } - my $divertFolder = "/var/X11R6/lib"; - my $pluginFolder = "/opt/openslx/plugin-repo/xserver"; - - # get all previously installed links - my @linkedFiles = - `find $instFolders -lname "$divertFolder*" -o -lname "$pluginFolder*" `; - - - # also remove _MESA backup files - my @backupFiles = - `find $instFolders -name "*_MESA.so*"`; - my $origfile = ''; - for my $file (@backupFiles) { - $origfile = $file; - $file =~ s/_MESA//; - rename($origfile,$file); - } - unlink "/usr/lib/libGL.so", "/usr/lib/libGL.so.1"; - symlink "/usr/lib/libGL.so.1.2", "/usr/lib/libGL.so.1"; - symlink "/usr/lib/libGL.so.1.2", "/usr/lib/libGL.so"; - - - foreach my $file (@linkedFiles) { - chomp($file); - unlink $file; - } - - # this should not print any file at all ;-( - my @files = `find $instFolders -lname "$divertFolder*" -o -lname "$pluginFolder*" `; - if ( $#files > 0 ) { - print "Links were not removed properly! Exiting!\n"; - my $bla; - foreach (@files) { - chomp($bla = $_); - print $bla; - } - exit(1); - } - return; -} - -1; |