概述
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级
- Root Package为总RPM包,原则上不包含任何文件。只做服务集合用。用户可以使用该RPM一键安装所有子RPM包。 如果项目有doc相关的文件,也可以单独成包(可选)
- Service Package为子服务RPM包,包含该服务的systemd服务启动文件、自己独有的配置文件等。
- Common Package是共用依赖的RPM包,包含各个子服务依赖的通用配置文件、系统配置文件等。
- 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 │
└─┘ | └─────────────────┘ └─────────────────────────────────┘ | └──────────────────────┘ └────────────────────────────┘
- Root Package RPM包包含了除python源码外的其他所有文件,包括服务启动文件、项目配置文件、系统配置文件等等。 如果项目有doc相关的文件,也可以单独成包(可选)
- 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互斥。
- Root包只包含不互斥的子包,互斥的子包单独提供。 如果项目有doc相关的文件,也可以单独成包(可选)
- Service Package为子服务RPM包,包含该服务的systemd服务启动文件、自己独有的配置文件等。 互斥的Service包不被Root包所包含,用户需要单独安装。
- Common Package是共用依赖的RPM包,包含各个子服务依赖的通用配置文件、系统配置文件等。
- 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 │
└─┘ | └─────────────────┘ └────────────────────────┘ | └──────────────────────────┘ └───────────────────────────────┘
其他
- openEuler社区对python2和python3 RPM包的命名有要求,python2的包前缀为python2-,python3的包前缀为python3-。因此,OpenStack要求开发者在打Library的RPM包时,也要遵守openEuler社区规范。