diff --git a/xCAT-server-2.0/lib/xcat/plugins/sles.pm b/xCAT-server-2.0/lib/xcat/plugins/sles.pm
index 3dd3e1575..efdf966fe 100644
--- a/xCAT-server-2.0/lib/xcat/plugins/sles.pm
+++ b/xCAT-server-2.0/lib/xcat/plugins/sles.pm
@@ -2,6 +2,7 @@
package xCAT_plugin::sles;
use Storable qw(dclone);
use Sys::Syslog;
+use File::Temp qw/tempdir/;
use xCAT::Table;
use xCAT::Utils;
use xCAT::MsgUtils;
@@ -294,6 +295,8 @@ sub copycd
my $request = shift;
my $callback = shift;
my $doreq = shift;
+ my $distname = "";
+ my $detdistname = "";
my $installroot;
$installroot = "/install";
my $sitetab = xCAT::Table->new('site');
@@ -370,6 +373,7 @@ sub copycd
{
my @parts = split /\s+/, $prod;
my @subparts = split /-/, $parts[2];
+ $detdistname = "sles" . $subparts[0];
unless ($distname) { $distname = "sles" . $subparts[0] };
}
}
@@ -440,6 +444,41 @@ sub copycd
# );
chmod 0755, "$installroot/$distname/$arch";
chmod 0755, "$installroot/$distname/$arch/$discnumber";
+ if ($detdistname eq "sles10.2" and $discnumber eq "1") { #Go and correct inst_startup.ycp in the install root
+ my $tmnt = tempdir("xcat-sles.$$.XXXXXX",TMPDIR=>1);
+ my $tdir = tempdir("xcat-slesd.$$.XXXXXX",TMPDIR=>1);
+ my $startupfile;
+ my $ycparch = $arch;
+ if ($arch eq "x86") {
+ $ycparch = "i386";
+ }
+ system("mount -o loop $installroot/$distname/$arch/$discnumber/boot/$ycparch/root $tmnt");
+ system("cd $tmnt;find . |cpio -dump $tdir");
+ system("umount $tmnt;rm $installroot/$distname/$arch/$discnumber/boot/$ycparch/root");
+ open($startupfile,"<","$tdir/usr/share/YaST2/clients/inst_startup.ycp");
+ my @ycpcontents = <$startupfile>;
+ my @newcontents;
+ my $writecont=1;
+ close($startupfile);
+ foreach (@ycpcontents) {
+ if (/No hard disks/) {
+ $writecont=0;
+ } elsif (/\}/) {
+ $writecont=1;
+ }
+ s/cancel/next/;
+ if ($writecont) {
+ push @newcontents, $_;
+ }
+ }
+ open($startupfile,">","$tdir/usr/share/YaST2/clients/inst_startup.ycp");
+ foreach (@newcontents) {
+ print $startupfile $_;
+ }
+ close($startupfile);
+ system("cd $tdir;mkfs.cramfs . $installroot/$distname/$arch/$discnumber/boot/$ycparch/root");
+ system("rm -rf $tmnt $tdir");
+ }
if ($rc != 0)
{
diff --git a/xCAT-server-2.0/share/xcat/install/scripts/chroot.sles.iscsi b/xCAT-server-2.0/share/xcat/install/scripts/chroot.sles.iscsi
new file mode 100644
index 000000000..349c8d2b0
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/install/scripts/chroot.sles.iscsi
@@ -0,0 +1,112 @@
+
+
+
diff --git a/xCAT-server-2.0/share/xcat/install/scripts/post.sles.iscsi b/xCAT-server-2.0/share/xcat/install/scripts/post.sles.iscsi
new file mode 100644
index 000000000..2a81e8e21
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/install/scripts/post.sles.iscsi
@@ -0,0 +1,95 @@
+
+
+
diff --git a/xCAT-server-2.0/share/xcat/install/sles/iscsi.tmpl b/xCAT-server-2.0/share/xcat/install/sles/iscsi.tmpl
new file mode 100644
index 000000000..9befe2ffb
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/install/sles/iscsi.tmpl
@@ -0,0 +1,99 @@
+
+
+
+
+
+ true
+ true
+
+ false
+ false
+ mbr
+
+
+ #TABLE:nodelist:$NODE:node#
+
+
+ None
+ #TABLE:iscsi:$NODE:server#:3260,1
+ onboot
+ #TABLE:iscsi:$NODE:target#
+
+
+ 1.0
+
+
+
+ GMT
+ #TABLE:site:key=timezone:value#
+
+
+ english-us
+
+ en_US
+
+ false
+ false
+ false
+ true
+
+
+ non
+
+
+
+
+ /dev/sda
+ true
+
+
+
+
+
+ base
+ x11
+
+
+ stunnel
+ xntp
+ rsync
+ open-iscsi
+
+
+
+
+
+
+ root
+ #CRYPT:passwd:key=system,username=root:password#
+ true
+
+
+
+
+
+
+ true
+ true
+ #TABLE:site:key=domain:value#
+ #TABLE:nodelist:$NODE:node#
+
+
+
+ dhcp
+ eth0
+ nfsroot
+
+
+
+ false
+
+
+
+
+ #INCLUDE:../scripts/pre.sles#
+ #INCLUDE:../scripts/chroot.sles.iscsi#
+ #INCLUDE:../scripts/post.sles.iscsi#
+
+
+
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/compute.exlist b/xCAT-server-2.0/share/xcat/netboot/sles/compute.exlist
new file mode 100644
index 000000000..fb4fb072b
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/compute.exlist
@@ -0,0 +1,13 @@
+./usr/share/man*
+./usr/share/locale*
+./usr/share/i18n*
+./var/cache/yum*
+./usr/share/doc*
+./usr/share/gnome*
+./usr/share/zoneinfo*
+./usr/share/cracklib*
+./usr/share/info*
+./usr/share/omf*
+./usr/lib/locale*
+./usr/lib/perl5*
+./boot*
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/compute.pkglist b/xCAT-server-2.0/share/xcat/netboot/sles/compute.pkglist
new file mode 100644
index 000000000..2a2758dd4
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/compute.pkglist
@@ -0,0 +1,8 @@
+bash
+nfs-utils
+stunnel
+dhcpcd
+kernel-smp
+openssh
+busybox
+wget
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/genimage b/xCAT-server-2.0/share/xcat/netboot/sles/genimage
new file mode 100755
index 000000000..02ae05e56
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/genimage
@@ -0,0 +1,498 @@
+#!/usr/bin/env perl
+use File::Basename;
+use File::Path;
+use File::Copy;
+use File::Find;
+use Getopt::Long;
+#use strict;
+Getopt::Long::Configure("bundling");
+Getopt::Long::Configure("pass_through");
+
+my $prinic; #TODO be flexible on node primary nic
+my $othernics; #TODO be flexible on node primary nic
+my $netdriver;
+my @yumdirs;
+my $arch = `uname -m`;
+chomp($arch);
+if ($arch =~ /i.86$/) {
+ $arch = x86;
+}
+my %libhash;
+my @filestoadd;
+my $profile;
+my $osver;
+my $pathtofiles=dirname($0);
+my $name = basename($0);
+my $onlyinitrd=0;
+if ($name =~ /geninitrd/) {
+ $onlyinitrd=1;
+}
+my $rootlimit;
+my $tmplimit;
+my $installroot = "/install";
+my $kernelver = ""; #`uname -r`;
+my $basekernelver; # = $kernelver;
+
+sub xdie {
+ system("rm -rf /tmp/xcatinitrd.$$");
+ die @_;
+}
+
+$SIG{INT} = $SIG{TERM} = sub { xdie "Interrupted" };
+GetOptions(
+ 'a=s' => \$arch,
+ 'p=s' => \$profile,
+ 'o=s' => \$osver,
+ 'n=s' => \$netdriver,
+ 'i=s' => \$prinic,
+ 'r=s' => \$othernics,
+ 'l=s' => \$rootlimit,
+ 't=s' => \$tmplimit,
+ 'k=s' => \$kernelver
+);
+#Default to the first kernel found in the install image if nothing specified explicitly.
+#A more accurate guess than whatever the image build server happens to be running
+#If specified, that takes precedence.
+#if image has one, that is used
+#if all else fails, resort to uname -r like this script did before
+my @KVERS= <$installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/*>;
+if (scalar(@KVERS)) {
+ $basekernelver = basename($KVERS[0]);
+}
+unless ($basekernelver) {
+ $basekernelver = `uname -r`;
+}
+unless ($kernelver) {
+ $kernelver=$basekernelver;
+}
+chomp($kernelver);
+unless ($osver and $profile and $netdriver and $prinic) {
+ print 'Usage: genimage -i -n [-r ] -o -p -k '."\n";
+ print "Examples:\n";
+ print " genimage -i eth0 -n tg3 -o centos5.1 -p compute\n";
+ print " genimage -i eth0 -r eth1,eth2 -n tg3,bnx2 -o centos5.1 -p compute\n";
+ exit 1;
+}
+my @ndrivers;
+foreach (split /,/,$netdriver) {
+ unless (/\.ko$/) {
+ s/$/.ko/;
+ }
+ if (/^$/) {
+ next;
+ }
+ push @ndrivers,$_;
+}
+
+unless ($onlyinitrd) {
+ my $srcdir = "$installroot/$osver/$arch/1";
+ mkpath "$installroot/netboot/$osver/$arch/$profile/rootimg/etc";
+ mkpath "$installroot/netboot/$osver/$arch/$profile/rootimg/dev";
+ #system "mount -o bind /dev $installroot/netboot/$osver/$arch/$profile/rootimg/dev";
+ system "mknod $installroot/netboot/$osver/$arch/$profile/rootimg/dev/zero c 1 5";
+ open($fd,">>","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/fstab");
+ print $fd "#Dummy fstab for rpm postscripts to see\n";
+ close($fd);
+ system("zypper -R $installroot/netboot/$osver/$arch/$profile/rootimg/ sa file:$srcdir");
+ #my $yumcmd = "yum -y -c /tmp/genimage.$$.yum.conf --installroot=$installroot/netboot/$osver/$arch/$profile/rootimg/ --disablerepo=* ";
+ #$yumcmd .= "install ";
+ #mkpath("$installroot/netboot/$osver/$arch/$profile/rootimg/var/lib/yum");
+ my $yumcmd = "zypper -R $installroot/netboot/$osver/$arch/$profile/rootimg/ install -y ";
+ my $pkglist;
+ if (-r "$pathtofiles/$profile.$osver.$arch.pkglist") {
+ $pkglist = "$pathtofiles/$profile.$osver.$arch.pkglist";
+ } elsif (-r "$pathtofiles/$profile.$arch.pkglist") {
+ $pkglist = "$pathtofiles/$profile.$arch.pkglist";
+ } elsif (-r "$pathtofiles/$profile.$osver.pkglist") {
+ $pkglist = "$pathtofiles/$profile.$osver.pkglist";
+ } elsif (-r "$pathtofiles/$profile.pkglist") {
+ $pkglist = "$pathtofiles/$profile.pkglist";
+ } else {
+ print "Unable to find package list for $profile!";
+ return 1;
+ }
+ open($yumconfig,"<","$pkglist");
+ while (<$yumconfig>) {
+ chomp;
+ $yumcmd .= $_ . " ";
+ }
+ $yumcmd =~ s/ $/\n/;
+ my $rc = system($yumcmd);
+ if ($rc) {
+ print "zypper invocation failed\n";
+ exit 1;
+ }
+ postscripts(); #run 'postscripts'
+}
+unlink "/tmp/genimage.$$.yum.conf";
+mkinitrd();
+
+sub getlibs {
+ my $file = shift;
+ my $liblist = `chroot $installroot/netboot/$osver/$arch/$profile/rootimg ldd $file`;
+ my @libs = split/\n/,$liblist;
+ my @return;
+ foreach (@libs) {
+ unless (/=>/) {
+ (my $wjnk, my $lib,my $jnk) = split /\s+/,$_,3;
+ $lib =~ s/^\///;
+ $libhash{$lib}=1;
+ next;
+ }
+ (my $temp1,my $temp2) = split />/,$_,2;
+ (my $whitespace,$temp1,$temp2) = split /\s+/,$temp2,4;
+ unless ($temp1 =~ /\//) {
+ next;
+ }
+ $temp1 =~ s/^\///;
+ $libhash{$temp1}=1;
+ }
+}
+
+sub mkinitrd {
+ mkpath("/tmp/xcatinitrd.$$/bin");
+ if($basekernelver eq $kernelver) {
+ rename(<$installroot/netboot/$osver/$arch/$profile/rootimg/boot/vmlinuz*>,"$installroot/netboot/$osver/$arch/$profile/kernel");
+ }
+ else {
+ if(-r "$installroot/netboot/$osver/$arch/$profile/rootimg/boot/vmlinuz-$kernelver") {
+ rename("$installroot/netboot/$osver/$arch/$profile/rootimg/boot/vmlinuz-$kernelver","$installroot/netboot/$osver/$arch/$profile/kernel");
+ } elsif(-r "/boot/vmlinuz-$kernelver") {
+ copy("/boot/vmlinuz-$kernelver","$installroot/netboot/$osver/$arch/$profile/kernel");
+ }
+ else {
+ xdie("Cannot read /boot/vmlinuz-$kernelver");
+ }
+ }
+ symlink("bin","/tmp/xcatinitrd.$$/sbin");
+ mkpath("/tmp/xcatinitrd.$$/usr/bin");
+ mkpath("/tmp/xcatinitrd.$$/usr/sbin");
+ mkpath("/tmp/xcatinitrd.$$/usr/lib");
+ mkpath("/tmp/xcatinitrd.$$/usr/lib64");
+ mkpath("/tmp/xcatinitrd.$$/lib/firmware");
+ mkpath("/tmp/xcatinitrd.$$/lib64/firmware");
+ mkpath("/tmp/xcatinitrd.$$/proc");
+ mkpath("/tmp/xcatinitrd.$$/sys");
+ mkpath("/tmp/xcatinitrd.$$/dev/mapper");
+ mkpath("/tmp/xcatinitrd.$$/sysroot");
+ mkpath("/tmp/xcatinitrd.$$/etc/ld.so.conf.d");
+ mkpath("/tmp/xcatinitrd.$$/var/lib/dhclient");
+ my $inifile;
+ open($inifile,">","/tmp/xcatinitrd.$$/init");
+ print $inifile "#!/sbin/busybox.anaconda sh\n";
+ print $inifile "busybox.anaconda mount -t proc /proc /proc\n";
+ print $inifile "busybox.anaconda --install\n";
+ print $inifile "mount -t sysfs /sys /sys\n";
+ print $inifile "mount -o mode=0755 -t tmpfs /dev /dev\n";
+ print $inifile "mkdir /dev/pts\n";
+ print $inifile "mount -t devpts -o gid=5,mode=620 /dev/pts /dev/pts\n";
+ print $inifile "mkdir /dev/shm\n";
+ print $inifile "mkdir /dev/mapper\n";
+ print $inifile "mknod /dev/null c 1 3\n";
+ print $inifile "mknod /dev/zero c 1 5\n";
+ print $inifile "mknod /dev/systty c 4 0\n";
+ print $inifile "mknod /dev/tty c 5 0\n";
+ print $inifile "mknod /dev/console c 5 1\n";
+ print $inifile "mknod /dev/ptmx c 5 2\n";
+ print $inifile "mknod /dev/rtc c 10 135\n";
+ print $inifile "mknod /dev/tty0 c 4 0\n";
+ print $inifile "mknod /dev/tty1 c 4 1\n";
+ print $inifile "mknod /dev/tty2 c 4 2\n";
+ print $inifile "mknod /dev/tty3 c 4 3\n";
+ print $inifile "mknod /dev/tty4 c 4 4\n";
+ print $inifile "mknod /dev/tty5 c 4 5\n";
+ print $inifile "mknod /dev/tty6 c 4 6\n";
+ print $inifile "mknod /dev/tty7 c 4 7\n";
+ print $inifile "mknod /dev/tty8 c 4 8\n";
+ print $inifile "mknod /dev/tty9 c 4 9\n";
+ print $inifile "mknod /dev/tty10 c 4 10\n";
+ print $inifile "mknod /dev/tty11 c 4 11\n";
+ print $inifile "mknod /dev/tty12 c 4 12\n";
+ print $inifile "mknod /dev/ttyS0 c 4 64\n";
+ print $inifile "mknod /dev/ttyS1 c 4 65\n";
+ print $inifile "mknod /dev/ttyS2 c 4 66\n";
+ print $inifile "mknod /dev/ttyS3 c 4 67\n";
+ foreach (@ndrivers) {
+ print $inifile "insmod /lib/$_\n";
+ }
+ print $inifile <"."/tmp/xcatinitrd.$$/bin/netstart");
+ print $inifile "#!/sbin/nash\n";
+ print $inifile "network --device $prinic --bootproto dhcp\n";
+ close($inifile);
+ chmod(0755,"/tmp/xcatinitrd.$$/init");
+ chmod(0755,"/tmp/xcatinitrd.$$/bin/netstart");
+ @filestoadd=();
+ foreach (@ndrivers) {
+ if (-f "$pathtofiles/$_") {
+ push @filestoadd,[$_,"lib/$_"];
+ }
+ }
+ foreach ("bin/cpio","sbin/nash","sbin/busybox.anaconda","sbin/rmmod","sbin/mount.nfs") {
+ getlibs($_);
+ push @filestoadd,$_;
+ }
+ if ($arch =~ /x86_64/) {
+ push @filestoadd,"lib64/libnss_dns.so.2";
+ }
+ else {
+ push @filestoadd,"lib/libnss_dns.so.2";
+ }
+ push @filestoadd,keys %libhash;
+ if($basekernelver ne $kernelver) {
+ system("rm -rf $installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/$basekernelver");
+ unless (-d "$installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/$kernelver") {
+ if(-d "/lib/modules/$kernelver") {
+ system("cd /lib/modules;cp -r $kernelver $installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/");
+ }
+ else {
+ xdie("Cannot read /lib/modules/$kernelver");
+ }
+ }
+ }
+ find(\&isnetdriver, <$installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/$kernelver/*>);
+ foreach (@filestoadd) {
+ if (ref($_)) {
+ my $srcpath = "$installroot/netboot/$osver/$arch/$profile/rootimg/".$_->[0];
+ if (-f "$pathtofiles/".$_->[0]) {
+ $srcpath="$pathtofiles/".$_->[0];
+ }
+ copy($srcpath,"/tmp/xcatinitrd.$$/".$_->[1]);
+ chmod 0755,"/tmp/xcatinitrd.$$/".$_->[1];
+ } else {
+ my $srcpath = "$installroot/netboot/$osver/$arch/$profile/rootimg/$_";
+ if (-f "$pathtofiles/$_") {
+ $srcpatch = "$pathtofiles/$_";
+ }
+ copy("$srcpath","/tmp/xcatinitrd.$$/$_");
+ chmod 0755,"/tmp/xcatinitrd.$$/".$_;
+ }
+ }
+
+ #copy("$installroot/netboot/$osver/$arch/$profile/rootimg/lib/modules/*d","/tmp/xcatinitrd.$$/$_");
+ system("cd /tmp/xcatinitrd.$$;find .|cpio -H newc -o|gzip -9 -c - > $installroot/netboot/$osver/$arch/$profile/initrd.gz");
+ system("rm -rf /tmp/xcatinitrd.$$");
+
+}
+
+sub isyumdir {
+ if ($File::Find::name =~ /\/repodata$/) {
+ my $location = $File::Find::name;
+ $location =~ s/\/repodata$//;
+ push @yumdirs,$location;
+ }
+}
+
+sub isnetdriver {
+ foreach (@ndrivers) {
+ if ($File::Find::name =~ /\/$_/) {
+ my $filetoadd = $File::Find::name;
+ $filetoadd =~ s!$installroot/netboot/$osver/$arch/$profile/rootimg/!!;
+ push @filestoadd,[$filetoadd,"lib/$_"];
+ }
+ }
+}
+
+
+
+
+
+
+
+sub postscripts { # TODO: customized postscripts
+ generic_post();
+ if (-d "$installroot/postscripts/hostkeys") {
+ for my $key (<$installroot/postscripts/hostkeys/*key>) {
+ copy ($key,"$installroot/netboot/$osver/$arch/$profile/rootimg/etc/ssh/");
+ }
+ chmod 0600,$installroot/netboot/$osver/$arch/$profile/rootimg/etc/ssh/*key>;
+ }
+ if (-d "/$installroot/postscripts/.ssh") {
+ mkpath("/$installroot/netboot/$osver/$arch/$profile/rootimg/root/.ssh");
+ chmod(0700,"/$installroot/netboot/$osver/$arch/$profile/rootimg/root/.ssh/");
+ for my $file ($installroot/postscripts/.ssh/*>) {
+ copy ($file,"/$installroot/netboot/$osver/$arch/$profile/rootimg/root/.ssh/");
+ }
+ chmod(0600,$installroot/netboot/$osver/$arch/$profile/rootimg/root/.ssh/*>);
+ }
+
+}
+
+sub generic_post { #This function is meant to leave the image in a state approximating a normal install
+ my $cfgfile;
+ unlink("$installroot/netboot/$osver/$arch/$profile/rootimg/dev/null");
+ system("mknod $installroot/netboot/$osver/$arch/$profile/rootimg/dev/null c 1 3");
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/fstab");
+ print $cfgfile "devpts /dev/pts devpts gid=5,mode=620 0 0\n";
+ print $cfgfile "tmpfs /dev/shm tmpfs defaults 0 0\n";
+ print $cfgfile "proc /proc proc defaults 0 0\n";
+ print $cfgfile "sysfs /sys sysfs defaults 0 0\n";
+ if ($tmplimit) {
+ print $cfgfile "tmpfs /tmp tmpfs defaults 0 0\n";
+ print $cfgfile "tmpfs /var/tmp tmpfs defaults 0 0\n";
+ }
+ close($cfgfile);
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/sysconfig/network");
+ print $cfgfile "NETWORKING=yes\n";
+ close($cfgfile);
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/resolv.conf");
+ print $cfgfile "#Dummy resolv.conf to make boot cleaner";
+ close($cfgfile);
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/sysconfig/network-scripts/ifcfg-$prinic");
+ print $cfgfile "ONBOOT=yes\nBOOTPROTO=dhcp\nDEVICE=$prinic\n";
+ close($cfgfile);
+ foreach (split /,/,$othernics) {
+ if (/^$/) { next; }
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/sysconfig/network-scripts/ifcfg-$_");
+ print $cfgfile "ONBOOT=yes\nBOOTPROTO=dhcp\nDEVICE=$_\n";
+ close($cfgfile);
+ }
+ open($cfgfile,">>","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/securetty");
+ print $cfgfile "ttyS0\n";
+ print $cfgfile "ttyS1\n";
+ close($cfgfile);
+ my @passwd;
+ open($cfgfile,"<","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/passwd");
+ @passwd = <$cfgfile>;
+ close($cfgfile);
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/passwd");
+ foreach (@passwd) {
+ if (/^root:/) {
+ s/^root:\*/root:x/
+ }
+ print $cfgfile $_;
+ }
+ close($cfgfile);
+ foreach (<$installroot/netboot/$osver/$arch/$profile/rootimg/etc/skel/.*>) {
+ if (basename($_) eq '.' or basename($_) eq '..') {
+ next;
+ }
+ copy $_,"$installroot/netboot/$osver/$arch/$profile/rootimg/root/";
+ }
+ open($cfgfile,">","$installroot/netboot/$osver/$arch/$profile/rootimg/etc/rc3.d/S60gettyset");
+ print $cfgfile "#!/bin/bash\n";
+ print $cfgfile "for i in `cat /proc/cmdline`; do\n";
+ print $cfgfile ' KEY=`echo $i|cut -d= -f 1`'."\n";
+ print $cfgfile " if [ \"\$KEY\" == \"console\" ]; then\n";
+ print $cfgfile " VALUE=`echo \$i | cut -d= -f 2`\n";
+ print $cfgfile " COTTY=`echo \$VALUE|cut -d, -f 1`\n";
+ print $cfgfile " COSPEED=`echo \$VALUE|cut -d, -f 2|cut -dn -f 1`\n";
+ print $cfgfile " if echo \$VALUE | grep n8r; then\n";
+ print $cfgfile " FLOWFLAG=\"-h\"\n";
+ print $cfgfile " fi\n";
+ print $cfgfile " echo xco:2345:respawn:/sbin/agetty \$FLOWFLAG \$COTTY \$COSPEED xterm >> /etc/inittab\n";
+ print $cfgfile " init q\n";
+ print $cfgfile " fi\n";
+ print $cfgfile "done\n";
+ close($cfgfile);
+ chmod(0755,"$installroot/netboot/$osver/$arch/$profile/rootimg/etc/rc3.d/S60gettyset");
+ #link("$installroot/netboot/$osver/$arch/$profile/rootimg/sbin/init","$installroot/netboot/$osver/$arch/$profile/rootimg/init");
+
+ rename(<$installroot/netboot/$osver/$arch/$profile/rootimg/boot/vmlinuz*>,"$installroot/netboot/$osver/$arch/$profile/kernel");
+}
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/geninitrd b/xCAT-server-2.0/share/xcat/netboot/sles/geninitrd
new file mode 120000
index 000000000..2271c3f0f
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/geninitrd
@@ -0,0 +1 @@
+genimage
\ No newline at end of file
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/service.exlist b/xCAT-server-2.0/share/xcat/netboot/sles/service.exlist
new file mode 100644
index 000000000..23963520f
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/service.exlist
@@ -0,0 +1,12 @@
+./usr/share/man*
+./usr/share/locale*
+./usr/share/i18n*
+./var/cache/yum*
+./usr/share/doc*
+./usr/share/gnome*
+./usr/share/zoneinfo*
+./usr/share/cracklib*
+./usr/share/info*
+./usr/share/omf*
+./usr/lib/locale*
+./boot*
diff --git a/xCAT-server-2.0/share/xcat/netboot/sles/service.pkglist b/xCAT-server-2.0/share/xcat/netboot/sles/service.pkglist
new file mode 100644
index 000000000..5535b6a89
--- /dev/null
+++ b/xCAT-server-2.0/share/xcat/netboot/sles/service.pkglist
@@ -0,0 +1,20 @@
+bash
+stunnel
+dhclient
+kernel
+openssh-server
+openssh-clients
+busybox-anaconda
+vi
+rpm
+bind
+bind-utils
+atftp
+ksh
+nfs-utils
+dhcp
+bzip2
+rootfiles
+vixie-cron
+wget
+vsftpd