如何正确使用Gentoo Linux作为现有发行版的补充?

如何正确使用Gentoo Linux作为现有发行版的补充?

虽然我原本想完全取代我的 NAS 使用的 Linux 发行版,同时我得出的结论是,最好是尽可能不修改现有系统,而仅通过 Gentoo(或 Arch)Linux 对其进行补充 - 这基本上就是上一个问题的答案建议。因此,目前对原始系统的唯一修改包括/gentoochroot通过以下脚本进入的目录:

#!/bin/bash
set -e

cp -L /etc/resolv.conf etc/ # for internet access
cp -P /etc/localtime etc/   # to keep the timezones consistent
cp -d /etc/mtab etc/        # to check mounted systems
# cp /etc/{mdadm.conf,hosts,fstab} etc  # Maybe?
mount --rbind /mnt mnt      # use host's mounts
mkdir host; mount --bind / host
mount --bind /var/log var/log # or run own syslogd?

mount --bind /dev dev
mount -t devpts devpts dev/pts
mount --bind /proc proc  # or mount -t procfs proc proc?
mount --bind /sys sys    # or mount -t sysfs sysfs sys?
chroot . /usr/sbin/sshd -p 22222
# chroot . /bin/env -i TERM=$TERM /bin/bash

现在我可以简单地ssh通过端口 22222 进入主机并最终进入该chroot环境,其行为基本上类似于 Gentoo Linux,并且该脚本可以从主机的/etc/init.d/rcS.

但当然我不想最终以这种方式启动我想手动使用的每个 Gentoo 服务 - 毕竟这就是 OpenRC(或 systemd,如果首选)的好处。所以我的主要问题是

应该执行什么 Gentoo 命令才能chroot在主机 Linux 之上正确“启动”Gentoo Linux,并尽可能减少干扰?

尽可能少的干扰我的意思是它不应该尝试重新挂载文件系统(但同时如果 Gentoomount能够正常工作那就太好了) - 所以简单地运行init可能是不正确的,对 OpenRC 配置的一些修改可能会是必要的,但是哪些呢?

另外,还有主机守护进程的问题 - 我应该使用它们还是让 Gentoo 运行它自己的实例(crond以及syslogd它们需要如何设置才能不干扰主机实例?),或者我应该甚至进一步完全虚拟化 Gentoo?如上所述在另一个问题中如果 Gentoo 实例拥有自己的 IP,并且或多或少表现得像一个独立系统,那就太好了,但另一方面,由于系统资源有限,我希望开销尽可能小。主机系统正在运行这些守护进程,加上我到目前为止的想法:

Daemon           | Use Gentoo's own?
-----------------+---------------------------------------------------------------
udevd            | N bind-mount /dev
klogd, k*        | N using host kernel (although UML might be interesting...)
dhcpd, inetd     | ? depends on using own IP or not
syslogd          | ? bind-mount /var/log or use Gentoo's more versatile settings?
mdadm --monitor  | ? should Gentoo bother with the RAID configuration?
smbd, nmbd       | ? disable host's samba in favour of Gentoo's one? maybe with a
                 |   maintenance-only share on the host
crond            | Y to minimize interference with host's maintenance scripts
sshd             | Y to directly SSH into the chrooted Gentoo system
daemonwatch      | ? maybe use host instance to watch Gentoo instance?
logchkd, errormon| ? unknown

最后,我想知道在关闭/重新启动时我应该考虑什么 - 我可以简单地让主机的关闭脚本chroot /gentoo /bin/init shutdown在其自己的序列之前运行,还是会导致 Gentoo 断电主机的实际关闭顺序?

答案1

如果您想在 chroot 中运行服务:这并不是 chroot 的真正用途。

你最好将你的 Gentoo 系统隔离在一个码头工人容器。

您可以通过创建新的 chroot 轻松创建 Docker 映像基础图像从中:

tar --numeric-owner -cf- /gentoo | docker import - gentoo:base

然后构建合适的 Docker 镜像在它上面使用这个Dockerfile:

FROM gentoo:base
EXPOSE 22 # make SSH accessible, repeat for any port you're running a service on in this container
ENTRYPOINT ["/usr/lib/systemd/systemd"]

使用此命令基于以下内容构建适当的容器Dockerfile(这Dockerfile需要位于运行此命令的同一目录中,并且需要命名Dockerfile):

docker build -t gentoo:latest .

现在您应该可以使用以下命令启动此容器

GENTOO_CONTAINER=$(docker run -d gentoo:base)

现在使用docker inspect ${GENTOO_CONTAINER}您可以看到该容器的所有详细信息(IP、哪些端口用于将容器内运行的服务暴露给外部等)。

使用docker ps您可以看到当前正在运行的容器。

使用docker ps -a您可以查看所有曾经运行过的容器,包括当前正在运行的容器。

还要确保执行以下操作Docker教程这对理解确实有帮助码头工人基本。

相关内容