java/code/src/com/redhat/rhn/domain/kickstart/cobbler/CobblerSnippet.java | 11 + java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java | 14 + java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerSnippetLister.java | 10 + java/conf/cobbler/snippets/keep_system_id | 77 ++++++++++ java/conf/cobbler/snippets/post_reactivation_key | 11 + java/conf/cobbler/snippets/redhat_register | 27 +++ java/spacewalk-java.spec | 9 + 7 files changed, 157 insertions(+), 2 deletions(-)
New commits: commit 7efdf40edee66d6684c93bac1093eb2678dc0902 Author: Partha Aji paji@redhat.com Date: Thu Apr 29 15:27:47 2010 -0400
Added changes to KS file to deal with dup profile reactivations
diff --git a/java/code/src/com/redhat/rhn/domain/kickstart/cobbler/CobblerSnippet.java b/java/code/src/com/redhat/rhn/domain/kickstart/cobbler/CobblerSnippet.java index 1e16548..84dab98 100644 --- a/java/code/src/com/redhat/rhn/domain/kickstart/cobbler/CobblerSnippet.java +++ b/java/code/src/com/redhat/rhn/domain/kickstart/cobbler/CobblerSnippet.java @@ -251,9 +251,14 @@ public class CobblerSnippet implements Comparable { * @return the base name of the snippet file */ public String getName() { + if (path.getParentFile().equals(getSpacewalkSnippetsDir())) { + return getSpacewalkSnippetsDir().getName() + + File.separator + path.getName(); + } return path.getName(); }
+ /** * Returns the name of the directory hosting the snippet file (same as dirname) * i.e. returns ${spacewalk.snippets.dir}/${org.id} @@ -322,6 +327,12 @@ public class CobblerSnippet implements Comparable { }
private static boolean isCommonPath(File path) { + boolean isFileInsideSpacewalkTopLevelDir = path.isFile() && + path.getParentFile().equals(getSpacewalkSnippetsDir()); + if (isFileInsideSpacewalkTopLevelDir) { + return true; + } + return !path.getAbsolutePath().startsWith( getSpacewalkSnippetsDir().getAbsolutePath()) && path.getAbsolutePath(). diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java index 7c23ddc..240f5b1 100644 --- a/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java +++ b/java/code/src/com/redhat/rhn/manager/kickstart/KickstartFormatter.java @@ -55,6 +55,12 @@ public class KickstartFormatter {
private static Logger log = Logger.getLogger(KickstartFormatter.class);
+ + private static final String REDHAT_REGISTER_SNIPPET = "spacewalk/redhat_register"; + private static final String POST_REACTIVATION_SNIPPET = + "spacewalk/post_reactivation_key"; + private static final String KEEP_SYSTEM_ID_SNIPPET = "spacewalk/keep_system_id"; + private static final String RAW_START = "#raw"; private static final String RAW_END = "#end raw"; private static final String NEWLINE = "\n"; @@ -215,17 +221,21 @@ public class KickstartFormatter { buf.append(getPackageOptions()); buf.append(NEWLINE); buf.append(getPackages()); - buf.append(NEWLINE); + buf.append(NEWLINE); buf.append("%" + KickstartScript.TYPE_PRE); buf.append(NEWLINE); buf.append("$kickstart_start"); buf.append(NEWLINE); addCobblerSnippet(buf, "pre_install_network_config"); buf.append(NEWLINE); + addCobblerSnippet(buf, KEEP_SYSTEM_ID_SNIPPET); + buf.append(NEWLINE); buf.append(getPrePost(KickstartScript.TYPE_PRE)); buf.append(NEWLINE); buf.append(getNoChroot()); buf.append(NEWLINE); + addCobblerSnippet(buf, POST_REACTIVATION_SNIPPET); + buf.append(NEWLINE); buf.append(getRhnPost()); buf.append(MOTD_FOOTER); buf.append(NEWLINE); @@ -694,7 +704,7 @@ public class KickstartFormatter { retval.append("/etc/init.d/haldaemon restart" + NEWLINE); } retval.append("# begin cobbler snippet" + NEWLINE); - retval.append("$SNIPPET('redhat_register')" + NEWLINE); + addCobblerSnippet(retval, REDHAT_REGISTER_SNIPPET); retval.append("# end cobbler snippet" + NEWLINE);
retval.append(NEWLINE); diff --git a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerSnippetLister.java b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerSnippetLister.java index 5e3fb72..70657a4 100644 --- a/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerSnippetLister.java +++ b/java/code/src/com/redhat/rhn/manager/kickstart/cobbler/CobblerSnippetLister.java @@ -73,6 +73,15 @@ public class CobblerSnippetLister extends BaseManager { } }
+ private void loadSnippetsInSpacewalkDir(List<CobblerSnippet> snippetFiles) { + for (File path : CobblerSnippet.getSpacewalkSnippetsDir().listFiles()) { + if (path.isFile() && !path.isHidden()) { + snippetFiles.add(CobblerSnippet.loadReadOnly(path)); + } + } + + } + /** * Returns a list of snippets accessible to this user * @param user the user has to be atleast a @@ -92,6 +101,7 @@ public class CobblerSnippetLister extends BaseManager { List<CobblerSnippet> snippetFiles = new LinkedList<CobblerSnippet>(); loadDefaultSnippets(CobblerSnippet.getCobblerSnippetsDir(), snippetFiles); + loadSnippetsInSpacewalkDir(snippetFiles); return snippetFiles; }
diff --git a/java/conf/cobbler/snippets/keep_system_id b/java/conf/cobbler/snippets/keep_system_id new file mode 100644 index 0000000..c27e05d --- /dev/null +++ b/java/conf/cobbler/snippets/keep_system_id @@ -0,0 +1,77 @@ +#raw +%pre +echo "Saving RHN keys..." > /dev/ttyS0 +SYSTEM_ID=/etc/sysconfig/rhn/systemid +rhn_keys_found=no + +insmod /lib/jbd.o +insmod /lib/ext3.o + +mkdir -p /tmp/rhn + +drives=$(list-harddrives | awk '{print $1}') +for disk in $drives; do + DISKS="$DISKS $(fdisk -l /dev/$disk | awk '/^/dev/{print $1}')" +done + +# Try to find the keys on ordinary partitions +for disk in $DISKS; do + name=test-$(basename $disk) + mkdir -p /tmp/$name + mount $disk /tmp/$name + [ $? -eq 0 ] || continue # Skip to the next partition if the mount fails + + # Copy current RHN host keys out to be reused + if [ -f /tmp/${name}$SYSTEM_ID ]; then + cp -a /tmp/${name}$SYSTEM_ID /tmp/rhn + rhn_keys_found="yes" + umount /tmp/$name + break + fi + umount /tmp/$name + rm -r /tmp/$name +done + +# Try LVM if that didn't work +if [ "$rhn_keys_found" = "no" ]; then + lvm lvmdiskscan + vgs=$(lvm vgs | tail -n +2 | awk '{ print $1 }') + for vg in $vgs; do + # Activate any VG we found + lvm vgchange -ay $vg + done + + lvs=$(lvm lvs | tail -n +2 | awk '{ print "/dev/" $2 "/" $1 }') + for lv in $lvs; do + tmpdir=$(mktemp -d findkeys.XXXXXX) + mkdir -p /tmp/${tmpdir} + mount $lv /tmp/${tmpdir} || continue # Skip to next volume if this fails + + # Let's see if the keys are in there + if [ -f /tmp/${tmpdir}$SYSTEM_ID ]; then + cp -a /tmp/${tmpdir}$SYSTEM_ID /tmp/rhn/ + rhn_keys_found="yes" + umount /tmp/${tmpdir} + break # We're done! + fi + umount /tmp/${tmpdir} + rm -r /tmp/${tmpdir} + done + + # And clean up.. + for vg in $vgs; do + lvm vgchange -an $vg + done +fi + +# Loop until the RHN rpm is installed +if [ "$rhn_keys_found" = "yes" ]; then + while : ; do + sleep 10 + if [ -d /mnt/sysimage/root ] ; then + cp -af /tmp/rhn/* /mnt/sysimage/root/systemid.old + break + fi + done & +fi +#end raw diff --git a/java/conf/cobbler/snippets/post_reactivation_key b/java/conf/cobbler/snippets/post_reactivation_key new file mode 100644 index 0000000..37d564d --- /dev/null +++ b/java/conf/cobbler/snippets/post_reactivation_key @@ -0,0 +1,11 @@ +%post --interpreter /usr/bin/python +import xmlrpclib +import os.path +system_id = "/root/systemid.old" +if os.path.exists(system_id): + client = xmlrpclib.Server("http://$http_server/rpc/api") + key = client.system.obtain_reactivation_key(open(system_id).read()) + f = open("/tmp/key","w") + f.write(key) + f.close() + diff --git a/java/conf/cobbler/snippets/redhat_register b/java/conf/cobbler/snippets/redhat_register new file mode 100644 index 0000000..0ad01a6 --- /dev/null +++ b/java/conf/cobbler/snippets/redhat_register @@ -0,0 +1,27 @@ +# begin Red Hat management server registration +#if $redhat_management_type != "off" and $redhat_management_key != "" +mkdir -p /usr/share/rhn/ + #if $redhat_management_type == "site" + #set $mycert_file = "RHN-ORG-TRUSTED-SSL-CERT" + #set $mycert = "/usr/share/rhn/" + $mycert_file +wget http://$redhat_management_server/pub/RHN-ORG-TRUSTED-SSL-CERT -O $mycert +perl -npe 's/RHNS-CA-CERT/$mycert_file/g' -i /etc/sysconfig/rhn/* + #end if + #if $redhat_management_type == "hosted" + #set $mycert = "/usr/share/rhn/RHNS-CA-CERT" + #end if + #set $endpoint = "https://%s/XMLRPC" % $redhat_management_server +key="" +if [ -f /tmp/key ]; then + key=`cat /tmp/key` +fi + +if [ $key ]; then + rhnreg_ks --serverUrl=$endpoint --sslCACert=$mycert --activationkey=$key,$redhat_management_key +else + rhnreg_ks --serverUrl=$endpoint --sslCACert=$mycert --activationkey=$redhat_management_key +fi +#else +# not configured to register to any Red Hat management server (ok) +#end if +# end Red Hat management server registration diff --git a/java/spacewalk-java.spec b/java/spacewalk-java.spec index 3a3aaae..aa30299 100644 --- a/java/spacewalk-java.spec +++ b/java/spacewalk-java.spec @@ -244,6 +244,11 @@ install -m 755 conf/logrotate/rhn_web_api $RPM_BUILD_ROOT/%{_sysconfdir}/logrota install -m 755 scripts/taskomatic $RPM_BUILD_ROOT/%{_initrddir} install -m 644 build/webapp/rhnjava/WEB-INF/lib/rhn.jar $RPM_BUILD_ROOT/%{_datadir}/rhn/lib install -m 644 conf/log4j.properties.taskomatic $RPM_BUILD_ROOT/%{_datadir}/rhn/classes/log4j.properties + +install -m 644 conf/cobbler/snippets/keep_system_id $RPM_BUILD_ROOT/%{cobdirsnippets}/keep_system_id +install -m 644 conf/cobbler/snippets/post_reactivation_key $RPM_BUILD_ROOT/%{cobdirsnippets}/post_reactivation_key +install -m 644 conf/cobbler/snippets/redhat_register $RPM_BUILD_ROOT/%{cobdirsnippets}/redhat_register + ln -s -f /usr/sbin/tanukiwrapper $RPM_BUILD_ROOT/%{_bindir}/taskomaticd ln -s -f %{_javadir}/ojdbc14.jar $RPM_BUILD_ROOT%{jardir}/ojdbc14.jar install -d -m 755 $RPM_BUILD_ROOT/%{realcobsnippetsdir} @@ -274,6 +279,9 @@ fi %dir %{cobprofdirup} %dir %{cobprofdirwiz} %dir %{cobdirsnippets} +%config %{cobdirsnippets}/keep_system_id +%config %{cobdirsnippets}/post_reactivation_key +%config %{cobdirsnippets}/redhat_register %{appdir}/* %if 0%{?rhel} && 0%{?rhel} < 6 %config(noreplace) %{_sysconfdir}/tomcat5/Catalina/localhost/rhn.xml @@ -296,6 +304,7 @@ fi %config %{_sysconfdir}/rhn/default/rhn_org_quartz.conf %config %{_sysconfdir}/logrotate.d/rhn_web_api
+ %files lib %defattr(644, root, root) %{_datadir}/rhn/classes/log4j.properties
spacewalk-commits@lists.fedorahosted.org