diff --git a/cloud.spec b/cloud.spec index e731eee6e9d..1872dd8c077 100644 --- a/cloud.spec +++ b/cloud.spec @@ -596,6 +596,7 @@ fi %{_sysconfdir}/%{name}/management/components-premium.xml %{_datadir}/%{name}/setup/create-database-premium.sql %{_datadir}/%{name}/setup/create-schema-premium.sql +%{_libdir}/%{name}/agent/vms/premium-systemvm.zip %files usage %defattr(0644,root,root,0775) diff --git a/debian/cloud-premium.install b/debian/cloud-premium.install index 882b5ce8c25..ae3aa437ac6 100644 --- a/debian/cloud-premium.install +++ b/debian/cloud-premium.install @@ -6,3 +6,4 @@ /usr/share/cloud/setup/create-database-premium.sql /usr/share/cloud/setup/create-schema-premium.sql /usr/lib/cloud/agent/premium-scripts/* +/usr/lib/cloud/agent/vms/premium-systemvm.zip diff --git a/scripts/vm/systemvm/inject_premium_stuff.sh b/scripts/vm/systemvm/inject_premium_stuff.sh new file mode 100755 index 00000000000..6913336d92c --- /dev/null +++ b/scripts/vm/systemvm/inject_premium_stuff.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# Copies premium stuff to systemvm.iso + +#set -x + +TMP=${HOME}/tmp +MOUNTPATH=/mnt/cloud/systemvm +TMPDIR=${TMP}/cloud/systemvm +ISOPATH=`dirname $0`/../../../vms/systemvm.iso +STUFFPATH=`dirname $0`/../../../vms/premium-systemvm.zip + + + +clean_up() { + sudo umount $MOUNTPATH + rm -rf $TMPDIR +} + +inject_into_iso() { + local isofile=${ISOPATH} + local backup=${isofile}.bak + local tmpiso=${TMP}/$1 + [ ! -f $isofile ] && echo "$(basename $0): Could not find systemvm iso patch file $isofile" && return 1 + sudo mount -o loop $isofile $MOUNTPATH + [ $? -ne 0 ] && echo "$(basename $0): Failed to mount original iso $isofile" && clean_up && return 1 + sudo cp -b $isofile $backup + [ $? -ne 0 ] && echo "$(basename $0): Failed to backup original iso $isofile" && clean_up && return 1 + rm -rf $TMPDIR + mkdir -p $TMPDIR + [ ! -d $TMPDIR ] && echo "$(basename $0): Could not find/create temporary dir $TMPDIR" && clean_up && return 1 + sudo cp -fr $MOUNTPATH/* $TMPDIR/ + [ $? -ne 0 ] && echo "$(basename $0): Failed to copy from original iso $isofile" && clean_up && return 1 + sudo cp -f $STUFFPATH $TMPDIR/systemvm.zip + [ $? -ne 0 ] && echo "$(basename $0): Failed to copy sutff $STUFFPATH from to new iso " && clean_up && return 1 + mkisofs -quiet -r -o $tmpiso $TMPDIR + [ $? -ne 0 ] && echo "$(basename $0): Failed to create new iso $tmpiso from $TMPDIR" && clean_up && return 1 + sudo umount $MOUNTPATH + [ $? -ne 0 ] && echo "$(basename $0): Failed to unmount old iso from $MOUNTPATH" && return 1 + sudo cp -f $tmpiso $isofile + [ $? -ne 0 ] && echo "$(basename $0): Failed to overwrite old iso $isofile with $tmpiso" && return 1 + rm -rf $TMPDIR + return $? +} + +sudo mkdir -p $MOUNTPATH + +[ ! -f $STUFFPATH ] && echo "$(basename $0): Could not find $STUFFPATH" && exit 3 +command -v mkisofs > /dev/null || (echo "$(basename $0): mkisofs not found, please install or ensure PATH is accurate" ; exit 4) + +inject_into_iso systemvm.iso + +[ $? -ne 0 ] && exit 5 + +exit 0 diff --git a/server/src/com/cloud/server/ConfigurationServerImpl.java b/server/src/com/cloud/server/ConfigurationServerImpl.java index 4f826c572db..a16c6d24039 100644 --- a/server/src/com/cloud/server/ConfigurationServerImpl.java +++ b/server/src/com/cloud/server/ConfigurationServerImpl.java @@ -123,6 +123,29 @@ public class ConfigurationServerImpl implements ConfigurationServer { _ipAddressDao = locator.getDao(IPAddressDao.class); } + private void updatePremiumStuff() { + if (!_configDao.isPremium()) { + return; + } + + String injectScript = "scripts/vm/systemvm/inject_premium_stuff.sh"; + String scriptPath = Script.findScript("", injectScript); + if (scriptPath == null) { + throw new CloudRuntimeException("Unable to find key inject script " + + injectScript); + } + + final Script command = new Script(scriptPath, s_logger); + final String result = command.execute(); + if (result != null) { + s_logger.warn("Failed to inject premium stuff into systemvm iso " + + result); + throw new CloudRuntimeException( + "Failed to inject premium stuff into systemvm iso " + + result); + } + } + @Override @DB public void persistDefaultValues() throws InvalidParameterValueException, InternalErrorException { @@ -243,6 +266,8 @@ public class ConfigurationServerImpl implements ConfigurationServer { } } + updatePremiumStuff(); + // store the public and private keys in the database updateKeyPairs(); diff --git a/wscript_build b/wscript_build index 8390114ffc4..1aaa096e18d 100644 --- a/wscript_build +++ b/wscript_build @@ -158,6 +158,8 @@ def build_systemvm_patch (): bld.install_files ("${AGENTLIBDIR}/vms", "%s/systemvm.zip" % distdir) # ISO creation bld.install_as("${AGENTLIBDIR}/vms/systemvm.iso", "%s/systemvm.iso" % distdir) + if buildpremium: + bld.install_as("${AGENTLIBDIR}/vms/premium-systemvm.zip", "%s/premium-systemvm.zip" % distdir) def build_systemvm_iso (): if buildpremium: