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