diff --git a/xCAT-server/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist b/xCAT-server/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist
index 51e7a74b9..359b21937 100644
--- a/xCAT-server/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist
+++ b/xCAT-server/share/xcat/netboot/sles/compute.sles12.ppc64le.pkglist
@@ -1,9 +1,11 @@
 aaa_base
 bash
+coreutils
+keyutils
+lvm2
 nfs-kernel-server
 openssl
 dhcp-client
-kernel-default
 openssh
 procps
 psmisc
@@ -30,5 +32,12 @@ mdadm
 multipath-tools
 gpg2
 cifs-utils
+open-lldp
+fcoe-utils
+which
 util-linux-systemd
+util-linux-systemd
+plymouth-dracut
+udev
+kernel-default
 
diff --git a/xCAT-server/share/xcat/netboot/sles/compute.sles12.x86_64.pkglist b/xCAT-server/share/xcat/netboot/sles/compute.sles12.x86_64.pkglist
index 88297099a..69e75f8b0 100644
--- a/xCAT-server/share/xcat/netboot/sles/compute.sles12.x86_64.pkglist
+++ b/xCAT-server/share/xcat/netboot/sles/compute.sles12.x86_64.pkglist
@@ -1,9 +1,11 @@
 aaa_base
+coreutils
 bash 
 nfs-kernel-server
+keyutils
+lvm2
 openssl
 dhcp-client 
-kernel-default
 openssh
 procps
 psmisc
@@ -29,7 +31,11 @@ dmraid
 mdadm
 multipath-tools
 gpg2
+which
 cifs-utils
+open-lldp
+fcoe-utils
 kernel-firmware
 util-linux-systemd
+kernel-default
 
diff --git a/xCAT-server/share/xcat/netboot/sles/genimage b/xCAT-server/share/xcat/netboot/sles/genimage
index 75e3b6967..ae903cc3a 100755
--- a/xCAT-server/share/xcat/netboot/sles/genimage
+++ b/xCAT-server/share/xcat/netboot/sles/genimage
@@ -827,6 +827,10 @@ unless(-l "$rootimg_dir/var/lib/dhcpcd") {
     mkpath "$rootimg_dir/var/lib/dhcpcd/";
     system("touch $rootimg_dir/var/lib/dhcpcd/dhcpcd-$prinic.info");
 }
+
+#keyctl moved to /bin for newer release
+system("cd $rootimg_dir/usr/bin/; ln -s ../../bin/keyctl $rootimg_dir/usr/bin/keyctl");
+
 # which is different from the Redhat family
 
 # some rpms mounts the imageroot/proc on the /proc, need to release it, 
@@ -1005,10 +1009,10 @@ sub mkinitrd_dracut {
         #update etc/dracut.conf
         open($DRACUTCONF, '>', "$rootimg_dir/etc/dracut.conf");
         if (-d glob($dracutmoduledir."[0-9]*fadump")){
-            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules fadump"\n};
+            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules lvm fadump"\n};
         }
         else{
-            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules"\n};
+            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules lvm"\n};
         }
         print $DRACUTCONF qq{add_drivers+="$add_drivers"\n};
         print $DRACUTCONF qq{filesystems+="nfs"\n};
@@ -1043,10 +1047,10 @@ sub mkinitrd_dracut {
         # update etc/dracut.conf
         open($DRACUTCONF, '>', "$rootimg_dir/etc/dracut.conf");
         if (-d glob($dracutmoduledir."[0-9]*fadump")){
-            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules fadump"\n};
+            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules lvm fadump"\n};
         }
         else{
-            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules"\n};
+            print $DRACUTCONF qq{dracutmodules+="xcat nfs base network kernel-modules lvm"\n};
         }
         print $DRACUTCONF qq{add_drivers+="$add_drivers"\n};
         close $DRACUTCONF;
@@ -1992,7 +1996,8 @@ sub generic_post { # This function is meant to leave the image in a state approx
             system("$cmd");
         }
         else {
-            print "[genimage] Not starting service $service, verify if started by systemctl\n";
+            $cmd = $cmd . "systemctl start $service.service";
+            system("$cmd");
         }
     }