概述

OpenStack每个服务通常包含若干子服务,针对这些子服务,我们在打包的时候也要做拆包处理,分成若干个子RPM包。本文档规定了openEuler SIG对OpenStack服务的RPM包拆分的原则。

原则

通用原则

采用分层架构,RPM包结构如下图所示,以openstack-nova为例:

Level | Package                                                                       | Example
      |                                                                               |  
 ┌─┐  |                       ┌──────────────┐        ┌────────────────────────┐      | ┌────────────────────┐ ┌────────────────────────┐
 │1│  |                       │ Root Package │        │ Doc Package (Optional) │      | │ openstack-nova.rpm │ │ openstack-nova-doc.rpm │
 └─┘  |                       └────────┬─────┘        └────────────────────────┘      | └────────────────────┘ └────────────────────────┘
      |                                │                                              |
      |          ┌─────────────────────┼───────────────────────────┐                  |
      |          │                     │                           |                  |
 ┌─┐  | ┌────────▼─────────┐ ┌─────────▼────────┐                  |                  | ┌────────────────────────────┐ ┌────────────────────────┐
 │2│  | │ Service1 Package │ │ Service2 Package │                  |                  | │ openstack-nova-compute.rpm │ │ openstack-nova-api.rpm │
 └─┘  | └────────┬─────────┘ └────────┬─────────┘                  |                  | └────────────────────────────┘ └────────────────────────┘
      |          |                    |                            |                  |
      |          └──────────┬─────────┘                            |                  |
      |                     |                                      |                  |
 ┌─┐  |             ┌───────▼────────┐                             |                  | ┌───────────────────────────┐
 │3│  |             │ Common Package │                             |                  | │ openstack-nova-common.rpm │
 └─┘  |             └───────┬────────┘                             |                  | └───────────────────────────┘
      |                     │                                      |                  |
      |                     │                                      |                  |
      |                     │                                      |                  |
 ┌─┐  |            ┌────────▼────────┐            ┌────────────────▼────────────────┐ | ┌──────────────────┐ ┌────────────────────────┐
 │4│  |            │ Library Package ◄------------| Library Test Package (Optional) │ | │ python2-nova.rpm │ │ python2-nova-tests.rpm │
 └─┘  |            └─────────────────┘            └─────────────────────────────────┘ | └──────────────────┘ └────────────────────────┘

如图所示,分为4级

  1. Root Package为总RPM包,原则上不包含任何文件。只做服务集合用。用户可以使用该RPM一键安装所有子RPM包。 如果项目有doc相关的文件,也可以单独成包(可选)
  2. Service Package为子服务RPM包,包含该服务的systemd服务启动文件、自己独有的配置文件等。
  3. Common Package是共用依赖的RPM包,包含各个子服务依赖的通用配置文件、系统配置文件等。
  4. Library Package为python源码包,包含了该项目的python代码。 如果项目有test相关的文件,也可以单独成包(可选)

涉及本原则的项目有:

  • openstack-nova
  • openstack-cinder
  • openstack-glance
  • openstack-placement
  • openstack-ironic

特殊情况

有些openstack组件本身只包含一个服务,不存在子服务的概念,这种服务则只需要分为两级:

 Level | Package                                                         | Example
       |                                                                 |  
  ┌─┐  |               ┌──────────────┐  ┌────────────────────────┐      | ┌────────────────────────┐ ┌────────────────────────────┐
  │1│  |               │ Root Package │  │ Doc Package (Optional) │      | │ openstack-keystone.rpm │ │ openstack-keystone-doc.rpm │
  └─┘  |               └───────┬──────┘  └────────────────────────┘      | └────────────────────────┘ └────────────────────────────┘
       |                       |                                         |   
       |          ┌────────────┴───────────────────┐                     |
  ┌─┐  |  ┌───────▼─────────┐     ┌────────────────▼────────────────┐    | ┌──────────────────────┐ ┌────────────────────────────┐
  │2│  |  │ Library Package ◄-----| Library Test Package (Optional) │    | │ python2-keystone.rpm │ │ python2-keystone-tests.rpm │
  └─┘  |  └─────────────────┘     └─────────────────────────────────┘    | └──────────────────────┘ └────────────────────────────┘
  1. Root Package RPM包包含了除python源码外的其他所有文件,包括服务启动文件、项目配置文件、系统配置文件等等。 如果项目有doc相关的文件,也可以单独成包(可选)
  2. Library Package为python源码包,包含了该项目的python代码。 如果项目有test相关的文件,也可以单独成包(可选)

涉及本原则的项目有:

  • openstack-keystone
  • openstack-horizon

还有些项目虽然有若干子RPM包,但这些子RPM包是互斥的,则这种服务的结构如下:

Level | Package                                                                           | Example
      |                                                                                   |  
 ┌─┐  |                       ┌──────────────┐        ┌────────────────────────┐          | ┌───────────────────────┐ ┌───────────────────────────┐
 │1│  |                       │ Root Package │        │ Doc Package (Optional) │          | │ openstack-neutron.rpm │ │ openstack-neutron-doc.rpm │
 └─┘  |                       └────────┬─────┘        └────────────────────────┘          | └───────────────────────┘ └───────────────────────────┘
      |                                │                                                  |
      |          ┌─────────────────────┴───────────────────────────────┐                  |
      |          │                                                     |                  |
 ┌─┐  | ┌────────▼─────────┐ ┌──────────────────┐ ┌──────────────────┐ |                  | ┌──────────────────────────────┐ ┌───────────────────────────────────┐ ┌───────────────────────────────────┐
 │2│  | │ Service1 Package │ │ Service2 Package │ │ Service3 Package │ |                  | │ openstack-neutron-server.rpm │ │ openstack-neutron-openvswitch.rpm │ │ openstack-neutron-linuxbridge.rpm │
 └─┘  | └────────┬─────────┘ └────────┬─────────┘ └────────┬─────────┘ |                  | └──────────────────────────────┘ └───────────────────────────────────┘ └───────────────────────────────────┘
      |          |                    |                    |           |                  |
      |          └────────────────────┼────────────────────┘           |                  |
      |                               |                                |                  |
 ┌─┐  |                       ┌───────▼────────┐                       |                  | ┌──────────────────────────────┐
 │3│  |                       │ Common Package │                       |                  | │ openstack-neutron-common.rpm │
 └─┘  |                       └───────┬────────┘                       |                  | └──────────────────────────────┘
      |                               │                                |                  |
      |                               │                                |                  |
      |                               │                                |                  |
 ┌─┐  |                      ┌────────▼────────┐      ┌────────────────▼────────────────┐ | ┌─────────────────────┐ ┌───────────────────────────┐
 │4│  |                      │ Library Package ◄------| Library Test Package (Optional) │ | │ python2-neutron.rpm │ │ python2-neutron-tests.rpm │
 └─┘  |                      └─────────────────┘      └─────────────────────────────────┘ | └─────────────────────┘ └───────────────────────────┘

如图所示,Service2和Service3互斥。

  1. Root包只包含不互斥的子包,互斥的子包单独提供。 如果项目有doc相关的文件,也可以单独成包(可选)
  2. Service Package为子服务RPM包,包含该服务的systemd服务启动文件、自己独有的配置文件等。 互斥的Service包不被Root包所包含,用户需要单独安装。
  3. Common Package是共用依赖的RPM包,包含各个子服务依赖的通用配置文件、系统配置文件等。
  4. Library Package为python源码包,包含了该项目的python代码。 如果项目有test相关的文件,也可以单独成包(可选)

涉及本原则的项目有:

  • openstack-neutron

依赖库

一个依赖库一般只包含一个RPM包,不需要做拆分处理。

 Level | Package                                         | Example
       |                                                 |      
  ┌─┐  |  ┌─────────────────┐ ┌────────────────────────┐ | ┌──────────────────────────┐ ┌───────────────────────────────┐
  │1│  |  │ Library Package │ │ Help Package (Optional)│ | │ python2-oslo-service.rpm │ │ python2-oslo-service-help.rpm │
  └─┘  |  └─────────────────┘ └────────────────────────┘ | └──────────────────────────┘ └───────────────────────────────┘

其他

  1. openEuler社区对python2和python3 RPM包的命名有要求,python2的包前缀为python2-,python3的包前缀为python3-。因此,OpenStack要求开发者在打Library的RPM包时,也要遵守openEuler社区规范。