From 102f63c43b0e32622bb5bf83a84cdac67174f539 Mon Sep 17 00:00:00 2001 From: Oliver Tappe Date: Sat, 28 Jul 2007 20:38:11 +0000 Subject: * finished installation support for Debian-etch, Debian-sarge and Ubuntu are nearly done (Ubuntu still missing a kernel ...) * some more refactorings to accommodate Debian-support git-svn-id: http://svn.openslx.org/svn/openslx/trunk@1282 95ad53e4-c205-0410-b2fa-d234c58c8868 --- installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm | 27 +++++----- installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm | 29 ++++++----- installer/OpenSLX/OSSetup/Distro/Fedora_6.pm | 2 - .../OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm | 2 - installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm | 2 - .../OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm | 2 - installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm | 2 - .../OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm | 2 - installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm | 32 +++++++++--- installer/OpenSLX/OSSetup/Engine.pm | 25 +++------ installer/OpenSLX/OSSetup/MetaPackager/apt.pm | 60 +++++++++++++++++++--- installer/OpenSLX/OSSetup/MetaPackager/smart.pm | 37 ++++++------- installer/OpenSLX/OSSetup/MetaPackager/yum.pm | 13 ++--- installer/OpenSLX/OSSetup/Packager/dpkg.pm | 10 ++-- 14 files changed, 140 insertions(+), 105 deletions(-) (limited to 'installer') diff --git a/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm b/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm index c9476d25..22c35917 100644 --- a/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm +++ b/installer/OpenSLX/OSSetup/Distro/Debian_3_1.pm @@ -28,6 +28,8 @@ sub new my $class = shift; my $self = { 'base-name' => 'debian-3.1', + 'arch' => 'i386', + 'release-name' => 'sarge', }; return bless $self, $class; } @@ -35,34 +37,35 @@ sub new sub initDistroInfo { my $self = shift; + $self->{config}->{'repository'} = { 'base' => { 'urls' => " + http://debian.intergenia.de/debian ", - 'name' => '', - 'repo-subdir' => '', - }, - 'base_update' => { - 'urls' => ' - ', - 'name' => '', - 'repo-subdir' => '', + 'name' => 'Debian 3.1', + 'repo-subdir' => 'dists', + 'distribution' => 'sarge', + 'components' => 'main', }, }; - $self->{config}->{'package-subdir'} = ''; + $self->{config}->{'package-subdir'} = 'pool'; $self->{config}->{'prereq-packages'} = " + main/d/debootstrap/debootstrap_1.0.0_all.deb "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " "; $self->{config}->{'selection'} = { - 'default' => "list any packagenames here", + 'default' => " + kernel-image-2.6-386 + kmail + ", }; + return; } diff --git a/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm b/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm index 2326f342..df0d81e0 100644 --- a/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm +++ b/installer/OpenSLX/OSSetup/Distro/Debian_4_0.pm @@ -27,7 +27,9 @@ sub new { my $class = shift; my $self = { - 'base-name' => 'debian-4.0', + 'base-name' => 'debian-4.0', + 'arch' => 'i386', + 'release-name' => 'etch', }; return bless $self, $class; } @@ -35,34 +37,35 @@ sub new sub initDistroInfo { my $self = shift; + $self->{config}->{'repository'} = { 'base' => { 'urls' => " + http://debian.intergenia.de/debian ", - 'name' => '', - 'repo-subdir' => '', - }, - 'base_update' => { - 'urls' => ' - ', - 'name' => '', - 'repo-subdir' => '', + 'name' => 'Debian 4.0', + 'repo-subdir' => 'dists', + 'distribution' => 'etch', + 'components' => 'main', }, }; - $self->{config}->{'package-subdir'} = ''; + $self->{config}->{'package-subdir'} = 'pool'; $self->{config}->{'prereq-packages'} = " + main/d/debootstrap/debootstrap_1.0.0_all.deb "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " "; $self->{config}->{'selection'} = { - 'default' => "list any packagenames here", + 'default' => " + kernel-image-2.6-386 + kmail + ", }; + return; } diff --git a/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm b/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm index 4417136a..18cc8d18 100644 --- a/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm +++ b/installer/OpenSLX/OSSetup/Distro/Fedora_6.pm @@ -79,8 +79,6 @@ sub initDistroInfo zlib-1.2.3-3.i386.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " audit-libs-1.2.8-1.fc6.i386.rpm basesystem-8.0-5.1.1.noarch.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm index 8cd64775..894b11b6 100644 --- a/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/Fedora_6_x86_64.pm @@ -79,8 +79,6 @@ sub initDistroInfo zlib-1.2.3-3.x86_64.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " audit-libs-1.2.8-1.fc6.x86_64.rpm basesystem-8.0-5.1.1.noarch.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm index 3a00dd0c..41c176cf 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1.pm @@ -79,8 +79,6 @@ sub initDistroInfo i586/zlib-1.2.3-13.i586.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " i586/aaa_base-10.1-41.i586.rpm i586/aaa_skel-2006.3.29-5.i586.rpm i586/aaa_skel-2006.5.19-0.2.i586.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm index 5f73887d..b3ac80dc 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_1_x86_64.pm @@ -79,8 +79,6 @@ sub initDistroInfo x86_64/zlib-1.2.3-13.x86_64.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " x86_64/aaa_base-10.1-41.x86_64.rpm x86_64/aaa_skel-2006.3.29-5.x86_64.rpm x86_64/aaa_skel-2006.5.19-0.2.x86_64.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm index 0513050f..ca6fd985 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2.pm @@ -77,8 +77,6 @@ sub initDistroInfo i586/zlib-1.2.3-33.i586.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " i586/aaa_base-10.2-38.i586.rpm i586/aaa_skel-2006.5.19-20.i586.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm index 2b6d4d7b..bc07ef08 100644 --- a/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm +++ b/installer/OpenSLX/OSSetup/Distro/SUSE_10_2_x86_64.pm @@ -79,8 +79,6 @@ sub initDistroInfo x86_64/zlib-1.2.3-33.x86_64.rpm "; - $self->{config}->{'bootstrap-prereq-packages'} = ""; - $self->{config}->{'bootstrap-packages'} = " x86_64/aaa_base-10.2-38.x86_64.rpm x86_64/aaa_skel-2006.5.19-20.x86_64.rpm diff --git a/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm b/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm index 2882212f..d2ce3bd6 100644 --- a/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm +++ b/installer/OpenSLX/OSSetup/Distro/Ubuntu_6_10.pm @@ -40,10 +40,30 @@ sub initDistroInfo $self->{config}->{'repository'} = { 'base' => { 'urls' => " - ftp://localhost/pub/ubuntu + http://ubuntu.intergenia.de/ubuntu ", 'name' => 'Ubuntu 6.10', - 'repo-subdir' => 'dists/edgy', + 'repo-subdir' => 'dists', + 'distribution' => 'edgy', + 'components' => 'main restricted', + }, + 'base_updates' => { + 'urls' => " + ftp://localhost/pub/ubuntu + ", + 'name' => 'Ubuntu 6.10 Updates', + 'repo-subdir' => 'dists', + 'distribution' => 'edgy-updates', + 'components' => 'main restricted', + }, + 'base_security' => { + 'urls' => " + ftp://localhost/pub/ubuntu + ", + 'name' => 'Ubuntu 6.10 Security', + 'repo-subdir' => 'dists', + 'distribution' => 'edgy-security', + 'components' => 'main restricted', }, }; @@ -53,14 +73,14 @@ sub initDistroInfo main/d/debootstrap/debootstrap_1.0.0_all.deb "; - $self->{config}->{'bootstrap-prereq-packages'} = " - "; - $self->{config}->{'bootstrap-packages'} = " "; $self->{config}->{'selection'} = { - 'default' => "kmail", + 'default' => " + kernel-image-2.6-386 + kmail + ", }; return; } diff --git a/installer/OpenSLX/OSSetup/Engine.pm b/installer/OpenSLX/OSSetup/Engine.pm index a89f6e10..3876b672 100644 --- a/installer/OpenSLX/OSSetup/Engine.pm +++ b/installer/OpenSLX/OSSetup/Engine.pm @@ -34,10 +34,10 @@ use vars qw(%supportedDistros); %supportedDistros = ( 'debian-3.1' => { - module => 'Debian_3_1', support => 'clone' + module => 'Debian_3_1', support => 'clone,install' }, 'debian-4.0' => { - module => 'Debian_4_0', support => 'clone' + module => 'Debian_4_0', support => 'clone,install' }, 'fedora-6' => { module => 'Fedora_6', support => 'clone,install' @@ -79,7 +79,7 @@ use vars qw(%supportedDistros); module => 'Ubuntu_6_06', support => 'clone' }, 'ubuntu-6.10' => { - module => 'Ubuntu_6_10', support => 'clone,install' + module => 'Ubuntu_6_10', support => 'clone' }, 'ubuntu-7.04' => { module => 'Ubuntu_7_04', support => 'clone' @@ -627,8 +627,6 @@ sub _readDistroInfo : (); my $package_subdir = $self->{distro}->{config}->{'package-subdir'}; my $prereq_packages = $self->{distro}->{config}->{'prereq-packages'}; - my $bootstrap_prereq_packages = - $self->{distro}->{config}->{'bootstrap-prereq-packages'}; my $bootstrap_packages = $self->{distro}->{config}->{'bootstrap-packages'}; my $metapackager_packages = $self->{distro}->{config}->{'metapackager-packages'}; @@ -656,7 +654,6 @@ sub _readDistroInfo $self->{'distro-info'} = { 'package-subdir' => $package_subdir, 'prereq-packages' => $prereq_packages, - 'bootstrap-prereq-packages' => $bootstrap_prereq_packages, 'bootstrap-packages' => $bootstrap_packages, 'metapackager-packages' => $metapackager_packages, 'repository' => \%repository, @@ -834,6 +831,7 @@ sub _startLocalURLServersAsNeeded my $port = 5080; foreach my $repoInfo (values %{$self->{'distro-info'}->{repository}}) { + $repoInfo->{'avoid-mirrors'} = $ENV{SLX_NO_MIRRORS} || 0; my $localURL = $repoInfo->{url} || ''; next if !$localURL; next if $localURL =~ m[^\w+:]; # anything with a protcol-spec is non-local @@ -1071,10 +1069,6 @@ sub _stage1B_chrootAndBootstrap my @prereqPkgs = $self->_downloadBaseFiles(\@pkgs); $self->{packager}->bootstrap(\@prereqPkgs); - @pkgs = string2Array($self->{'distro-info'}->{'bootstrap-prereq-packages'}); - my @bootstrapPrereqPkgs = $self->_downloadBaseFiles(\@pkgs); - $self->{'bootstrap-prereq-packages'} = \@bootstrapPrereqPkgs; - @pkgs = string2Array($self->{'distro-info'}->{'bootstrap-packages'}); push( @pkgs, @@ -1084,8 +1078,7 @@ sub _stage1B_chrootAndBootstrap ) ); my @bootstrapPkgs = $self->_downloadBaseFiles(\@pkgs); - my @allPkgs = (@prereqPkgs, @bootstrapPrereqPkgs, @bootstrapPkgs); - $self->{'bootstrap-packages'} = \@allPkgs; + $self->{'bootstrap-packages'} = \@bootstrapPkgs; }, }); return; @@ -1109,12 +1102,6 @@ sub _stage1C_chrootAndInstallBasicVendorOS my $stage1cDir = "/$self->{stage1cSubdir}"; - # install all prerequired bootstrap packages - $self->{packager}->installPrerequiredPackages( - $self->{'bootstrap-prereq-packages'}, - $stage1cDir - ); - # import any additional trusted package keys to rpm-DB: my $keyDir = "/trusted-package-keys"; my $keyDirDH; @@ -1127,7 +1114,7 @@ sub _stage1C_chrootAndInstallBasicVendorOS $self->{packager}->importTrustedPackageKeys(\@keyFiles, $stage1cDir); } - # install all other bootstrap packages + # install all bootstrap packages $self->{packager}->installPackages( $self->{'bootstrap-packages'}, $stage1cDir ); diff --git a/installer/OpenSLX/OSSetup/MetaPackager/apt.pm b/installer/OpenSLX/OSSetup/MetaPackager/apt.pm index 65a1d8e7..1526c4ec 100644 --- a/installer/OpenSLX/OSSetup/MetaPackager/apt.pm +++ b/installer/OpenSLX/OSSetup/MetaPackager/apt.pm @@ -37,20 +37,56 @@ sub initPackageSources { my $self = shift; + $ENV{LC_ALL} = 'POSIX'; + + # remove any existing sources + slxsystem('rm -f /etc/apt/sources.list'); + + # create default timezone if there isn't any + if (!-e '/etc/timezone') { + spitFile('/etc/timezone', "$openslxConfig{'default-timezone'}\n"); + } + + # create kernel config if there isn't any + if (!-e '/etc/kernel-img.conf') { + my $kernelConfig = unshiftHereDoc(<<" END-OF-HERE"); + # Kernel image management overrides + # See kernel-img.conf(5) for details + do_symlinks = yes + relative_links = yes + do_bootloader = no + do_bootfloppy = no + do_initrd = yes + link_in_boot = yes + END-OF-HERE + spitFile('/etc/kernel-img.conf', $kernelConfig); + } return; } sub setupPackageSource { - my $self = shift; - my $repoName = shift; - my $repoInfo = shift; + my $self = shift; + my $repoName = shift; + my $repoInfo = shift; my $excludeList = shift; + my $repoURLs = shift; + + my $baseURL = shift @$repoURLs; + my $distribution = $repoInfo->{'distribution'}; + my $components = $repoInfo->{'components'}; + + my $sourcesList = "deb $baseURL $distribution $components\n"; - my $repoSubdir = ''; - if (length($repoInfo->{'repo-subdir'})) { - $repoSubdir = "/$repoInfo->{'repo-subdir'}"; + my $avoidMirrors = $repoInfo->{'avoid-mirrors'} || 0; + if (!$avoidMirrors) { + foreach my $mirrorURL (@$repoURLs) { + $sourcesList .= "deb $mirrorURL $distribution $components\n"; + } } + + appendFile('/etc/apt/sources.list', $sourcesList); + return; } @@ -59,6 +95,12 @@ sub installSelection my $self = shift; my $pkgSelection = shift; + if (slxsystem("apt-get update")) { + die _tr("unable to update repository info (%s)\n", $!); + } + if (slxsystem("apt-get -y install $pkgSelection")) { + die _tr("unable to install selection (%s)\n", $!); + } return; } @@ -66,6 +108,12 @@ sub updateBasicVendorOS { my $self = shift; + if (slxsystem("apt-get -y update")) { + die _tr("unable to update repository info (%s)\n", $!); + } + if (slxsystem("apt-get -y upgrade")) { + die _tr("unable to update this vendor-os (%s)\n", $!); + } return; } diff --git a/installer/OpenSLX/OSSetup/MetaPackager/smart.pm b/installer/OpenSLX/OSSetup/MetaPackager/smart.pm index 5303a50a..21fe6d92 100644 --- a/installer/OpenSLX/OSSetup/MetaPackager/smart.pm +++ b/installer/OpenSLX/OSSetup/MetaPackager/smart.pm @@ -33,22 +33,14 @@ sub new return bless $self, $class; } -sub initialize +sub initPackageSources { my $self = shift; - my $engine = shift; - $self->SUPER::initialize($engine); $ENV{LC_ALL} = 'POSIX'; - return; -} - -sub initPackageSources -{ - my $self = shift; + # remove any existing channels slxsystem("rm -f /etc/smart/channels/*"); - # remove channel if it already exists if (slxsystem("smart channel -y --remove-all")) { die _tr("unable to remove existing channels (%s)\n", $!); } @@ -74,19 +66,20 @@ sub setupPackageSource if (slxsystem("smart channel -y --add $repoDescr")) { die _tr("unable to add channel '%s' (%s)\n", $repoName, $!); } + my $avoidMirrors = $repoInfo->{'avoid-mirrors'} || 0; - unless ($ENV{SLX_NO_MIRRORS} || $avoidMirrors) { - my $mirrorDescr; - foreach my $mirrorURL (@$repoURLs) { - $mirrorDescr .= " --add $baseURL$repoSubdir $mirrorURL$repoSubdir"; - } - if (defined $mirrorDescr) { - if (slxsystem("smart mirror $mirrorDescr")) { - die _tr( - "unable to add mirrors for channel '%s' (%s)\n", - $repoName, $! - ); - } + return if $avoidMirrors; + + my $mirrorDescr; + foreach my $mirrorURL (@$repoURLs) { + $mirrorDescr .= " --add $baseURL$repoSubdir $mirrorURL$repoSubdir"; + } + if (defined $mirrorDescr) { + if (slxsystem("smart mirror $mirrorDescr")) { + die _tr( + "unable to add mirrors for channel '%s' (%s)\n", + $repoName, $! + ); } } return; diff --git a/installer/OpenSLX/OSSetup/MetaPackager/yum.pm b/installer/OpenSLX/OSSetup/MetaPackager/yum.pm index 684d125b..fbb50017 100644 --- a/installer/OpenSLX/OSSetup/MetaPackager/yum.pm +++ b/installer/OpenSLX/OSSetup/MetaPackager/yum.pm @@ -33,19 +33,11 @@ sub new return bless $self, $class; } -sub initialize +sub initPackageSources { my $self = shift; - my $engine = shift; - $self->SUPER::initialize($engine); $ENV{LC_ALL} = 'POSIX'; - return; -} - -sub initPackageSources -{ - my $self = shift; slxsystem("rm -f /etc/yum.repos.d/*"); slxsystem("mkdir -p /etc/yum.repos.d"); @@ -68,8 +60,9 @@ sub setupPackageSource my $repoDescr = "[$repoName]\nname=$repoInfo->{name}\nbaseurl=$baseURL$repoSubdir\n"; + my $avoidMirrors = $repoInfo->{'avoid-mirrors'} || 0; - unless ($ENV{SLX_NO_MIRRORS} || $avoidMirrors) { + if (!$avoidMirrors) { foreach my $mirrorURL (@$repoURLs) { $repoDescr .= " $mirrorURL$repoSubdir\n"; } diff --git a/installer/OpenSLX/OSSetup/Packager/dpkg.pm b/installer/OpenSLX/OSSetup/Packager/dpkg.pm index 01867824..887a26d6 100644 --- a/installer/OpenSLX/OSSetup/Packager/dpkg.pm +++ b/installer/OpenSLX/OSSetup/Packager/dpkg.pm @@ -66,8 +66,8 @@ sub bootstrap my $arch = $self->{engine}->{distro}->{arch}; my $releaseName = $self->{engine}->{distro}->{'release-name'}; my $baseURL = $self->{engine}->{baseURLs}->[0]; - my $debootstrapCmd = <<" END-OF-HERE"; - /usr/sbin/debootstrap --verbose --arch $arch $releaseName \\ + my $debootstrapCmd = unshiftHereDoc(<<" END-OF-HERE"); + /usr/sbin/debootstrap --arch $arch $releaseName \\ /slxbootstrap/slxfinal $baseURL END-OF-HERE if (slxsystem("ash", "-c", "/bin/ash $debootstrapCmd")) { @@ -84,7 +84,7 @@ sub installPackages return unless defined $pkgs && @$pkgs; - if (slxsystem("rpm", "--root=$finalPath", "-ivh", @$pkgs)) { + if (slxsystem("dpkg", "--root=$finalPath", "--install", @$pkgs)) { die _tr("error during package-installation (%s)\n", $!); } return; @@ -94,8 +94,8 @@ sub getInstalledPackages { my $self = shift; - my $rpmCmd = 'rpm -qa --queryformat="%{NAME}\n"'; - my $pkgList = `$rpmCmd`; + my $rpmCmd = 'dpkg-query -f "\${package}\n" --show'; + my $pkgList = qx{$rpmCmd}; return split "\n", $pkgList; } -- cgit v1.2.3-55-g7522