DevStack 环境搭建和问题解决

来源:互联网 发布:d3.js 人脉关系图实例 编辑:程序博客网 时间:2024/06/06 11:51


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 mirrorGIT_BASE=http://git.trystack.cn#GIT_BASE=http://github.comNOVNC_REPO=http://git.trystack.cn/kanaka/noVNC.gitSPICE_REPO=http://git.trystack.cn/git/spice/spice-html5.git#OFFLINE=TrueRECLONE=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=mydevstackDATABASE_PASSWORD=$ADMIN_PASSWORDRABBIT_PASSWORD=$ADMIN_PASSWORDSERVICE_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-proposedHORIZON_BRANCH=stable/ocataKEYSTONE_BRANCH=stable/ocataNOVA_BRANCH=stable/ocataNEUTRON_BRANCH=stable/ocataGLANCE_BRANCH=stable/ocataCINDER_BRANCH=stable/ocataKEYSTONE_TOKEN_FORMAT=UUID# Enabling Neutron (network) Servicedisable_service n-netenable_service q-svcenable_service q-agtenable_service q-dhcpenable_service q-l3enable_service q-metaenable_service q-meteringenable_service neutron# VLAN configurationQ_PLUGIN=ml2ENABLE_TENANT_VLANS=TrueTENANT_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 idDiscovering 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/logsWorld dumping... see /opt/stack/logs/worlddump-2016-04-29-090510.txt for details2016-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

原创粉丝点击