
spice-html5 is present in almost all supported Linux distributions (RHEL6.5, Fedora20 and Ubuntu 14.04). So in those cases we should not package the spice-html5 code into Kimchi and instead of that uses the spice-html5 package as dependency. This patch change the build process to check the spice-html5 package availability in order to decide to package or not the spice-html5 code. spice-html5 package is not available for RHEL7 and openSUSE 13.1. So for those distributions, you must run the following command to Kimchi includes the spice-html5 into its package. ./autogen.sh --with-spice-html5 Signed-off-by: Aline Manera <alinefm@linux.vnet.ibm.com> --- contrib/DEBIAN/control.in | 3 ++- contrib/kimchi.spec.fedora.in | 8 ++++++++ contrib/kimchi.spec.suse.in | 2 +- docs/README.md | 10 +++++++++- src/kimchi/Makefile.am | 11 +++++++++-- src/kimchi/config.py.in | 42 ++++++++++++++++++++++++++++++++++-------- tests/test_config.py.in | 15 ++++++++++++++- ui/js/src/kimchi.api.js | 2 +- 8 files changed, 78 insertions(+), 15 deletions(-) diff --git a/contrib/DEBIAN/control.in b/contrib/DEBIAN/control.in index 7372a58..08ef72d 100644 --- a/contrib/DEBIAN/control.in +++ b/contrib/DEBIAN/control.in @@ -27,7 +27,8 @@ Depends: python-cherrypy3 (>= 3.2.0), firewalld, nginx, python-guestfs, - libguestfs-tools + libguestfs-tools, + spice-html5 Build-Depends: libxslt, python-libxml2, python-requests diff --git a/contrib/kimchi.spec.fedora.in b/contrib/kimchi.spec.fedora.in index 4da08bc..a12471d 100644 --- a/contrib/kimchi.spec.fedora.in +++ b/contrib/kimchi.spec.fedora.in @@ -35,6 +35,10 @@ BuildRequires: libxslt BuildRequires: libxml2-python BuildRequires: python-requests +%if 0%{?rhel} == 6 || 0%{?fedora} >= 19 +Requires: spice-html5 +%endif + %if 0%{?fedora} >= 15 || 0%{?rhel} >= 7 %global with_systemd 1 %endif @@ -66,7 +70,11 @@ Web server application to manage KVM/Qemu virtual machines %build +%if 0%{?rhel} == 6 || 0%{?fedora} >= 19 %configure +%else +%configure --with-spice-html5 +%endif make diff --git a/contrib/kimchi.spec.suse.in b/contrib/kimchi.spec.suse.in index 8411936..c366b60 100644 --- a/contrib/kimchi.spec.suse.in +++ b/contrib/kimchi.spec.suse.in @@ -45,7 +45,7 @@ Web server application to manage KVM/Qemu virtual machines %setup %build -%configure +%configure --with-spice-html5 make %install diff --git a/docs/README.md b/docs/README.md index 7703037..432cb4e 100644 --- a/docs/README.md +++ b/docs/README.md @@ -57,6 +57,10 @@ Install Dependencies policycoreutils-python python-libguestfs \ libguestfs-tools python-requests python-websockify \ novnc + + # If using RHEL6 or Fedora, install the following additional package: + $ sudo yum install spice-html5 + # If using RHEL6, install the following additional packages: $ sudo yum install python-unittest2 python-ordereddict # Restart libvirt to allow configuration changes to take effect @@ -80,7 +84,7 @@ for more information on how to configure your system to access this repository. sosreport python-ipaddr python-lxml nfs-common \ open-iscsi lvm2 xsltproc python-parted nginx \ firewalld python-guestfs libguestfs-tools \ - python-requests websockify novnc + python-requests websockify novnc spice-html5 Packages version requirement: python-jsonschema >= 1.3.0 @@ -112,8 +116,12 @@ information on how configure your system to access this repository. Build and Install ----------------- + For RHEL7 and openSUSE 13.1: + $ ./autogen.sh --with-spice-html5 + Otherwise: $ ./autogen.sh --system + $ make $ sudo make install # Optional if running from the source tree diff --git a/src/kimchi/Makefile.am b/src/kimchi/Makefile.am index e2b5de8..84def58 100644 --- a/src/kimchi/Makefile.am +++ b/src/kimchi/Makefile.am @@ -27,6 +27,12 @@ EXTRA_DIST = \ API.json \ config.py.in +if WITH_SPICE +WITH_SPICE=yes +else +WITH_SPICE=no +endif + kimchidir = $(pythondir)/kimchi install-data-local: @@ -38,13 +44,14 @@ uninstall-local: do_substitution = \ sed -e 's,[@]prefix[@],$(prefix),g' \ - -e 's,[@]datadir[@],$(datadir),g' \ + -e 's,[@]datadir[@],$(datadir),g' \ -e 's,[@]sysconfdir[@],$(sysconfdir),g' \ -e 's,[@]localstatedir[@],$(localstatedir),g' \ -e 's,[@]pkgdatadir[@],$(pkgdatadir),g' \ -e 's,[@]kimchidir[@],$(kimchidir),g' \ -e 's,[@]kimchiversion[@],$(PACKAGE_VERSION),g' \ - -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g' + -e 's,[@]kimchirelease[@],$(PACKAGE_RELEASE),g' \ + -e 's,[@]withspice[@],$(WITH_SPICE),g' config.py: config.py.in Makefile diff --git a/src/kimchi/config.py.in b/src/kimchi/config.py.in index 097c017..e679c90 100644 --- a/src/kimchi/config.py.in +++ b/src/kimchi/config.py.in @@ -31,6 +31,7 @@ from kimchi.xmlutils import xpath_get_text __version__ = "@kimchiversion@" __release__ = "@kimchirelease@" +__with_spice__ = "@withspice@" DEFAULT_LOG_LEVEL = "debug" @@ -87,6 +88,21 @@ class Paths(object): def __init__(self): self.prefix = self.get_prefix() self.installed = (self.prefix == '@pkgdatadir@') + self.ui_dir = self.add_prefix('ui') + self.spice_file = os.path.join(self.ui_dir, + 'spice-html5/pages/spice_auto.html') + + if __with_spice__ == 'yes': + self.spice_dir = self.add_prefix('ui/spice-html5') + elif os.path.exists('@datadir@/spice-html5'): + self.spice_dir = '@datadir@/spice-html5' + else: + self.spice_dir = '/usr/share/spice-html5' + + if os.path.exists('@datadir@/novnc'): + self.novnc_dir = '@datadir@/novnc' + else: + self.novnc_dir = '/usr/share/novnc' if self.installed: self.state_dir = '@localstatedir@/lib/kimchi' @@ -94,19 +110,16 @@ class Paths(object): self.conf_dir = '@sysconfdir@/kimchi' self.src_dir = '@kimchidir@' self.plugins_dir = '@kimchidir@/plugins' + self.mo_dir = '@prefix@/share/locale' + self.spice_css_file = os.path.join(self.spice_dir, 'spice.css') else: self.state_dir = self.add_prefix('data') self.log_dir = self.add_prefix('log') self.conf_dir = self.add_prefix('src') self.src_dir = self.add_prefix('src/kimchi') self.plugins_dir = self.add_prefix('plugins') - - self.ui_dir = self.add_prefix('ui') - - if self.installed: - self.mo_dir = '@prefix@/share/locale' - else: self.mo_dir = self.add_prefix('mo') + self.spice_css_file = os.path.join(self.spice_dir, 'css/spice.css') def get_prefix(self): if __file__.startswith("/"): @@ -187,13 +200,26 @@ class KimchiConfig(dict): }, '/novnc': { 'tools.staticdir.on': True, - 'tools.staticdir.dir': '@datadir@/novnc', + 'tools.staticdir.dir': paths.novnc_dir, 'tools.nocache.on': True, 'tools.kimchiauth.on': True }, - '/spice.html': { + '/spice_auto.html': { + 'tools.staticfile.on': True, + 'tools.staticfile.filename': paths.spice_file, + 'tools.nocache.on': True, 'tools.kimchiauth.on': True }, + '/spice-html5': { + 'tools.staticdir.on': True, + 'tools.staticdir.dir': paths.spice_dir, + 'tools.nocache.on': True + }, + '/spice-html5/spice.css': { + 'tools.staticfile.on': True, + 'tools.staticfile.filename': paths.spice_css_file, + 'tools.nocache.on': True, + }, '/kimchi-ui.html': { 'tools.kimchiauth.on': True }, diff --git a/tests/test_config.py.in b/tests/test_config.py.in index af7adc1..1145ffd 100644 --- a/tests/test_config.py.in +++ b/tests/test_config.py.in @@ -112,9 +112,22 @@ class ConfigTests(unittest.TestCase): 'tools.nocache.on': True, 'tools.kimchiauth.on': True }, - '/spice.html': { + '/spice_auto.html': { + 'tools.staticfile.on': True, + 'tools.staticfile.filename': paths.spice_file, + 'tools.nocache.on': True, 'tools.kimchiauth.on': True }, + '/spice-html5': { + 'tools.staticdir.on': True, + 'tools.staticdir.dir': paths.spice_dir, + 'tools.nocache.on': True + }, + '/spice-html5/spice.css': { + 'tools.staticfile.on': True, + 'tools.staticfile.filename': paths.spice_css_file, + 'tools.nocache.on': True, + }, '/kimchi-ui.html': { 'tools.kimchiauth.on': True }, diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 5895a07..8a6e416 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -385,7 +385,7 @@ var kimchi = { dataType : "json" }).done(function(data, textStatus, xhr) { url = 'https://' + location.hostname + ':' + proxy_port; - url += "/console.html?url=spice.html&port=" + proxy_port; + url += "/console.html?url=spice_auto.html&port=" + proxy_port; url += "&listen=" + location.hostname; /* * From python documentation base64.urlsafe_b64encode(s) -- 1.9.3