Index: scripts/grubby-compat
===================================================================
--- /dev/null
+++ scripts/grubby-compat
@@ -0,0 +1,57 @@
+#! /usr/bin/perl
+
+use POSIX;
+use Getopt::Long;
+use Pod::Usage;
+use Bootloader::Tools;
+use strict;
+
+my %oper;
+my ($opt_args, $opt_update, $opt_initrd, $opt_add_image, $opt_default, $opt_title)
+    = ("",0,'','',undef,'');
+
+# dummy option - we need it always as 0 but koan may set it.
+my $opt_copydefault = 0;
+
+GetOptions (\%oper,
+    'add-kernel=s' => \$opt_add_image,
+    'bootloader-probe' ,
+    'update-kernel' => \$opt_update,
+    'make-default',
+    'args=s'      => \$opt_args,
+    'initrd=s'      => \$opt_initrd,
+    'title=s' => \$opt_title,
+    'copy-default' => \$opt_copydefault)
+    or pod2usage(2);
+
+if (defined $oper{'bootloader-probe'}){
+  print Bootloader::Tools::GetBootloader();
+  exit 0;
+}
+
+my $lib = InitLibrary();
+
+if ($opt_add_image ne ''){
+  print "add kernel\n";
+  my @sections = @{$lib->GetSections ()};
+  my $section = { 'name' => $opt_title,
+                  'append' => $opt_args,
+                  'type' => "image",
+                  'initrd' => $opt_initrd,
+                  'image' => $opt_add_image,
+                  'original_name' => 'linux',
+                  '__modified' => '1',
+                  'root' => $lib->GetMountPoints()->{"/"}};
+  unshift @sections, $section;
+  $lib->SetSections (\@sections);
+  print "set sections\n";
+  if (defined $oper{'make-default'}){
+    my $glob_ref = $lib->GetGlobalSettings();
+    $glob_ref->{"default"} = $section->{"name"};
+    $lib->SetGlobalSettings ($glob_ref);
+  }
+  $lib->WriteSettings(1);
+  $lib->UpdateBootloader (1);
+  print "bootloader updated\n";
+  Bootloader::Tools::DumpLog($lib->{"loader"});
+}
Index: koan/app.py
===================================================================
--- koan/app.py.orig
+++ koan/app.py
@@ -926,7 +926,11 @@ class Koan:
                return (0, "grub")
             else:
                return (0, "lilo") 
-        cmd = [ "/sbin/grubby", "--bootloader-probe" ]
+        (make, version) = utils.os_release()
+        grubby_bin = "/sbin/grubby"
+        if (make == "suse"):
+            grubby_bin = "/sbin/grubby-compat"
+        cmd = [ grubby_bin, "--bootloader-probe" ]
         probe_process = sub_process.Popen(cmd, stdout=sub_process.PIPE)
         which_loader = probe_process.communicate()[0]
         return probe_process.returncode, which_loader
@@ -950,14 +954,16 @@ class Koan:
     
 
         def after_download(self, profile_data):
-            if not os.path.exists("/sbin/grubby"):
-                raise InfoException, "grubby is not installed"
+            (make, version) = utils.os_release()
+            grubby_bin = "/sbin/grubby"
+            if (make == "suse"):
+                grubby_bin = "/sbin/grubby-compat"
+            if not os.path.exists(grubby_bin):
+                raise InfoException, "%s is not installed" % grubby_bin
             k_args = self.calc_kernel_args(profile_data,replace_self=1)
 
             kickstart = self.safe_load(profile_data,'kickstart')
 
-            (make, version) = utils.os_release()
-
             if (make == "centos" and version < 6) or (make == "redhat" and version < 6) or (make == "fedora" and version < 10):
 
                 # embed the initrd in the kickstart file because of libdhcp and/or pump
@@ -991,20 +997,26 @@ class Koan:
                 elif arch.startswith("s390"):
                     if len(k_args) > 895:
                         raise InfoException, "Kernel options are too long, 896 chars exceeded: %s" % k_args
-                elif len(k_args) > 255:
-                    raise InfoException, "Kernel options are too long, 255 chars exceeded: %s" % k_args
+                elif len(k_args) > 2047:
+                    raise InfoException, "Kernel options are too long, 2047 chars exceeded: %s" % k_args
 
-            cmd = [ "/sbin/grubby",
+            kargs_string = ""
+            if make == "suse":
+                kargs_string = "%s" % k_args
+            else:
+                kargs_string = "\"%s\"" % k_args
+
+            cmd = [ grubby_bin,
                     "--add-kernel", self.safe_load(profile_data,'kernel_local'),
                     "--initrd", self.safe_load(profile_data,'initrd_local'),
-                    "--args", "\"%s\"" % k_args
+                    "--args", kargs_string
             ]
 
             if self.grubby_copy_default:
                 cmd.append("--copy-default")
 
             boot_probe_ret_code, probe_output = self.get_boot_loader_info()
-            if boot_probe_ret_code == 0 and string.find(probe_output, "lilo") >= 0:
+            if boot_probe_ret_code == 0 and string.find(probe_output, "lilo") >= 0 and make != "suse":
                 cmd.append("--lilo")
 
             if self.add_reinstall_entry:
@@ -1040,10 +1052,13 @@ class Koan:
             else:
                 # if grubby --bootloader-probe returns lilo,
                 #    apply lilo changes
-                if boot_probe_ret_code == 0 and string.find(probe_output, "lilo") != -1:
+                if boot_probe_ret_code == 0 and probe_output.startswith("lilo"):
                     print "- applying lilo changes"
                     cmd = [ "/sbin/lilo" ]
-                    utils.subprocess_call(cmd)
+                elif boot_probe_ret_code == 0 and probe_output.startswith("elilo"):
+                    print "- applying elilo changes"
+                    cmd = [ "/sbin/elilo" ]
+                utils.subprocess_call(cmd)
 
             if not self.add_reinstall_entry:
                 print "- reboot to apply changes"
Index: setup.py
===================================================================
--- setup.py.orig
+++ setup.py
@@ -170,6 +170,7 @@ if __name__ == "__main__":
         data_files = proc_data_files([
             # tftpd, hide in /usr/sbin
             ("/usr/sbin", ["scripts/tftpd.py"]),
+            ("/sbin", ["scripts/grubby-compat"]),
 
             ("%s" % webconfig,              ["config/cobbler.conf"]),
             ("%s" % vhostconfig,            ["config/cobbler_web.conf"]),
