Skip to main content

An unified toolset to publish openEuler images, including container, cloud, WSL etc.

Project description

EulerPublisher

eulerpublisher是Infra SIG提供的”一键式“自动构建和发布openEuler镜像的工具,主要覆盖以下场景:

  1. container images构建、发布
  2. cloud images构建、发布
  3. WSL images构建、发布

eulerpublisher仍处于开发过程中,目前已向PyPI上传软件包,请使用以下两种方式之一进行安装

  1. 下载源码到本地,执行
python setup.py install
  1. 使用pip安装,执行
pip install eulerpublisher

环境依赖

1.eulerpublisher实现多平台容器镜像构建功能依赖于docker和qemu,安装方式如下:

yum install qemu-img
yum install docker

多平台镜像构建使用docker buildx,安装的docker版本需满足>= 19.03或单独安装buildx插件,单独安装docker buildx方法如下:

1). 从Docker buildx项目的release页面找到适合自己平台的二进制文件。

2). 下载二进制文件到本地并重命名为docker-buildx,移动到docker的插件目录~/.docker/cli-plugins

3). 向二进制文件授予可执行权限chmod +x ~/.docker/cli-plugins/docker-buildx

2.eulerpublisher使用python实现,依赖见requirement.txt,安装如下:

pip install -r ./requirement.txt

使用说明

1. 发布容器镜像

基础容器镜像

本部分介绍如何使用eulerpublisher发布多平台(支持amd64和arm64)openeuler基础容器镜像(区分于应用镜像,如AI容器镜像)。该功能可用于eulerpublisher从openeuler官方获取容器镜像,进行二次定制后发布至第三方仓库,镜像产品的tag严格遵守oEEP-0005的规范。

  • 步骤1 、获取构建基础镜像的必要文件
eulerpublisher container base prepare --version {VERSION} --index {INDEX}

这个命令中--version必须显式指定,用于获取对应版本的构建所需文件。 --index指定官方镜像的路径,可选docker_imgdocker_img/update/Y-M-D, 选择docker_img表明获取openeuler的release版本、选择docker_img/update/Y-M-D表明获取update版本,不显式指定时默认获取release版本进行二次定制。

  • 步骤2 、构建并push镜像到目标仓库

执行本步之前,需要先配置push的目标仓库username和password的环境变量用以登陆,确保push可以成功,执行

export LOGIN_USERNAME="username"
export LOGIN_PASSWORD="password"

完成上述步骤1并配置LOGIN_USERNAMELOGIN_PASSWORD之后,可执行如下命令进行build和push

eulerpublisher container base push --repo {REPO} --version {VERSION} --registry {REGISTRY} --dockerfile {DOCKERFILE}

此命令中,--repo--version必须显式指定,--registry不显式指定时默认指向dockerhub (https://hub.docker.com),--dockerfile指定自定义dockerfile的绝对路径,不显式指定时使用默认Dockerfile。由于docker builds build构建的多平台image无法在本地缓存,build的时候必须同步push到对应repo(可以是私有的)。因此,有测试需求的情况下,尽量先将构建的container image push到私有仓库验证完成后再publish到最终目标仓库。

  • 步骤3 、测试基础容器镜像
eulerpublisher container base check --repo {REPO} --version {VERSION} --registry {REGISTRY}

此命令中,所有参数必须和上述步骤2的参数一致,目前仅适用于测试使用默认Dockerfile构建的镜像。

  • 一键发布
# 向单个仓库发布容器镜像:
eulerpublisher container base publish --repo {REPO} --version {VERSION} --index {INDEX} --registry {REGISTRY} --dockerfile {Dockerfile}

此命令是上述步骤1~2的顺序功能集合,每个参数的含义与上述相同。使用示例如下

示例:
eulerpublisher container base publish --repo openeuler/openeuler --version 22.03-LTS-SP1 --registry registry-1.docker.io --dockerfile Dockerfile

上述执行的效果是向dockerhub(https://hub.docker.com)的openeuler/openeuler仓库发布由Dockerfile定制的tag为22.03-LTS-SP1的支持arm64、amd64多平台的openeuler基础容器镜像。

为了方便将一个镜像同时发布到多个仓库,可使用如下命令:

# 向多个仓库发布容器镜像:
eulerpublisher container base publish --version {VERSION} --index {INDEX}  --dockerfile {Dockerfile} --mpublish

此命令使用--mpublish使能"publish one image to multiple repositories", 不再需要设置--repo--registry参数。目标repositories的信息由etc/container/registry.yaml指定,内容如下

registry-1:
  - LOGIN_USER_1
  - LOGIN_PASSWD_1
  - registry-1/{USER_1}/{REPOSITORY-1}

registry-2:
  - LOGIN_USER_2
  - LOGIN_PASSWD_2
  - registry-2/{USER_2}/{REPOSITORY-2}

  ...

其中每个仓库都维护一组信息,{LOGIN_USER_1}和{LOGIN_PASSWD_1}分别是登录registry-1的用户名和密码的环境变量,registry-1/{USER_1}/{REPOSITORY-1}是完整的仓库路径,其他仓库的信息也是如此。

AI容器镜像

AI容器镜像在基础容器镜像之上包含完整的AI应用开发软件栈,向用户提供开箱即用的开发、使用体验,详细信息见oEEP-0014

2. 构建cloud images

通用云镜像构建

使用eulerpublisher在本地执行机上进行通用云镜像构建,定制的镜像符合大多数主流云厂商镜像发布的要求,可用于发布。

  • 步骤1 、基础构建准备
eulerpublisher cloudimg gen prepare --version {VERSION} --arch {ARCH}

此命令中所有参数均需显式指定,--version是构建目标镜像的openEuler版本号,--arch指定构建目标镜像的架构类型,目前仅支持aarch64x86_86, 该步骤实现的功能是从openEuler Repo获取基础镜像,用于下一步定制。

  • 步骤2 、构建镜像
eulerpublisher cloudimg gen build --version {VERSION} --arch {ARCH} --output {NAME} --rpmlist {RPMLIST}

此命令中{NAME}指定最终构建镜像的名称,{RPMLIST}是用户需要预安装的软件包列表文件,一旦指定不能为空。其余参数作用与步骤1命令中参数作用一致。

# rpmlist内容示例
tar
make
zip
curl
...

执行此命令后,会在执行机/etc/eulerpublisher/cloudimg/gen/output/目录下生成一个命名为{NAME}的最终镜像,该镜像满足目前大多数主流公有云厂商云市场镜像发布的技术要求,用户可手动进行镜像发布。

AWS云镜像构建

使用eulerpublisher构建AMI时,需要预先使用awscli进行aws configure配置,完成身份认证,配置信息如下:

$ aws configure
- AWS Access Key ID: <key_id>
- AWS Secret Access Key: <secret_key>
- Default region name: <region>

其中,key_idsecret_key是一对用于访问认证的密钥对,生成方法参见AWS管理访问密钥region是执行构建AMI任务的域。

  • 步骤1 、AMI构建准备
eulerpublisher cloudimg aws prepare --version {VERSION} --arch {ARCH} --bucket {BUCKET}

此命令中所有参数均需显式指定,--version是构建目标AMI的openEuler版本号,--arch指定构建AMI的架构类型,目前仅支持aarch64x86_86--bucket是存储桶名,存储桶用于保存prepare上传的原始raw镜像,bucketaws configure配置的region内。

执行此命令后,会在AWS对应regionbucket中出现一个命名为openEuler-{VERSION}-{ARCH}.raw的原始镜像(例如:openEuler-22.03-LTS-SP2-x86_64.raw)。

  • 步骤2 、构建AMI
eulerpublisher cloudimg aws build --version {VERSION} --arch {ARCH} --bucket {BUCKET} --region {REGION} --rpmlist {RPMLIST}

此命令中除--rpmlist以外的所有参数均需显式指定,参数作用与eulerpublisher cloudimg aws prepare命令一致。eulerpublisher通过aws_install.sh实现定制AMI镜像的能力,目前默认的aws_install.sh满足构建得到的AMI符合AWS Marketplace AMI发布的要求,需要预安装到镜像中的软件由--rpmlist指定的文件{RPMLIST}确定。

# rpmlist示例
tar
make
zip
curl
...

执行此命令后,会在AWS对应regionEC2 AMI列表中生成一个命名为openEuler-{VERSION}-{ARCH}-{TIME}-hvm的最终镜像(例如:openEuler-22.03-LTS-SP2-x86_64-20230802_010324-hvm)。

  • 发布AMI到AWS Marketplace

同时,eulerpublisher提供“一键发布”到AWS个人账户的能力,即上述步骤1、2的顺序执行,命令如下:

eulerpublisher cloudimg aws publish --version {VERSION} --arch {ARCH} --bucket {BUCKET} --region {REGION} --rpmlist {RPMLIST}

生成的AMI满足AWS Marketplace云镜像发布的要求,如有需要可进行镜像产品发布。由于AWS Marketplace存在人工审核环节,无法通过自动化流程一键发布,用户需手动操作申请发布AMI,见https://aws.amazon.com/marketplace

3. 发布WSL images

待补充

参与贡献

  1. Fork 本仓库
  2. 新建分支
  3. 提交代码
  4. 新建 Pull Request

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eulerpublisher-0.0.3.tar.gz (159.0 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page