Remove node.js from being needed in the bootstrap phase and only install it in the horizon component preinstall phase
This commit is contained in:
@@ -16,11 +16,17 @@
|
|||||||
|
|
||||||
from anvil import colorizer
|
from anvil import colorizer
|
||||||
from anvil import components as comp
|
from anvil import components as comp
|
||||||
|
from anvil import downloader as down
|
||||||
from anvil import exceptions as excp
|
from anvil import exceptions as excp
|
||||||
from anvil import log as logging
|
from anvil import log as logging
|
||||||
from anvil import shell as sh
|
from anvil import shell as sh
|
||||||
from anvil import utils
|
from anvil import utils
|
||||||
|
|
||||||
|
from anvil.packaging import yum
|
||||||
|
|
||||||
|
from tempfile import NamedTemporaryFile
|
||||||
|
|
||||||
|
import os
|
||||||
import re
|
import re
|
||||||
|
|
||||||
from anvil.components.helpers import db as dbhelper
|
from anvil.components.helpers import db as dbhelper
|
||||||
@@ -76,6 +82,38 @@ class HorizonInstaller(comp.PythonInstallComponent):
|
|||||||
comp.PythonInstallComponent.verify(self)
|
comp.PythonInstallComponent.verify(self)
|
||||||
self._check_ug()
|
self._check_ug()
|
||||||
|
|
||||||
|
def pre_install(self):
|
||||||
|
self._install_node_repo()
|
||||||
|
|
||||||
|
def _install_node_repo(self):
|
||||||
|
repo_url = self.get_option('nodejs_repo')
|
||||||
|
if not repo_url:
|
||||||
|
return
|
||||||
|
# Download the said url and install it so that we can actually install
|
||||||
|
# the node.js requirement which seems to be needed by horizon for css compiling??
|
||||||
|
repo_basename = sh.basename(repo_url)
|
||||||
|
(_fn, fn_ext) = os.path.splitext(repo_basename)
|
||||||
|
fn_ext = fn_ext.lower().strip()
|
||||||
|
if fn_ext not in ['.rpm', '.repo']:
|
||||||
|
LOG.warn("Unknown node.js repository configuration extension %s (we only support .rpm or .repo)!", colorizer.quote(fn_ext))
|
||||||
|
return
|
||||||
|
with NamedTemporaryFile(suffix=fn_ext) as temp_fh:
|
||||||
|
LOG.info("Downloading node.js repository configuration from %s to %s.", repo_url, temp_fh.name)
|
||||||
|
down.UrlLibDownloader(repo_url, temp_fh.name).download()
|
||||||
|
temp_fh.flush()
|
||||||
|
if fn_ext == ".repo":
|
||||||
|
# Just write out the repo file after downloading it...
|
||||||
|
repo_file_name = sh.joinpths("/etc/yum.repos.d", repo_basename)
|
||||||
|
if not sh.exists(repo_file_name):
|
||||||
|
with sh.Rooted(True):
|
||||||
|
sh.write_file(repo_file_name, sh.load_file(temp_fh.name),
|
||||||
|
tracewriter=self.tracewriter)
|
||||||
|
sh.chmod(repo_file_name, 0644)
|
||||||
|
elif fn_ext == ".rpm":
|
||||||
|
# Install it instead from said rpm (which likely is a
|
||||||
|
# file that contains said repo location)...
|
||||||
|
packager = yum.YumPackager(self.distro).direct_install(temp_fh.name)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def symlinks(self):
|
def symlinks(self):
|
||||||
links = super(HorizonInstaller, self).symlinks
|
links = super(HorizonInstaller, self).symlinks
|
||||||
|
@@ -67,6 +67,10 @@ class YumPackager(pack.Packager):
|
|||||||
return sh.execute(*yum_cmd, run_as_root=True,
|
return sh.execute(*yum_cmd, run_as_root=True,
|
||||||
check_exit_code=True, **kargs)
|
check_exit_code=True, **kargs)
|
||||||
|
|
||||||
|
def direct_install(self, filename):
|
||||||
|
cmd = YUM_INSTALL + [filename]
|
||||||
|
self._execute_yum(cmd)
|
||||||
|
|
||||||
def _remove_special(self, name, info):
|
def _remove_special(self, name, info):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
@@ -663,7 +663,7 @@ def unlink(path, ignore_errors=True, run_as_root=False):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
|
|
||||||
def copy(src, dst):
|
def copy(src, dst, tracewriter=None):
|
||||||
LOG.debug("Copying: %r => %r" % (src, dst))
|
LOG.debug("Copying: %r => %r" % (src, dst))
|
||||||
if not is_dry_run():
|
if not is_dry_run():
|
||||||
shutil.copy(src, dst)
|
shutil.copy(src, dst)
|
||||||
|
@@ -17,6 +17,13 @@ apache_user: "$(auto:user)"
|
|||||||
# Port horizon should run on
|
# Port horizon should run on
|
||||||
port: 80
|
port: 80
|
||||||
|
|
||||||
|
# We need to get a viable node.js repository to work
|
||||||
|
# with, this is only really needed for distributions where
|
||||||
|
# said distributions do not have node.js available yet...
|
||||||
|
#
|
||||||
|
# NOTE(harlowja): blank out/remove as needed...
|
||||||
|
nodejs_repo: "http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm"
|
||||||
|
|
||||||
# Needed for setting up your database
|
# Needed for setting up your database
|
||||||
db:
|
db:
|
||||||
type: "$(db:type)"
|
type: "$(db:type)"
|
||||||
|
@@ -509,6 +509,7 @@ components:
|
|||||||
uninstall: anvil.components.rabbit:RabbitUninstaller
|
uninstall: anvil.components.rabbit:RabbitUninstaller
|
||||||
packages:
|
packages:
|
||||||
- name: rabbitmq-server
|
- name: rabbitmq-server
|
||||||
|
# Disable qpidd as these rabbitmq & qpidd conflict
|
||||||
pre-install:
|
pre-install:
|
||||||
- cmd:
|
- cmd:
|
||||||
- service
|
- service
|
||||||
@@ -516,6 +517,7 @@ components:
|
|||||||
- stop
|
- stop
|
||||||
ignore_failure: true
|
ignore_failure: true
|
||||||
run_as_root: true
|
run_as_root: true
|
||||||
|
# Also stop it from starting on boot (if rebooted)
|
||||||
- cmd:
|
- cmd:
|
||||||
- chkconfig
|
- chkconfig
|
||||||
- qpidd
|
- qpidd
|
||||||
|
32
smithy
32
smithy
@@ -1,15 +1,9 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
if [ "$(id -u)" != "0" ]; then
|
|
||||||
echo "This script must be run as root!" 1>&2
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
shopt -s nocasematch
|
shopt -s nocasematch
|
||||||
|
|
||||||
RHEL_VERSION=$(lsb_release -r | awk '{ print $2 }' | cut -d"." -f1)
|
RHEL_VERSION=$(lsb_release -r | awk '{ print $2 }' | cut -d"." -f1)
|
||||||
EPEL_RPM_LIST="http://mirrors.kernel.org/fedora-epel/$RHEL_VERSION/i386"
|
EPEL_RPM_LIST="http://mirrors.kernel.org/fedora-epel/$RHEL_VERSION/i386"
|
||||||
NODE_RPM_URL="http://nodejs.tchol.org/repocfg/el/nodejs-stable-release.noarch.rpm"
|
|
||||||
YUM_OPTS="--assumeyes --nogpgcheck"
|
YUM_OPTS="--assumeyes --nogpgcheck"
|
||||||
PIP_CMD="pip-python"
|
PIP_CMD="pip-python"
|
||||||
|
|
||||||
@@ -32,25 +26,6 @@ if [ -z "$BOOT_FILES" ]; then
|
|||||||
BOOT_FILES="${PWD}/$BOOT_FN"
|
BOOT_FILES="${PWD}/$BOOT_FN"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
bootstrap_node()
|
|
||||||
{
|
|
||||||
if [ -z "$NODE_RPM_URL" ]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
echo "Installing node.js yum repository configuration."
|
|
||||||
JS_REPO_RPM_FN=$(basename $NODE_RPM_URL)
|
|
||||||
if [ ! -f "/tmp/$JS_REPO_RPM_FN" ]; then
|
|
||||||
echo "Downloading $JS_REPO_RPM_FN to /tmp/$JS_REPO_RPM_FN..."
|
|
||||||
wget -q -O "/tmp/$JS_REPO_RPM_FN" "$NODE_RPM_URL"
|
|
||||||
if [ $? -ne 0 ]; then
|
|
||||||
return 1
|
|
||||||
fi
|
|
||||||
fi
|
|
||||||
echo "Installing /tmp/$JS_REPO_RPM_FN..."
|
|
||||||
yum install $YUM_OPTS -t "/tmp/$JS_REPO_RPM_FN" 2>&1
|
|
||||||
return $?
|
|
||||||
}
|
|
||||||
|
|
||||||
bootstrap_epel()
|
bootstrap_epel()
|
||||||
{
|
{
|
||||||
if [ -z "$EPEL_RPM_LIST" ]; then
|
if [ -z "$EPEL_RPM_LIST" ]; then
|
||||||
@@ -118,13 +93,6 @@ bootstrap_rhel()
|
|||||||
echo "Bootstrapping RHEL: $1"
|
echo "Bootstrapping RHEL: $1"
|
||||||
echo "Please wait..."
|
echo "Please wait..."
|
||||||
|
|
||||||
# Node is typically needed for horizon (some css stuff)
|
|
||||||
bootstrap_node
|
|
||||||
if [ "$?" != "0" ];
|
|
||||||
then
|
|
||||||
return $?
|
|
||||||
fi
|
|
||||||
|
|
||||||
# EPEL provides most of the python dependencies for RHEL
|
# EPEL provides most of the python dependencies for RHEL
|
||||||
bootstrap_epel
|
bootstrap_epel
|
||||||
if [ "$?" != "0" ];
|
if [ "$?" != "0" ];
|
||||||
|
@@ -9,3 +9,4 @@ python-ordereddict
|
|||||||
python-pip
|
python-pip
|
||||||
python-progressbar
|
python-progressbar
|
||||||
python-psutil
|
python-psutil
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user