Hi,

let me introduce myself quickly. I'm Uwe Gansert and I'm working for Novell in 
Nuremberg Germany where one of my main tasks is to maintain AutoYaST and since 
a short while, working on SUSE Manager (a Spacewalk based project) too.

I want to send you some patches to enhance SUSE/AutoYaST support in spacewalk.

0001-added-support-for-SUSE-autoinstallation.patch
0003-Better-support-for-SUSE-autoinstallation.patch
adding support for SUSE kickstartable trees

0002-update-database-to-support-SUSE-distributions.patch
update the database with a SUSE breed to make "SUSE" an option for a 
"kickstartable tree"

0004-bnc-664915-rhnreg_ks-help-failed-if-LANG-de_DE.UTF-8.patch
nothing kickstart related but rhnreg_ks crashed with LANG=de_DE.UTF8 when you 
called it with "--help"

0005-fixed-virtual-KVM-machines-in-the-webui-bnc-674344.patch
let spacewalk recognize a KVM machine from a SUSE system

Besides those patches above, I sent some patches to the cobbler project 
yesterday to enhance SUSE/AutoYaST support in Cobbler too.


-- 
ciao, Uwe Gansert

Uwe Gansert
SUSE LINUX Products GmbH, GF: Markus Rex, HRB 16746 (AG Nürnberg)
Business: http://www.suse.de/~ug
From b07a3c9d9103be3b7146749ebe531476e2075d8a Mon Sep 17 00:00:00 2001
From: Uwe Gansert <u...@suse.de>
Date: Thu, 28 Oct 2010 16:59:04 +0200
Subject: [PATCH 1/5] - added support for SUSE autoinstallation

---
 .../rhn/domain/kickstart/KickstartInstallType.java |    8 ++++++++
 .../rhn/domain/kickstart/KickstartableTree.java    |    8 ++++++++
 .../action/kickstart/tree/BaseTreeAction.java      |   16 +++++++++++++++-
 .../cobbler/CobblerDistroCreateCommand.java        |    4 ++++
 java/code/src/org/cobbler/Distro.java              |    3 +++
 5 files changed, 38 insertions(+), 1 deletions(-)

diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartInstallType.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartInstallType.java
index a3f613a..ef92ce6 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartInstallType.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartInstallType.java
@@ -31,6 +31,7 @@ public class KickstartInstallType extends BaseDomainHelper {
     public static final String RHEL_6 = "rhel_6";
     public static final String FEDORA = "fedora";
     public static final String GENERIC = "generic";
+    public static final String SUSE = "suse";
 
     private Long id;
     private String label;
@@ -94,6 +95,13 @@ public class KickstartInstallType extends BaseDomainHelper {
     }
 
     /**
+     * @return true if the installer type is suse.
+     */
+    public boolean isSUSE() {
+        return SUSE.equals(getLabel());
+    }
+
+    /**
      * @return Returns the id.
      */
     public Long getId() {
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
index 41e3202..510609f 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
@@ -277,6 +277,10 @@ public class KickstartableTree extends BaseDomainHelper {
         else if (arch.equals("channel-ppc")) {
             return StringUtil.addPath(getAbsolutePath(), "/ppc/ppc64/vmlinuz");
         }
+        else if ( this.installType.isSUSE() )
+        {
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + this.getChannel().getChannelArch().getName() + "/loader/linux");
+        }
         else {
             return StringUtil.addPath(getAbsolutePath(), "/images/pxeboot/vmlinuz");
         }
@@ -296,6 +300,10 @@ public class KickstartableTree extends BaseDomainHelper {
         else if (arch.equals("channel-ppc")) {
             return StringUtil.addPath(getAbsolutePath(), "/ppc/ppc64/ramdisk.image.gz");
         }
+        else if ( this.installType.isSUSE() )
+        {
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + this.getChannel().getChannelArch().getName() + "/loader/initrd");
+        }
         else {
             return StringUtil.addPath(getAbsolutePath(), "/images/pxeboot/initrd.img");
         }
diff --git a/java/code/src/com/redhat/rhn/frontend/action/kickstart/tree/BaseTreeAction.java b/java/code/src/com/redhat/rhn/frontend/action/kickstart/tree/BaseTreeAction.java
index a2cbbdd..8ccb85f 100644
--- a/java/code/src/com/redhat/rhn/frontend/action/kickstart/tree/BaseTreeAction.java
+++ b/java/code/src/com/redhat/rhn/frontend/action/kickstart/tree/BaseTreeAction.java
@@ -30,6 +30,7 @@ import org.apache.struts.util.LabelValueBean;
 
 import java.util.Iterator;
 import java.util.List;
+import java.net.*;
 
 /**
  * TreeCreate class for creating Kickstart Trees
@@ -103,7 +104,20 @@ public abstract class BaseTreeAction extends BaseEditAction {
             lookupKickstartInstallTypeByLabel(form.getString(INSTALL_TYPE));
         bte.setInstallType(type);
 
-        bte.setKernelOptions(form.getString(KERNEL_OPTS));
+        if( type.isSUSE() ) {
+            String kopts = form.getString(POST_KERNEL_OPTS);
+            if( kopts.indexOf("install=") == -1 ) {
+                try {
+                    java.net.InetAddress localMachine = java.net.InetAddress.getLocalHost();
+                    kopts = kopts + " install=http://"; + localMachine.getHostName() + "/ks/dist/" + form.getString(LABEL);
+                } catch (UnknownHostException e) {
+                    return new ValidatorError("UnknownHostException by getLocalHost/getHostName. Set install=.... parameter manually");
+                }
+            }
+            bte.setKernelOptions( kopts );
+        } else {
+            bte.setKernelOptions(form.getString(KERNEL_OPTS));
+        }
         bte.setPostKernelOptions(form.getString(POST_KERNEL_OPTS));
 
         return null;
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCreateCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCreateCommand.java
index 5f1a4f6..f7e405d 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCreateCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCreateCommand.java
@@ -83,6 +83,10 @@ public class CobblerDistroCreateCommand extends CobblerDistroCommand {
             ksmeta.put("org", tree.getOrgId().toString());
         }
 
+        if( tree.getInstallType().isSUSE() ) {
+            ksmeta.put("autoyast", "true");
+        }
+
         Distro distro = Distro.create(CobblerXMLRPCHelper.getConnection(user),
                 tree.getCobblerDistroName(), tree.getKernelPath(),
                 tree.getInitrdPath(), ksmeta);
diff --git a/java/code/src/org/cobbler/Distro.java b/java/code/src/org/cobbler/Distro.java
index ff4940b..f12ced8 100644
--- a/java/code/src/org/cobbler/Distro.java
+++ b/java/code/src/org/cobbler/Distro.java
@@ -53,6 +53,9 @@ public class Distro extends CobblerObject {
         distro.modify(NAME, name);
         distro.setKernel(kernel);
         distro.setInitrd(initrd);
+        if( ksmeta.containsKey( "autoyast" ) ) {
+            distro.setBreed( "suse" );
+        }
         distro.setKsMeta(ksmeta);
         distro.save();
         distro = lookupByName(client, name);
-- 
1.6.4.2

From 2837841e7a79c8f40dc8478d1439e2f4db7c773c Mon Sep 17 00:00:00 2001
From: Uwe Gansert <u...@suse.de>
Date: Mon, 7 Mar 2011 16:52:59 +0100
Subject: [PATCH 2/5] update database to support SUSE distributions

---
 .../021-rhnKsInstallType.sql                       |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 schema/spacewalk/upgrade/spacewalk-schema-1.3-to-spacewalk-schema-1.4/021-rhnKsInstallType.sql

diff --git a/schema/spacewalk/upgrade/spacewalk-schema-1.3-to-spacewalk-schema-1.4/021-rhnKsInstallType.sql b/schema/spacewalk/upgrade/spacewalk-schema-1.3-to-spacewalk-schema-1.4/021-rhnKsInstallType.sql
new file mode 100644
index 0000000..bc820c5
--- /dev/null
+++ b/schema/spacewalk/upgrade/spacewalk-schema-1.3-to-spacewalk-schema-1.4/021-rhnKsInstallType.sql
@@ -0,0 +1 @@
+insert into rhnKSInstallType (id,label,name) VALUES (rhn_ksinstalltype_id_seq.nextval, 'suse', 'SUSE Linux');
-- 
1.6.4.2

From 52dc10f83aa3c5e3d27a9cb8dad5df15ac67b562 Mon Sep 17 00:00:00 2001
From: Uwe Gansert <u...@suse.de>
Date: Tue, 18 Jan 2011 11:46:57 +0100
Subject: [PATCH 4/5] bnc#664915 rhnreg_ks --help failed if LANG = de_DE.UTF-8

---
 client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py |    7 ++++++-
 1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py b/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
index e1b6c4d..e713b93 100755
--- a/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
+++ b/client/rhel/rhn-client-tools/src/bin/rhnreg_ks.py
@@ -24,7 +24,12 @@ import sys
 import os
 
 import gettext
-_ = gettext.gettext
+
+# bnc#664915 rhnreg_ks --help failed if LANG = de_DE.UTF-8
+#_ = gettext.gettext
+t = gettext.translation('rhn-client-tools', '/usr/share/locale/', fallback=True)
+def _(str):
+    return unicode(t.gettext(str), 'UTF-8')
 
 sys.path.append("/usr/share/rhn/")
 
-- 
1.6.4.2

From 102fe8669bb0727096c97a8b3878bbf45a9ff277 Mon Sep 17 00:00:00 2001
From: Uwe Gansert <u...@suse.de>
Date: Wed, 23 Feb 2011 16:46:41 +0100
Subject: [PATCH 5/5] fixed virtual KVM machines in the webui (bnc#674344)

---
 backend/server/handlers/xmlrpc/registration.py |    3 +++
 1 files changed, 3 insertions(+), 0 deletions(-)

diff --git a/backend/server/handlers/xmlrpc/registration.py b/backend/server/handlers/xmlrpc/registration.py
index 076bce3..1bc0099 100644
--- a/backend/server/handlers/xmlrpc/registration.py
+++ b/backend/server/handlers/xmlrpc/registration.py
@@ -54,6 +54,9 @@ def parse_smbios(smbios):
 
     if vendor == "QEMU" and uuid is not None:
         return (rhnVirtualization.VirtualizationType.QEMU, uuid)
+    elif manufacturer == 'Bochs' and product == 'Bochs' and uuid is not None:
+        # Bochs, Bochs is a virtual SUSE KVM machine
+        return (rhnVirtualization.VirtualizationType.QEMU, uuid)
     elif manufacturer == 'Red Hat' and product == 'KVM' and uuid is not None:
         return (rhnVirtualization.VirtualizationType.QEMU, uuid)
     elif (manufacturer == 'Red Hat' and product == 'RHEV Hypervisor' and uuid is
-- 
1.6.4.2

From 741eb59f398bd4deac0399c45afe6c140fa67590 Mon Sep 17 00:00:00 2001
From: Uwe Gansert <u...@suse.de>
Date: Thu, 4 Nov 2010 12:13:36 +0100
Subject: [PATCH 3/5] Better support for SUSE autoinstallation
 * i386 name mapping for suse added
 * suse breed added to ksinstalltype
 * look in basechannel for kickstart packages
 * check for XEN distro on SUSE added
 * fixed breed for created xen distros
 * edit xen distro before save it to cobbler. Not after.

---
 .../rhn/domain/kickstart/KickstartableTree.java    |   26 ++++++++++++++++++-
 .../redhat/rhn/manager/channel/ChannelManager.java |   12 +++++++++
 .../kickstart/KickstartScheduleCommand.java        |   10 ++++---
 .../kickstart/cobbler/CobblerDistroCommand.java    |    6 ++++
 schema/spacewalk/common/data/rhnKSInstallType.sql  |    4 +++
 5 files changed, 52 insertions(+), 6 deletions(-)

diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
index 510609f..5d1bdf4 100644
--- a/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
+++ b/java/code/src/com/redhat/rhn/domain/kickstart/KickstartableTree.java
@@ -279,7 +279,11 @@ public class KickstartableTree extends BaseDomainHelper {
         }
         else if ( this.installType.isSUSE() )
         {
-            return StringUtil.addPath(getAbsolutePath(), "/boot/" + this.getChannel().getChannelArch().getName() + "/loader/linux");
+            String arch_name = this.getChannel().getChannelArch().getName();
+            if( arch_name.equals("IA-32") ) {
+                arch_name = "i386";
+            }
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + arch_name + "/loader/linux");
         }
         else {
             return StringUtil.addPath(getAbsolutePath(), "/images/pxeboot/vmlinuz");
@@ -302,7 +306,11 @@ public class KickstartableTree extends BaseDomainHelper {
         }
         else if ( this.installType.isSUSE() )
         {
-            return StringUtil.addPath(getAbsolutePath(), "/boot/" + this.getChannel().getChannelArch().getName() + "/loader/initrd");
+            String arch_name = this.getChannel().getChannelArch().getName();
+            if( arch_name.equals("IA-32") ) {
+                arch_name = "i386";
+            }
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + arch_name + "/loader/initrd");
         }
         else {
             return StringUtil.addPath(getAbsolutePath(), "/images/pxeboot/initrd.img");
@@ -316,6 +324,13 @@ public class KickstartableTree extends BaseDomainHelper {
      * @return the kernel path
      */
     public String getKernelXenPath() {
+        if (this.installType.isSUSE()) {
+            String arch = this.getChannel().getChannelArch().getName();
+            if (arch.equals("IA-32")) {
+                arch = "i386";
+            }
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + arch + "/vmlinuz-xen");
+        }
         return StringUtil.addPath(getAbsolutePath(), "/images/xen/vmlinuz");
     }
 
@@ -326,6 +341,13 @@ public class KickstartableTree extends BaseDomainHelper {
      * @return the Initrd path
      */
     public String getInitrdXenPath() {
+        if (this.installType.isSUSE()) {
+            String arch = this.getChannel().getChannelArch().getName();
+            if (arch.equals("IA-32")) {
+                arch = "i386";
+            }
+            return StringUtil.addPath(getAbsolutePath(), "/boot/" + arch + "/initrd-xen");
+        }
         return StringUtil.addPath(getAbsolutePath(), "/images/xen/initrd.img");
     }
 
diff --git a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
index 4c54913..a9f5932 100644
--- a/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
+++ b/java/code/src/com/redhat/rhn/manager/channel/ChannelManager.java
@@ -1888,6 +1888,18 @@ public class ChannelManager extends BaseManager {
                 return child;
             }
         }
+        List kspackages = ChannelManager.
+             listLatestPackagesLike(baseChannel.getId(),
+                      KickstartData.LEGACY_KICKSTART_PACKAGE_NAME);
+        if (kspackages.size() > 0) {
+            return baseChannel;
+        }
+        kspackages = ChannelManager.listLatestPackagesEqual(baseChannel.getId(),
+                ConfigDefaults.get().getKickstartPackageName());
+        if (kspackages.size() > 0) {
+            return baseChannel;
+        }
+
         return null;
     }
 
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
index 4b1a255..e9c38a4 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartScheduleCommand.java
@@ -822,10 +822,12 @@ public class KickstartScheduleCommand extends BaseSystemOperation {
         }
 
         // Check that we have a valid ks package
-        log.debug("** Checking validkspackage");
-        error = validateKickstartPackage();
-        if (error != null) {
-            return error;
+        if( !ksdata.getTree().getInstallType().isSUSE() ) {
+            log.debug("** Checking validkspackage");
+            error = validateKickstartPackage();
+            if (error != null) {
+                return error;
+            }
         }
 
         if (ksdata.isRhel()) {
diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCommand.java b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCommand.java
index 77ffa19..fad791b 100644
--- a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCommand.java
+++ b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerDistroCommand.java
@@ -84,6 +84,9 @@ public class CobblerDistroCommand extends CobblerCommand {
             if (xen == null) {
                 xen = Distro.create(con, tree.getCobblerXenDistroName(),
                         tree.getKernelXenPath(), tree.getInitrdXenPath(), ksmeta);
+                if (tree.getInstallType().isSUSE()) {
+                    xen.setBreed("suse");
+                }
                 xen.save();
                 tree.setCobblerXenId(xen.getId());
             }
@@ -91,6 +94,9 @@ public class CobblerDistroCommand extends CobblerCommand {
                 xen.setKernel(tree.getKernelXenPath());
                 xen.setInitrd(tree.getInitrdXenPath());
                 xen.setKsMeta(ksmeta);
+                if (tree.getInstallType().isSUSE()) {
+                    xen.setBreed("suse");
+                }
                 xen.save();
             }
 
diff --git a/schema/spacewalk/common/data/rhnKSInstallType.sql b/schema/spacewalk/common/data/rhnKSInstallType.sql
index 6657e20..5394521 100644
--- a/schema/spacewalk/common/data/rhnKSInstallType.sql
+++ b/schema/spacewalk/common/data/rhnKSInstallType.sql
@@ -46,4 +46,8 @@ insert into rhnKSInstallType (id, label, name)
         values (sequence_nextval('rhn_ksinstalltype_id_seq'),
                 'generic_rpm','Generic RPM'
         );
+insert into rhnKSInstallType (id, label, name)
+        values (sequence_nextval('rhn_ksinstalltype_id_seq'),
+                'suse','SUSE Linux'
+        );
 commit;
-- 
1.6.4.2

_______________________________________________
Spacewalk-devel mailing list
Spacewalk-devel@redhat.com
https://www.redhat.com/mailman/listinfo/spacewalk-devel

Reply via email to