Como usar corretamente o Gentoo Linux como um complemento a uma distribuição existente?

4

Enquanto eu queria originalmente substituindo inteiramente a distribuição Linux que meu NAS usa , enquanto isso cheguei à conclusão de que seria melhor deixar o sistema existente tão inalterado quanto possível e apenas complementá-lo via Gentoo (ou Arch) Linux - que é basicamente o que a resposta à pergunta anterior sugerida . Atualmente, a única modificação no sistema original consiste em um diretório /gentoo no qual eu chroot usa o seguinte script:

#!/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

Agora eu posso simplesmente ssh no host pela porta 22222 e acabar no ambiente chroot , que basicamente se comporta como o Gentoo Linux, e esse script pode ser executado a partir do /etc/init.d/rcS do host.

Mas é claro que eu não quero acabar começando todos os serviços Gentoo que eu gostaria de usar manualmente dessa forma - é o que o OpenRC (ou systemd, se preferir) é bom, afinal. Então, minha grande questão é

What Gentoo command should chroot execute in order to properly "boot" the Gentoo Linux on top of the host Linux with as little interference as possible?

Com o mínimo de interferência possível, quero dizer que ele não deve tentar remontar o sistema de arquivos (mas ao mesmo tempo seria bom se o mount do Gentoo funcionasse corretamente) - então simplesmente rodar init provavelmente não está correto, algumas modificações na configuração OpenRC provavelmente serão necessárias, mas quais?

Além disso, há a questão dos daemons do host - devo usá-los ou fazer com que o Gentoo execute suas próprias instâncias, por exemplo? crond e syslogd (e como eles precisariam ser configurados para não interferir nas instâncias do host?), ou eu deveria ir ainda mais longe e virtualizar o Gentoo? Como mencionado em outra questão , seria interessante ter a instância do Gentoo com seu próprio IP e mais ou menos se comportar como um sistema independente, mas por outro lado, gostaria de ter o mínimo de sobrecarga possível devido aos recursos limitados do sistema. O sistema host está executando esses daemons, além dos meus pensamentos até agora:

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

Por fim, gostaria de saber o que devo considerar no desligamento / reinicialização - posso simplesmente ter o script de desligamento do host executando chroot /gentoo /bin/init shutdown antes de sua própria sequência, ou isso pode causar um desligamento do Gentoo antes seqüência de desligamento real do host?

    
por Tobias Kienzler 06.11.2013 / 16:27

1 resposta

4

Se você deseja executar serviços em um chroot: não é para isso que um chroot é construído.

Seria melhor isolar seu sistema Gentoo em um contêiner Docker .

Você pode facilmente criar uma imagem do Docker a partir do seu chroot criando uma nova baseimage :

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

Em seguida, construa uma imagem adequada do Docker em cima dele usando este 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"]

Use este comando para construir um contêiner adequado com base no Dockerfile (o Dockerfile precisa estar no mesmo diretório a partir do qual você está executando este comando e precisa ser nomeado Dockerfile ):

docker build -t gentoo:latest .

Agora você deve conseguir iniciar esse contêiner usando

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

Usando docker inspect ${GENTOO_CONTAINER} você pode ver agora todos os detalhes deste container (IP, quais portas são usadas para expor os serviços de execução dentro do seu container para o exterior, etc.).

Usando docker ps , você pode ver os contêineres em execução no momento.

Usando docker ps -a , você pode ver todos os contêineres que já foram executados, incluindo os contêineres atualmente em execução.

Certifique-se também de fazer o tutorial do Docker , que é realmente útil para entender o básico do Docker .

    
por 06.11.2013 / 18:45