用于容器生成的 Funtoo 框架。
项目描述
作者:丹尼尔·罗宾斯< drobbins @ funtoo 。组织>; 版权所有 2022,Daniel Robbins,Funtoo Solutions, Inc.
执照
根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可,否则您不得使用此文件。您可以在以下网址获取许可证的副本
除非适用法律要求或书面同意,否则根据许可分发的软件将按“原样”分发,没有任何明示或暗示的保证或条件。有关许可下的特定语言管理权限和限制,请参阅许可。
官方位置
拳击手的官方位置是:
https://github.com/funtoo/boxer
boxer 的问题可以作为 GitHub 问题或https://bugs.funtoo.org提交,使用在https://auth.funtoo.org/new创建的帐户。
介绍
该存储库包含用于从 Funtoo stage3 tarball 创建容器和/或虚拟机映像的 Funtoo Linux 工具。这个工具的存在是为了让 Funtoo 用户无需搜索散布在互联网上某个地方的魔法脚本来创建容器——相反,我们现在有了一个官方工具来创建所需的任何类型的图像,所有这些都只需要一个工具,并且由 Funtoo Linux 项目正式支持、维护和记录。我希望这个工具的用户会发现它使用起来方便且无故障。
兼容性
1.0.0 版本最初支持以下容器格式,未来版本中将添加更多格式:
Docker (20.10.17) 映像
奇点 (3.8.7) 图像
生成的容器被设计为长时间运行并具有官方的 Funtoo 启动过程——换句话说,/sbin/init 将启动,OpenRC 将初始化系统,因此可以设置和启动邮件服务器等标准 Funtoo 服务使用 OpenRC,OpenRC 监督进程将正常工作,env-update 将正常工作,等等。
在某些情况下,也可以使用这些容器来拥有不同的入口点,绕过 Funtoo Linux 的官方启动过程并运行特定的可执行文件,但为了支持 Funtoo Linux 的完整功能,我们将始终努力提供完整的功能。 ,长期运行的 Funtoo Linux 容器将完全支持 OpenRC 作为我们的主要目标。
先决条件
对于您希望为其制作映像的容器系统,您需要在本地安装该容器系统,并且您的用户帐户需要获得使用它的权限。
此外,您还需要 Python 3.7 或更高版本,以及安装并可用的 SubPop、Jinja2 和 PyYAML python 模块。这可以通过从 PyPi 安装 funtoo-boxer 来完成:
$ pip install funtoo-boxer
或者通过在 Funtoo Linux 下安装boxer Funtoo 包,如下所示:
$ emerge boxer
直接从 Git 选项
如果您安装了所有必要的依赖项,则可以轻松地从实时 git 存储库运行 boxer。这可以按如下方式完成:
$ git clone https://github.com/funtoo/boxer $ cd boxer $ export PYTHONPATH=$(pwd) $ bin/boxer
从 git 存储库运行时,git 存储库中的tmp目录将用作构建容器的临时存储。当作为一个包安装时, /var/tmp中的一个目录将用于此目的。
从第三阶段开始
boxer实用程序旨在始终从从https://build.funtoo.org下载的“stage3 tarball”开始,或者使用 Funtoo 的 Metro 构建工具构建。此阶段 3 将由 boxer 完成,以便为支持的目标之一制作功能容器。
现在,让我们看看 boxer 支持的不同目标以及如何使用它们。
生成 Docker 容器
设置 Docker
在 Funtoo Linux 系统上,您需要设置 Docker 并启动docker服务, 如果您希望能够在没有 root身份的情况下运行boxer,请将当前用户添加到docker组:
$ sudo emerge app-emulation/docker $ sudo rc-update add docker default $ sudo rc $ sudo usermod -a -G docker $USER <log out, log back in>
创建一个 Docker 容器
如果您在docker组中,您现在可以使用 docker 构建 Funtoo 容器。
生成 Docker 容器时,您生成的容器将被添加到本地 Docker 镜像存储库中,并且--tag选项指定的标签将应用于镜像(如果提供)。此外,--push选项还可用于指示 boxer 将图像推送到 Docker Hub。
这是一个使用 boxer 从 Funtoo stage3 创建 Docker 容器、启动它、输入它并在其中运行命令的示例:
$ boxer docker --tag funtoo/boxer-generic_64:2022-06-16 --stage /var/tmp/stage3-generic_64-next-2022-06-16.tar.xz $ docker run -d --name=foobs funtoo/boxer-generic_64:2022-06-16 $ docker exec -it foobs /bin/bash 03ec0962bada / # ego sync ...
生成奇点容器
设置奇点
在 Funtoo Linux 系统上,你只需要 emerge sys-cluster/singularity。Singularity 是一个独立的工具,因此它不需要像 Docker 或 LXD 那样运行的独立系统守护进程。
创建一个奇点容器
当使用 boxer 生成 Singularity(“sif 格式”)容器时,默认情况下,该容器将写入 当前工作目录中名为stage3-funtoo.sif的文件中。或者,--out <filename> 选项可用于指定备用位置和/或名称。此外,--force选项可用于覆盖目标文件(如果存在)。
在为非个人或生产用途创建 Singularity 容器时,建议以 root 身份运行 boxer,这将允许权限、扩展属性和 ACL 正确保存在结果容器中,而不是映射到当前运行的用户。我们将在以下示例中使用此方法,如下:
$ sudo boxer sif --stage /var/tmp/stage3-generic_64-next-2022-06-16.tar.xz --force $ sudo singularity instance start --boot --writable-tmpfs funtoo-stage3.sif f1 $ sudo singularity shell instance://f1
如前所述,本文档演示了使用长时间运行的容器,将/sbin/init作为容器中的第一个进程正确启动,并启动 OpenRC 以便可以使用功能齐全的 Funtoo Linux 系统。也可以在 Funtoo 环境中简单地执行二进制文件而不使用实例。
启动可写奇点 Funtoo 容器
还要注意上面的--writable-tmpfs选项的使用。这允许奇异性(默认情况下使用只读 squashfs 文件系统)在容器内写入,这允许像sshd这样的东西 生成其初始主机密钥,以及其他需要可写根文件系统的官方 Funtoo Linux 启动的重要东西。但是,此 tmpfs 选项仅适用于容器内的最小 I/O,并且如果您执行任何重要的 I/O(例如运行 ego sync )将耗尽。如果您打算将容器用于更重要的工作,例如运行ego sync和emerge,您可能希望创建一个大小合适的覆盖文件系统,以允许这些操作成功完成,而不会填满我们上面使用的 tmpfs 覆盖。下面,我们创建一个 4096 MiB 的覆盖来支持我们的奇点实例中的写入:
$ singularity overlay create --size 4096 ./overlay.img $ sudo singularity instance start --boot --overlay ./overlay.img funtoo-stage3.sif f2 $ sudo singularity shell instance://f2 Singularity> ego sync
使用这种技术启动 Singularity 容器将允许将实例用作功能齐全的 Funtoo Linux 系统——用于开发或其他任务。