由于OpenStack官方目前的安装搭建指导,仍以Ubuntu 16.04为准,建议大家不要使用太新的版本,这里所使用的是Ubuntu 16.04.2 server 镜像版本为大家进行说明。
这里所使用的OpenStack社区版本,是Ocata版本。
注意:我自己的计算机使用的是Windows 7 64位操作系统。
创建过程比较简单,这里将虚拟机的创建和系统安装合二为一,建议参考大神一篇文章中“创建虚拟机”和“安装虚拟机操作系统”两个部分。
地址:http://blog.csdn.net/mygrus/article/details/53816022
注意,这里仅仅是虚拟机的创建和系统安装,而并不是指DevStack。
在安装好虚拟机之后,首先使用安装虚拟机操作系统时,指定的用户名/密码进行登陆。
然后我们指定root账户的密码,使用命令:
sudo passwd root
此时会让你输入当前用户的密码,输入后就可以指定root用户的密码了,这里需要输入两次以便确认。
使用命令查看当前虚拟机网卡信息:
ifconfig -a
这里我们可以看到有两个网卡:enp0s3和enp0s8。
我们进入/etc/network目录:
通过命令
vim interfaces
打开配置文件进行编辑,增加enp0s8这张网卡的配置信息:
具体的配置信息怎么获取呢?首先我们要看看当前自己的计算机网络信息。可以打开命令行工具,执行ipconfig
命令进行查看,例如:
这里记录下网关信息,并指定一个同网段,且没有被使用的IP。比如我测试发现192.168.4.191这个IP尚未被使用,于是这个IP便可以指定给我的虚拟机使用。
回到虚拟机的编辑窗口中,在当前配置文件中,末尾进行如下配置(你需要根据实际情况填写地址和网关):
注意这张网卡配置的是静态IP。
配置完使用命令:wq
保存并退出。
此步骤主要是为了方便我们可以直接以root用户进行远程登陆。
通过命令打开SSH配置文件:
vim /etc/ssh/sshd_config
找到其中的PermitRootLogin参数,将它的值改为“yes”,同样保存退出。
到这里,我们队虚拟机的网络及SSH配置就完了。此时我们重启虚拟机,使配置生效。
虚拟机重启完毕后,我们以root用户进行登陆:
然后徐通过ping
命令,对我们之前的配置进行检查:
而后,在宿主机上,使用Xshell或其它类似工具,以root用户登录虚拟机,查看ssh登陆是否正常:
由于使用Ubuntu官方的源速度比较慢,很容易在后续搭建时失败,这里建议改为国内源。
执行命令:
cp /etc/apt/sources.list /home/sources.list.bak
来备份原有系统配置。
将官方原有的以us开头的地址,都改为cn开头:
注意,如果你之前有从Ubuntu中文官方网址下载过桌面版的镜像(比如17.04),你可以看到里面的源地址就这这样的。当然你也可以使用其它国内源,比如我之前使用过阿里的。
执行命令:
sudo apt-get update
sudo apt-get dist-upgrade
进行更新,如图:
系统自带git,我在安装的时候,自带的已经是最新版本。
检查发现系统没有安装pip,因此需要进行安装。
安装使用命令:
apt-get install python-pip
命令都是小写,CSDN关键字会改大小写。。。
注意安装过程中会问你是否继续,输入
y
继续安装。
在/root目录下,查看是否存在“.pip”目录:
若不存在,需要手动创建:
mkdir .pip
如上图所示,还需要创建一个pip.conf的配置文件,命令为:
touch pip.conf
打开该配置文件进行pip源的信息填写:
注意,这里的国内源可以从网上找到很多,你也可以配置成豆瓣的源或其它。这里使用的是清华大学的镜像。
从这里开始,我们开始进行DevStack的安装搭建。
进入/home目录,执行以下命令,下载DevStack:
git clone http://git.trystack.cn/openstack-dev/devstack.git -b stable/ocata
首先创建stack用户。
在/home/devstack/tools目录下,执行命令:
./create-stack-user.sh
其次,需要给stack用户也设置一个密码,方法与root用户相同。
第三,需要修改devstack目录及其下文件和子目录的权限,将它们都改为stack用户权限。此时都还是root权限。
执行命令进行修改:
chown -R stack:stack /home/devstack
由于后续我们调试需要用到screen命令,因此也同样需要修改对应目录权限:
chmod 777 /dev/pts/0
我们这时一直都在使用root用户,这里,我们可以切换到stack用户了。
su stack
配置方式其实与root用户是一样的。不过,我们是要进入到stack用户的目录下,而不是/root目录。
执行命令:
cd ~
进入stack用户目录。
注意,上一小节结尾已经切换到了stack用户,所以这里会直接进入到stack用户目录。
这里是配置好的内容,与root用户是一样的。
注意,如果你是直接从root用户目录下拷贝过来的,需要查看对应目录及配置文件的权限是否正确,这里都应是stack用户权限的。
进入/home/devstack目录。
从./samples
子目录中中拷贝一份local.conf文件到当前目录下(即/home/devstack)。
打开该文件,进行编辑。
这里先强调一下,具体的配置,每个人的可能都不一样,这里仅给出自己使用过的。
编辑内容如下:
# Sample ``local.conf`` for user-configurable variables in ``stack.sh``
# NOTE: Copy this file to the root DevStack directory for it to work properly.
# ``local.conf`` is a user-maintained settings file that is sourced from ``stackrc``.
# This gives it the ability to override any variables set in ``stackrc``.
# Also, most of the settings in ``stack.sh`` are written to only be set if no
# value has already been set; this lets ``local.conf`` effectively override the
# default values.
# This is a collection of some of the settings we have found to be useful
# in our DevStack development environments. Additional settings are described
# in http://docs.openstack.org/developer/devstack/configuration.html#local-conf
# These should be considered as samples and are unsupported DevStack code.
# The ``localrc`` section replaces the old ``localrc`` configuration file.
# Note that if ``localrc`` is present it will be used in favor of this section.
[[local|localrc]]
#use TryStack git mirror
GIT_BASE=http://git.trystack.cn
#GIT_BASE=http://github.com
NOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.git
SPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git
#OFFLINE=True
RECLONE=True
#Define images to be automatically downloaded during the DevStack built process.
DOWNLOAD_DEFAULT_IMAGES=False
#(IMAGE_URLS等号旁边的网址不能有引号,否则编译时会报地址解析错误)
#IMAGE_URLS="http://images.trystack.cn/cirros/cirros-0.3.4-x86_64-disk.img"
#IMAGE_URLS="http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img"
IMAGE_URLS=http://download.cirros-cloud.net/0.3.4/cirros-0.3.4-x86_64-disk.img
# Minimal Contents
# ----------------
# While ``stack.sh`` is happy to run without ``localrc``, devlife is better when
# there are a few minimal variables set:
# If the ``*_PASSWORD`` variables are not set here you will be prompted to enter
# values for them by ``stack.sh``and they will be added to ``local.conf``.
ADMIN_PASSWORD=mydevstack
DATABASE_PASSWORD=$ADMIN_PASSWORD
RABBIT_PASSWORD=$ADMIN_PASSWORD
SERVICE_PASSWORD=$ADMIN_PASSWORD
# ``HOST_IP`` and ``HOST_IPV6`` should be set manually for best results if
# the NIC configuration of the host is unusual, i.e. ``eth1`` has the default
# route but ``eth0`` is the public interface. They are auto-detected in
# ``stack.sh`` but often is indeterminate on later runs due to the IP moving
# from an Ethernet interface to a bridge on the host. Setting it here also
# makes it available for ``openrc`` to include when setting ``OS_AUTH_URL``.
# Neither is set by default.
#HOST_IP=w.x.y.z
#HOST_IPV6=2001:db8::7
#HOST_IP是自己虚拟机的ip地址,我的是如下
HOST_IP=192.168.40.128
# Logging
# -------
# By default ``stack.sh`` output only goes to the terminal where it runs. It can
# be configured to additionally log to a file by setting ``LOGFILE`` to the full
# path of the destination log file. A timestamp will be appended to the given name.
LOGFILE=/opt/stack/logs/stack.sh.log
# Old log files are automatically removed after 7 days to keep things neat. Change
# the number of days by setting ``LOGDAYS``.
LOGDAYS=2
# Nova logs will be colorized if ``SYSLOG`` is not set; turn this off by setting
# ``LOG_COLOR`` false.
LOG_COLOR=True
# Using milestone-proposed branches
# ---------------------------------
# Uncomment these to grab the milestone-proposed branches from the
# repos:
#CINDER_BRANCH=milestone-proposed
#GLANCE_BRANCH=milestone-proposed
#HORIZON_BRANCH=milestone-proposed
#KEYSTONE_BRANCH=milestone-proposed
#KEYSTONECLIENT_BRANCH=milestone-proposed
#NOVA_BRANCH=milestone-proposed
#NOVACLIENT_BRANCH=milestone-proposed
#NEUTRON_BRANCH=milestone-proposed
#SWIFT_BRANCH=milestone-proposed
HORIZON_BRANCH=stable/ocata
KEYSTONE_BRANCH=stable/ocata
NOVA_BRANCH=stable/ocata
NEUTRON_BRANCH=stable/ocata
GLANCE_BRANCH=stable/ocata
CINDER_BRANCH=stable/ocata
KEYSTONE_TOKEN_FORMAT=UUID
# Enabling Neutron (network) Service
disable_service n-net
enable_service q-svc
enable_service q-agt
enable_service q-dhcp
enable_service q-l3
enable_service q-meta
enable_service q-metering
enable_service neutron
# VLAN configuration
Q_PLUGIN=ml2
ENABLE_TENANT_VLANS=True
TENANT_VLAN_RANGE=1100:2999
# Using git versions of clients
# -----------------------------
# By default clients are installed from pip. See LIBS_FROM_GIT in
# stackrc for details on getting clients from specific branches or
# revisions. e.g.
# LIBS_FROM_GIT="python-ironicclient"
# IRONICCLIENT_BRANCH=refs/changes/44/2.../1
# Swift
# -----
# Swift is now used as the back-end for the S3-like object store. Setting the
# hash value is required and you will be prompted for it if Swift is enabled
# so just set it to something already:
SWIFT_HASH=66a3d6b56c1f479c8b4e70ab5c2000f5
# For development purposes the default of 3 replicas is usually not required.
# Set this to 1 to save some resources:
SWIFT_REPLICAS=1
# The data for Swift is stored by default in (``$DEST/data/swift``),
# or (``$DATA_DIR/swift``) if ``DATA_DIR`` has been set, and can be
# moved by setting ``SWIFT_DATA_DIR``. The directory will be created
# if it does not exist.
SWIFT_DATA_DIR=$DEST/data
对应的stackrc文件配置
# 只需修改一处,改成如下即可,使用https而不是用git,因为git被阻塞了,不能访问下载编译中需要的文件
# Base GIT Repo URL
# Another option is https://git.openstack.org
#GIT_BASE=${GIT_BASE:-git://git.openstack.org}
GIT_BASE=${GIT_BASE:-https://git.openstack.org}
配置防火墙,开放编译过程中会用到的端口,并固化。
端口号:22,80,5672,8774,8776
参考博客:
http://www.cnblogs.com/jiu0821/p/5982070.html
http://blog.zivers.com/post/1186.html
#使用命令查看已开放端口,并将未开通的端口开通
#查看端口开放情况 sudo iptables -S
#开放相对应端口 sudo iptables -A INPUT -p tcp --dport 22 -j ACCEPT
#上面开放的是22号端口,需要开放去他的端口直接在上面命令把22换成对应端口号
stack@ubuntu:/home/bobo/Desktop$ sudo iptables -S
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5672 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i virbr0 -p udp -m udp --dport 67 -j ACCEPT
-A INPUT -i virbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 22 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 3306 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8774 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 8776 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
-A OUTPUT -o virbr0 -p udp -m udp --dport 68 -j ACCEPT
接下来修改一个文件的权限openvswitch/db.sock
chmod 777 /var/run/openvswitch/db.sock
不然会报如下错误。
+lib/keystone:create_keystone_accounts:368 local admin_project
++lib/keystone:create_keystone_accounts:369 openstack project show admin -f value -c id
Discovering versions from the identity service failed when creating the password plugin. Attempting to determine version from URL.
Could not determine a suitable URL for the plugin
+lib/keystone:create_keystone_accounts:369 admin_project=
+lib/keystone:create_keystone_accounts:1 exit_trap
+./stack.sh:exit_trap:474 local r=1
++./stack.sh:exit_trap:475 jobs -p
+./stack.sh:exit_trap:475 jobs=
+./stack.sh:exit_trap:478 [[ -n '' ]]
+./stack.sh:exit_trap:484 kill_spinner
+./stack.sh:kill_spinner:370 '[' '!' -z '' ']'
+./stack.sh:exit_trap:486 [[ 1 -ne 0 ]]
+./stack.sh:exit_trap:487 echo 'Error on exit'
Error on exit
+./stack.sh:exit_trap:488 generate-subunit 1461920296 413 fail
+./stack.sh:exit_trap:489 [[ -z /opt/stack/logs ]]
+./stack.sh:exit_trap:492 /home/baiming/devstack/tools/worlddump.py -d /opt/stack/logs
World dumping... see /opt/stack/logs/worlddump-2016-04-29-090510.txt for details
2016-04-29T09:05:10Z|00001|reconnect|WARN|unix:/var/run/openvswitch/db.sock: connection attempt failed (Permission denied)
ovs-vsctl: unix:/var/run/openvswitch/db.sock: database connection failed (Permission denied)
+./stack.sh:exit_trap:498 exit 1
所有这些工作都做完之后,建议重启一下虚拟机。
重启完毕,进入/home/devstack目录,执行命令
(注意:除首次安装外,每次执行./stack.sh前都要执行./unstack.sh,否则很容易报错,安装失败)
./stack.sh
进行DevStack的安装。
安装的具体耗时,取决你的网络环境。
如果你看到如下显示,祝贺你完成了!
现在我们打开浏览器,登陆OpenStack的portal吧:
登陆地址就是local.conf中的主机IP,我这里默认就是虚拟机那个静态IP。
使用admin账户登录,密码也在local.conf中。
登录后的默认页面如下:
安装好Devstack后的一些服务查看开启教程:
http://blog.csdn.net/bakbad/article/details/73731337
http://www.cnblogs.com/grglym/p/6991708.html
问题解决思维步骤:
1.查看报错信息,安装日志信息
2.将报错的核心关键字段检索
3.参考并理解已解决方案,不能直接照搬
4.推断并尝试适合自己的解决方案
1.在运行sudo apt-get update时出错解决参考
http://blog.csdn.net/zzq123686/article/details/77454066
2.解决insserv: warning: script ‘服务名’ missing LSB tags and overrides的问题
http://blog.bbzhh.com/index.php/archives/134.html
3.安装devstack的问题解决参考
http://tonybai.com/2016/05/04/deploy-devstack/
4.Neutron网络配置参考
http://www.chenshake.com/local-conf-devstack-profile-parameter-description/
5.iptables端口未开放报错解决,参考(重要)
http://blog.csdn.net/zw421152835/article/details/51112287
http://www.cnblogs.com/jiu0821/p/5982070.html
http://blog.zivers.com/post/1186.html
6.dpkg运行错误
http://www.cnblogs.com/kay/archive/2009/04/28/1444964.html