Path: csiph.com!aioe.org!.POSTED.f9jd69KCg20llKKW7r3YPQ.user.gioia.aioe.org!not-for-mail From: Patricia Ferreira Newsgroups: pt.comp.so.linux Subject: Re: Como criar um sistema =?utf-8?Q?m=C3=ADnimo?= para systemd-nspawn com modo =?utf-8?Q?gr=C3=A1fico=3F?= Date: Wed, 01 Jul 2020 22:54:07 -0300 Organization: Aioe.org NNTP Server Lines: 90 Message-ID: <86blkylm0w.fsf@example.com> References: NNTP-Posting-Host: f9jd69KCg20llKKW7r3YPQ.user.gioia.aioe.org Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Complaints-To: abuse@aioe.org Cancel-Lock: sha1:PvvR11Ziko7gfz/tolgOoWKwvXo= X-Notice: Filtered by postfilter v. 0.9.2 Xref: csiph.com pt.comp.so.linux:2838 Ninguém writes: > Eu tenho feito assim: > Com debootstrap instalo uma versão mínima do debian numa diretoria e > depois consigo arrancá-la com systemd-nspawn. Por que você faz isso? Qual o problema que se resolve com essa solução? > Mas não sei como fazer algumas coisas: > - Como configurar vários sistemas semelhantes e ligá-los todos como se > estivessem ligados a um switch virtual (como se fosse um laboratório > virtual, com uma rede diferenciada)? O debootstrap parece automatizar uma série de operações num certo diretório (como baixar vários pacotes pra dentro desse diretório) e termina lhe concedendo um shell dentro desse diretório logo depois de alterar a raiz do processo do shell pra apontar pra esse diretório. O efeito é um shell que não consegue escapar desse diretório. É por isso que você tem a solução de que está num novo sistema, mas é só um diretório no seu velho sistema. Pra você compreender o debootstrap, é educacional que você estude o chroot isoladamente. Obtenha um shell S estático (isto é, não dinamicamente montável pra que ele possa ser executado sem requerer qualquer biblioteca), crie um diretório novo d/ e coloque S dentro de d/. Em seguida, peça ao super usuário pra fazer um chroot em d/ e executar o shell que você colocou lá. Assim: %file /bin/sh /bin/sh: ELF 32-bit LSB executable, Intel 80386, version 1, for OpenBSD, statically linked, stripped Note que o shell é estático. %mkdir d %cp /bin/sh d/ Criei d e coloquei o shell estático em d/sh. %sudo chroot d/ /sh /sh: No controlling tty (open /dev/tty: No such file or directory) /sh: warning: won't have full job control # O shell não encontra o /dev/tty. Claro, não existe esse arquivo ali. Tem apenas o sh lá dentro. Onde estou? # pwd / Na raiz. É isso que o chroot faz. It [ch]anges the ]root] of the file system --- e em seguida executa um processo. Note que nem conseguimos listar arquivos usando esse shell porque não um ls. # ls /sh: ls: not found A alternativa é usar a capacidade do próprio shell de ler um diretório. Podemos usar a expansão de expressões regulares, uma solução útil quando o ls não está por perto pra ajudar. # echo * sh # > Presumo que tenha que configurar uma placa de rede virtual... mas e > depois não há o perigo de os sistemas "virtuais" "verem" o sistema > real? Não queria isso! - Como fazer para que tenha um ambiente > gráfico (wayland) e que, ao arrancar, me arranque numa janela à > semelhança do virtualbox? - Como configurar os cgroups de forma a > proteger ao máximo o sistema anfitrião? Você parece estar em busca de uma solução como o Docker. Um kernel como o Linux primeiro permitiu que você alterasse a raiz do sistema de arquivos em cada processo. É o que permite o chroot. Depois eles implementaram o que é chamado hoje de namespaces. Um sistema de arquivos é um namespace. Você parece interessado em compreender o que é um namespace e o Docker seria a solução que você busca. (Já que você não está interessado num isolamento total como os providos por um virtualizador.) O Docker vai lhe dar a sensação de que você está de fato isolado num sistema novo, mas é nada mais que a ilusão do chroot porque seus processos estarão todos sendo executados pelo seu próprio sistema. > Penso que o qubes faz algo semelhante, mas recorre ao xen ou ao > kvm... eu pretendia algo mais ligeiro. Xen e KVM funcionam são hypervisors. Uma forma mais eficiente de se executar máquinas virtuais. Pela descrição que você faz, o Docker parece ser o que mais se adapta a sua necessidade.