Revert "Install OVS via the OS and make it an OS service"

This reverts commit 0b73b880cb.

Change-Id: Idd5b94abd41d1fb501e45dba65a1f672d7d9aa96
This commit is contained in:
Gal Sagie 2016-03-22 15:06:43 +02:00
parent e9b3b56dba
commit df7893e330
4 changed files with 92 additions and 162 deletions

View File

@ -19,3 +19,6 @@ if ! nb_db_driver_status_server; then
echo "Going to start db"
nb_db_driver_start_server
fi
# Start ovs db and etcd/ramcloud
start_ovs

View File

@ -1,122 +0,0 @@
#!/bin/bash
OVS_INSTALL_FROM_GIT=${OVS_INSTALL_FROM_GIT:-"True"}
function _neutron_ovs_get_dnf {
if is_fedora; then
if [ $OS_RELEASE -ge 22 ]; then
echo "dnf"
else
echo "yum"
fi
else
die "This function is only supported on fedora"
fi
}
function _neutron_ovs_install_ovs_deps_fedora {
DNF=`_neutron_ovs_get_dnf`
sudo $DNF install -y rpm-build
# So apparently we need to compile to learn the requirements...
set `cat ../rhel/openvswitch-fedora.spec.in | sed 's/@VERSION@/0/' | rpmspec -q --buildrequires /dev/stdin`
set "$@" `cat ../rhel/openvswitch-kmod-fedora.spec.in | sed 's/@VERSION@/0/' | rpmspec -q --buildrequires /dev/stdin`
if [ $# > 0 ]; then
sudo $DNF install -y $@
fi
}
function _neutron_ovs_get_rpm_basename {
PACKAGE=$1
SPEC=${2:-../rhel/openvswitch-fedora.spec}
BASENAME=`rpmspec -q $SPEC --provides | awk "/^$PACKAGE\s*=/ {print \\\$1\"-\"\\\$3}" | head -1`
echo `rpmspec -q $SPEC | grep "^$BASENAME"`
}
function _neutron_ovs_get_rpm_file {
BASENAME=`_neutron_ovs_get_rpm_basename "$@"`
find -name "$BASENAME.rpm" | head -1
}
function _neutron_ovs_clone_ovs {
if [ -d $DEST/ovs ]; then
pushd $DEST/ovs
git checkout master
git pull
popd
else
pushd $DEST
git clone $OVS_REPO
popd
fi
}
function _neutron_ovs_install_ovs_fedora {
_neutron_ovs_clone_ovs
mkdir -p $DEST/ovs/build-dragonflow
pushd $DEST/ovs/build-dragonflow
pushd ..
./boot.sh
popd
../configure
make
_neutron_ovs_install_ovs_deps_fedora
make rpm-fedora RPMBUILD_OPT="--without check"
make rpm-fedora-kmod
OVS_RPM_BASENAME=`_neutron_ovs_get_rpm_file openvswitch`
OVS_PY_RPM_BASENAME=`_neutron_ovs_get_rpm_file python-openvswitch`
OVS_KMOD_RPM_BASENAME=`_neutron_ovs_get_rpm_file openvswitch-kmod ../rhel/openvswitch-kmod-fedora.spec`
DNF=`_neutron_ovs_get_dnf`
sudo $DNF install -y $OVS_RPM_BASENAME $OVS_PY_RPM_BASENAME $OVS_KMOD_RPM_BASENAME
popd
}
function _neutron_ovs_install_ovs_deps_ubuntu {
sudo apt-get install -y build-essential fakeroot devscripts equivs dkms
sudo mk-build-deps -i -t "/usr/bin/apt-get --no-install-recommends -y"
}
function _neutron_ovs_install_ovs_ubuntu {
_neutron_ovs_clone_ovs
pushd $DEST/ovs
_neutron_ovs_install_ovs_deps_ubuntu
DEB_BUILD_OPTIONS='nocheck' fakeroot debian/rules binary
sudo dpkg -i ../openvswitch-datapath-dkms*.deb
sudo dpkg -i ../openvswitch-common*.deb ../openvswitch-switch*.deb ../python-openvswitch*.deb
popd
}
function _neutron_ovs_install_ovs {
if [ "$OVS_INSTALL_FROM_GIT" == "True" ]; then
echo "Installing OVS and dependent packages from git"
# If OVS is already installed, remove it, because we're about to re-install
# it from source.
for package in openvswitch openvswitch-switch openvswitch-common; do
# TODO(oanson)
#mark_ovs_was_installed
if is_package_installed $package ; then
uninstall_package $package
fi
done
if is_ubuntu; then
_neutron_ovs_install_ovs_ubuntu
elif is_fedora; then
_neutron_ovs_install_ovs_fedora
else
echo "Unsupported system. Trying to install via package manager"
install_package $(get_packages "openvswitch")
fi
else
echo "Installing OVS and dependent packages via package manager"
install_package $(get_packages "openvswitch")
fi
}
function install_ovs {
_neutron_ovs_install_ovs
}

View File

@ -1,7 +1,7 @@
# dragonflow.sh - Devstack extras script to install Dragonflow
# The git repo to use
OVS_REPO=${OVS_REPO:-${GIT_BASE}/openvswitch/ovs.git}
OVS_REPO=${OVS_REPO:-http://github.com/openvswitch/ovs.git}
OVS_REPO_NAME=$(basename ${OVS_REPO} | cut -f1 -d'.')
# The branch to use from $OVS_REPO
@ -26,10 +26,9 @@ PUBLISHERS_HOSTS=${PUBLISHERS_HOSTS:-"$SERVICE_HOST"}
#ovs related pid files
OVS_DB_SERVICE="ovsdb-server"
OVS_VSWITCHD_SERVICE="ovs-vswitchd"
OVS_DIR="/var/run/openvswitch"
OVS_DIR="/usr/local/var/run/openvswitch"
OVS_DB_PID=$OVS_DIR"/"$OVS_DB_SERVICE".pid"
OVS_VSWITCHD_PID=$OVS_DIR"/"$OVS_VSWITCHD_SERVICE".pid"
OVS_VSWITCH_OCSSCHEMA_FILE=${OVS_VSWITCH_OCSSCHEMA_FILE:-"/usr/share/openvswitch/vswitch.ovsschema"}
# Pluggable DB drivers
#----------------------
@ -62,7 +61,6 @@ fi
# Dragonflow installation uses functions from these files
source $TOP_DIR/lib/neutron_plugins/ovs_base
source $TOP_DIR/lib/neutron_plugins/openvswitch_agent
source $DEST/dragonflow/devstack/ovs_manager.sh
# Entry Points
# ------------
@ -83,6 +81,10 @@ function cleanup_ovs {
sudo ovs-vsctl del-port ${port}
done
local _pwd=$(pwd)
cd $DEST/$OVS_REPO_NAME
sudo make uninstall
cd $_pwd
}
function configure_df_plugin {
@ -175,7 +177,7 @@ function init_ovs {
rm -f $base_dir/.*.db.~lock~
echo "Creating OVS Database"
ovsdb-tool create $base_dir/conf.db $OVS_VSWITCH_OCSSCHEMA_FILE
ovsdb-tool create $base_dir/conf.db $DEST/$OVS_REPO_NAME/vswitchd/vswitch.ovsschema
}
function install_zeromq {
@ -207,6 +209,29 @@ function install_df {
setup_package $DRAGONFLOW_DIR
}
# install_ovs() - Collect source and prepare
function install_ovs {
echo "Installing OVS and dependent packages"
# If OVS is already installed, remove it, because we're about to re-install
# it from source.
for package in openvswitch openvswitch-switch openvswitch-common; do
if is_package_installed $package ; then
uninstall_package $package
fi
done
if ! is_neutron_enabled ; then
install_neutron
fi
install_package python-openvswitch
source $NEUTRON_DIR/devstack/lib/ovs
compile_ovs True
sudo chown $(whoami) /usr/local/var/run/openvswitch
sudo chown $(whoami) /usr/local/var/log/openvswitch
}
# stop_ovs_dp() - Stop OVS datapath
function stop_ovs_dp {
sudo ovs-dpctl dump-dps | sudo xargs -n1 ovs-dpctl del-dp
@ -216,14 +241,22 @@ function stop_ovs_dp {
function stop_ovs
{
SERVICE_NAME=openvswitch # Default value
if is_fedora; then
SERVICE_NAME=openvswitch
elif is_ubuntu; then
SERVICE_NAME=openvswitch-switch
fi
# Stop ovs db
ovs_service_stop $OVS_DB_SERVICE
# Stop ovs vswitch
ovs_service_stop $OVS_VSWITCHD_SERVICE
stop_service $SERVICE_NAME
while ovs_service_status $OVS_DB_SERVICE; do
echo "Waiting for the $OVS_DB_SERVICE to be stopped..."
sleep 1
ovs_service_stop $OVS_DB_SERVICE
done
while ovs_service_status $OVS_VSWITCHD_SERVICE; do
echo "Waiting for the ovsdb-vswitchd to be stopped..."
sleep 1
ovs_service_stop $OVS_VSWITCHD_SERVICE
done
}
# The following returns "0" when service is live.
@ -243,46 +276,60 @@ function ovs_service_status
return 1
}
function load_module_if_not_loaded() {
MOD=$1
if test lsmod | grep -q $MOD; then
echo "Loading module: $MOD"
sudo modprobe $MOD || die $LINENO "Failed to load module: $MOD"
else
echo "Module already loaded: $MOD"
# Kills a service
function ovs_service_stop
{
TEMP_PID=$OVS_DIR"/"$1".pid"
if [ -e $TEMP_PID ]
then
TEMP_PID_VALUE=$(cat $TEMP_PID 2>/dev/null)
if [ -e /proc/$TEMP_PID_VALUE ]
then
sudo kill $TEMP_PID_VALUE
fi
fi
}
function start_ovs {
echo "Starting OVS"
SERVICE_NAME=openvswitch # Default value
if is_fedora; then
SERVICE_NAME=openvswitch
elif is_ubuntu; then
SERVICE_NAME=openvswitch-switch
fi
start_service $SERVICE_NAME
local _pwd=$(pwd)
cd $DATA_DIR/ovs
EXTRA_DBS=""
OVSDB_REMOTE="--remote=ptcp:6640:$HOST_IP"
if ! ovs_service_status $OVS_DB_SERVICE; then
die "$OVS_DB_SERVICE is not running"
#echo "Going to start $OVS_DB_SERVICE"
$OVS_DB_SERVICE --remote=punix:$OVS_DIR"/db.sock" \
--remote=db:Open_vSwitch,Open_vSwitch,manager_options \
--pidfile=$OVS_DB_PID --detach -vconsole:off --log-file $OVSDB_REMOTE \
conf.db ${EXTRA_DBS}
echo -n "Waiting for $OVS_DB_SERVICE to start ... "
while ! test -e $OVS_DIR"/db.sock" ; do
sleep 1
done
echo "done."
ovs-vsctl --no-wait init
fi
if is_service_enabled df-controller ; then
if ! ovs_service_status $OVS_VSWITCHD_SERVICE; then
die "$OVS_VSWITCHD_SERVICE is not running"
fi
load_module_if_not_loaded openvswitch
# TODO This needs to be a fatal error when doing multi-node testing, but
# breaks testing in OpenStack CI where geneve isn't available.
load_module_if_not_loaded geneve || true
load_module_if_not_loaded vport_geneve || true
#echo "Going to start $OVS_VSWITCHD_SERVICE"
sudo modprobe openvswitch || die $LINENO "Failed to load openvswitch module"
# TODO This needs to be a fatal error when doing multi-node testing, but
# breaks testing in OpenStack CI where geneve isn't available.
#sudo modprobe geneve || die $LINENO "Failed to load geneve module"
sudo modprobe geneve || true
#sudo modprobe vport_geneve || die $LINENO "Failed to load vport_geneve module"
sudo modprobe vport_geneve || true
_neutron_ovs_base_setup_bridge br-int
sudo ovs-vsctl --no-wait set bridge br-int fail-mode=secure other-config:disable-in-band=true
_neutron_ovs_base_setup_bridge br-int
ovs-vsctl --no-wait set bridge br-int fail-mode=secure other-config:disable-in-band=true
sudo $OVS_VSWITCHD_SERVICE --pidfile=$OVS_VSWITCHD_PID --detach -vconsole:off --log-file
fi
fi
cd $_pwd
@ -297,7 +344,7 @@ function start_df {
echo "Starting Dragonflow"
if is_service_enabled df-controller ; then
sudo ovs-vsctl --no-wait set-controller br-int tcp:$HOST_IP:6633
ovs-vsctl --no-wait set-controller br-int tcp:$HOST_IP:6633
run_process df-controller "python $DF_LOCAL_CONTROLLER --config-file $NEUTRON_CONF"
run_process df-ext-services "bash $DEST/dragonflow/devstack/df-ext-services.sh"
fi
@ -307,11 +354,14 @@ function start_df {
function stop_df {
if is_service_enabled df-controller ; then
stop_process df-controller
ovs_service_stop $OVS_VSWITCHD_SERVICE
fi
cleanup_nb_db
nb_db_driver_stop_server
ovs_service_stop $OVS_DB_SERVICE
}
function disable_libvirt_apparmor {

View File

@ -1,5 +1,4 @@
DRAGONFLOW_REPO=${DRAGONFLOW_REPO:-${GIT_BASE}/openstack/dragonflow.git}
NETWORKING_OVN_REPO=${NETWORKING_OVN_REPO:-${GIT_BASE}/openstack/networking-ovn.git}
DRAGONFLOW_REPO=${DRAGONFLOW_REPO:-git://github.com/openstack/dragonflow.git}
DRAGONFLOW_DIR=$DEST/dragonflow
DRAGONFLOW_BRANCH=${DRAGONFLOW_BRANCH:-master}