Browse code

E) Add support for Fedora 16

Highlights:
* Add files/rpms/*
* get_packages() only loads deps for services that are enabled

11Apr2012
* change mod_wsgi cwd to $HORIZON_DIR
* fix horizon apache log file name and location

Note: This superceeds https://review.openstack.org/4364

Change-Id: I95486584561e4418907a6a4feb0ffbe4f4ea1843

Dean Troyer authored on 2012/02/04 17:13:23
Showing 17 changed files
... ...
@@ -2,7 +2,7 @@ DevStack is a set of scripts and utilities to quickly deploy an OpenStack cloud.
2 2
 
3 3
 # Goals
4 4
 
5
-* To quickly build dev OpenStack environments in a clean Oneiric or Precise environment
5
+* To quickly build dev OpenStack environments in a clean Ubuntu or Fedora environment
6 6
 * To describe working configurations of OpenStack (which code branches work together?  what do config files look like for those branches?)
7 7
 * To make it easier for developers to dive into OpenStack so that they can productively contribute without having to understand every part of the system at once
8 8
 * To make it easy to prototype cross-project features
9 9
deleted file mode 100644
... ...
@@ -1,28 +0,0 @@
1
-<VirtualHost *:80>
2
-    WSGIScriptAlias / %HORIZON_DIR%/openstack_dashboard/wsgi/django.wsgi
3
-    WSGIDaemonProcess horizon user=%USER% group=%GROUP% processes=3 threads=10
4
-    SetEnv APACHE_RUN_USER %USER%
5
-    SetEnv APACHE_RUN_GROUP %GROUP%
6
-    WSGIProcessGroup horizon
7
-
8
-    DocumentRoot %HORIZON_DIR%/.blackhole/
9
-    Alias /media %HORIZON_DIR%/openstack_dashboard/static
10
-    Alias /vpn /opt/stack/vpn
11
-
12
-    <Directory />
13
-        Options FollowSymLinks
14
-        AllowOverride None
15
-    </Directory>
16
-
17
-    <Directory %HORIZON_DIR%/>
18
-        Options Indexes FollowSymLinks MultiViews
19
-        AllowOverride None
20
-        Order allow,deny
21
-        allow from all
22
-    </Directory>
23
-
24
-    ErrorLog /var/log/apache2/error.log
25
-    LogLevel warn
26
-    CustomLog /var/log/apache2/access.log combined
27
-</VirtualHost>
28
-
29 1
new file mode 100644
... ...
@@ -0,0 +1,29 @@
0
+<VirtualHost *:80>
1
+    WSGIScriptAlias / %HORIZON_DIR%/openstack_dashboard/wsgi/django.wsgi
2
+    WSGIDaemonProcess horizon user=%USER% group=%GROUP% processes=3 threads=10 home=%HORIZON_DIR%
3
+
4
+    SetEnv APACHE_RUN_USER %USER%
5
+    SetEnv APACHE_RUN_GROUP %GROUP%
6
+    WSGIProcessGroup horizon
7
+
8
+    DocumentRoot %HORIZON_DIR%/.blackhole/
9
+    Alias /media %HORIZON_DIR%/openstack_dashboard/static
10
+
11
+    <Directory />
12
+        Options FollowSymLinks
13
+        AllowOverride None
14
+    </Directory>
15
+
16
+    <Directory %HORIZON_DIR%/>
17
+        Options Indexes FollowSymLinks MultiViews
18
+        AllowOverride None
19
+        Order allow,deny
20
+        allow from all
21
+    </Directory>
22
+
23
+    ErrorLog /var/log/%APACHE_NAME%/horizon_error.log
24
+    LogLevel warn
25
+    CustomLog /var/log/%APACHE_NAME%/horizon_access.log combined
26
+</VirtualHost>
27
+
28
+WSGISocketPrefix /var/run/%APACHE_NAME%
... ...
@@ -1,3 +1,5 @@
1
+django-mailer    # dist:f16
2
+django-nose      # dist:f16
1 3
 django-nose-selenium
2 4
 pycrypto==2.3
3 5
 python-cloudfiles
4 6
new file mode 100644
... ...
@@ -0,0 +1,14 @@
0
+curl
1
+euca2ools # only for testing client
2
+git-core
3
+openssh-server
4
+psmisc
5
+pylint
6
+python-pep8
7
+python-pip
8
+python-unittest2
9
+python-virtualenv
10
+screen
11
+tcpdump
12
+unzip
13
+wget
0 14
new file mode 100644
... ...
@@ -0,0 +1,8 @@
0
+python-argparse
1
+python-eventlet
2
+python-greenlet
3
+python-paste-deploy
4
+python-routes
5
+python-sqlalchemy
6
+python-wsgiref
7
+pyxattr
0 8
new file mode 100644
... ...
@@ -0,0 +1,25 @@
0
+Django
1
+django-registration
2
+gcc
3
+httpd # NOPRIME
4
+mod_wsgi  # NOPRIME
5
+pylint
6
+python-anyjson
7
+python-boto
8
+python-coverage
9
+python-dateutil
10
+python-eventlet
11
+python-greenlet
12
+python-httplib2
13
+python-kombu
14
+python-migrate
15
+python-mox
16
+python-nose
17
+python-paste
18
+python-paste-deploy
19
+python-pep8
20
+python-routes
21
+python-sphinx
22
+python-sqlalchemy
23
+python-webob
24
+pyxattr
0 25
new file mode 100644
... ...
@@ -0,0 +1,11 @@
0
+python-greenlet
1
+python-lxml
2
+python-paste
3
+python-paste-deploy
4
+python-paste-script
5
+python-routes
6
+python-setuptools
7
+python-sqlalchemy
8
+python-sqlite2
9
+python-webob
10
+sqlite
0 11
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+python-dateutil
0 1
new file mode 100644
... ...
@@ -0,0 +1,3 @@
0
+# Stuff for diablo volumes
1
+iscsi-initiator-utils
2
+lvm2
0 3
new file mode 100644
... ...
@@ -0,0 +1 @@
0
+numpy
0 1
new file mode 100644
... ...
@@ -0,0 +1,2 @@
0
+lvm2
1
+scsi-target-utils
0 2
new file mode 100644
... ...
@@ -0,0 +1,39 @@
0
+MySQL-python
1
+curl
2
+dnsmasq-utils # for dhcp_release
3
+ebtables
4
+gawk
5
+iptables
6
+iputils
7
+kpartx
8
+kvm
9
+libvirt-bin # NOPRIME
10
+libvirt-python
11
+libxml2-python
12
+m2crypto
13
+mysql-server # NOPRIME
14
+parted
15
+python-boto
16
+python-carrot
17
+python-cheetah
18
+python-eventlet
19
+python-feedparser
20
+python-gflags
21
+python-greenlet
22
+python-iso8601
23
+python-kombu
24
+python-lockfile
25
+python-migrate
26
+python-mox
27
+python-netaddr
28
+python-paramiko
29
+python-paste
30
+python-paste-deploy
31
+python-routes
32
+python-sqlalchemy
33
+python-suds
34
+python-tempita
35
+rabbitmq-server # NOPRIME
36
+sqlite
37
+sudo
38
+vconfig
0 39
new file mode 100644
... ...
@@ -0,0 +1,18 @@
0
+curl
1
+gcc
2
+memcached # NOPRIME
3
+python-configobj
4
+python-coverage
5
+python-devel
6
+python-eventlet
7
+python-greenlet
8
+python-netifaces
9
+python-nose
10
+python-paste-deploy
11
+python-setuptools
12
+python-simplejson
13
+python-webob
14
+pyxattr
15
+sqlite
16
+xfsprogs
17
+xinetd
... ...
@@ -298,21 +298,42 @@ function pip_install {
298 298
 # Service wrapper to restart services
299 299
 # restart_service service-name
300 300
 function restart_service() {
301
-    sudo /usr/sbin/service $1 restart
301
+    if [[ -z "$os_PACKAGE" ]]; then
302
+        GetOSVersion
303
+    fi
304
+    if [[ "$os_PACKAGE" = "deb" ]]; then
305
+        sudo /usr/sbin/service $1 restart
306
+    else
307
+        sudo /sbin/service $1 restart
308
+    fi
302 309
 }
303 310
 
304 311
 
305 312
 # Service wrapper to start services
306 313
 # start_service service-name
307 314
 function start_service() {
308
-    sudo /usr/sbin/service $1 start
315
+    if [[ -z "$os_PACKAGE" ]]; then
316
+        GetOSVersion
317
+    fi
318
+    if [[ "$os_PACKAGE" = "deb" ]]; then
319
+        sudo /usr/sbin/service $1 start
320
+    else
321
+        sudo /sbin/service $1 start
322
+    fi
309 323
 }
310 324
 
311 325
 
312 326
 # Service wrapper to stop services
313 327
 # stop_service service-name
314 328
 function stop_service() {
315
-    sudo /usr/sbin/service $1 stop
329
+    if [[ -z "$os_PACKAGE" ]]; then
330
+        GetOSVersion
331
+    fi
332
+    if [[ "$os_PACKAGE" = "deb" ]]; then
333
+        sudo /usr/sbin/service $1 stop
334
+    else
335
+        sudo /sbin/service $1 stop
336
+    fi
316 337
 }
317 338
 
318 339
 
... ...
@@ -32,6 +32,9 @@ GetOSVersion
32 32
 if [[ "$os_VENDOR" =~ (Ubuntu) ]]; then
33 33
     # 'Everyone' refers to Ubuntu releases by the code name adjective
34 34
     DISTRO=$os_CODENAME
35
+elif [[ "$os_VENDOR" =~ (Fedora) ]]; then
36
+    # For Fedora, just use 'f' and the release
37
+    DISTRO="f$os_RELEASE"
35 38
 else
36 39
     # Catch-all for now is Vendor + Release + Update
37 40
     DISTRO="$os_VENDOR-$os_RELEASE.$os_UPDATE"
... ...
@@ -72,7 +75,7 @@ if [[ ! -r $TOP_DIR/stackrc ]]; then
72 72
     echo "ERROR: missing $TOP_DIR/stackrc - did you grab more than just stack.sh?"
73 73
     exit 1
74 74
 fi
75
-source ./stackrc
75
+source $TOP_DIR/stackrc
76 76
 
77 77
 # Destination path for installation ``DEST``
78 78
 DEST=${DEST:-/opt/stack}
... ...
@@ -83,14 +86,21 @@ DEST=${DEST:-/opt/stack}
83 83
 
84 84
 # Warn users who aren't on an explicitly supported distro, but allow them to
85 85
 # override check and attempt installation with ``FORCE=yes ./stack``
86
-if [[ ! ${DISTRO} =~ (oneiric|precise) ]]; then
87
-    echo "WARNING: this script has only been tested on oneiric and precise"
86
+if [[ ! ${DISTRO} =~ (oneiric|precise|f16) ]]; then
87
+    echo "WARNING: this script has been tested on oneiric, precise and f16"
88 88
     if [[ "$FORCE" != "yes" ]]; then
89 89
         echo "If you wish to run this script anyway run with FORCE=yes"
90 90
         exit 1
91 91
     fi
92 92
 fi
93 93
 
94
+# Set the paths of certain binaries
95
+if [[ "$os_PACKAGE" = "deb" ]]; then
96
+    NOVA_ROOTWRAP=/usr/local/bin/nova-rootwrap
97
+else
98
+    NOVA_ROOTWRAP=/usr/bin/nova-rootwrap
99
+fi
100
+
94 101
 # stack.sh keeps the list of ``apt`` and ``pip`` dependencies in external
95 102
 # files, along with config templates and other useful files.  You can find these
96 103
 # in the ``files`` directory (next to this script).  We will reference this
... ...
@@ -122,11 +132,16 @@ if [[ $EUID -eq 0 ]]; then
122 122
 
123 123
     # since this script runs as a normal user, we need to give that user
124 124
     # ability to run sudo
125
-    dpkg -l sudo || apt_get update && install_package sudo
126
-
125
+    if [[ "$os_PACKAGE" = "deb" ]]; then
126
+        dpkg -l sudo || apt_get update && install_package sudo
127
+        STACK_GROUP=sudo
128
+    else
129
+        rpm -qa | grep sudo || install_package sudo
130
+        STACK_GROUP=wheel
131
+    fi
127 132
     if ! getent passwd stack >/dev/null; then
128 133
         echo "Creating a user called stack"
129
-        useradd -U -G sudo -s /bin/bash -d $DEST -m stack
134
+        useradd -U -G $STACK_GROUP -s /bin/bash -d $DEST -m stack
130 135
     fi
131 136
 
132 137
     echo "Giving stack user passwordless sudo priviledges"
... ...
@@ -148,7 +163,12 @@ if [[ $EUID -eq 0 ]]; then
148 148
     exit 1
149 149
 else
150 150
     # We're not root, make sure sudo is available
151
-    dpkg -l sudo || die "Sudo is required.  Re-run stack.sh as root ONE TIME ONLY to set up sudo."
151
+    if [[ "$os_PACKAGE" = "deb" ]]; then
152
+        CHECK_SUDO_CMD="dpkg -l sudo"
153
+    else
154
+        CHECK_SUDO_CMD="rpm -q sudo"
155
+    fi
156
+    $CHECK_SUDO_CMD || die "Sudo is required.  Re-run stack.sh as root ONE TIME ONLY to set up sudo."
152 157
 
153 158
     # UEC images /etc/sudoers does not have a '#includedir'. add one.
154 159
     sudo grep -q "^#includedir.*/etc/sudoers.d" /etc/sudoers ||
... ...
@@ -163,7 +183,7 @@ else
163 163
 
164 164
     # Set up the rootwrap sudoers
165 165
     TEMPFILE=`mktemp`
166
-    echo "$USER ALL=(root) NOPASSWD: /usr/local/bin/nova-rootwrap" >$TEMPFILE
166
+    echo "$USER ALL=(root) NOPASSWD: $NOVA_ROOTWRAP" >$TEMPFILE
167 167
     chmod 0440 $TEMPFILE
168 168
     sudo chown root:root $TEMPFILE
169 169
     sudo mv $TEMPFILE /etc/sudoers.d/nova-rootwrap
... ...
@@ -549,6 +569,8 @@ fi
549 549
 # - ``# NOPRIME`` defers installation to be performed later in stack.sh
550 550
 # - ``# dist:DISTRO`` or ``dist:DISTRO1,DISTRO2`` limits the selection
551 551
 #   of the package to the distros listed.  The distro names are case insensitive.
552
+#
553
+# get_packages dir
552 554
 function get_packages() {
553 555
     local package_dir=$1
554 556
     local file_to_parse
... ...
@@ -558,7 +580,8 @@ function get_packages() {
558 558
         echo "No package directory supplied"
559 559
         return 1
560 560
     fi
561
-    for service in general ${ENABLED_SERVICES//,/ }; do        # Allow individual services to specify dependencies
561
+    for service in general ${ENABLED_SERVICES//,/ }; do
562
+        # Allow individual services to specify dependencies
562 563
         if [[ -e ${package_dir}/${service} ]]; then
563 564
             file_to_parse="${file_to_parse} $service"
564 565
         fi
... ...
@@ -604,9 +627,13 @@ function get_packages() {
604 604
     done
605 605
 }
606 606
 
607
-# install apt requirements
608
-apt_get update
609
-install_package $(get_packages $FILES/apts)
607
+# install package requirements
608
+if [[ "$os_PACKAGE" = "deb" ]]; then
609
+    apt_get update
610
+    install_package $(get_packages $FILES/apts)
611
+else
612
+    install_package $(get_packages $FILES/rpms)
613
+fi
610 614
 
611 615
 # install python requirements
612 616
 pip_install $(get_packages $FILES/pips | sort -u)
... ...
@@ -722,6 +749,10 @@ if is_service_enabled rabbit; then
722 722
     install_package rabbitmq-server > "$tfile" 2>&1
723 723
     cat "$tfile"
724 724
     rm -f "$tfile"
725
+    if [[ "$os_PACKAGE" = "rpm" ]]; then
726
+        # RPM doesn't start the service
727
+        restart_service rabbitmq-server
728
+    fi
725 729
     # change the rabbit password since the default is "guest"
726 730
     sudo rabbitmqctl change_password guest $RABBIT_PASSWORD
727 731
 fi
... ...
@@ -732,13 +763,15 @@ fi
732 732
 
733 733
 if is_service_enabled mysql; then
734 734
 
735
-    # Seed configuration with mysql password so that apt-get install doesn't
736
-    # prompt us for a password upon install.
737
-    cat <<MYSQL_PRESEED | sudo debconf-set-selections
735
+    if [[ "$os_PACKAGE" = "deb" ]]; then
736
+        # Seed configuration with mysql password so that apt-get install doesn't
737
+        # prompt us for a password upon install.
738
+        cat <<MYSQL_PRESEED | sudo debconf-set-selections
738 739
 mysql-server-5.1 mysql-server/root_password password $MYSQL_PASSWORD
739 740
 mysql-server-5.1 mysql-server/root_password_again password $MYSQL_PASSWORD
740 741
 mysql-server-5.1 mysql-server/start_on_boot boolean true
741 742
 MYSQL_PRESEED
743
+    fi
742 744
 
743 745
     # while ``.my.cnf`` is not needed for openstack to function, it is useful
744 746
     # as it allows you to access the mysql databases via ``mysql nova`` instead
... ...
@@ -755,12 +788,25 @@ EOF
755 755
 
756 756
     # Install and start mysql-server
757 757
     install_package mysql-server
758
+    if [[ "$os_PACKAGE" = "rpm" ]]; then
759
+        # RPM doesn't start the service
760
+        start_service mysqld
761
+        # Set the root password - only works the first time
762
+        sudo mysqladmin -u root password $MYSQL_PASSWORD || true
763
+    fi
758 764
     # Update the DB to give user ‘$MYSQL_USER’@’%’ full control of the all databases:
759 765
     sudo mysql -uroot -p$MYSQL_PASSWORD -h127.0.0.1 -e "GRANT ALL PRIVILEGES ON *.* TO '$MYSQL_USER'@'%' identified by '$MYSQL_PASSWORD';"
760 766
 
761 767
     # Edit /etc/mysql/my.cnf to change ‘bind-address’ from localhost (127.0.0.1) to any (0.0.0.0) and restart the mysql service:
762
-    sudo sed -i 's/127.0.0.1/0.0.0.0/g' /etc/mysql/my.cnf
763
-    restart_service mysql
768
+    if [[ "$os_PACKAGE" = "deb" ]]; then
769
+        MY_CNF=/etc/mysql/my.cnf
770
+        MYSQL=mysql
771
+    else
772
+        MY_CNF=/etc/my.cnf
773
+        MYSQL=mysqld
774
+    fi
775
+    sudo sed -i 's/127.0.0.1/0.0.0.0/g' $MY_CNF
776
+    restart_service $MYSQL
764 777
 fi
765 778
 
766 779
 if [ -z "$SCREEN_HARDSTATUS" ]; then
... ...
@@ -820,10 +866,6 @@ screen -r stack -X hardstatus alwayslastline "$SCREEN_HARDSTATUS"
820 820
 
821 821
 if is_service_enabled horizon; then
822 822
 
823
-    # Install apache2, which is NOPRIME'd
824
-    install_package apache2 libapache2-mod-wsgi
825
-
826
-
827 823
     # Remove stale session database.
828 824
     rm -f $HORIZON_DIR/openstack_dashboard/local/dashboard_openstack.sqlite3
829 825
 
... ...
@@ -835,18 +877,38 @@ if is_service_enabled horizon; then
835 835
     # users).  The user system is external (keystone).
836 836
     cd $HORIZON_DIR
837 837
     python manage.py syncdb
838
+    cd $TOP_DIR
838 839
 
839 840
     # create an empty directory that apache uses as docroot
840 841
     sudo mkdir -p $HORIZON_DIR/.blackhole
841 842
 
842
-    ## Configure apache's 000-default to run horizon
843
-    sudo cp $FILES/000-default.template /etc/apache2/sites-enabled/000-default
844
-    sudo sed -e "
843
+    if [[ "$os_PACKAGE" = "deb" ]]; then
844
+        # Install apache2, which is NOPRIME'd
845
+        APACHE_NAME=apache2
846
+        APACHE_CONF=sites-available/horizon
847
+        install_package apache2 libapache2-mod-wsgi
848
+        # Clean up the old config name
849
+        sudo rm -f /etc/apache2/sites-enabled/000-default
850
+        # Be a good citizen and use the distro tools here
851
+        sudo touch /etc/$APACHE_NAME/$APACHE_CONF
852
+        sudo a2ensite horizon
853
+    else
854
+        # Install httpd, which is NOPRIME'd
855
+        APACHE_NAME=httpd
856
+        APACHE_CONF=conf.d/horizon.conf
857
+        sudo rm -f /etc/httpd/conf.d/000-*
858
+        install_package httpd mod_wsgi
859
+        sudo sed '/^Listen/s/^.*$/Listen 0.0.0.0:80/' -i /etc/httpd/conf/httpd.conf
860
+    fi
861
+    ## Configure apache to run horizon
862
+    sudo sh -c "sed -e \"
845 863
         s,%USER%,$APACHE_USER,g;
846 864
         s,%GROUP%,$APACHE_GROUP,g;
847 865
         s,%HORIZON_DIR%,$HORIZON_DIR,g;
848
-    " -i /etc/apache2/sites-enabled/000-default
849
-    restart_service apache2
866
+        s,%APACHE_NAME%,$APACHE_NAME,g;
867
+        s,%DEST%,$DEST,g;
868
+    \" $FILES/apache-horizon.template >/etc/$APACHE_NAME/$APACHE_CONF"
869
+    restart_service $APACHE_NAME
850 870
 fi
851 871
 
852 872
 
... ...
@@ -921,8 +983,13 @@ if is_service_enabled q-svc; then
921 921
     if [[ "$Q_PLUGIN" = "openvswitch" ]]; then
922 922
         # Install deps
923 923
         # FIXME add to files/apts/quantum, but don't install if not needed!
924
-        kernel_version=`cat /proc/version | cut -d " " -f3`
925
-        install_package openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
924
+        if [[ "$os_PACKAGE" = "deb" ]]; then
925
+            kernel_version=`cat /proc/version | cut -d " " -f3`
926
+            install_package openvswitch-switch openvswitch-datapath-dkms linux-headers-$kernel_version
927
+        else
928
+            ### FIXME(dtroyer): Find RPMs for OpenVSwitch
929
+            echo "OpenVSwitch packages need to be located"
930
+        fi
926 931
         # Create database for the plugin/agent
927 932
         if is_service_enabled mysql; then
928 933
             mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'DROP DATABASE IF EXISTS ovs_quantum;'
... ...
@@ -1044,7 +1111,12 @@ if is_service_enabled n-cpu; then
1044 1044
 
1045 1045
     # Virtualization Configuration
1046 1046
     # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1047
-    install_package libvirt-bin
1047
+    if [[ "$os_PACKAGE" = "deb" ]]; then
1048
+        LIBVIRT_PKG_NAME=libvirt-bin
1049
+    else
1050
+        LIBVIRT_PKG_NAME=libvirt
1051
+    fi
1052
+    install_package $LIBVIRT_PKG_NAME
1048 1053
 
1049 1054
     # Force IP forwarding on, just on case
1050 1055
     sudo sysctl -w net.ipv4.ip_forward=1
... ...
@@ -1067,27 +1139,50 @@ if is_service_enabled n-cpu; then
1067 1067
     # splitting a system into many smaller parts.  LXC uses cgroups and chroot
1068 1068
     # to simulate multiple systems.
1069 1069
     if [[ "$LIBVIRT_TYPE" == "lxc" ]]; then
1070
-        if [[ "$DISTRO" > natty ]]; then
1071
-            install_package cgroup-lite
1072
-        else
1073
-            cgline="none /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0"
1074
-            sudo mkdir -p /cgroup
1075
-            if ! grep -q cgroup /etc/fstab; then
1076
-                echo "$cgline" | sudo tee -a /etc/fstab
1077
-            fi
1078
-            if ! mount -n | grep -q cgroup; then
1079
-                sudo mount /cgroup
1070
+        if [[ "$os_PACKAGE" = "deb" ]]; then
1071
+            if [[ "$DISTRO" > natty ]]; then
1072
+                install_package cgroup-lite
1073
+            else
1074
+                cgline="none /cgroup cgroup cpuacct,memory,devices,cpu,freezer,blkio 0 0"
1075
+                sudo mkdir -p /cgroup
1076
+                if ! grep -q cgroup /etc/fstab; then
1077
+                    echo "$cgline" | sudo tee -a /etc/fstab
1078
+                fi
1079
+                if ! mount -n | grep -q cgroup; then
1080
+                    sudo mount /cgroup
1081
+                fi
1080 1082
             fi
1083
+        else
1084
+            ### FIXME(dtroyer): figure this out
1085
+            echo "RPM-based cgroup not implemented yet"
1086
+            yum_install libcgroup-tools
1081 1087
         fi
1082 1088
     fi
1083 1089
 
1090
+    if [[ "$os_PACKAGE" = "deb" ]]; then
1091
+        LIBVIRT_DAEMON=libvirt-bin
1092
+    else
1093
+        # http://wiki.libvirt.org/page/SSHPolicyKitSetup
1094
+        if ! grep ^libvirtd: /etc/group >/dev/null; then
1095
+            sudo groupadd libvirtd
1096
+        fi
1097
+        sudo bash -c 'cat <<EOF >/etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
1098
+[libvirt Management Access]
1099
+Identity=unix-group:libvirtd
1100
+Action=org.libvirt.unix.manage
1101
+ResultAny=yes
1102
+ResultInactive=yes
1103
+ResultActive=yes
1104
+EOF'
1105
+        LIBVIRT_DAEMON=libvirtd
1106
+    fi
1084 1107
     # The user that nova runs as needs to be member of libvirtd group otherwise
1085 1108
     # nova-compute will be unable to use libvirt.
1086 1109
     sudo usermod -a -G libvirtd `whoami`
1087 1110
     # libvirt detects various settings on startup, as we potentially changed
1088 1111
     # the system configuration (modules, filesystems), we need to restart
1089 1112
     # libvirt to detect those changes.
1090
-    restart_service libvirt-bin
1113
+    restart_service $LIBVIRT_DAEMON
1091 1114
 
1092 1115
 
1093 1116
     # Instance Storage
... ...
@@ -1202,7 +1297,11 @@ if is_service_enabled swift; then
1202 1202
         s/%USER%/$USER/;
1203 1203
         s,%SWIFT_DATA_DIR%,$SWIFT_DATA_DIR,;
1204 1204
     " $FILES/swift/rsyncd.conf | sudo tee /etc/rsyncd.conf
1205
-   sudo sed -i '/^RSYNC_ENABLE=false/ { s/false/true/ }' /etc/default/rsync
1205
+    if [[ "$os_PACKAGE" = "deb" ]]; then
1206
+        sudo sed -i '/^RSYNC_ENABLE=false/ { s/false/true/ }' /etc/default/rsync
1207
+    else
1208
+        sudo sed -i '/disable *= *yes/ { s/yes/no/ }' /etc/xinetd.d/rsync
1209
+    fi
1206 1210
 
1207 1211
    # By default Swift will be installed with the tempauth middleware
1208 1212
    # which has some default username and password if you have
... ...
@@ -1267,10 +1366,10 @@ if is_service_enabled swift; then
1267 1267
    swift_log_dir=${SWIFT_DATA_DIR}/logs
1268 1268
    rm -rf ${swift_log_dir}
1269 1269
    mkdir -p ${swift_log_dir}/hourly
1270
-   sudo chown -R syslog:adm ${swift_log_dir}
1270
+   sudo chown -R $USER:adm ${swift_log_dir}
1271 1271
    sed "s,%SWIFT_LOGDIR%,${swift_log_dir}," $FILES/swift/rsyslog.conf | sudo \
1272 1272
        tee /etc/rsyslog.d/10-swift.conf
1273
-   sudo restart rsyslog
1273
+   restart_service rsyslog
1274 1274
 
1275 1275
    # This is where we create three different rings for swift with
1276 1276
    # different object servers binding on different ports.
... ...
@@ -1304,10 +1403,12 @@ if is_service_enabled swift; then
1304 1304
 
1305 1305
    } && popd >/dev/null
1306 1306
 
1307
-   sudo chmod +x /usr/local/bin/swift-*
1308
-
1309 1307
    # We then can start rsync.
1310
-   sudo /etc/init.d/rsync restart || :
1308
+    if [[ "$os_PACKAGE" = "deb" ]]; then
1309
+        sudo /etc/init.d/rsync restart || :
1310
+    else
1311
+        sudo systemctl start xinetd.service
1312
+    fi
1311 1313
 
1312 1314
    # First spawn all the swift services then kill the
1313 1315
    # proxy service so we can run it in foreground in screen.
... ...
@@ -1332,9 +1433,6 @@ if is_service_enabled n-vol; then
1332 1332
     #
1333 1333
     # By default, the backing file is 2G in size, and is stored in /opt/stack.
1334 1334
 
1335
-    # install the package
1336
-    install_package tgt
1337
-
1338 1335
     if ! sudo vgs $VOLUME_GROUP; then
1339 1336
         VOLUME_BACKING_FILE=${VOLUME_BACKING_FILE:-$DEST/nova-volumes-backing-file}
1340 1337
         VOLUME_BACKING_FILE_SIZE=${VOLUME_BACKING_FILE_SIZE:-2052M}
... ...
@@ -1357,10 +1455,15 @@ if is_service_enabled n-vol; then
1357 1357
         done
1358 1358
     fi
1359 1359
 
1360
-    # tgt in oneiric doesn't restart properly if tgtd isn't running
1361
-    # do it in two steps
1362
-    sudo stop tgt || true
1363
-    sudo start tgt
1360
+    if [[ "$os_PACKAGE" = "deb" ]]; then
1361
+        # tgt in oneiric doesn't restart properly if tgtd isn't running
1362
+        # do it in two steps
1363
+        sudo stop tgt || true
1364
+        sudo start tgt
1365
+    else
1366
+        # bypass redirection to systemctl during restart
1367
+        sudo /sbin/service --skip-redirect tgtd restart
1368
+    fi
1364 1369
 fi
1365 1370
 
1366 1371
 NOVA_CONF=nova.conf
... ...
@@ -1377,7 +1480,7 @@ add_nova_opt "[DEFAULT]"
1377 1377
 add_nova_opt "verbose=True"
1378 1378
 add_nova_opt "auth_strategy=keystone"
1379 1379
 add_nova_opt "allow_resize_to_same_host=True"
1380
-add_nova_opt "root_helper=sudo /usr/local/bin/nova-rootwrap"
1380
+add_nova_opt "root_helper=sudo $NOVA_ROOTWRAP"
1381 1381
 add_nova_opt "compute_scheduler_driver=$SCHEDULER"
1382 1382
 add_nova_opt "dhcpbridge_flagfile=$NOVA_CONF_DIR/$NOVA_CONF"
1383 1383
 add_nova_opt "fixed_range=$FIXED_RANGE"
... ...
@@ -1661,7 +1764,7 @@ screen_it n-sch "cd $NOVA_DIR && $NOVA_DIR/bin/nova-scheduler"
1661 1661
 screen_it n-novnc "cd $NOVNC_DIR && ./utils/nova-novncproxy --config-file $NOVA_CONF_DIR/$NOVA_CONF --web ."
1662 1662
 screen_it n-xvnc "cd $NOVA_DIR && ./bin/nova-xvpvncproxy --config-file $NOVA_CONF_DIR/$NOVA_CONF"
1663 1663
 screen_it n-cauth "cd $NOVA_DIR && ./bin/nova-consoleauth"
1664
-screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/apache2/error.log"
1664
+screen_it horizon "cd $HORIZON_DIR && sudo tail -f /var/log/$APACHE_NAME/horizon_error.log"
1665 1665
 screen_it swift "cd $SWIFT_DIR && $SWIFT_DIR/bin/swift-proxy-server ${SWIFT_CONFIG_DIR}/proxy-server.conf -v"
1666 1666
 
1667 1667
 # Starting the nova-objectstore only if swift service is not enabled.
... ...
@@ -49,7 +49,7 @@ if is_service_enabled n-vol; then
49 49
         echo "iSCSI target cleanup needed:"
50 50
         echo "$TARGETS"
51 51
     fi
52
-    sudo stop tgt
52
+    stop_service tgt
53 53
 fi
54 54
 
55 55
 if [[ -n "$UNSTACK_ALL" ]]; then