DevStack 环境搭建和问题解决


DevStack 环境搭建 (Ubuntu + Ocata)

由于OpenStack官方目前的安装搭建指导,仍以Ubuntu 16.04为准,建议大家不要使用太新的版本,这里所使用的是Ubuntu 16.04.2 server 镜像版本为大家进行说明。

这里所使用的OpenStack社区版本,是Ocata版本。

所需软件及对应版本

注意:我自己的计算机使用的是Windows 7 64位操作系统。

  1. 虚拟机镜像:ubuntu-16.04.2-server-amd64.iso
  2. DevStack版本:Ocata(安装时指定)
  3. OpenStack版本:Ocata(安装时指定)
  4. VMware Workstation:10.0.1 build-1379776

搭建前检查

  • 首先进计算机BIOS,查看虚拟化设置是否开启,这一部分有不了解的,还请自行对照所用计算机型号,网上搜索一下。由于设置比较简单,这里不再描述其过程。
  • 查看所下载VMware Workstation版本是否与自己操作系统版本对应。
  • 查看Ubuntu镜像版本是否正确。
  • 查看自己的计算机内存及CPU是否满足安装要求。
    这里需要注意一下,由于我们的DevStack是部署在虚拟机上,因此,最好保证Ubuntu虚拟机的内存大于4G对应的CPU使用4核。

创建虚拟机

创建过程比较简单,这里将虚拟机的创建和系统安装合二为一,建议参考大神一篇文章中“创建虚拟机”和“安装虚拟机操作系统”两个部分。
地址:http://blog.csdn.net/mygrus/article/details/53816022

注意,这里仅仅是虚拟机的创建和系统安装,而并不是指DevStack。

配置虚拟机


配置虚拟机root账户密码

在安装好虚拟机之后,首先使用安装虚拟机操作系统时,指定的用户名/密码进行登陆。
然后我们指定root账户的密码,使用命令:

sudo passwd root

这里写图片描述

此时会让你输入当前用户的密码,输入后就可以指定root用户的密码了,这里需要输入两次以便确认。

配置虚拟机网络

使用命令查看当前虚拟机网卡信息:

ifconfig -a

这里写图片描述

这里我们可以看到有两个网卡:enp0s3和enp0s8。

  • enp0s3:主要用它来连接外网,也就是创建的时候连接方式是NAT的那张网卡。
  • enp0s8:后续用来指定静态IP,用于对OpenStack的服务进行访问、调试等。

我们进入/etc/network目录:

这里写图片描述

通过命令

vim interfaces

打开配置文件进行编辑,增加enp0s8这张网卡的配置信息:

这里写图片描述

具体的配置信息怎么获取呢?首先我们要看看当前自己的计算机网络信息。可以打开命令行工具,执行ipconfig命令进行查看,例如:

这里写图片描述

这里记录下网关信息,并指定一个同网段,且没有被使用的IP。比如我测试发现192.168.4.191这个IP尚未被使用,于是这个IP便可以指定给我的虚拟机使用。

回到虚拟机的编辑窗口中,在当前配置文件中,末尾进行如下配置(你需要根据实际情况填写地址和网关):

这里写图片描述

注意这张网卡配置的是静态IP。

配置完使用命令:wq保存并退出。

配置虚拟机SSH登陆权限

此步骤主要是为了方便我们可以直接以root用户进行远程登陆。

通过命令打开SSH配置文件:

vim /etc/ssh/sshd_config

这里写图片描述

找到其中的PermitRootLogin参数,将它的值改为“yes”,同样保存退出。

到这里,我们队虚拟机的网络及SSH配置就完了。此时我们重启虚拟机,使配置生效。

检查网络配置

虚拟机重启完毕后,我们以root用户进行登陆:

这里写图片描述

然后徐通过ping命令,对我们之前的配置进行检查:

  • 虚拟机—>宿主机(物理主机),即在虚拟机上ping你物理主机同网段IP。以下方式类似。
    这里写图片描述

  • 宿主机—>虚拟机
    这里写图片描述

  • 虚拟机—>外网
    这里写图片描述

而后,在宿主机上,使用Xshell或其它类似工具,以root用户登录虚拟机,查看ssh登陆是否正常:

这里写图片描述

配置Ubuntu国内源

由于使用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

系统自带git,我在安装的时候,自带的已经是最新版本。

这里写图片描述

安装pip

检查发现系统没有安装pip,因此需要进行安装。

安装使用命令:

apt-get install python-pip

命令都是小写,CSDN关键字会改大小写。。。

这里写图片描述

注意安装过程中会问你是否继续,输入y继续安装。

这里写图片描述

配置pip

在/root目录下,查看是否存在“.pip”目录:

这里写图片描述

若不存在,需要手动创建:

mkdir .pip

这里写图片描述

如上图所示,还需要创建一个pip.conf的配置文件,命令为:

touch pip.conf

打开该配置文件进行pip源的信息填写:

这里写图片描述

注意,这里的国内源可以从网上找到很多,你也可以配置成豆瓣的源或其它。这里使用的是清华大学的镜像。

安装


从这里开始,我们开始进行DevStack的安装搭建。

下载DevStack代码

进入/home目录,执行以下命令,下载DevStack:

git clone http://git.trystack.cn/openstack-dev/devstack.git -b stable/ocata

这里写图片描述

这里写图片描述

创建stack用户并修改对应文件权限

首先创建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

配置stack用户的pip源

配置方式其实与root用户是一样的。不过,我们是要进入到stack用户的目录下,而不是/root目录。

执行命令:

cd ~

进入stack用户目录。

注意,上一小节结尾已经切换到了stack用户,所以这里会直接进入到stack用户目录。

这里是配置好的内容,与root用户是一样的。

这里写图片描述

注意,如果你是直接从root用户目录下拷贝过来的,需要查看对应目录及配置文件的权限是否正确,这里都应是stack用户权限的。

设置DevStack配置文件

进入/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

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值