Browse code

Remove rhel6 and py26 support

el6 is shipped with Python 2.6.x which is not expected
to be supported with the openstack kilo release.

For el6 support we need to do lot of thing differently,
which makes the code more complicated.

This change removes el6 and py26 support from devstack.

This change also removed a discontinued (1 year ago)
openSUSE 12.2 code path, which used a similar codepath as el6.

Several comment related to el6 also removed or modified.

Change-Id: Iea0b0c98a5e11fd85bb5e93c099f740fe05d2f3a

Attila Fazekas authored on 2015/01/27 00:39:57
Showing 18 changed files
... ...
@@ -24,7 +24,7 @@ Q: Then why selinux in enforcing mode?
24 24
     by packaging in "real" deployments. To remove additional protections
25 25
     that will be desired/required in production would be a step
26 26
     backward.
27
-Q: But selinux is disabled in RHEL 6!
27
+Q: But selinux is disabled in RHEL!
28 28
     A: Today it is, yes. That is a specific exception that certain
29 29
     DevStack contributors fought strongly against. The primary reason it
30 30
     was allowed was to support using RHEL6 as the Python 2.6 test
... ...
@@ -70,11 +70,6 @@ Q: What about Fedora/RHEL/CentOS?
70 70
 Q: Are there any differences between Ubuntu and Fedora support?
71 71
     A: Neutron is not fully supported prior to Fedora 18 due lack of
72 72
     OpenVSwitch packages.
73
-Q: How about RHEL 6?
74
-    A: RHEL 6 has Python 2.6 and many old modules packaged and is a
75
-    challenge to support. There are a number of specific RHEL6
76
-    work-arounds in ``stack.sh`` to handle this. But the testing on py26
77
-    is valuable so we do it...
78 73
 
79 74
 Operation and Configuration
80 75
 ===========================
... ...
@@ -32,7 +32,3 @@ Listen %ADMINPORT%
32 32
     %SSLCERTFILE%
33 33
     %SSLKEYFILE%
34 34
 </VirtualHost>
35
-
36
-# Workaround for missing path on RHEL6, see
37
-#  https://bugzilla.redhat.com/show_bug.cgi?id=1121019
38
-WSGISocketPrefix /var/run/%APACHE_NAME%
39 35
deleted file mode 100644
... ...
@@ -1,16 +0,0 @@
1
-diff -r b2efb7df637b discover.py
2
-+++ b/discover.py	Thu Nov 28 12:02:19 2013 +0000
3
-@@ -82,7 +82,11 @@
4
-     """
5
-     testMethodPrefix = 'test'
6
-     sortTestMethodsUsing = cmp
7
--    suiteClass = unittest.TestSuite
8
-+    try:
9
-+        import unittest2
10
-+        suiteClass = unittest2.TestSuite
11
-+    except ImportError:
12
-+        suiteClass = unittest.TestSuite
13
-     _top_level_dir = None
14
- 
15
-     def loadTestsFromTestCase(self, testCaseClass):
... ...
@@ -3,4 +3,4 @@ scsi-target-utils
3 3
 qemu-img
4 4
 postgresql-devel
5 5
 iscsi-initiator-utils
6
-python-lxml         #dist:f19,f20,f21,rhel7
6
+python-lxml
... ...
@@ -13,7 +13,6 @@ libxml2-devel
13 13
 libxslt-devel
14 14
 psmisc
15 15
 pylint
16
-python-prettytable # dist:rhel6 [1]
17 16
 python-unittest2
18 17
 python-virtualenv
19 18
 python-devel
... ...
@@ -27,8 +26,3 @@ bc
27 27
 libyaml-devel
28 28
 gettext  # used for compiling message catalogs
29 29
 net-tools
30
-
31
-# [1] : some of installed tools have unversioned dependencies on this,
32
-# but others have versioned (<=0.7).  So if a later version (0.7.1)
33
-# gets installed in response to an unversioned dependency, it breaks.
34
-# This pre-installs a compatible 0.6(ish) version from RHEL
... ...
@@ -6,8 +6,8 @@ postgresql-devel    # testonly
6 6
 python-argparse
7 7
 python-eventlet
8 8
 python-greenlet
9
-python-lxml         #dist:f19,f20,f21,rhel7
10
-python-paste-deploy #dist:f19,f20,f21,rhel7
9
+python-lxml
10
+python-paste-deploy
11 11
 python-routes
12 12
 python-sqlalchemy
13 13
 pyxattr
... ...
@@ -12,8 +12,8 @@ python-httplib2
12 12
 python-migrate
13 13
 python-mox
14 14
 python-nose
15
-python-paste        #dist:f19,f20,f21
16
-python-paste-deploy #dist:f19,f20,f21
15
+python-paste
16
+python-paste-deploy
17 17
 python-routes
18 18
 python-sqlalchemy
19 19
 python-webob
... ...
@@ -1,10 +1,10 @@
1 1
 MySQL-python
2 2
 python-greenlet
3
-libxslt-devel       # dist:f20,f21
4
-python-lxml         #dist:f19,f20,f21
5
-python-paste        #dist:f19,f20,f21
6
-python-paste-deploy #dist:f19,f20,f21
7
-python-paste-script #dist:f19,f20,f21
3
+libxslt-devel
4
+python-lxml
5
+python-paste
6
+python-paste-deploy
7
+python-paste-script
8 8
 python-routes
9 9
 python-sqlalchemy
10 10
 python-webob
... ...
@@ -12,9 +12,8 @@ openvswitch # NOPRIME
12 12
 python-eventlet
13 13
 python-greenlet
14 14
 python-iso8601
15
-#rhel6 gets via pip
16
-python-paste        # dist:f19,f20,f21,rhel7
17
-python-paste-deploy # dist:f19,f20,f21,rhel7
15
+python-paste
16
+python-paste-deploy
18 17
 python-qpid # NOPRIME
19 18
 python-routes
20 19
 python-sqlalchemy
... ...
@@ -29,11 +29,9 @@ python-iso8601
29 29
 python-lockfile
30 30
 python-migrate
31 31
 python-mox
32
-python-paramiko # dist:f19,f20,f21,rhel7
33
-# ^ on RHEL6, brings in python-crypto which conflicts with version from
34
-# pip we need
35
-python-paste        # dist:f19,f20,f21,rhel7
36
-python-paste-deploy # dist:f19,f20,f21,rhel7
32
+python-paramiko
33
+python-paste
34
+python-paste-deploy
37 35
 python-qpid # NOPRIME
38 36
 python-routes
39 37
 python-sqlalchemy
... ...
@@ -6,7 +6,7 @@ python-eventlet
6 6
 python-greenlet
7 7
 python-netifaces
8 8
 python-nose
9
-python-paste-deploy # dist:f19,f20,f21,rhel7
9
+python-paste-deploy
10 10
 python-simplejson
11 11
 python-webob
12 12
 pyxattr
... ...
@@ -303,18 +303,6 @@ function configure_cinder {
303 303
         configure_cinder_driver
304 304
     fi
305 305
 
306
-    if is_fedora && [[ $DISTRO =~ (rhel6) ]]; then
307
-        # Cinder clones are slightly larger due to some extra
308
-        # metadata.  RHEL6 will not allow auto-extending of LV's
309
-        # without this, leading to clones giving hard-to-track disk
310
-        # I/O errors.
311
-        # see https://bugzilla.redhat.com/show_bug.cgi?id=975052
312
-        sudo sed -i~ \
313
-            -e 's/snapshot_autoextend_threshold =.*/snapshot_autoextend_threshold = 80/' \
314
-            -e 's/snapshot_autoextend_percent =.*/snapshot_autoextend_percent = 20/' \
315
-            /etc/lvm/lvm.conf
316
-    fi
317
-
318 306
     iniset $CINDER_CONF DEFAULT osapi_volume_workers "$API_WORKERS"
319 307
 
320 308
     iniset $CINDER_CONF DEFAULT glance_api_servers "${GLANCE_SERVICE_PROTOCOL}://${GLANCE_HOSTPORT}"
... ...
@@ -446,12 +434,8 @@ function start_cinder {
446 446
         if is_ubuntu; then
447 447
             sudo service tgt restart
448 448
         elif is_fedora; then
449
-            if [[ $DISTRO =~ (rhel6) ]]; then
450
-                sudo /sbin/service tgtd restart
451
-            else
452
-                # bypass redirection to systemctl during restart
453
-                sudo /sbin/service --skip-redirect tgtd restart
454
-            fi
449
+            # bypass redirection to systemctl during restart
450
+            sudo /sbin/service --skip-redirect tgtd restart
455 451
         elif is_suse; then
456 452
             restart_service tgtd
457 453
         else
... ...
@@ -17,11 +17,7 @@ register_database mysql
17 17
 # Linux distros, thank you for being incredibly consistent
18 18
 MYSQL=mysql
19 19
 if is_fedora; then
20
-    if [[ $DISTRO =~ (rhel6) ]]; then
21
-        MYSQL=mysqld
22
-    else
23
-        MYSQL=mariadb
24
-    fi
20
+    MYSQL=mariadb
25 21
 fi
26 22
 
27 23
 # Functions
... ...
@@ -38,15 +34,9 @@ function cleanup_database_mysql {
38 38
         sudo rm -rf /etc/mysql
39 39
         return
40 40
     elif is_fedora; then
41
-        if [[ $DISTRO =~ (rhel6) ]]; then
42
-            stop_service mysqld
43
-            uninstall_package mysql-server
44
-            sudo rm -rf /var/lib/mysql
45
-        else
46
-            stop_service mariadb
47
-            uninstall_package mariadb-server
48
-            sudo rm -rf /var/lib/mysql
49
-        fi
41
+        stop_service mariadb
42
+        uninstall_package mariadb-server
43
+        sudo rm -rf /var/lib/mysql
50 44
     elif is_suse; then
51 45
         stop_service mysql
52 46
         uninstall_package mysql-community-server
... ...
@@ -70,11 +60,7 @@ function configure_database_mysql {
70 70
         my_conf=/etc/mysql/my.cnf
71 71
         mysql=mysql
72 72
     elif is_fedora; then
73
-        if [[ $DISTRO =~ (rhel6) ]]; then
74
-            mysql=mysqld
75
-        else
76
-            mysql=mariadb
77
-        fi
73
+        mysql=mariadb
78 74
         my_conf=/etc/my.cnf
79 75
     elif is_suse; then
80 76
         my_conf=/etc/my.cnf
... ...
@@ -110,7 +96,7 @@ function configure_database_mysql {
110 110
 
111 111
     if [[ "$DATABASE_QUERY_LOGGING" == "True" ]]; then
112 112
         echo_summary "Enabling MySQL query logging"
113
-        if is_fedora && ! [[ $DISTRO =~ (rhel6) ]]; then
113
+        if is_fedora; then
114 114
             slow_log=/var/log/mariadb/mariadb-slow.log
115 115
         else
116 116
             slow_log=/var/log/mysql/mysql-slow.log
... ...
@@ -158,11 +144,7 @@ EOF
158 158
     fi
159 159
     # Install mysql-server
160 160
     if is_fedora; then
161
-        if [[ $DISTRO =~ (rhel6) ]]; then
162
-            install_package mysql-server
163
-        else
164
-            install_package mariadb-server
165
-        fi
161
+        install_package mariadb-server
166 162
     elif is_ubuntu; then
167 163
         install_package mysql-server
168 164
     elif is_suse; then
... ...
@@ -49,11 +49,7 @@ function configure_database_postgresql {
49 49
         pg_hba=/var/lib/pgsql/data/pg_hba.conf
50 50
         pg_conf=/var/lib/pgsql/data/postgresql.conf
51 51
         if ! sudo [ -e $pg_hba ]; then
52
-            if ! [[ $DISTRO =~ (rhel6) ]]; then
53
-                sudo postgresql-setup initdb
54
-            else
55
-                sudo service postgresql initdb
56
-            fi
52
+            sudo postgresql-setup initdb
57 53
         fi
58 54
     elif is_ubuntu; then
59 55
         pg_dir=`find /etc/postgresql -name pg_hba.conf|xargs dirname`
... ...
@@ -72,14 +72,6 @@ function _horizon_config_set {
72 72
 # cleanup_horizon() - Remove residual data files, anything left over from previous
73 73
 # runs that a clean run would need to clean up
74 74
 function cleanup_horizon {
75
-    if is_fedora && [[ $DISTRO =~ (rhel6) ]]; then
76
-        # If ``/usr/bin/node`` points into ``$DEST``
77
-        # we installed it via ``install_nodejs``
78
-        if [[ $(readlink -f /usr/bin/node) =~ ($DEST) ]]; then
79
-            sudo rm /usr/bin/node
80
-        fi
81
-    fi
82
-
83 75
     local horizon_conf=$(apache_site_config_for horizon)
84 76
     sudo rm -f $horizon_conf
85 77
 }
... ...
@@ -37,8 +37,7 @@ function install_libvirt {
37 37
 
38 38
     # Note there is a difference between F20 rackspace cloud images
39 39
     # and HP images used in the gate; rackspace has firewalld but hp
40
-    # cloud doesn't.  RHEL6 doesn't have firewalld either.  So we
41
-    # don't care if it fails.
40
+    # cloud doesn't.
42 41
     if is_fedora && is_package_installed firewalld; then
43 42
         sudo service firewalld restart || true
44 43
     fi
... ...
@@ -68,34 +67,12 @@ EOF
68 68
     fi
69 69
 
70 70
     if is_fedora || is_suse; then
71
-        if is_fedora && [[ $DISTRO =~ (rhel6) || "$os_RELEASE" -le "17" ]]; then
72
-            cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
73
-[libvirt Management Access]
74
-Identity=unix-group:$LIBVIRT_GROUP
75
-Action=org.libvirt.unix.manage
76
-ResultAny=yes
77
-ResultInactive=yes
78
-ResultActive=yes
79
-EOF
80
-        elif is_suse && [[ $os_RELEASE = 12.2 || "$os_VENDOR" = "SUSE LINUX" ]]; then
81
-            # openSUSE < 12.3 or SLE
82
-            # Work around the fact that polkit-default-privs overrules pklas
83
-            # with 'unix-group:$group'.
84
-            cat <<EOF | sudo tee /etc/polkit-1/localauthority/50-local.d/50-libvirt-remote-access.pkla
85
-[libvirt Management Access]
86
-Identity=unix-user:$STACK_USER
87
-Action=org.libvirt.unix.manage
88
-ResultAny=yes
89
-ResultInactive=yes
90
-ResultActive=yes
91
-EOF
92
-        else
93
-            # Starting with fedora 18 and opensuse-12.3 enable stack-user to
94
-            # virsh -c qemu:///system by creating a policy-kit rule for
95
-            # stack-user using the new Javascript syntax
96
-            rules_dir=/etc/polkit-1/rules.d
97
-            sudo mkdir -p $rules_dir
98
-            cat <<EOF | sudo tee $rules_dir/50-libvirt-$STACK_USER.rules
71
+        # Starting with fedora 18 and opensuse-12.3 enable stack-user to
72
+        # virsh -c qemu:///system by creating a policy-kit rule for
73
+        # stack-user using the new Javascript syntax
74
+        rules_dir=/etc/polkit-1/rules.d
75
+        sudo mkdir -p $rules_dir
76
+        cat <<EOF | sudo tee $rules_dir/50-libvirt-$STACK_USER.rules
99 77
 polkit.addRule(function(action, subject) {
100 78
     if (action.id == 'org.libvirt.unix.manage' &&
101 79
         subject.user == '$STACK_USER') {
... ...
@@ -103,8 +80,7 @@ polkit.addRule(function(action, subject) {
103 103
     }
104 104
 });
105 105
 EOF
106
-            unset rules_dir
107
-        fi
106
+        unset rules_dir
108 107
     fi
109 108
 
110 109
     # The user that nova runs as needs to be member of **libvirtd** group otherwise
... ...
@@ -152,7 +152,7 @@ source $TOP_DIR/stackrc
152 152
 
153 153
 # Warn users who aren't on an explicitly supported distro, but allow them to
154 154
 # override check and attempt installation with ``FORCE=yes ./stack``
155
-if [[ ! ${DISTRO} =~ (precise|trusty|7.0|wheezy|sid|testing|jessie|f20|f21|rhel6|rhel7) ]]; then
155
+if [[ ! ${DISTRO} =~ (precise|trusty|7.0|wheezy|sid|testing|jessie|f20|f21|rhel7) ]]; then
156 156
     echo "WARNING: this script has not been tested on $DISTRO"
157 157
     if [[ "$FORCE" != "yes" ]]; then
158 158
         die $LINENO "If you wish to run this script anyway run with FORCE=yes"
... ...
@@ -221,7 +221,7 @@ fi
221 221
 # Some distros need to add repos beyond the defaults provided by the vendor
222 222
 # to pick up required packages.
223 223
 
224
-if is_fedora && [[ $DISTRO == "rhel6" || $DISTRO == "rhel7" ]]; then
224
+if is_fedora && [[ $DISTRO == "rhel7" ]]; then
225 225
     # RHEL requires EPEL for many Open Stack dependencies
226 226
 
227 227
     # note we always remove and install latest -- some environments
... ...
@@ -239,16 +239,10 @@ if is_fedora && [[ $DISTRO == "rhel6" || $DISTRO == "rhel7" ]]; then
239 239
     # $releasever directly in .repo file we create below.  However
240 240
     # RHEL gives a $releasever of "6Server" which breaks the path;
241 241
     # see https://bugzilla.redhat.com/show_bug.cgi?id=1150759
242
-    if [[ $DISTRO == "rhel7" ]]; then
243
-        epel_ver="7"
244
-    elif [[ $DISTRO == "rhel6" ]]; then
245
-        epel_ver="6"
246
-    fi
247
-
248 242
     cat <<EOF | sudo tee /etc/yum.repos.d/epel-bootstrap.repo
249 243
 [epel-bootstrap]
250 244
 name=Bootstrap EPEL
251
-mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-$epel_ver&arch=\$basearch
245
+mirrorlist=http://mirrors.fedoraproject.org/mirrorlist?repo=epel-7&arch=\$basearch
252 246
 failovermethod=priority
253 247
 enabled=0
254 248
 gpgcheck=0
... ...
@@ -261,22 +255,10 @@ EOF
261 261
 
262 262
     # ... and also optional to be enabled
263 263
     is_package_installed yum-utils || install_package yum-utils
264
-    if [[ $DISTRO == "rhel7" ]]; then
265
-        OPTIONAL_REPO=rhel-7-server-optional-rpms
266
-    elif [[ $DISTRO == "rhel6" ]]; then
267
-        OPTIONAL_REPO=rhel-6-server-optional-rpms
268
-    fi
269
-    sudo yum-config-manager --enable ${OPTIONAL_REPO}
270
-
271
-    # Installing Open vSwitch on RHEL requires enabling the RDO repo.
272
-    # Note no juno packages for rhel6
273
-    if [[ $DISTRO == "rhel6" ]]; then
274
-        RHEL_RDO_REPO_RPM=${RHEL6_RDO_REPO_RPM:-"https://repos.fedorapeople.org/repos/openstack/openstack-icehouse/rdo-release-icehouse-4.noarch.rpm"}
275
-        RHEL_RDO_REPO_ID=${RHEL6_RDO_REPO_ID:-"openstack-icehouse"}
276
-    elif [[ $DISTRO == "rhel7" ]]; then
277
-        RHEL_RDO_REPO_RPM=${RHEL7_RDO_REPO_RPM:-"https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm"}
278
-        RHEL_RDO_REPO_ID=${RHEL7_RDO_REPO_ID:-"openstack-juno"}
279
-    fi
264
+    sudo yum-config-manager --enable rhel-7-server-optional-rpms
265
+
266
+    RHEL_RDO_REPO_RPM=${RHEL7_RDO_REPO_RPM:-"https://repos.fedorapeople.org/repos/openstack/openstack-juno/rdo-release-juno-1.noarch.rpm"}
267
+    RHEL_RDO_REPO_ID=${RHEL7_RDO_REPO_ID:-"openstack-juno"}
280 268
 
281 269
     if ! sudo yum repolist enabled $RHEL_RDO_REPO_ID | grep -q $RHEL_RDO_REPO_ID; then
282 270
         echo "RDO repo not detected; installing"
... ...
@@ -362,12 +344,6 @@ function echo_nolog {
362 362
     echo $@ >&3
363 363
 }
364 364
 
365
-if is_fedora && [ $DISTRO == "rhel6" ]; then
366
-    # poor old python2.6 doesn't have argparse by default, which
367
-    # outfilter.py uses
368
-    is_package_installed python-argparse || install_package python-argparse
369
-fi
370
-
371 365
 # Set up logging for ``stack.sh``
372 366
 # Set ``LOGFILE`` to turn on logging
373 367
 # Append '.xxxxxxxx' to the given name to maintain history
... ...
@@ -12,12 +12,10 @@
12 12
 # - httplib2 0.8 permissions are 600 in the package and
13 13
 #   pip 1.4 doesn't fix it (1.3 did)
14 14
 #
15
-# - RHEL6:
16
-#
15
+# - Fedora:
17 16
 #   - set selinux not enforcing
18
-#   - (re)start messagebus daemon
19
-#   - remove distro packages python-crypto and python-lxml
20
-#   - pre-install hgtools to work around a bug in RHEL6 distribute
17
+#   - uninstall firewalld (f20 only)
18
+
21 19
 
22 20
 # If TOP_DIR is set we're being sourced rather than running stand-alone
23 21
 # or in a sub-shell
... ...
@@ -125,64 +123,3 @@ if is_fedora; then
125 125
     fi
126 126
 
127 127
 fi
128
-
129
-# RHEL6
130
-# -----
131
-
132
-if [[ $DISTRO =~ (rhel6) ]]; then
133
-
134
-    # install_pip.sh installs the latest setuptools over the packaged
135
-    # version.  We can't really uninstall the packaged version if it
136
-    # is there, because it may remove other important things like
137
-    # cloud-init.  Things work, but there can be an old egg file left
138
-    # around from the package that causes some really strange
139
-    # setuptools errors.  Remove it, if it is there
140
-    sudo rm -f /usr/lib/python2.6/site-packages/setuptools-0.6*.egg-info
141
-
142
-    # If the ``dbus`` package was installed by DevStack dependencies the
143
-    # uuid may not be generated because the service was never started (PR#598200),
144
-    # causing Nova to stop later on complaining that ``/var/lib/dbus/machine-id``
145
-    # does not exist.
146
-    sudo service messagebus restart
147
-
148
-    # The following workarounds break xenserver
149
-    if [ "$VIRT_DRIVER" != 'xenserver' ]; then
150
-        # An old version of ``python-crypto`` (2.0.1) may be installed on a
151
-        # fresh system via Anaconda and the dependency chain
152
-        # ``cas`` -> ``python-paramiko`` -> ``python-crypto``.
153
-        # ``pip uninstall pycrypto`` will remove the packaged ``.egg-info``
154
-        # file but leave most of the actual library files behind in
155
-        # ``/usr/lib64/python2.6/Crypto``. Later ``pip install pycrypto``
156
-        # will install over the packaged files resulting
157
-        # in a useless mess of old, rpm-packaged files and pip-installed files.
158
-        # Remove the package so that ``pip install python-crypto`` installs
159
-        # cleanly.
160
-        # Note: other RPM packages may require ``python-crypto`` as well.
161
-        # For example, RHEL6 does not install ``python-paramiko packages``.
162
-        uninstall_package python-crypto
163
-
164
-        # A similar situation occurs with ``python-lxml``, which is required by
165
-        # ``ipa-client``, an auditing package we don't care about.  The
166
-        # build-dependencies needed for ``pip install lxml`` (``gcc``,
167
-        # ``libxml2-dev`` and ``libxslt-dev``) are present in
168
-        # ``files/rpms/general``.
169
-        uninstall_package python-lxml
170
-    fi
171
-
172
-    # ``setup.py`` contains a ``setup_requires`` package that is supposed
173
-    # to be transient.  However, RHEL6 distribute has a bug where
174
-    # ``setup_requires`` registers entry points that are not cleaned
175
-    # out properly after the setup-phase resulting in installation failures
176
-    # (bz#924038).  Pre-install the problem package so the ``setup_requires``
177
-    # dependency is satisfied and it will not be installed transiently.
178
-    # Note we do this before the track-depends in ``stack.sh``.
179
-    pip_install hgtools
180
-
181
-    # workaround for https://code.google.com/p/unittest-ext/issues/detail?id=79
182
-    install_package python-unittest2 patch
183
-    pip_install discover
184
-    (cd /usr/lib/python2.6/site-packages/; sudo patch <"$FILES/patches/unittest2-discover.patch" || echo 'Assume already applied')
185
-    # Make sure the discover.pyc is up to date
186
-    sudo rm /usr/lib/python2.6/site-packages/discover.pyc || true
187
-    sudo python -c 'import discover'
188
-fi