From 00011c0847a9972b78051954e272f54e9d07ef51 Mon Sep 17 00:00:00 2001 From: Vincent Untz Date: Thu, 6 Dec 2012 09:56:32 +0100 Subject: [PATCH] Add is_fedora and exit_distro_not_supported functions Between is_fedora, is_ubuntu and is_suse, we can make the code a bit simpler to read. We also use exit_distro_not_supported to identify places where we need implementation details for new distros. As "/sbin/service --skip-redirect" is Fedora-specific, guard this with a is_fedora test too. Change-Id: Ic77c0697ed9be0dbb5df8e73da93463e76025f0c --- functions | 55 +++++++++++++++++++++++++++++++--------- lib/cinder | 12 ++++++--- lib/databases/mysql | 30 ++++++++++++++-------- lib/databases/postgresql | 8 +++--- lib/horizon | 29 +++++++++++---------- lib/nova | 8 +++--- stack.sh | 34 +++++++++++++++---------- tests/functions.sh | 8 ++++-- tools/info.sh | 8 ++++-- 9 files changed, 128 insertions(+), 64 deletions(-) diff --git a/functions b/functions index 0911557fa4..3ee43d3d05 100644 --- a/functions +++ b/functions @@ -354,6 +354,18 @@ function is_ubuntu { } +# Determine if current distribution is a Fedora-based distribution +# (Fedora, RHEL, CentOS). +# is_fedora +function is_fedora { + if [[ -z "$os_VENDOR" ]]; then + GetOSVersion + fi + + [ "$os_VENDOR" = "Fedora" ] || [ "$os_VENDOR" = "Red Hat" ] || [ "$os_VENDOR" = "CentOS" ] +} + + # Determine if current distribution is a SUSE-based distribution # (openSUSE, SLE). # is_suse @@ -366,6 +378,23 @@ function is_suse { } +# Exit after outputting a message about the distribution not being supported. +# exit_distro_not_supported [optional-string-telling-what-is-missing] +function exit_distro_not_supported { + if [[ -z "$DISTRO" ]]; then + GetDistro + fi + + if [ $# -gt 0 ]; then + echo "Support for $DISTRO is incomplete: no support for $@" + else + echo "Support for $DISTRO is incomplete." + fi + + exit 1 +} + + # git clone only if directory doesn't exist already. Since ``DEST`` might not # be owned by the installation user, we create the directory and change the # ownership to the proper user. @@ -598,12 +627,12 @@ function install_package() { NO_UPDATE_REPOS=True apt_get install "$@" + elif is_fedora; then + yum_install "$@" + elif is_suse; then + zypper_install "$@" else - if is_suse; then - zypper_install "$@" - else - yum_install "$@" - fi + exit_distro_not_supported "installing packages" fi } @@ -622,9 +651,11 @@ function is_package_installed() { if [[ "$os_PACKAGE" = "deb" ]]; then dpkg -l "$@" > /dev/null return $? - else + elif [[ "$os_PACKAGE" = "rpm" ]]; then rpm --quiet -q "$@" return $? + else + exit_distro_not_supported "finding if a package is installed" fi } @@ -1032,20 +1063,20 @@ function add_user_to_group() { function get_rootwrap_location() { local module=$1 - if is_ubuntu || is_suse; then - echo "/usr/local/bin/$module-rootwrap" - else + if is_fedora; then echo "/usr/bin/$module-rootwrap" + else + echo "/usr/local/bin/$module-rootwrap" fi } # Get the path to the pip command. # get_pip_command function get_pip_command() { - if is_ubuntu || is_suse; then - echo "/usr/bin/pip" - else + if is_fedora; then echo "/usr/bin/pip-python" + else + echo "/usr/bin/pip" fi } diff --git a/lib/cinder b/lib/cinder index 9b9d50d148..a43f0a1616 100644 --- a/lib/cinder +++ b/lib/cinder @@ -195,8 +195,8 @@ function init_cinder() { mkdir -p $CINDER_STATE_PATH/volumes if sudo vgs $VOLUME_GROUP; then - if [[ "$os_PACKAGE" = "rpm" ]]; then - # RPM doesn't start the service + if is_fedora || is_suse; then + # service is not started by default start_service tgtd fi @@ -245,9 +245,15 @@ function start_cinder() { # do it in two steps sudo stop tgt || true sudo start tgt - else + elif is_fedora; then # bypass redirection to systemctl during restart sudo /sbin/service --skip-redirect tgtd restart + elif is_suse; then + restart_service tgtd + else + # note for other distros: unstack.sh also uses the tgt/tgtd service + # name, and would need to be adjusted too + exit_distro_not_supported "restarting tgt" fi fi diff --git a/lib/databases/mysql b/lib/databases/mysql index 60ea143f73..68e9adc5d6 100644 --- a/lib/databases/mysql +++ b/lib/databases/mysql @@ -23,22 +23,28 @@ function configure_database_mysql { if is_ubuntu; then MY_CONF=/etc/mysql/my.cnf MYSQL=mysql - else + elif is_fedora; then MY_CONF=/etc/my.cnf - if is_suse; then - MYSQL=mysql - else - MYSQL=mysqld - fi + MYSQL=mysqld + elif is_suse; then + MY_CONF=/etc/my.cnf + MYSQL=mysql + else + exit_distro_not_supported "mysql configuration" fi # Start mysql-server - if [[ "$os_PACKAGE" = "rpm" ]]; then - # RPM doesn't start the service + if is_fedora || is_suse; then + # service is not started by default start_service $MYSQL - # Set the root password - only works the first time + fi + + # Set the root password - only works the first time. For Ubuntu, we already + # did that with debconf before installing the package. + if ! is_ubuntu; then sudo mysqladmin -u root password $DATABASE_PASSWORD || true fi + # Update the DB to give user ‘$DATABASE_USER’@’%’ full control of the all databases: sudo mysql -uroot -p$DATABASE_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$DATABASE_USER'@'%' identified by '$DATABASE_PASSWORD';" @@ -84,10 +90,12 @@ EOF chmod 0600 $HOME/.my.cnf fi # Install mysql-server - if is_suse; then + if is_ubuntu || is_fedora; then + install_package mysql-server + elif is_suse; then install_package mysql-community-server else - install_package mysql-server + exit_distro_not_supported "mysql installation" fi } diff --git a/lib/databases/postgresql b/lib/databases/postgresql index d9c2f00c4f..20ade857b0 100644 --- a/lib/databases/postgresql +++ b/lib/databases/postgresql @@ -20,7 +20,7 @@ function recreate_database_postgresql { function configure_database_postgresql { echo_summary "Configuring and starting PostgreSQL" - if [[ "$os_PACKAGE" = "rpm" ]]; then + if is_fedora || is_suse; then PG_HBA=/var/lib/pgsql/data/pg_hba.conf PG_CONF=/var/lib/pgsql/data/postgresql.conf sudo [ -e $PG_HBA ] || sudo postgresql-setup initdb @@ -53,10 +53,12 @@ EOF else sed -i "s/:root:\w\+/:root:$DATABASE_PASSWORD/" $PGPASS fi - if [[ "$os_PACKAGE" = "rpm" ]]; then + if is_ubuntu; then + install_package postgresql + elif is_fedora || is_suse; then install_package postgresql-server else - install_package postgresql + exit_distro_not_supported "postgresql installation" fi } diff --git a/lib/horizon b/lib/horizon index 7321cbcc4a..68337ab802 100644 --- a/lib/horizon +++ b/lib/horizon @@ -81,19 +81,18 @@ function init_horizon() { sudo a2ensite horizon # WSGI doesn't enable by default, enable it sudo a2enmod wsgi + elif is_fedora; then + APACHE_NAME=httpd + APACHE_CONF=conf.d/horizon.conf + sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf + elif is_suse; then + APACHE_NAME=apache2 + APACHE_CONF=vhosts.d/horizon.conf + # Append wsgi to the list of modules to load + grep -q "^APACHE_MODULES=.*wsgi" /etc/sysconfig/apache2 || + sudo sed '/^APACHE_MODULES=/s/^\(.*\)"$/\1 wsgi"/' -i /etc/sysconfig/apache2 else - # Install httpd, which is NOPRIME'd - if is_suse; then - APACHE_NAME=apache2 - APACHE_CONF=vhosts.d/horizon.conf - # Append wsgi to the list of modules to load - grep -q "^APACHE_MODULES=.*wsgi" /etc/sysconfig/apache2 || - sudo sed '/^APACHE_MODULES=/s/^\(.*\)"$/\1 wsgi"/' -i /etc/sysconfig/apache2 - else - APACHE_NAME=httpd - APACHE_CONF=conf.d/horizon.conf - sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf - fi + exit_distro_not_supported "apache configuration" fi # Configure apache to run horizon @@ -113,11 +112,13 @@ function install_horizon() { if is_ubuntu; then # Install apache2, which is NOPRIME'd install_package apache2 libapache2-mod-wsgi + elif is_fedora; then + sudo rm -f /etc/httpd/conf.d/000-* + install_package httpd mod_wsgi elif is_suse; then install_package apache2 apache2-mod_wsgi else - sudo rm -f /etc/httpd/conf.d/000-* - install_package httpd mod_wsgi + exit_distro_not_supported "apache installation" fi # NOTE(sdague) quantal changed the name of the node binary diff --git a/lib/nova b/lib/nova index 3a4d34d85e..8272ef0d98 100644 --- a/lib/nova +++ b/lib/nova @@ -394,11 +394,13 @@ function install_novaclient() { function install_nova() { if is_service_enabled n-cpu; then if is_ubuntu; then - LIBVIRT_PKG_NAME=libvirt-bin + install_package libvirt-bin + elif is_fedora || is_suse; then + install_package libvirt else - LIBVIRT_PKG_NAME=libvirt + exit_distro_not_supported "libvirt installation" fi - install_package $LIBVIRT_PKG_NAME + # Install and configure **LXC** if specified. LXC is another approach to # splitting a system into many smaller parts. LXC uses cgroups and chroot # to simulate multiple systems. diff --git a/stack.sh b/stack.sh index cddb64e0aa..6483de3b97 100755 --- a/stack.sh +++ b/stack.sh @@ -678,17 +678,21 @@ set -o xtrace echo_summary "Installing package prerequisites" if is_ubuntu; then install_package $(get_packages $FILES/apts) +elif is_fedora; then + install_package $(get_packages $FILES/rpms) elif is_suse; then install_package $(get_packages $FILES/rpms-suse) else - install_package $(get_packages $FILES/rpms) + exit_distro_not_supported "list of packages" fi if [[ $SYSLOG != "False" ]]; then - if is_suse; then + if is_ubuntu || is_fedora; then + install_package rsyslog-relp + elif is_suse; then install_package rsyslog-module-relp else - install_package rsyslog-relp + exit_distro_not_supported "rsyslog-relp installation" fi fi @@ -700,20 +704,22 @@ if is_service_enabled rabbit; then cat "$tfile" rm -f "$tfile" elif is_service_enabled qpid; then - if [[ "$os_PACKAGE" = "rpm" ]]; then + if is_fedora; then install_package qpid-cpp-server-daemon - else + elif is_ubuntu; then install_package qpidd + else + exit_distro_not_supported "qpid installation" fi elif is_service_enabled zeromq; then - if [[ "$os_PACKAGE" = "rpm" ]]; then - if is_suse; then - install_package libzmq1 python-pyzmq - else - install_package zeromq python-zmq - fi - else + if is_fedora; then + install_package zeromq python-zmq + elif is_ubuntu; then install_package libzmq1 python-zmq + elif is_suse; then + install_package libzmq1 python-pyzmq + else + exit_distro_not_supported "zeromq installation" fi fi @@ -909,8 +915,8 @@ fi if is_service_enabled rabbit; then # Start rabbitmq-server echo_summary "Starting RabbitMQ" - if [[ "$os_PACKAGE" = "rpm" ]]; then - # RPM doesn't start the service + if is_fedora || is_suse; then + # service is not started by default restart_service rabbitmq-server fi # change the rabbit password since the default is "guest" diff --git a/tests/functions.sh b/tests/functions.sh index d2cc5c4438..be48729f71 100755 --- a/tests/functions.sh +++ b/tests/functions.sh @@ -260,9 +260,11 @@ fi if [[ "$os_PACKAGE" = "deb" ]]; then is_package_installed dpkg VAL=$? -else +elif [[ "$os_PACKAGE" = "rpm" ]]; then is_package_installed rpm VAL=$? +else + VAL=1 fi if [[ "$VAL" -eq 0 ]]; then echo "OK" @@ -273,9 +275,11 @@ fi if [[ "$os_PACKAGE" = "deb" ]]; then is_package_installed dpkg bash VAL=$? -else +elif [[ "$os_PACKAGE" = "rpm" ]]; then is_package_installed rpm bash VAL=$? +else + VAL=1 fi if [[ "$VAL" -eq 0 ]]; then echo "OK" diff --git a/tools/info.sh b/tools/info.sh index 583a9949dd..f01dbea0cb 100755 --- a/tools/info.sh +++ b/tools/info.sh @@ -90,15 +90,19 @@ done if is_ubuntu; then PKG_DIR=$FILES/apts -else +elif is_fedora; then PKG_DIR=$FILES/rpms +else + exit_distro_not_supported "list of packages" fi for p in $(get_packages $PKG_DIR); do if [[ "$os_PACKAGE" = "deb" ]]; then ver=$(dpkg -s $p 2>/dev/null | grep '^Version: ' | cut -d' ' -f2) - else + elif [[ "$os_PACKAGE" = "rpm" ]]; then ver=$(rpm -q --queryformat "%{VERSION}-%{RELEASE}\n" $p) + else + exit_distro_not_supported "finding version of a package" fi echo "pkg|${p}|${ver}" done