Как правильно использовать Gentoo Linux в качестве дополнения к существующему дистрибутиву?

Хотя я изначально хотел полностью заменить дистрибутив Linux, который использует мой NAS , я тем самым пришел к выводу, что было бы лучше оставить существующую систему как можно более немодифицированной и просто дополнить ее через Gentoo (или Arch) Linux – это в основном то, что ответ на предыдущий вопрос . Таким образом, в настоящее время единственная модификация исходной системы состоит из каталога /gentoo который я chroot через следующий скрипт:

 #!/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 для правильной загрузки Gentoo Linux поверх хост-Linux с минимальными помехами?

С минимальным вмешательством я подразумеваю, что он не должен пытаться перемонтировать файловую систему (но в то же время было бы неплохо, если бы mount Gentoo работало правильно) – так что просто запуск 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 

Наконец, я хотел бы знать, что я должен рассмотреть при выключении / перезагрузке. Могу ли я просто запустить скрипт shutdown для запуска chroot /gentoo /bin/init shutdown перед его собственной последовательностью или может вызвать отключение Gentoo до фактическая остановка хоста?

Если вы хотите запускать службы в chroot: это не то, для чего построен chroot.

Вам будет лучше изолировать вашу систему Gentoo в контейнере Docker .

Вы можете легко создать изображение Docker из своего chroot, создав из него новое базовое изображение :

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

Затем создайте правильное изображение Docker поверх него, используя этот файл Docker :

 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"] 

Используйте эту команду для создания надлежащего контейнера на основе файла Docker ( файл Docker должен находиться в том же каталоге, с которого вы выполняете эту команду, и его нужно называть Dockerfile ):

 docker build -t gentoo:latest . 

Теперь вы можете запустить этот контейнер, используя

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

Используя docker inspect ${GENTOO_CONTAINER} вы можете увидеть все подробности этого контейнера (IP, какие порты используются, чтобы выставлять службы запуска внутри вашего контейнера снаружи и т. Д.).

С помощью docker ps вы можете увидеть контейнеры, которые в настоящее время запущены.

Используя docker ps -a вы можете увидеть все контейнеры, которые когда-либо выполнялись, включая текущие запущенные.

Также обязательно сделайте учебник Docker, который действительно поможет в понимании основ Docker .