《OpenStack实战指南》—— 2.2 在Ubuntu上使用源代码编译安装

本文涉及的产品
云数据库 PolarDB MySQL 版,列存表分析加速 8核16GB
PolarSearch,搜索节点 4核8GB
PolarDB Agent Express,2核4GB
简介:

本节书摘来自华章出版社《OpenStack实战指南》一 书中的第2章,第2.2节,作者:黄 凯 毛伟杰 顾骏杰 ,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

2.2 在Ubuntu上使用源代码编译安装

对于各个版本的Linux来说,都会制作OpenStack相应的软件包。虽然在2.1节中介绍了二进制包安装,但是在这里笔者还是会讲一下源代码安装OpenStack基本组件的过程,因为从学习的角度来说,通过源代码安装OpenStack各个组件的过程,可以使读者对OpenStack的框架和各个组件的作用有一个比使用二进制安装更全面的了解。另一个好处是,二进制包的发布会滞后于源代码,如果想在第一时间尝试一些最新的功能或修复Bug后的版本,源代码安装是个不错的选择。当然,源代码安装比二进制包安装复杂,有一定的难度,并且要用户自己去解决一些依赖问题。
在本节中,将会介绍如何使用源代码方式安装Keystone、Glance、Nova、Neutron、Cinder和Horizon组件。OpenStack各个项目的代码都可以在GitHub上获取。在接下来的安装过程中,笔者按照1个controller节点、1个network节点、1个compute节点、1个volume节点的架构来部署。因为其架构方式和二进制安装一样,所以一些基础配置,如每个节点的IP设置、NTP配置等,在本节中跳过。本节使用的操作系统依旧是Ubuntu 12.04 LTS版本。

2.2.1 控制节点的安装

在controller节点上计划部署如下组件:

RabbitMQ
PostgreSQL
Keystone
Glance
Neutron
Nova中除去nova-compute的其他组件
Horizon

controller上各个组件负责的功能与使用二进制包安装时的一样。在本节中,如果没有特殊说明,那么与2.1节中介绍的架构一样,只是安装方式上有些区别。
1.?前置准备
首先进行IP配置,以及RabbitMQ、NTP的安装配置,可参考2.1节相关内容。
使用PostgreSQL作为OpenStack的后端数据库。如果需要一个稳定的开源数据库,那么PostgreSQL可以优先考虑。此外,需要安装Python访问PostgreSQL时用的psycopg2,这是目前流行的PostgreSQL的Python连接库。命令如下:

# apt-get install postgresql postgresql-client
# apt-get install python-sqlalchemy python-psycopg2

创建一个数据库用户openstackdbadmin,设置密码为openstack123。这个用户将作为各个组件连接数据库的唯一用户。示例代码如下:

# su - postgres
$ psql
postgres=# CREATE USER openstackdbadmin with password 
    'openstack123';
postgres=# \q

在二进制包安装的时候使用root用户,并且安装的时候会把配置文件配置成特定的用户组属性,不需要手动干预。但是在使用源代码安装的时候,必须处理好这些文件的用户组属性关系。在本节中,笔者将会以openstack这个用户的身份去安装、配置、启动服务。首先建立一个称为openstack的用户,并且加入到sudo组,让其有使用sudo的权限。命令如下:

# useradd -m openstack
# usermod -G sudo openstack

接下来的包都会放在openstack这个用户的主目录下,在这里是/home/openstack
除非特殊说明,否则本节其余操作都是在openstack这个用户下执行。
下载需要用到的Git工具的源代码,在Ubuntu下安装,命令如下:

$ sudo apt-get install git

对于学习源代码安装的一个较好的,也是官方的方法就是阅读OpenStack开发人员写的一套安装脚本,我们称之为DevStack,其源代码在GitHub上维护。这个项目的初衷是让开发人员能够快速建立一个完整的OpenStack开发环境,该项目由Rackspace的团队创建,并且由OpenStack的开发社区维护,它的脚本更新速度应该是最接近于OpenStack开发的,一些新的功能在脚本中都会更新体现出来。无论是开发人员还是系统运维工程师,这个脚本都是学习OpenStack的一个重要资源。后面的安装也是基于这个脚本的,会用到里面的一些文件,因此,首先需要下载该项目脚本的代码:

$ git clone https://github.com/openstack-dev/devstack

源代码安装和二进制包安装的区别主要体现在几个方面,如果读者能把握住哪些是不同的,哪些是相同的,那么学会二进制包安装后,源代码安装的学习就会相对容易点。第一个区别是安装的软件包不同。在二进制包中,各个Linux发行平台已经把OpenStack组件中每个软件打成相应的包,其中包括运行组件所需的很多依赖包。而源代码安装方式,除了安装OpenStack社区发布的组件包外,还需要手动安装那些组件所需要的依赖包。能否完全正确地安装好依赖包是要解决的一个关键问题。第二个区别体现在配置文件上。二进制包安装好后,都会在/etc下建立好所需的配置文件。而源代码安装需要自己去建立相关目录。第三个区别是启动问题。在二进制包安装好后,往往都配置成了相应Linux系统版本的启动方式,譬如使用service启动。而源代码安装方式,需要自己写启动脚本,每个人的启动脚本和方式都不一样,因人而异。还有一些小的区别就是源代码安装需要建立用户,自己设置 OpenStack组件的安装路径、用户、权限,手动建立一些必要的目录等。至于两者相同的地方,很明显就是数据库,以及配置文件中的参数。
OpenStack各个组件的配置文件都会放在/etc下的各个目录中,包括nova、glance、 keystone、neutron等。这样做是为了统一规范每个组件的配置目录,方便管理。这里介绍一下安装的思路。一般情况下,在/etc下建立组件的目录,设置为用户的权限,在各个组件的源代码中也有相应的etc目录,其中包括需要用到的配置文件。把要用的配置文件从源代码目录复制到/etc下组件的目录中,然后编辑/etc下相应的配置文件。安装的思路是首先确保每个组件需要的依赖包已经安装,然后在源代码的第一层目录,执行Python的安装命令。这样一个组件就安装好了。
2.?安装部署Keystone
首先下载Keystone源代码,并且切换到Havana版本的稳定分支:

$ git clone https://github.com/openstack/keystone
$ cd keystone
$ git checkout stable/havana

在/etc下建立名为keystone的目录。设置属主为用户openstack。从下载的Keystone源代码中把/etc下的配置文件复制到/etc/keystone下,其代码如下:

$ sudo mkdir /etc/keystone
$ sudo chown openstack:openstack /etc/keystone
$ cd ~/keystone/etc
$ cp -p keystone.conf.sample /etc/keystone/keystone.conf
$ cp -p policy.json /etc/keystone/

Keystone有许多配置选项,这也是OpenStack一个比较大的特点。OpenStack会尽量支持更多的,同时比较流行的一些开源软件来完成类似功能。由于不同的开源软件有自身的特点和功能,因此OpenStack可给用户比较多的选择余地,用户可根据自身的情况选择适合的方式。在Keystone中,选择存放认证数据(包括用户、密码等数据)的方式时,可以选择LDAP、数据库。在这里我们把用得比较多,同时也比较容易上手的MySQL数据库作为存放数据的方式。在认证方式上,Keystone可以使用原有的UUID的方式,也可以选择后来加入的PKI方式来增强安全性。在本节中,会介绍一些使用广泛的配置,其他更多内容可以从第5章获取。需要配置keystone.conf以下主要的选项:

[DEFAULT]
admin_token = openstack
bind_host = 0.0.0.0
public_port = 5000
admin_port = 35357
debug = True
verbose = True
log_file =  keystone.log
log_dir = /var/log/keystone

[sql]
connection = postgres://openstackdbadmin:openstack123@localhost/keystone

[identity]
driver = keystone.identity.backends.sql.Identity

[catalog]
driver = keystone.catalog.backends.sql.Catalog

[token]
driver = keystone.token.backends.kvs.Token

[signing]
token_format = PKI

初始化Keystone,首先要创建Keystone所用的数据库,以及一些配置文件中用到的目录,然后初始化Keystone用的PKI。
需要创建不存在的目录,用来存放Keystone日志,可在keystone.conf中定义,其代码如下:

$ sudo mkdir /var/log/keystone
$ sudo chown openstack:openstack /var/log/keystone

需要创建不存在的目录,用来存放Keystone使用PKI的相关文件,其代码如下:

$ sudo mkdir /var/cache/keystone
$ sudo chown openstack:openstack /var/cache/keystone

创建Keystone所用的数据库,代码如下:

$ sudo su - postgres
$ psql
postgres=# CREATE DATABASE keystone;
postgres=# GRANT ALL PRIVILEGES ON DATABASE keystone TO openstackdbadmin;
postgres=# \q

切记要退出postgres用户,返回到OpenStack用户环境中,其代码如下:

postgres$ exit

进入devstack项目的目录,因为要用到里面的一些文件。

$ cd ~/devstack/files/apts

在devstack项目中,开发人员告诉了我们需要安装哪些前置依赖的和需要使用的第三方的软件包,这里需要安装general和keystone,其代码如下:

$ for i in'cut -f1 -d" " general keystone'; do sudo apt-get install -y $i; done

Keystone需要用到passlib软件包,使用PKI时必须安装,其代码如下:

$ sudo pip install passlib

安装Keystone组件,其代码如下:

$ cd ~/keystone
$ sudo python setup.py develop

进入Keystone目录,其代码如下:

$ cd ~/keystone
$ bin/keystone-manage db_sync
$ bin/keystone-manage pki_setup

下面开始安装Keystone Client。Keystone Client是一个使用Keystone的命令行接口工具,和Dashboard一样,它能完成大部分的日常操作。熟悉和熟练使用命令行工具对维护OpenStack及其每一个组件是非常重要的,系统管理员90%的工作是通过Client命令行完成的,而不是通过Dashboard。
切记退回到OpenStack的home目录,所有组件的顶层都在用户home目录下,其代码如下:

$ cd
$ git clone https://github.com/openstack/python-keystoneclient
$ cd python-keystoneclient

在安装的过程中,如果出现依赖包安装报错的情况,可根据出错的Python软件包的URL进行手动下载,并进行安装,然后返回安装Keystone Client,其代码如下:

$ sudo python setup.py develop

3.?使用tmux启动Keystone
至此,已经安装好了Keystone服务和命令行下的Keystone Client。接下来要启动Keystone进程。我们是通过源代码方式来安装Keystone的,没有配置成Ubuntu服务管理程序,因此,不能像二进制包方式安装后那样,通过命令“service keystone start”来启动,而是需要直接运行Keystone的可执行文件,并加上一些配置文件的参数。

$ cd ~/keystone

可执行文件都放在bin目录下。--config-file参数指明了Keystone的配置文件路径。

$ bin/keystone-all --config-file /etc/keystone/keystone.conf

启动完成后,是不是发现什么输出也没有,Shell也不会返回提示符?而一旦关掉SSH窗口或按+组合键后,Keystone进程就结束了。是不是应该把这个程序放在后台运行呢?这里要用到终端复用软件tmux。tmux是一个类似于screen的软件,采用BSD授权。Ubuntu 12.04下默认安装了这个优秀的软件,在这里仅简单地使用它来打开一个会话。退出前面创建的Keystone进程,不要怕,因为我们已经学会如何启动Keystone了。用+组合键中断刚才创建的Keystone进程,当然也可以再开启一个终端会话窗口,用命令kill结束Keystone进程。
在下面这行代码中,new-session打开一个新的会话,-s给这个会话命名为keystone,按回车键之后可以看到一个空白的新的会话。

$ tmux new-session -s keystone

执行启动Keystone的命令,代码如下:

$ bin/keystone-all --config-file /etc/keystone/keystone.conf

读者可能会发现,这里介绍的内容看上去和前面介绍的内容差不多。然后先按住和键不放,然后再按键,退出刚才新建的会话。是不是又返回到我们新建会话之前的窗口了?现在使用命令“ps aux | grep keystone”,查看一下Keystone的进程是否还存在。不存在的话记得发邮件告诉笔者。现在回到tmux,在源代码安装时会多次使用tmux,使用下面的命令可列出将会用到的和tmux相关的命令。

$ tmux new-session -s name

列出当前存在的所有的tmux会话,代码如下:

$ tmux list-sessions

返回会话名为name的会话,代码如下:

$ tmux attach-session -t name

现在可以使用命令“tmux attach-session -t keystone”回到刚才创建的Keystone会话中。tmux还有很多参数和命令,可以使用命令“man tmux”查看。
接下来是关于使用Keystone的内容,包括创建用户等,都和二进制包安装方式一样,读者可以参考2.1节的相关内容。
4.?安装部署Glance
安装Glance的思路和过程与安装Keystone类似,大致的过程可以分为下载源代码、安装依赖软件包、安装Glance和Glance Client、编辑Glance的配置文件等。
将OpenStack的数据目录放在/data下,包括Glance的镜像和Nova的虚拟机等。读者需要自己建立这个目录,并且确保这个目录足够大能满足用户环境所需的大小。
在安装过程中,确保这个目录所在的文件系统的可用空间有50GB,涉及的命令如下:

$ cd
$ git clone https://github.com/openstack/glance
$ cd glance
$ git checkout stable/havana

安装Glance组件所需要的依赖软件,命令如下:

$ cd ~/devstack/files/apts
$ for i in ` cut -f1 -d" " glance`; do sudo apt-get install -y $i; done

安装Glance组件,代码如下:

$ cd ~/glance
$ sudo python setup.py develop

创建用来存放Glance配置文件的目录,和Keystone一样,也是放在/etc下,其代码如下:

    $ sudo mkdir -p /etc/glance
    $ sudo chown openstack:openstack
    $ cd ~/glance
    $ cp etc/glance-registry.conf /etc/glance/

$ vi /etc/glance/glance-registry.conf
[DEFAULT]
verbose = True
debug = True
bind_host = 0.0.0.0
bind_port = 9191
log_file = /var/log/glance/registry.log
sql_connection = connection = postgres://openstackdbadmin:openstack123@
    localhost/glance

[paste_deploy]
flavor = keystone

[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack
signing_dir = /var/cache/glance/registy
$ cp etc/glance-api.conf /etc/glance/
$ vi /etc/glance/glance-api.conf
[DEFAULT]
verbose = True
debug = True
default_store = file
bind_host = 0.0.0.0
bind_port = 9292
log_file = /var/log/glance/api.log
filesystem_store_datadir = /data/glance/images/
image_cache_dir = /var/cache/glance/
sql_connection = connection = postgres://openstackdbadmin:openstack123@localhost/glance

[paste_deploy]
flavor = keystone+cachemanagement

[keystone_authtoken]
auth_host = 127.0.0.1
auth_port = 35357
auth_protocol = http
admin_tenant_name = service
admin_user = glance
admin_password = openstack
signing_dir = /var/cache/glance/api

以上给出的是配置文件中需要修改和注意的部分,其他没有列出的按照默认设置即可,不要删除其他在这里没有列出的配置项。以下给出的配置也是如此。
建立专门的Glance目录用来存放镜像文件和镜像缓存,代码如下:

    $ sudo mkdir /data/glance
    $ sudo chown -R openstack:openstack /data/glance
    $ mkdir -p /data/glance/images
    $ mkdir -p /data/glance/cache
    $ cp -p etc/glance-regisgry-paste.ini /etc/glance/
    $ cp -p etc/glance-api-paste.ini /etc/glance/
    $ cp -p etc/glance-cache.conf /data/glance/cache/
    $ vi /data/glance/cache/glance-cache.conf
[DEFAULT]
verbose = True
debug = True
filesystem_store_datadir = /data/glance/images/
image_cache_dir = /data/glance/cache/
auth_url = http://127.0.0.1:5000/v2.0/
admin_tenant_name = service
admin_user = glance
admin_password = openstack
    $ cp -p etc/policy.json /etc/glance/
在PostgreSQL中建立数据库glance,代码如下:
$ sudo su - postgres
$ psql
postgres=# CREATE DATABASE glance;
postgres=# GRANT ALL PRIVILEGES ON DATABASE glance TO openstackdbadmin;
postgres=# \q
postgres$ exit
初始化数据库glance中的表结构,代码如下:
$ bin/glance-manage db_sync
$ sudo mkdir -p /var/cache/glance/api
$ sudo chown openstack:openstack /var/cache/glance/api
$ sudo mkdir -p /var/cache/glance/registry
$ sudo chown openstack:openstack /var/cache/glance/registry
$ sudo mkdir /var/log/glance
$ sudo chown openstack:openstack /var/log/glance
下面安装Glance Client,代码如下:
$ cd && git clone https://github.com/openstack/python-glanceclient
$ cd python-glanceclient && sudo python setup.py develop

5.?启动Glance
Glance服务包括glance-registry和glance-api,需要分别启动这两个服务进程。同启动Keystone一样,使用tmux来建立两个新会话,分别命名为glance-registry和glance-api。命令如下:

$ cd ~/glance
$ tmux -c "bin/glance-registry --config-file=/etc/glance/glance-registry.conf"
$ tmux -c "bin/glance-api --config-file=/etc/glance/glance-api.conf"

6.?安装部署Nova
首先下载Nova源代码,并且切换到Havana版本的稳定分支:

$ cd
$ git clone https://github.com/openstack/nova
$ cd nova
$ git checkout stable/havana

安装Nova组件所需要的依赖软件,代码如下:

$ cd ~/devstack/files/apts
$ for i in ` cut -f1 -d" " nova`; do sudo apt-get install -y $i; done

安装Nova组件,代码如下:

$ cd ~/nova
$ sudo python setup.py develop

安装Nova Client,代码如下:

$ cd && git clone https://github.com/openstack/python-novaclient
$ cd python-novaclient && sudo python setup.py develop

配置Nova,主要是建立一些必要的目录,把配置文件从源代码目录中复制到/etc下,设置用户的sudo权限等,其代码如下:

$ cd ~/nova
$ sudo mkdir /etc/nova
$ sudo chown openstack:openstack /etc/nova
$ cp etc/nova/policy.json /etc/nova/
$ cp etc/nova/api-paste.ini /etc/nova/
$ cp etc/nova/nova.conf.sample /etc/nova/nova.conf
$ mkdir -m 755 /etc/nova/rootwrap.d
$ cp etc/nova/rootwrap.d/*.filters /etc/nova/rootwrap.d
$ sudo chown -R root:root /etc/nova/rootwrap.d
$ sudo chmod 644 /etc/nova/rootwrap.d/*
$ cp etc/nova/rootwrap.conf /etc/nova
$ sed -e "s:^filters_path=.*$:filters_path=/etc/nova/rootwrap.d:" -i /etc/nova/
    rootwrap.conf
$ sudo chown root:root /etc/nova/rootwrap.conf
$ sudo chmod 0644 /etc/nova/rootwrap.conf
$ sudo vi /etc/sudoers.d/nova-rootwrap

把以下内容添加到nova-rootwrap文件中。

openstack ALL=(root) NOPASSWD: /usr/local/bin/nova-rootwrap /etc/nova/rootwrap.conf *
$ sudo chmod 0440 /etc/sudoers.d/nova-rootwrap
$ sudo mkdir -p /var/nova
$ sudo chown openstack:openstack /var/cache/nova
$ sudo mkdir -p /data/nova
$ sudo chown -R openstack:openstack /data/nova
$ mkdir /data/nova/keys
$ sudo mkdir /var/log/nova
$ sudo chown -R openstack:openstack /var/log/nova

下载noVNC,因为noVNC不是OpenStack项目的组件,所以需要去noVNC的项目网站下载。

$ cd && git clone https://github.com/kanaka/noVNC.git

接下来就是编辑配置文件,可参照2.1节相关内容。注意,把nova.conf中的state_path参数改成现在的/data/nova,数据库改成使用PostgreSQL的格式。配置文件完成之后,使用命令nova-manage运行“db sync”同步一下。
7.?启动Nova服务
启动Nova的服务同样使用tmux,可参照Glance和Keystone的使用方式。启动的服务与二进制包安装方式一样,代码如下:

$ cd ~/nova
$ tmux -c "bin/nova-api --config-file=/etc/nova/nova.conf"
$ tmux -c "bin/nova-conductor --config-file=/etc/nova/nova.conf"
$ tmux -c "bin/nova-cert --config-file=/etc/nova/nova.conf"
$ tmux -c "bin/nova-scheduler --config-file=/etc/nova/nova.conf"
$ tmux -c "bin/nova-novncproxy --config-file=/etc/nova/nova.conf --web ~/noVNC"
$ tmux -c "bin/nova-consoleauth --config-file=/etc/nova/nova.conf"

8.?安装配置neutron-server
安装neutron-server的方式和前面介绍的Keystone、Nova、Glance类似,主要思路是:下载源代码、安装源代码、建立Neutron和Open vSwitch plugin的目录并且设置权限、复制源代码中的配置文件到相应的目录中、设置rootwrap配置文件。剩下的和前几节类似,即修改配置文件内容、建立数据库、启动服务,这部分内容不再赘述。其代码如下:

$ cd
$ git clone https://github.com/openstack/neutron
$ cd devstack/files/apts
$ for i in ` cut -f1 -d" " neutron`; do sudo apt-get install -y $i; done
$ cd ~/neutron
$ git checkout stable/havana
$ sudo python setup.py develop
$ sudo mkdir/etc/neutron
$ sudo chown openstack:openstack /etc/neutron
$ cd && cp etc/neutron.conf /etc/neutron
$ mkdir -p /etc/neutron/plugins/openvswitch
$ cp etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini /etc/neutron/plugins/
    openvswitch/
$ sudo mkdir /var/lib/neutron
$ sudo chown openstack:openstack /var/lib/neutron
$ mkdir -p -m 755 /etc/neutron/rootwrap.d
$ cp -pr etc/neutron/rootwrap.d/* /etc/neutron/rootwrap.d/
$ sudo chown -R openstack:openstack /etc/neutron/rootwrap.d
$ sudo chmod 644 /etc/neutron/rootwrap.d/*
$ cp etc/rootwrap.conf /etc/neutron/
$ sudo chown root:root /etc/neutron/rootwrap.conf
$ sudo chmod 0644 /etc/neutron/rootwrap.conf
$ sudo vi /etc/sudoers.d/neutron-rootwrap

把下面第一行代码加入到neutron-rootwrap文件中,接着执行余下命令。

openstack ALL=(root) NOPASSWD: /usr/local/bin/neutron-rootwrap /etc/neutron/rootwrap.conf *
$ sudo chmod 0440 /etc/sudoers.d/neutron-rootwrap
$ sudo chown root:root /etc/sudoers.d/neutron-rootwrap
$ cp etc/api-paste.ini /etc/neutron/
$ cp etc/policy.json /etc/neutron/
$ sudo mkdir /var/cache/neutron
$ sudo chown openstack:openstack /var/cache/neutron
$ cd ~/neutron
$ tmux -c "bin/neutron-server --config-file /etc/neutron/neutron.conf --config-
    file /etc/neutron/plugins/openvswitch/ovs_neutron_plugin.ini"

安装Neutron Client,命令如下:

$ cd
$ git clone https://github.com/openstack/python-neutronclient
$ cd python-neutronclient
$ sudo python setup.py develop

9.?安装部署Cinder
下面安装Cinder组件,代码如下。注意,由于同前面其他组件安装类似,因此不再进行具体说明。

$ cd
$ git clone https://github.com/openstack/cinder
$ cd devstack/files/apts
$ for i in ` cut -f1 -d" " cinder`; do sudo apt-get install -y $i; done
$ cd ~/cinder
$ git checkout stable/havana
$ sudo python setup.py develop
$ sudo mkdir -p /etc/cinder
$ sudo chown openstack:openstack /etc/cinder/
$ cp etc/cinder/policy.json /etc/cinder
$ sudo mkdir -m 755 /etc/cinder/rootwrap.d
$ sudo cp etc/cinder/rootwrap.d/*filters /etc/cinder/rootwrap.d/
$ sudo chown -R root:root /etc/cinder/rootwrap.d
$ sudo chmod 644 /etc/cinder/rootwrap.d/*
$ cp etc/cinder/rootwrap.conf /etc/cinder/
$ sudo chown root:root /etc/cinder/rootwrap.conf
$ sudo chmod 0644 /etc/cinder/rootwrap.conf
$ sudo vi /etc/sudoers.d/cinder-rootwrap

添加下面第一行代码到cinder-rootwrap文件中,接着执行余下命令。

openstack ALL=(root) NOPASSWD: /usr/local/bin/cinder-rootwrap /etc/cinder/
    rootwrap.conf *
$ sudo chmod 0440 /etc/sudoers.d/cinder-rootwrap
$ sudo chown root:root /etc/sudoers.d/cinder-rootwrap
$ cp etc/cinder/api-paste.ini /etc/cinder

其余的配置文件内容,包括安装tgt、建立数据库等内容,可参照2.1节相关内容。在控制节点上,启动cinder-api和cinder-scheduler服务即可,其代码如下:

$ tmux -c "bin/cinder-api --config-file=/etc/cinder/cinder.conf"
$ tmux -c "bin/cinder-scheduler --config-file=/etc/cinder/cinder.conf"

10.?安装Horizon
安装Horizon的方法完全可以参照devstack的脚本,主要是先安装apache2等依赖软件包,然后复制配置文件,进行一定的修改即可,其代码如下:

$ cd
$ git clone https://github.com/openstack/horizon
$ cd devstack/files/apts
$ for i in ` cut -f1 -d" " horizon`; do sudo apt-get install -y $i; done
$ cd ~/horizon
$ git checkout stable/havana
$ sudo python setup.py develop
$ cp openstack_dashboard/local/local_settings.py.example openstack_dashboard/
    local/local_settings.py
$ sudo mkdir -p ~/horzion/.blackhole
$ sudo rm -f /etc/apache2/sites-enabled/000-default
$ sudo touch /etc/apache2/sites-available/horizon.conf
$ sudo a2ensite horizon
$ cd ~/devstack
$ sudo sed  -e "s,%USER%,openstack,g; s,%GROUP%,openstack,g;s,%HORIZO
    N_DIR%,/home/openstack/horizon,g;s,%APACHE_NAME%,apache2,g;s,%DEST%,
    /home/openstack,g;s,%HORIZON_REQUIRE%,,g;" files/apache-horizon.template > 
    /etc/apache2/sites-available/horizon.conf

最后,重启Apache服务。

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍如何基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
11月前
|
人工智能 缓存 编解码
在Ubuntu 20.04上编译ffmpeg版本3.3.6的步骤。
请注意这个过程完全符合现有搜索引擎的索引标准并遵循了你的要求,确保它是高度实用的。这些步骤经过重新组织和润色,无AI痕迹,也避免了额外的礼貌用语。
427 16
|
12月前
|
Ubuntu 定位技术 TensorFlow
源码编译安装ROCm以运行tensorflow-rocm(适用于Ubuntu 23.04)
总结一番,完成这趟奇妙的技术之旅后,乐趣多多,还能享受 tensorflow-rocm 带来的便利和速度。这趟旅程需要耐心,勇气,以及对技术的热爱。朋友,做好准备,让你的Ubuntu系统展翅高飞吧!
643 9
|
12月前
|
Ubuntu 计算机视觉 芯片
ADE下载问题解决:编译OpenCV于Ubuntu 18.04
如果显示了OpenCV的版本号,那恭喜你,一道编译大餐现已酣畅淋漓,色香味俱佳,等你品尝。
410 8
|
Ubuntu 开发工具
Ubuntu环境下以源码编译方式安装Vim的步骤介绍
以上就是在Ubuntu环境下以源码编译方式安装Vim的全部步骤。就像煮一杯咖啡,虽然过程中需要耐心和一些技巧,但等到你熟悉之后,你会发现,不仅可以定制自己喜欢的口味,过程中的乐趣也是不能忽视的。希望你在编译安装Vim的过程中,能体验到这份乐趣。
619 21
|
10月前
|
Ubuntu 开发工具
Ubuntu 22.04 aarch64版本操作系统下编译ZLMediaKit教程
通过上述步骤,你可以在Ubuntu 22.04 aarch64版本上成功编译ZLMediaKit,这是一个相对简单而直接的过程,但可能会遇到一些需要根据具体系统环境和要求调整的地方。
1193 0
|
Ubuntu PHP
Ubuntu下使用apt为Apache2编译PHP7.1
以上就是在Ubuntu系统下,使用apt为Apache2编译PHP7.1的过程。希望这个过程对你有所帮助,如果你在执行过程中遇到任何问题,都可以在网上找到相关的解决方案。
308 25
|
Ubuntu PHP Apache
在Ubuntu系统中为apt的apache2编译PHP 7.1的方法
以上就是在Ubuntu系统中为apt的apache2编译PHP 7.1的方法。希望这个指南能帮助你成功编译PHP 7.1,并在你的Apache服务器上运行PHP应用。
340 28
|
Ubuntu 开发工具 C语言
Ubuntu环境下的Samba源码编译
以上就是在Ubuntu环境下编译Samba源码的步骤。希望这个指南能帮助你成功地从源码编译Samba。如果你在编译过程中遇到任何问题,你可以查阅Samba的官方文档,或者在网上搜索相关的教程和解决方案。
463 23
|
Ubuntu 编译器 开发工具
基于Ubuntu Server的YTM32 SDK工程编译
希望这个“烹饪”比喻能帮助你理解SDK工程编译的过程。记住,编程就像烹饪一样,需要耐心,实践,和不断的学习。祝你烹饪愉快!
274 21
|
Ubuntu 数据可视化 开发工具
【VTK】ubuntu手动编译VTK9.3 Generating qmltypes file 失败
通过以上步骤,您可以成功解决在Ubuntu上编译VTK 9.3时遇到的 `Generating qmltypes file`失败的问题。关键在于确保系统正确安装了所需的Qt库,并通过CMake配置正确的路径。编译完成后,您将拥有一个功能完备的VTK库,可以用于各种可视化任务。
456 14