Skip to main content

用于容器生成的 Funtoo 框架。

项目描述

作者:丹尼尔·罗宾斯< drobbins @ funtoo 组织>; 版权所有 2022,Daniel Robbins,Funtoo Solutions, Inc.

执照

根据 Apache 许可证 2.0 版(“许可证”)获得许可;除非遵守许可,否则您不得使用此文件。您可以在以下网址获取许可证的副本

http://www.apache.org/licenses/LICENSE-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 版本最初支持以下容器格式,未来版本中将添加更多格式:

  1. Docker (20.10.17) 映像

  2. 奇点 (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 syncemerge,您可能希望创建一个大小合适的覆盖文件系统,以允许这些操作成功完成,而不会填满我们上面使用的 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 系统——用于开发或其他任务。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。

源分布

funtoo-boxer-1.0.3.tar.gz (14.9 kB 查看哈希)

已上传 source