Browse code

Use the pip installed version of requests with Fedora

The upstream version of requests contains a copy
of urllib3 and cardet library, common practice in many distros
to create symbolic links for these libraries instead of creating
a huge package which contains the same library as the distro provides
as separate package as well.

Now devstack upgrades the urllib3 to incompatible version,
but it leaves the requests unchanged because Fedora already has the
latest version.
The issue does not happens with Ubuntu because it has older requests
and devstack updates it as well.
The pip installed version contains a bundled urllib3 and the actually
installed urllib3 version does not matters.

This is not the `usual` distro package overrides pip installed package
case.

Change-Id: Icfa71368384b0c2e3ff39265b2fa9190b5566b9b
Related-Bug: #1476770

Attila Fazekas authored on 2015/09/01 22:18:57
Showing 1 changed files
... ...
@@ -134,6 +134,31 @@ if is_fedora; then
134 134
             sudo systemctl start iptables
135 135
         fi
136 136
     fi
137
+
138
+    if  [[ "$os_RELEASE" -ge "21" ]]; then
139
+        # requests ships vendored version of chardet/urllib3, but on
140
+        # fedora these are symlinked back to the primary versions to
141
+        # avoid duplication of code on disk.  This is fine when
142
+        # maintainers keep things in sync, but since devstack takes
143
+        # over and installs later versions via pip we can end up with
144
+        # incompatible versions.
145
+        #
146
+        # The rpm package is not removed to preserve the dependent
147
+        # packages like cloud-init; rather we remove the symlinks and
148
+        # force a re-install of requests so the vendored versions it
149
+        # wants are present.
150
+        #
151
+        # Realted issues:
152
+        # https://bugs.launchpad.net/glance/+bug/1476770
153
+        # https://bugzilla.redhat.com/show_bug.cgi?id=1253823
154
+
155
+        base_path=/usr/lib/python2.7/site-packages/requests/packages
156
+        if [ -L $base_path/chardet -o -L $base_path/urllib3 ]; then
157
+            sudo rm -f /usr/lib/python2.7/site-packages/requests/packages/{chardet,urllib3}
158
+            # install requests with the bundled urllib3 to avoid conflicts
159
+            pip_install --upgrade --force-reinstall requests
160
+        fi
161
+    fi
137 162
 fi
138 163
 
139 164
 # The version of pip(1.5.4) supported by python-virtualenv(1.11.4) has