WSL e Ubuntu, como mover o arquivo init

WSL e Ubuntu, como mover o arquivo init

Implantei um ambiente de desenvolvimento no wsl e estou muito animado com isso. Meu único problema é a existência de um initarquivo no caminho raiz do sistema.

subdiretórios raiz

Para um dos meus clientes, preciso ter um /initdiretório,esta é uma restrição que não pode ser alterada.

Escusado será dizer que isso torna meu ambiente de desenvolvimento wsl recém-descoberto inutilizável para este projeto.

Existe uma maneira de alterar o caminho do initarquivo wsl?

Responder1

Tarde para responder; o projeto originalmente mencionado quase certamente terminou; e provavelmente ninguém mais terá essa necessidade novamente. Mas tudo bem, aqui vai...

Crie uma prisão chroot. Faça o seguinte como root:

  • Crie um local para o chroot: sudo mkdir /newroot; cd /newroot
  • Recrie/bindmount todos os diretórios necessários dentro de newroot:
    • mkdir usr; mount --bind /usr usr
    • mkdir etc; mount --bind /etc etc
    • mkdir root
    • mkdir -p /home/user; mount --bind /home/user home/user(substitua o nome de usuário padrão pela instância WSl).
    • mkdir var; mount --bind /var var
    • mkdir dev; mount --bind /dev dev
    • E assim por diante para quaisquer outros diretórios necessários.
  • Preste atenção aos links simbólicos do diretório raiz em sua distribuição. Por exemplo, pelo menos o Ubuntu também exigiria:
    • ln -s usr/lib lib
    • ln -s usr/lib32 lib32
    • e assim por diante ...
  • mount -t proc none proc
  • mkdir init(O cliente exigiu initdiretórioem vez do init root "real"arquivo)

Agora, para iniciar a sessão wsl, configure um atalho para wsl -u root -e sh -c "cd /newroot; exec /usr/sbin/chroot /newroot/" su - username. Substitua o padrão, usernameé claro.

Isso lançará o usuário em uma prisão chroot apenas com a estrutura de diretórios que você selecionou, que obviamente não inclui o initarquivo, mas initsim o seu diretório.

Responder2

dr: O /initarquivo não pode ser removido de umcorrendoDistribuição WSL. Porque o subsistema está usando esse arquivo e todos os processos nessa distribuição WSL em execução são bifurcados a partir dele.

  • Então o que podemos fazer? O arquivo ébloqueadopelo subsistema durante a execução dessa distribuição. A solução alternativa é esperar ou encerrar a distribuição em execução. Use wsl.exe --terminate Distroo comando onde Distroé o nome da distribuição WSL em execução que você deseja encerrar. Vá até a pasta onde a distribuição está instalada, sigaesseouesse. Exclua o initarquivo.

  • Ou, se você quiser fazer um tarball de toda a distribuição WSL, não há necessidade de encerrar a distribuição em execução. Crie o tarball e exclua o init:

cd /
tar -cpf backup.tar --exclude=/backup.tar --exclude=/init --xattrs --one-file-system /

Verifique todas as opções da linha de comando antes de executar este comando. Preservar a permissão do arquivo é obrigatório.

  • De onde vem o arquivo init? O arquivo init é criado por desenvolvedores Microsoft WSL enão é similarcom systemd, sysVinit ou outros sistemas init GNU/Linux tradicionais. O arquivo real é System32\lxss\tools\init. Quando uma distribuição é iniciada, o Linux Subsystem Manager Service (LXSS) copia esse arquivo na pasta rootfs (com CopyFileW()API Win32). ParaWSL2 primeiro a \toolspasta é montada com o protocolo 9p e depois usada como acima.

informação relacionada