3个版本
0.3.10 | 2023年6月18日 |
---|---|
0.3.9 | 2023年6月17日 |
0.3.8 | 2023年6月17日 |
#8 in #companion
110KB
2.5K SLoC
gvmkit-build
作为Golem注册表的伴随应用程序使用的Golem VM镜像构建器: https://registry.golem.network
要求
需要运行docker引擎。工具支持Linux、Windows和macOS。注意,在macOS ARM版本中,使用--platform linux/amd64选项进行docker构建。
安装
您可以使用pip安装gvmkit-build(需要python3和pip安装器)
pip install gvmkit-build
或从npm安装(需要npm安装)
npm install -g gvmkit-build
或使用cargo安装(需要Rust工具链,由于从源代码编译,所以有点慢)
cargo install gvmkit-build
或从github发布页面下载预构建版本
https://github.com/golemfactory/gvmkit-build-rs/releases
或从源代码构建,您可以在target/release/gvmkit-build(或Windows上的gvmkit-build.exe)中找到二进制文件
cargo build --release
镜像
Golem网络使用gvmi镜像作为创建VM的任务的基础。这些镜像基本上是squashfs镜像,附带一些元数据。可以使用此(gvmkit-build)工具从docker镜像准备这些镜像。
命名镜像
工具以主参数接受docker镜像名称。
Docker镜像ID由最多三部分组成: <username>/<image_name>:tag
它也可以是例如 <image_name>
(tag默认为最新版)
以下命令将在当前目录中构建镜像并创建*.gvmi文件
gvmkit-build <docker_image_id>
如果本地不存在镜像,工具会尝试从docker hub拉取它。
要成功将镜像添加到注册门户,您必须相应地命名镜像或使用
gvmkit-build <user_name>/<image_name>:<tag> --push
或如果您的本地镜像名称不兼容,使用
gvmkit-build <docker_image_id> --push-to <user_name>/<image_name>:<tag>
构建过程简要说明
工具正在创建新的容器,并将数据从给定的镜像复制到新容器中。复制完成后,在工具容器中使用mksquashfs命令创建squashfs镜像。在添加元数据后,创建*.gvmi文件,并删除工具容器。请注意,工具镜像将保留在您的计算机上以供将来使用(它非常小,所以不用担心磁盘空间)
[可选] - 构建 squashfs-tools 镜像
如果您想使用自己的工具而不从Docker Hub拉取:请进入squashfs-tools目录并运行
docker build . -t my_squash_fs_builder
将环境变量添加到运行gvmkit-build的文件夹中的.env文件中
SQUASHFS_IMAGE_NAME=my_squash_fs_builder
用于管理Docker镜像和容器,使用了bollard库。https://docs.rs/bollard/latest/bollard/
解决登录到注册门户的问题
该工具使用https://registry.golem.network作为默认的注册门户。您可以通过设置环境变量REGISTRY_URL
来更改此行为。您应该在注册门户上创建账户并为您的用户生成访问令牌。如果您真的不想创建账户,可以使用匿名上传(见下文关于匿名上传的部分)。
当指定了--login --push或--push-to选项时,工具会要求登录。
用于存储登录信息的是rpassword库:https://docs.rs/crate/rpassword/latest
在"gvmkit-build-rs/default"下只保存一个登录/令牌实例。因此,如果您使用新的用户/令牌对登录,旧的配对将被遗忘。
此选项将要求登录到注册门户
gvmkit-build --login
您可以使用命令来检查您的登录信息是否正确
gvmkit-build --login-check
如果您想忘记您的登录信息,可以使用它,这将清除您的登录信息
gvmkit-build --logout
上述命令是可选的,因为如果您使用--push或--push-to选项,您将自动被要求登录。
在某些系统中,当没有提供安全的存储时,您将被迫使用以下方法来保存登录/令牌对。您可以选择将它们放在工作目录的.env文件中,以便更方便。如果您在使用共享机器上使用它,请记住设置适当的文件权限(chmod 600 .env)。
REGISTRY_USER=<username-in-registry-portal>
REGISTRY_TOKEN=<access-token-generated-in-registry-portal>
当REGISTRY_USER/REGISTRY_TOKEN在环境变量中设置时,不会使用安全的rpassword存储。
上传到多个标签
该工具无法上传到多个标签,但您可以使用不同的标签多次调用它。所有操作步骤都会被缓存,因此无需担心多次重新上传相同的文件。
上传大文件
该工具使用分块上传,默认分块大小为10MB(不建议更改)。默认创建四个上传工作进程(您可以根据您的网络条件使用--upload-workers参数增加/减少工作进程的数量)。如果您认为上传已卡住,您始终可以停止并重新运行工具以完成下载。只有尚未上传的块才会再次上传。
注意:块的总数限制设置为1000(因此默认为10GB)。如果您想上传更大的文件,必须相应地设置更大的块大小。
不登录上传镜像
您可以匿名上传镜像。请注意,这种镜像的有效期有限,它们可能在一段时间后未经通知从注册门户中删除。
cargo run --release -- <image_name> --push --nologin
不构建部分上传镜像
如果您确信您有合适的*.gvmi文件,例如my-test.gvmi,您可以使用
gvmkit-build --direct-file-upload my-test.gvmi --push-to <user_name><image_name>/<tag>
或匿名上传
gvmkit-build --direct-file-upload my-test.gvmi --push --nologin
在创建镜像时更改squashfs选项
您可以通过更改mksquashfs中使用的压缩来生成更紧凑或不那么紧凑的镜像。
查找帮助以获取更多信息。请注意,目前Golem Network不支持zstd(您可以使用xz来创建更紧凑的镜像)。
gvmkit-build --help
依赖项
~24–43MB
~663K SLoC