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仍处于开发过程中,使用以下方式进行安装

python setup.py install

环境依赖

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. 发布container images

本部分介绍如何使用eulerpublisher发布多平台(支持amd64和arm64)openeuler容器镜像。eulerpublisher以openeuler官方发布的容器镜像为基础,进行二次定制后发布至第三方仓库。

  • 步骤1 、获取container image构建的必要文件
eulerpublisher container 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 、构建container image并push到目标仓库

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

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

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

eulerpublisher container 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 、测试container image
eulerpublisher container check --repo {REPO} --version {VERSION} --registry {REGISTRY}

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

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

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

示例:
eulerpublisher container 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容器镜像, 基础镜像来自于22.03-LTS-SP1release版本。

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

# 向多个仓库发布容器镜像:
eulerpublisher container 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}是完整的仓库路径,其他仓库的信息也是如此。

2. 发布cloud images

本部分介绍不同云商的云镜像构建及发布流程:

AWS云镜像(AMI)发布

使用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.1.tar.gz (85.2 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