From cba42170feeb089858824096dc7d60855ebc0caf Mon Sep 17 00:00:00 2001 From: linggao Date: Thu, 11 Feb 2010 02:24:48 +0000 Subject: [PATCH] more statelite work for SLES git-svn-id: https://svn.code.sf.net/p/xcat/code/xcat-core/trunk@5207 8638fb3e-16cb-4fca-ae20-7b5d299a9bcd --- xCAT-server/lib/xcat/plugins/sles.pm | 4 +-- xCAT-server/lib/xcat/plugins/statelite.pm | 38 ++++++++++++++++++-- xCAT-server/share/xcat/netboot/sles/genimage | 36 +++++++++++++++---- 3 files changed, 67 insertions(+), 11 deletions(-) diff --git a/xCAT-server/lib/xcat/plugins/sles.pm b/xCAT-server/lib/xcat/plugins/sles.pm index 0d38b551e..a49caff43 100644 --- a/xCAT-server/lib/xcat/plugins/sles.pm +++ b/xCAT-server/lib/xcat/plugins/sles.pm @@ -291,8 +291,8 @@ sub mknetboot } $kcmdline = "NFSROOT=$nfssrv:$nfsdir STATEMNT="; - if ($stateHash->{statemnt}) { - $kcmdline .= $stateHash->{statemnt} . " "; + if (exists($stateHash->{$node})) { + $kcmdline .= $stateHash->{$node}->[0]->{statemnt} . " "; } else { $kcmdline .= " "; } diff --git a/xCAT-server/lib/xcat/plugins/statelite.pm b/xCAT-server/lib/xcat/plugins/statelite.pm index f0fa16047..51a70be54 100644 --- a/xCAT-server/lib/xcat/plugins/statelite.pm +++ b/xCAT-server/lib/xcat/plugins/statelite.pm @@ -138,7 +138,41 @@ sub process_request { # - arch # - profile $callback->({info=>["going to modify $rootimg_dir"]}); - + + #get the root password for the node + my $passtab = xCAT::Table->new('passwd'); + if ($passtab) { + (my $pent) = $passtab->getAttribs({key=>'system',username=>'root'},'password'); + if ($pent and defined ($pent->{password})) { + my $pass = $pent->{password}; + my $shadow; + open($shadow,"<","$rootimg_dir/etc/shadow"); + my @shadents = <$shadow>; + close($shadow); + open($shadow,">","$rootimg_dir/etc/shadow"); + unless ($pass =~ /^\$1\$/) { + $pass = crypt($pass,'$1$'.genpassword(8)); + } + print $shadow "root:$pass:13880:0:99999:7:::\n"; + foreach (@shadents) { + unless (/^root:/) { + print $shadow "$_"; + } + } + close($shadow); + } + } + + # sync fils configured in the synclist to the rootimage + #if (!$imagename) { + # $syncfile = xCAT::SvrUtils->getsynclistfile(undef, $osver, $arch, $profile, "netboot"); + # if (defined ($syncfile) && -f $syncfile + # && -d $rootimg_dir) { + # print "sync files from $syncfile to the $rootimg_dir\n"; + # `$::XCATROOT/bin/xdcp -i $rootimg_dir -F $syncfile`; + # } + #} + # now get the files for the node my @synclist = xCAT::Utils->runcmd("ilitefile $osver-$arch-$profile", 0, 1); @@ -260,7 +294,7 @@ sub liteMe { $verbose && $callback->({info=>["ln -sf ../../$l/.default$f $rootimg_dir/$statedir/tmpfs$f"]}); system("ln -sfn ../../$l/.default$f $rootimg_dir/$statedir/tmpfs/$f"); - $verbose && $callback->({info=>["ln -sf $relPath/$statedir/tmpfs$f $rootimg_dir$f"]}); + $verbose && $callback->({info=>["ln -sf $l/$statedir/tmpfs$f $rootimg_dir$f"]}); system("ln -sfn $l/$statedir/tmpfs$f $rootimg_dir$f"); } diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage index 084de8e7f..bdf82672e 100755 --- a/xCAT-server/share/xcat/netboot/sles/genimage +++ b/xCAT-server/share/xcat/netboot/sles/genimage @@ -213,6 +213,7 @@ if($mode eq "statelite") { push @ndrivers, "sunrpc.ko"; push @ndrivers, "lockd.ko"; push @ndrivers, "nfs_acl.ko"; + push @ndrivers, "fscache.ko"; push @ndrivers, "auth_rpcgss.ko"; push @ndrivers, "exportfs.ko"; push @ndrivers, "nfsd.ko"; @@ -405,12 +406,13 @@ if (($postinstall_filename) && (-x $postinstall_filename)) { if($mode eq "statelite") { mkpath "$rootimg_dir/.statelite"; # create place for NFS mounts; + mkpath "$rootimg_dir/root/.ssh"; # create place for NFS mounts for ssh; # this script will get the directories; - unless( -r "../add-on/statelite/rc.statelite") { - print "Can't find ../add-on/statelite/rc.statelite!\n"; + unless( -r "$pathtofiles/../add-on/statelite/rc.statelite") { + print "Can't find $pathtofiles/../add-on/statelite/rc.statelite!\n"; exit; } - system("cp ../add-on/statelite/rc.statelite $rootimg_dir/etc/init.d/statelite"); + system("cp $pathtofiles/../add-on/statelite/rc.statelite $rootimg_dir/etc/init.d/statelite"); # the dhcp client information stores in the directory "/var/lib/dhcpcd/" unless(-l "$rootimg_dir/var/lib/dhcpcd") { mkpath "$rootimg_dir/var/lib/dhcpcd/"; @@ -490,10 +492,12 @@ sub mkinitrd { mkpath("/tmp/xcatinitrd.$$/tmp"); mkpath("/tmp/xcatinitrd.$$/var/run"); mkpath("/tmp/xcatinitrd.$$/lib64/firmware"); - if($osver =~ /sles/ && $arch eq "ppc64") {#SLES for Power6 + if($osver =~ /sles/ && $arch eq "ppc64") {#SLES for Power6&7 mkpath("/tmp/xcatinitrd.$$/lib64/power6"); + mkpath("/tmp/xcatinitrd.$$/lib64/power7"); } mkpath("/tmp/xcatinitrd.$$/lib/power6");#SLES10 + mkpath("/tmp/xcatinitrd.$$/lib/power7");#SLES10 mkpath("/tmp/xcatinitrd.$$/lib/mkinitrd/bin"); mkpath("/tmp/xcatinitrd.$$/proc"); mkpath("/tmp/xcatinitrd.$$/sys"); @@ -679,6 +683,17 @@ for i in `cat /proc/cmdline`; do VALUE=`echo \$i |awk -F= '{print \$2}'` SERVER=`echo \$VALUE|awk -F: '{print \$1}'` ROOTDIR=`echo \$VALUE|awk -F/ '{for(i=2;i<=NF;i++) printf "/%s",\$i}'` + elif [ "\$KEY" == 'STATEMNT' ]; then + NFSROOT=1 + VALUE=`echo \$i |awk -F= '{print \$2}'` + SNAPSHOTSERVER=`echo \$VALUE|awk -F: '{print \$1}'` + SNAPSHOTROOT=`echo \$VALUE|awk -F/ '{for(i=2;i<=NF;i++) printf "/%s",\$i}'` + # may be that there is not server and just a directory. + if [ -z \$SNAPSHOTROOT ] + then + SNAPSHOTROOT=\$SNAPSHOTSERVER + SNAPSHOTSERVER= + fi fi done @@ -735,13 +750,20 @@ if [ "\$NFSROOT" = "1" ]; then mount -t tmpfs rw \$NEWROOT/\$RWDIR mkdir -p \$NEWROOT/\$RWDIR/tmpfs + #mount the /root/.ssh, it needs more strict permission in order for ssh work + if [ ! -e "\$NEWROOT/root/.ssh" ] + then + mkdir -p \$NEWROOT/root/.ssh + fi + mount -t tmpfs -o mode=755 ssh \$NEWROOT/root/.ssh + # mount the SNAPSHOT directory here for persistent use. if [ ! -z \$SNAPSHOTSERVER ] then mkdir -p \$NEWROOT/\$RWDIR/persistent MAXTRIES=5 ITER=0 - while ! mount \$SNAPSHOTSERVER:\$SNAPSHOTROOT \$NEWROOT/\$RWDIR/persistent + while ! mount \$SNAPSHOTSERVER:\$SNAPSHOTROOT \$NEWROOT/\$RWDIR/persistent -o nolock do ITER=\$(expr \$ITER + 1) if [ "\$ITER" == "\$MAXTRIES" ] @@ -1005,8 +1027,8 @@ sub postscripts { # TODO: customized postscripts } copy ("$installroot/postscripts/xcatdsklspost", "$rootimg_dir/opt/xcat/"); chmod '0755', "$rootimg_dir/opt/xcat/xcatdsklspost"; - system("$XCATROOT/share/xcat/netboot/add-on/statelite/add_passwd $rootimg_dir"); - system("$XCATROOT/share/xcat/netboot/add-on/statelite/add_ssh $rootimg_dir"); + #system("$XCATROOT/share/xcat/netboot/add-on/statelite/add_passwd $rootimg_dir"); + #system("$XCATROOT/share/xcat/netboot/add-on/statelite/add_ssh $rootimg_dir"); } if (-d "$installroot/postscripts/hostkeys") { for my $key (<$installroot/postscripts/hostkeys/*key>) {