操作系统为Ubuntu14.04
在Openstack软件包安装过程中,主机的DNS没问题,软件源的仓库也是正确的,为什么总是出现软件包安装错误呢?
报错如下:
# apt-get install cinder-api cinder-scheduler cinder-volume python-cinderclient -y
Reading package lists... Done
Building dependency tree
Reading state information... Done
cinder-api is already the newest version.
cinder-scheduler is already the newest version.
cinder-volume is already the newest version.
python-cinderclient is already the newest version.
The following packages were automatically installed and are no longer required:
libboost-iostreams1.46.1 libclass-isa-perl libswitch-perl
Use ‘apt-get autoremove‘ to remove them.
0 upgraded, 0 newly installed, 0 to remove and 27 not upgraded.
4 not fully installed or removed.
After this operation, 0 B of additional disk space will be used.
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
Setting up cinder-common (1:2015.1.0-0ubuntu1~cloud0) ...
/usr/lib/python2.7/dist-packages/oslo_messaging/_drivers/base.py:20: DeprecationWarning: The oslo namespace package is deprecated. Please use oslo_config instead.
from oslo.config import cfg
Traceback (most recent call last):
File "/usr/bin/cinder-manage", line 6, in <module>
from cinder.cmd.manage import main
File "/usr/lib/python2.7/dist-packages/cinder/cmd/manage.py", line 74, in <module>
from cinder.common import config # noqa
File "/usr/lib/python2.7/dist-packages/cinder/common/config.py", line 105, in <module>
help=_("DEPRECATED: Deploy v1 of the Cinder API.")),
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_factory.py", line 80, in f
return _message.Message(msg, domain=domain)
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_message.py", line 51, in __new__
msgtext = Message._translate_msgid(msgid, domain)
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_message.py", line 91, in _translate_msgid
system_locale = locale.getdefaultlocale()
File "/usr/lib/python2.7/locale.py", line 543, in getdefaultlocale
return _parse_localename(localename)
File "/usr/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, ‘unknown locale: %s‘ % localename
ValueError: unknown locale: UTF-8
dpkg: error processing package cinder-common (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of cinder-volume:
cinder-volume depends on cinder-common (= 1:2015.1.0-0ubuntu1~cloud0); however:
Package cinder-common is not configured yet.
dpkg: error processing package cinder-volume (--configure):
dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of cinder-api:
cinder-api depends on cinder-common (= 1:2015.1.0-0ubuntu1~cloud0); however:
Package cinder-common is not configured yet.
dpkg: error processing package cinder-api (--configure):
dependency problems - leaving unconfigured
dpkg: dependency problems prevent configuration of cinder-scheduler:
cinder-scheduler depends on cinder-common (= 1:2015.1.0-0ubuntu1~cloud0); however:
Package cinder-common is not configured yet.
dpkg: error processing package cinder-scheduler (--configure):
dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because the error message indicates its a followup error from a previous failure.
No apport report written because MaxReports is reached already
Errors were encountered while processing:
cinder-common
cinder-volume
cinder-api
cinder-scheduler
E: Sub-process /usr/bin/dpkg returned an error code (1)
屏幕上的报错,一下跳到最后,怎么检查都没查出来。
于是回头分析报错的根源:
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
LANGUAGE = "en_US:en",
LC_ALL = (unset),
LC_CTYPE = "UTF-8",
LANG = "en_US.UTF-8"
are supported and installed on your system.
perl: warning: Falling back to the standard locale ("C").
locale: Cannot set LC_CTYPE to default locale: No such file or directory
locale: Cannot set LC_ALL to default locale: No such file or directory
这几个警告是提示系统环境的locale设置,太常见很容易忽略。
Setting up cinder-common (1:2015.1.0-0ubuntu1~cloud0) ...
/usr/lib/python2.7/dist-packages/oslo_messaging/_drivers/base.py:20: DeprecationWarning: The oslo namespace package is deprecated. Please use oslo_config instead.
from oslo.config import cfg
Traceback (most recent call last):
File "/usr/bin/cinder-manage", line 6, in <module>
from cinder.cmd.manage import main
File "/usr/lib/python2.7/dist-packages/cinder/cmd/manage.py", line 74, in <module>
from cinder.common import config # noqa
File "/usr/lib/python2.7/dist-packages/cinder/common/config.py", line 105, in <module>
help=_("DEPRECATED: Deploy v1 of the Cinder API.")),
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_factory.py", line 80, in f
return _message.Message(msg, domain=domain)
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_message.py", line 51, in __new__
msgtext = Message._translate_msgid(msgid, domain)
File "/usr/lib/python2.7/dist-packages/oslo_i18n/_message.py", line 91, in _translate_msgid
system_locale = locale.getdefaultlocale()
File "/usr/lib/python2.7/locale.py", line 543, in getdefaultlocale
return _parse_localename(localename)
File "/usr/lib/python2.7/locale.py", line 475, in _parse_localename
raise ValueError, ‘unknown locale: %s‘ % localename
ValueError: unknown locale: UTF-8
但这部分已经说软件包由于系统环境的编码格式导致错误。
如果不处理,那在apt安装其他软件时还会报相同的错。
很多时候,我们会把这部分与上面的警告混在一起,从而转移注意力到其他地方。
解决方法为:
echo ‘LC_ALL="en_US.UTF-8"‘ >> /etc/default/locale
注:此环境的OS为ubuntu14.04。其他OS根据实际环境设置。
退出当前终端,重新登录,查看当前终端环境的locale:
# locale
LANG=en_US.UTF-8
LANGUAGE=en_US:en
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8
再次使用apt-get安装即可成功。