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

本文涉及的产品
云原生数据库 PolarDB MySQL 版,通用型 2核4GB 50GB
云原生数据库 PolarDB PostgreSQL 版,标准版 2核4GB 50GB
简介:

本节书摘来自华章出版社《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数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
相关文章
|
1月前
|
Ubuntu 应用服务中间件 nginx
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
本文是关于Ubuntu系统中使用ffmpeg 3.2.16源码编译OpenCV 3.4.0的安装笔记,包括安装ffmpeg、编译OpenCV、卸载OpenCV以及常见报错处理。
154 2
Ubuntu安装笔记(三):ffmpeg(3.2.16)源码编译opencv(3.4.0)
|
1月前
|
Ubuntu Linux C语言
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
本文介绍了在Ubuntu 18.04系统上编译安装OpenCV 3.4.0及其扩展包opencv_contrib 3.4.0的详细步骤,包括下载源码、安装依赖、配置CMake和编译安装,以及常见问题的解决方法。
103 1
Ubuntu安装笔记(二):ubuntu18.04编译安装opencv 3.4.0 opencv_contrib3.4.0
|
30天前
|
Ubuntu 编译器 计算机视觉
Ubuntu系统编译OpenCV4.8源码
【10月更文挑战第17天】只要三步即可搞定,第一步是下载指定版本的源码包;第二步是安装OpenCV4.8编译需要的编译器与第三方库支持;第三步就是编译OpenCV源码包生成安装文件并安装。
|
1月前
|
缓存 NoSQL Ubuntu
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
大数据-39 Redis 高并发分布式缓存 Ubuntu源码编译安装 云服务器 启动并测试 redis-server redis-cli
56 3
|
1月前
|
Ubuntu Shell API
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
Ubuntu 64系统编译android arm64-v8a 的openssl静态库libssl.a和libcrypto.a
|
1月前
|
Web App开发 Ubuntu 前端开发
【踩坑记】Ubuntu 20.04.6 LTS下编译安装gcc 4.4.0
【踩坑记】Ubuntu 20.04.6 LTS下编译安装gcc 4.4.0
|
2月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【9月更文挑战第8天】在Ubuntu中,编译指定版本的源码`make`是一项挑战但也极具价值的任务。它允许我们根据特定需求定制软件,提升性能与功能适配。首先需安装必要工具包如GCC等;接着下载所需源码并阅读相关文档以了解编译要求。通过运行`./configure`、`make`及`sudo make install`命令完成编译安装流程。过程中可能遇到依赖项缺失或编译选项设置不当等问题,需根据错误提示逐一解决。对于大型项目,可利用多核编译加快速度。掌握这一技能有助于更好地探索开源世界。
49 3
|
3月前
|
Ubuntu Linux
ubuntu源码编译指定版本make
以上内容涵盖了在Ubuntu中编译安装指定版本软件的全过程,这是一个技术性很强的操作,不仅可以带来定制化的安装体验,同时也能增加对系统管理和软件构建流程的理解。遵循以上步骤,任何有一定基础的用户都能够按需编译和安装软件。
58 8
|
3月前
|
Ubuntu Linux Windows
如何在WSL中的ubuntu编译Linux内核并且安装使用ebpf?
请注意,在WSL1中可能会由于内核架构限制而无法成功进行以上过程,WSL2对于Linux内核的完整支持更为合适。此外,部分步骤可能因不同的Linux发行版或内核版本而异。
186 4
|
3月前
|
Ubuntu 编译器 C语言
Ubuntu 源码编译指定版本 make:神秘代码背后的激情冒险,等你来战!
【8月更文挑战第19天】在Ubuntu中编译指定版本的`make`工具是一项高级技巧,能让你针对特定需求定制软件。首先确保已安装`build-essential`等必要组件。下载所需版本源码后,遵循README指南配置与编译。使用`./configure`检测环境,`make`编译,最后`sudo make install`安装。面对问题如缺失依赖或编译选项不当,需耐心解决。对于大型项目,可利用多核加速编译,如`make -j 4`。这一过程虽具挑战,却能显著提升软件性能与功能适配。
74 2
下一篇
无影云桌面