This blogpost is not intended to give step by step instructions for installing OpenStack Swift All In One (SAIO) on a single node, but if you are looking for that, please refer to http://docs.openstack.org/developer/swift/development_saio.html [1] which provides sufficient information for a successful setup (might also provide you reasons to visit this blogpost back! :) )
This blogpost lists the potential errors along with their fixes, during SAIO setup on an Ubuntu 14.04 LTS server, while following the instructions from [1]. Issues and fixes are categorized in that order.
Getting the code/ build a development installation of Swift:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ sudo pip install –r requirements.txt | |
Error: | |
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main | |
status = self.run(options, args) | |
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 262, in run | |
for req in parse_requirements(filename, finder=finder, options=options, session=session): | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1632, in parse_requirements | |
req = InstallRequirement.from_line(line, comes_from, prereleases=getattr(options, "pre", None)) | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 173, in from_line | |
return cls(req, comes_from, url=url, prereleases=prereleases) | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 71, in __init__ | |
req = pkg_resources.Requirement.parse(req) | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2667, in parse | |
reqs = list(parse_requirements(s)) | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2605, in parse_requirements | |
line, p, specs = scan_list(VERSION,LINE_END,line,p,(1,2),"version spec") | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2583, in scan_list | |
"Expected ',' or end-of-list in",line,"at",line[p:] | |
ValueError: ("Expected ',' or end-of-list in", "dnspython>=1.12.0;python_version<'3.0'", 'at', ";python_version<'3.0'") Storing debug log for failure in /home/stack/.pip/pip.log | |
Fix: Possible cause: older pip version; uninstall pip and install from http://pip.readthedocs.org/en/stable/installing/ | |
$ sudo apt-get purge python-pip | |
$ wget https://bootstrap.pypa.io/get-pip.py | |
$ sudo python get-pip.py |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Error: | |
File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 122, in main | |
status = self.run(options, args) | |
File "/usr/lib/python2.7/dist-packages/pip/commands/install.py", line 262, in run | |
for req in parse_requirements(filename, finder=finder, options=options, session=session): | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 1632, in parse_requirements | |
req = InstallRequirement.from_line(line, comes_from, prereleases=getattr(options, "pre", None)) | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 173, in from_line | |
return cls(req, comes_from, url=url, prereleases=prereleases) | |
File "/usr/lib/python2.7/dist-packages/pip/req.py", line 71, in __init__ | |
req = pkg_resources.Requirement.parse(req) | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2667, in parse | |
reqs = list(parse_requirements(s)) | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2605, in parse_requirements | |
line, p, specs = scan_list(VERSION,LINE_END,line,p,(1,2),"version spec") | |
File "/usr/lib/python2.7/dist-packages/pkg_resources.py", line 2583, in scan_list | |
"Expected ',' or end-of-list in",line,"at",line[p:] | |
ValueError: ("Expected ',' or end-of-list in", "dnspython>=1.12.0;python_version<'3.0'", 'at', ";python_version<'3.0'") | |
Storing debug log for failure in /home/swift/.pip/pip.log | |
error in setup command: Invalid environment marker: (python_version>='3.0') | |
Fix: | |
$ sudo pip install -U pip tox pbr virtualenv setuptools | |
$ sudo apt-get install libpython3.4-dev |
Building development installation of Swift:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ sudo python setup.py develop | |
Error: | |
error in setup command: Invalid environment marker: (python_version>='3.0') | |
Fix: | |
$ sudo pip install -U pip tox pbr virtualenv setuptools |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ HOME/swift/.unittests | |
Error: | |
liberasurecode[20837]: liberasurecode_backend_open: dynamic linking error libJerasure.so: cannot open shared object file: No such file or directory | |
ERROR: Invalid Storage Policy Configuration in /etc/swift/swift.conf (Error creating EC policy (pyeclib_c_init ERROR: Invalid arguments. Please inspect syslog for liberasurecode error report.), for index 2) | |
/home/swift/swift | |
Fix: check if libJerasure is present, install if not | |
$ sudo find / -name "libJerasure.so*" | |
$ sudo apt-get install liberasurecode-dev | |
Error: | |
File "/usr/lib/python2.7/dist-packages/nose/loader.py", line 411, in loadTestsFromName | |
addr.filename, addr.module) | |
File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 47, in importFromPath return self.importFromDir(dir_path, fqname) | |
File "/usr/lib/python2.7/dist-packages/nose/importer.py", line 94, in importFromDir | |
mod = load_module(part_fqname, fh, filename, desc) | |
File "/home/swift/swift/test/unit/obj/test_replicator.py", line 37, in <module> | |
from swift.obj import diskfile, replicator as object_replicator | |
File "/home/swift/swift/swift/obj/replicator.py", line 23, in <module> | |
from six import viewkeys | |
ImportError: cannot import name viewkeys | |
Fix: | |
#remove the default python-six package | |
$ sudo apt-get remove python-six | |
#pip install the six package | |
$ sudo pip install -U six |
Start the "main" Swift daemon processes:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ startmain | |
Error: | |
File "/usr/local/bin/swift-container-server", line 6, in <module> | |
exec(compile(open(__file__).read(), __file__, 'exec')) | |
File "/home/swift/swift/bin/swift-container-server", line 23, in <module> | |
sys.exit(run_wsgi(conf_file, 'container-server', **options)) | |
File "/home/swift/swift/swift/common/wsgi.py", line 883, in run_wsgi | |
error_msg = strategy.bind_ports() | |
File "/home/swift/swift/swift/common/wsgi.py", line 481, in bind_ports | |
self.sock = get_socket(self.conf) | |
File "/home/swift/swift/swift/common/wsgi.py", line 201, in get_socket | |
bind_addr[0], bind_addr[1], bind_timeout)) | |
Exception: Could not bind to 127.0.0.1:6011 after trying for 30 seconds | |
Traceback (most recent call last): | |
File "/usr/local/bin/swift-account-server", line 6, in <module> | |
exec(compile(open(__file__).read(), __file__, 'exec')) | |
File "/home/swift/swift/bin/swift-account-server", line 23, in <module> | |
sys.exit(run_wsgi(conf_file, 'account-server', **options)) | |
File "/home/swift/swift/swift/common/wsgi.py", line 883, in run_wsgi | |
error_msg = strategy.bind_ports() | |
File "/home/swift/swift/swift/common/wsgi.py", line 481, in bind_ports | |
self.sock = get_socket(self.conf) | |
File "/home/swift/swift/swift/common/wsgi.py", line 201, in get_socket | |
bind_addr[0], bind_addr[1], bind_timeout)) | |
Exception: Could not bind to 127.0.0.1:6012 after trying for 30 seconds | |
Fix: | |
When running SAIO, sometimes the servers will fail to load (with the above error) as ports 6012/11/10 is/are in use by ‘sshd’. This happens when you have enabled port forwarding on your VM and connect to it. | |
1.Edit /etc/ssh/sshd_config | |
2.Change X11DisplayOffset to a different number (say set it to 100) | |
3.Kill all SSH connections and restart ssh daemon. | |
$ sudo vim /etc/ssh/sshd_config | |
$ ps –ef | grep ssh | |
$ sudo kill -5 <PID> | |
$ sudo service ssh restart |
Verifying the functionality tests:
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
$ HOME/swift/.functests | |
Error: | |
$ ./.functests | |
Traceback (most recent call last): | |
File "/usr/local/bin/ostestr", line 7, in <module> | |
from os_testr.os_testr import main | |
File "/usr/local/lib/python2.7/dist-packages/os_testr/__init__.py", line 15, in <module> | |
import pbr.version | |
ImportError: No module named pbr.version | |
Fix: Check if pbr is installed | |
1. If not present, install | |
$ sudo apt-get purge python-setuptools | |
$ sudo apt-get install python-pbr | |
$ sudo pip install -r requirements.txt | |
$ sudo pip install -r test-requirements.txt | |
2. If pbr were present say in python-swiftclient directory, then delete that .egg for pbr | |
$ sudo rm –rf pbr-<version> .egg | |
$ sudo pip install –r requirements.txt –-upgrade | |
$ cd ../swift | |
$ sudo pip install six --upgrade | |
$ sudo pip install mock –-upgrade |
Please note above are some of the most commonly encountered issues, given that you are correctly following the instructions provided at [1]. There could be several issues such as - you miss a step to replace
If you have already gone through the SAIO setup, and have faced more issues/found fixes, then you are welcome to leave comments/suggestions and share your approaches.
References:
[1] OpenStack Swift documentation for SAIO development setup. Available online at http://docs.openstack.org/developer/swift/development_saio.html