From de7e9c5871e41ca015b6c549501807ffbdbaffaf Mon Sep 17 00:00:00 2001 From: gdbeatles Date: Mon, 26 Sep 2011 13:34:20 +0000 Subject: [PATCH] install packages contained in the ubuntu distro media git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@10632 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/perl/xCAT/Template.pm | 31 +++++++++++++++++++ xCAT-server/lib/xcat/plugins/debian.pm | 28 +++++++++++++++-- xCAT-server/sbin/xcatconfig | 21 +++++++++++++ .../share/xcat/install/ubuntu/compute.tmpl | 13 +++++--- 4 files changed, 87 insertions(+), 6 deletions(-) diff --git a/xCAT-server/lib/perl/xCAT/Template.pm b/xCAT-server/lib/perl/xCAT/Template.pm index 4bf6f1c06..a3446f533 100644 --- a/xCAT-server/lib/perl/xCAT/Template.pm +++ b/xCAT-server/lib/perl/xCAT/Template.pm @@ -30,6 +30,7 @@ sub subvars { $node = shift; my $pkglistfile=shift; my $media_dir = shift; + my $platform=shift; my $outh; my $inh; @@ -80,6 +81,36 @@ sub subvars { $inc =~ s/#INCLUDE_DEFAULT_RMPKGLIST_S#/#INCLUDE_RMPKGLIST:$pkglistfile#/g; } + if (("ubuntu" eq $platform) || ("debian" eq $platform)) { + # since debian/ubuntu uses a preseed file instead of a kickstart file, pkglist + # must be included via simple string replacement instead of using includefile() + + # the first line of $pkglistfile is the space-delimited package list + # the additional lines are considered preseed directives and included as is + + if ($pkglistfile) { + # handle empty and non-empty $pkglistfile's + + if (open PKGLISTFILE, "<$pkglistfile") { + my $pkglist = ; + chomp $pkglist; + + # substitute space-delimited package list + $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#/$pkglist/g; + + # append preseed directive lines + while () { + $inc .= $_; + } + + close PKGLISTFILE; + } + } else { + # handle no $pkglistfile + $inc =~ s/#INCLUDE_DEFAULT_PKGLIST_PRESEED#//g; + } + } + #do *all* includes, recursive and all my $doneincludes=0; while (not $doneincludes) { diff --git a/xCAT-server/lib/xcat/plugins/debian.pm b/xCAT-server/lib/xcat/plugins/debian.pm index b6826ac7d..6645f1e95 100644 --- a/xCAT-server/lib/xcat/plugins/debian.pm +++ b/xCAT-server/lib/xcat/plugins/debian.pm @@ -400,6 +400,7 @@ sub mkinstall my $profile; my $tmplfile; my $pkgdir; + my $pkglistfile; my $imagename; my $platform; @@ -421,7 +422,7 @@ sub mkinstall if (!$linuximagetab) { $linuximagetab=xCAT::Table->new('linuximage', -create=>1); } - (my $ref1) = $linuximagetab->getAttribs({imagename => $imagename}, 'template', 'pkgdir'); + (my $ref1) = $linuximagetab->getAttribs({imagename => $imagename}, 'template', 'pkgdir', 'pkglist'); if ($ref1) { if ($ref1->{'template'}) { $img_hash{$imagename}->{template}=$ref1->{'template'}; @@ -429,6 +430,9 @@ sub mkinstall if ($ref1->{'pkgdir'}) { $img_hash{$imagename}->{pkgdir}=$ref1->{'pkgdir'}; } + if ($ref1->{'pkglist'}) { + $img_hash{$imagename}->{pkglist}=$ref1->{'pkglist'}; + } } # if the install template wasn't found, then lets look for it in the default locations. unless($img_hash{$imagename}->{template}){ @@ -443,6 +447,19 @@ sub mkinstall $img_hash{$imagename}->{template}=$tmplfile; } } + #if the install pkglist wasn't found, then lets look for it in the default locations + unless($img_hash{$imagename}->{pkglist}){ + my $pltfrm=xCAT_plugin::anaconda::getplatform($ref->{'osvers'}); + my $pkglistfile=xCAT::SvrUtils::get_pkglist_file_name("$installroot/custom/install/$pltfrm", + $ref->{'profile'}, $ref->{'osvers'}, $ref->{'osarch'}, $ref->{'osvers'}); + if (! $pkglistfile) { $pkglistfile=xCAT::SvrUtils::get_pkglist_file_name("$::XCATROOT/share/xcat/install/$pltfrm", + $ref->{'profile'}, $ref->{'osvers'}, $ref->{'osarch'}, $ref->{'osvers'}); + } + # if we managed to find it, put it in the hash: + if($pkglistfile){ + $img_hash{$imagename}->{pkglist}=$pkglistfile; + } + } } else { $callback->( {error => ["The os image $imagename does not exists on the osimage table for $node"], @@ -461,6 +478,7 @@ sub mkinstall if (!$pkgdir) { $pkgdir="$installroot/$os/$arch"; } + $pkglistfile=$ph->{pkglist}; } else { $os = $ent->{os}; @@ -473,6 +491,9 @@ sub mkinstall $tmplfile=xCAT::SvrUtils::get_tmpl_file_name("$installroot/custom/install/$platform", $profile, $os, $arch, $genos); if (! $tmplfile) { $tmplfile=xCAT::SvrUtils::get_tmpl_file_name("$::XCATROOT/share/xcat/install/$platform", $profile, $os, $arch, $genos); } + $pkglistfile=xCAT::SvrUtils::get_pkglist_file_name("$installroot/custom/install/$platform", $profile, $os, $arch, $genos); + if (! $pkglistfile) { $pkglistfile=xCAT::SvrUtils::get_pkglist_file_name("$::XCATROOT/share/xcat/install/$platform", $profile, $os, $arch, $genos); } + $pkgdir="$installroot/$os/$arch"; } @@ -538,7 +559,10 @@ sub mkinstall xCAT::Template->subvars( $tmplfile, "$installroot/autoinst/" . $node, - $node + $node, + $pkglistfile, + "", + $platform ); } diff --git a/xCAT-server/sbin/xcatconfig b/xCAT-server/sbin/xcatconfig index 0cab3d117..911ff3cf9 100755 --- a/xCAT-server/sbin/xcatconfig +++ b/xCAT-server/sbin/xcatconfig @@ -831,6 +831,23 @@ sub genSSHNodeHostKey } } +# on Ubuntu need to painstakingly compare /etc/localtime with files under +# /usr/share/zoneinfo since /etc/localtime # isn't always a symbolic link +sub discover_timezone_ubuntu +{ + my $localtime = "/etc/localtime"; + my $zoneinfo = "/usr/share/zoneinfo"; + + my $zone_result = `find $zoneinfo -type f -exec cmp -s $localtime {} \\; -print | grep -v posix | grep -v SystemV`; + + my @zones = split /\n/, $zone_result; + + $zones[0] =~ s/$zoneinfo\///; + $zones[0] =~ s/\//_/g; + + return $zones[0]; +} + #----------------------------------------------------------------------------- =head3 initDB @@ -926,6 +943,10 @@ sub initDB $tz = `grep ^ZONE /etc/sysconfig/clock|cut -d= -f 2|sed -e 's/"//g'`; } + elsif (-f "/etc/lsb-release") + { + $tz = discover_timezone_ubuntu; + } else { diff --git a/xCAT-server/share/xcat/install/ubuntu/compute.tmpl b/xCAT-server/share/xcat/install/ubuntu/compute.tmpl index c65d453ae..4655d0f7d 100644 --- a/xCAT-server/share/xcat/install/ubuntu/compute.tmpl +++ b/xCAT-server/share/xcat/install/ubuntu/compute.tmpl @@ -1,10 +1,11 @@ ### Localization -d-i debian-installer/locale string en_GB +d-i debian-installer/locale string en_US +d-i localechooser/supported-locales multiselect en_US.UTF-8 # Keyboard Selection d-i console-setup/ask_detect boolean false -d-i console-setup/layoutcode string uk +d-i console-setup/layoutcode string en ### Network Configuration d-i netcfg/choose_interface select #TABLE:noderes:$NODE:primarynic# @@ -26,7 +27,7 @@ d-i mirror/http/proxy string #d-i mirror/suite string testing # Suite to use for loading installer components (optional). #d-i mirror/udeb/suite string testing -#d-i mirror/suite string feisty +d-i mirror/suite string maverick ### Partitioning @@ -97,7 +98,7 @@ tasksel tasksel/first multiselect standard # gawk required for the xCAT scripts to work # Otherwise it installs mawk, which doesn't work -d-i pkgsel/include string openssh-server ntp gawk +d-i pkgsel/include string openssh-server ntp gawk #INCLUDE_DEFAULT_PKGLIST_PRESEED# d-i debian-installer/allow_unauthenticated string true d-i pkgsel/update-policy select none @@ -123,5 +124,9 @@ d-i preseed/early_command string wget http://#TABLE:noderes:$NODE:nfsserver#/ins d-i preseed/late_command string wget http://#TABLE:noderes:$NODE:nfsserver#/install/autoinst/#TABLE:nodelist:THISNODE:node#.post; \ chmod u+x #TABLE:nodelist:THISNODE:node#.post; \ cp ./#TABLE:nodelist:THISNODE:node#.post /target/root/post.script; \ + mount -o bind /proc /target/proc -t proc; \ + mount -o bind /dev /target/dev; \ + mount -o bind /dev/pts /target/dev/pts -t devpts; \ + mount -o bind /sys /target/sys; \ chroot /target /root/post.script