我正在监狱中设置 *ARR 套件应用程序(使用 Bastille 管理器)。我曾经在 debian 和 docker 中执行此操作,但这次我转向 freeBSD 来尝试它的本机 zfs 支持。
在设置过程中,我需要设置一个统一的用户,设置外部安装(涉及的位)并在每个监狱上安装应用程序。我在试用系统上手动完成了此操作,并且效果完美(终于!)。
在 docker 中,这一切都是以撰写脚本的形式自动化进行的。我写了一次,然后当我重新安装/升级主机时就不需要担心它了。
我可以在我的案例中使用任何自动化工具吗?
自动化工具将是简单的 shell 脚本,或者如果您已经在使用Bastille,您将创建一个同样简单的模板。
您可以通过直接修改在主机系统上运行脚本的文件系统来从监狱“外部”执行操作。或者你可以使用jexec(8)让它们在监狱(容器)的上下文中运行
这将在容器上下文中启动一个 shell。您可以只启动 shell 脚本,而不是启动交互式 shell。
当您使用 Bastille 工具包装所有内容时,同样的原则也适用。
CMD
在模板部分中查找。在该页面的顶部,他们链接到一个存储库,其中包含许多现成的示例。如果我们快速浏览一下apache,我们会在 中看到以下内容
Bastillefile
:然后
Bastillefile
是模板自动化挂钩列表,它们是典型的 FreeBSD 原语。并且CMD
允许您运行任何命令/脚本。大多数用户设置通常是在 FreeBSD 上使用端口/包(即 apache)自动完成的。这就是为什么你看不到很多食谱这样做的原因。如果您想进一步了解这一点,您应该查看 ports 树,了解如何创建包。这在FreeBSD Porter's Handbook中有记录。因此,对于 FreeBSD,您将自己的软件包作为自动化的一部分(通常使用poudiere)并不罕见。然而,这对于家庭设置来说有点过分了,但这就是“事情是如何完成的”。
但我们仍然可以毫不费力地设置用户。我们只需使用pw并使用以下选项扩展手册页中给出的示例
-u
:jexec
您可以使用或 作为CMD
中的命令从主机将其运行到监狱中Bastillefile
。如果你想跑出
pw
监狱,你应该使用选项-R rootdir
和-V etcdir
。然后你可以将它们指向你的监狱的 chroot 位置。请记住,当您使用
jexec
或运行时,CMD
您只能访问分配给监狱的 chroot 上下文中的文件。也就是说:如果你想在监狱内运行脚本,它需要位于监狱文件系统内。