diff --git a/xCAT-server/share/xcat/install/sles/service.sles12.pkglist b/xCAT-server/share/xcat/install/sles/service.sles12.pkglist
new file mode 100644
index 000000000..23c37900d
--- /dev/null
+++ b/xCAT-server/share/xcat/install/sles/service.sles12.pkglist
@@ -0,0 +1,22 @@
+@base
+@x11
+openssl
+ntp
+rsync
+nmap
+perl-DBI
+vsftpd
+perl-IO-Tty
+perl-Expect
+perl-SNMP
+unixODBC
+perl-Net-DNS
+perl-DBD-mysql
+mariadb-client
+libmysqlclient18
+# The following rpms are available on the SLES SDK
+# You will need to locate and make these rpms available in your zypper
+# repository for service node installs and uncomment the following lines:
+#MyODBC-unixODBC
+#perl-DBD-Pg
+
diff --git a/xCAT-server/share/xcat/install/sles/service.sles12.ppc64le.otherpkgs.pkglist b/xCAT-server/share/xcat/install/sles/service.sles12.ppc64le.otherpkgs.pkglist
new file mode 100644
index 000000000..6d403afb2
--- /dev/null
+++ b/xCAT-server/share/xcat/install/sles/service.sles12.ppc64le.otherpkgs.pkglist
@@ -0,0 +1,2 @@
+xcat/xcat-core/xCATsn
+xcat/xcat-dep/sles12/ppc64le/conserver-xcat
diff --git a/xCAT-server/share/xcat/install/sles/service.sles12.tmpl b/xCAT-server/share/xcat/install/sles/service.sles12.tmpl
new file mode 100644
index 000000000..f7cc1ecff
--- /dev/null
+++ b/xCAT-server/share/xcat/install/sles/service.sles12.tmpl
@@ -0,0 +1,126 @@
+
+
+
+
+
+ true
+ true
+ #XCATVAR:PERSKCMDLINE#
+ false
+ false
+ mbr
+
+
+
+ GMT
+ #TABLE:site:key=timezone:value#
+
+
+ english-us
+
+ en_US
+
+ false
+ false
+ false
+ true
+
+
+ non
+
+
+ true
+ true
+ true
+
+
+
+
+
+ XCATPARTITIONHOOK
+ true
+
+
+
+ true
+ false
+ device
+ 65
+ 1
+ false
+ 8225280
+
+
+ true
+ false
+ swap
+ true
+ false
+ swap
+ uuid
+ 130
+ 2
+ false
+ auto
+
+
+ true
+ false
+ btrfs
+ true
+ false
+ /
+ uuid
+ 131
+ 3
+ 100%
+
+
+
+
+
+
+
+ #INCLUDE_DEFAULT_PTRNLIST_S#
+
+
+ #INCLUDE_DEFAULT_PKGLIST_S#
+
+
+
+
+
+
+ root
+ #CRYPT:passwd:key=system,username=root:password#
+ true
+
+
+
+
+
+
+ true
+ true
+ local
+ linux
+
+
+
+ dhcp
+ eth0
+ onboot
+
+
+
+ false
+
+
+
+
+ #INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/pre.sles#
+ #INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/chroot.sles#
+ #INCLUDE:#ENV:XCATROOT#/share/xcat/install/scripts/post.sles11#
+
+
+
diff --git a/xCAT-server/share/xcat/install/sles/service.sles12.x86_64.otherpkgs.pkglist b/xCAT-server/share/xcat/install/sles/service.sles12.x86_64.otherpkgs.pkglist
new file mode 100644
index 000000000..8c4f4de49
--- /dev/null
+++ b/xCAT-server/share/xcat/install/sles/service.sles12.x86_64.otherpkgs.pkglist
@@ -0,0 +1,2 @@
+xcat/xcat-core/xCATsn
+xcat/xcat-dep/sles12/x86_64/conserver-xcat
diff --git a/xCAT-server/share/xcat/netboot/sles/service.sles12.pkglist b/xCAT-server/share/xcat/netboot/sles/service.sles12.pkglist
new file mode 100644
index 000000000..cc15ffcfe
--- /dev/null
+++ b/xCAT-server/share/xcat/netboot/sles/service.sles12.pkglist
@@ -0,0 +1,69 @@
+aaa_base
+adaptec-firmware
+apache2
+apache2-prefork
+bash
+bind
+bind-utils
+binutils
+bc
+btrfsprogs
+bzip2
+cifs-utils
+coreutils
+cron
+cryptsetup
+curl
+dhcp
+dhcp-client
+dhcp-relay
+dhcp-server
+dmraid
+e2fsprogs
+fcoe-utils
+gpg2
+gzip
+kernel-default
+keyutils
+lvm2
+mdadm
+multipath-tools
+nfs-kernel-server
+ntp
+openssh
+openssl
+open-iscsi
+open-lldp
+pam
+pam-modules
+parted
+perl-doc
+perl-Expect
+plymouth
+plymouth-dracut
+procps
+psmisc
+rpm
+rsync
+sysconfig
+tar
+timezone
+udev
+util-linux
+util-linux-systemd
+vim
+vsftpd
+wget
+which
+zypper
+
+#for database
+unixODBC
+perl-DBD-mysql
+mariadb-client
+libmysqlclient18
+# The following rpms are available on the SLES SDK
+# You will need to locate and make these rpms available in your zypper
+# repository for service node installs and uncomment the following lines:
+#MyODBC-unixODBC
+#perl-DBD-Pg
diff --git a/xCAT-server/share/xcat/netboot/sles/service.sles12.postinstall b/xCAT-server/share/xcat/netboot/sles/service.sles12.postinstall
new file mode 100755
index 000000000..201599be0
--- /dev/null
+++ b/xCAT-server/share/xcat/netboot/sles/service.sles12.postinstall
@@ -0,0 +1,68 @@
+#!/bin/sh
+#-- Do not remove following line if you want to make use of CVS version tracking
+#-- $Id: compute.postinstall,v 1.21 2008/09/04 12:05:45 sikorsky Exp $
+#-- jurij.sikorsky@t-systems.cz
+#--
+#-- this script is run after all packages from $profile.pkglist are installed
+#--
+#-- it gets these arguments:
+#--
+#-- $1 = install root (chroot directory for profile)
+#-- $2 = OS version
+#-- $3 = architecture
+#-- $4 = profile name
+#-- $5 = work dir (where genimage is located)
+#--
+#--
+installroot=$1
+osver=$2
+arch=$3
+profile=$4
+workdir=$5
+
+#-- Example how /etc/fstab can be automatically generated during image generation:
+cp $installroot/etc/fstab $installroot/etc/fstab.prev
+cat <$installroot/etc/fstab
+proc /proc proc rw 0 0
+sysfs /sys sysfs rw 0 0
+devpts /dev/pts devpts rw,gid=5,mode=620 0 0
+${profile}_${arch} / tmpfs rw 0 1
+none /tmp tmpfs defaults,size=10m 0 2
+none /var/tmp tmpfs defaults,size=10m 0 2
+END
+
+
+cat <>$installroot/etc/hosts
+`getent hosts $HOSTNAME`
+END
+
+#Prevent DHCP from starting up until xcatd has had a chance to configure it:
+chroot $installroot chkconfig dhcpd off
+chroot $installroot chkconfig dhcrelay off
+
+#turn on some services
+chroot $installroot chkconfig dbus on
+chroot $installroot chkconfig boot.localnet on
+chroot $installroot chkconfig haldaemon on
+chroot $installroot chkconfig network on
+chroot $installroot chkconfig syslog on
+chroot $installroot chkconfig apache2 on
+
+#export /install as read-only
+mkdir -p /install
+echo '/install *(ro,no_root_squash,sync,fsid=13)' > $installroot/etc/exports
+
+#uncomment out the cons line in etc/inittab
+#sed -i 's/^\#\(\s\)*cons/cons/' $installroot/etc/inittab
+
+TMP_inittab=`sed 's/\(#\)\(cons:12345.*\)$/\2/' $installroot/etc/inittab`
+echo "$TMP_inittab" > $installroot/etc/inittab
+
+
+#-- Example of booted image versioning
+#-- We want to know, with what configuration (version of the image) each node was booted.
+#-- Hence, we keep image definition files and postscripts in CVS. During image generation we create file /etc/IMGVERSION and fill it with CVS "$Id$" of files with image definition (.pkglist, .exlist, .repolist, .postinstall). Then, during boot, each "CVS enabled" postscript (see /install/postscripts/cvs_template.sh and /install/postscripts/cvs_template.pl) adds one line to /etc/IMGVERSION. Then you can determine in any time what image you are running and what postscipts in which versions were run.
+#cat /dev/null > $installroot/etc/IMGVERSION
+#for ext in pkglist exlist postinstall repolist; do
+# [ -r $workdir/$profile.$ext ] && cat $workdir/$profile.$ext | grep -E '^[[:space:]]*#.*[[:space:]]\$Id' >> $installroot/etc/IMGVERSION
+#done
diff --git a/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.otherpkgs.pkglist b/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.otherpkgs.pkglist
new file mode 100644
index 000000000..6d403afb2
--- /dev/null
+++ b/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.otherpkgs.pkglist
@@ -0,0 +1,2 @@
+xcat/xcat-core/xCATsn
+xcat/xcat-dep/sles12/ppc64le/conserver-xcat
diff --git a/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.postinstall b/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.postinstall
new file mode 100755
index 000000000..c75134560
--- /dev/null
+++ b/xCAT-server/share/xcat/netboot/sles/service.sles12.ppc64le.postinstall
@@ -0,0 +1,46 @@
+#!/bin/sh
+#-- Do not remove following line if you want to make use of CVS version tracking
+#-- $Id: compute.postinstall,v 1.21 2008/09/04 12:05:45 sikorsky Exp $
+#-- jurij.sikorsky@t-systems.cz
+#--
+#-- this script is run after all packages from $profile.pkglist are installed
+#--
+#-- it gets these arguments:
+#--
+#-- $1 = install root (chroot directory for profile)
+#-- $2 = OS version
+#-- $3 = architecture
+#-- $4 = profile name
+#-- $5 = work dir (where genimage is located)
+#--
+#--
+installroot=$1
+osver=$2
+arch=$3
+profile=$4
+workdir=$5
+
+#-- Example how /etc/fstab can be automatically generated during image generation:
+cat <$installroot/etc/fstab
+proc /proc proc rw 0 0
+sysfs /sys sysfs rw 0 0
+devpts /dev/pts devpts rw,gid=5,mode=620 0 0
+${profile}_${arch} / tmpfs rw 0 1
+none /tmp tmpfs defaults,size=10m 0 2
+none /var/tmp tmpfs defaults,size=10m 0 2
+END
+
+#-- Uncomment the line contains "cons" in /etc/inittab
+#cons:12345:respawn:/sbin/smart_agetty -L 38400 console
+TMP_inittab=`sed 's/\(#\)\(cons:12345.*\)$/\2/' $installroot/etc/inittab`
+echo "$TMP_inittab" > $installroot/etc/inittab
+
+
+#-- Example of booted image versioning
+#-- We want to know, with what configuration (version of the image) each node was booted.
+#-- Hence, we keep image definition files and postscripts in CVS. During image generation we create file /etc/IMGVERSION and fill it with CVS "$Id$" of files with image definition (.pkglist, .exlist, .repolist, .postinstall). Then, during boot, each "CVS enabled" postscript (see /install/postscripts/cvs_template.sh and /install/postscripts/cvs_template.pl) adds one line to /etc/IMGVERSION. Then you can determine in any time what image you are running and what postscipts in which versions were run.
+#cat /dev/null > $installroot/etc/IMGVERSION
+#for ext in pkglist exlist postinstall repolist; do
+# [ -r $workdir/$profile.$ext ] && cat $workdir/$profile.$ext | grep -E '^[[:space:]]*#.*[[:space:]]\$Id' >> $installroot/etc/IMGVERSION
+#done
+
diff --git a/xCAT-server/share/xcat/netboot/sles/service.sles12.x86_64.otherpkgs.pkglist b/xCAT-server/share/xcat/netboot/sles/service.sles12.x86_64.otherpkgs.pkglist
new file mode 100644
index 000000000..7fe170d23
--- /dev/null
+++ b/xCAT-server/share/xcat/netboot/sles/service.sles12.x86_64.otherpkgs.pkglist
@@ -0,0 +1,3 @@
+-perl-doc
+xcat/xcat-core/xCATsn
+xcat/xcat-dep/sles12/x86_64/conserver-xcat