WSL y Ubuntu, cómo mover el archivo de inicio

WSL y Ubuntu, cómo mover el archivo de inicio

Implementé un entorno de desarrollo en wsl y estoy muy entusiasmado con ello. Mi único problema es la existencia de un initarchivo en la ruta raíz del sistema.

subdirectorios raíz

Para uno de mis clientes, necesito tener un /initdirectorio,esta es una restricción que no se puede cambiar.

No hace falta decir que esto hace que mi interesante y recién descubierto entorno de desarrollo wsl sea inutilizable para este proyecto.

¿Hay alguna manera de cambiar la ruta del initarchivo wsl?

Respuesta1

Tarde para responder; Es casi seguro que el proyecto mencionado originalmente haya terminado; y es probable que nadie más vuelva a tener esta necesidad. Pero bueno, ahí va...

Crea una cárcel chroot. Haga lo siguiente como root:

  • Crea una ubicación para el chroot: sudo mkdir /newroot; cd /newroot
  • Recrea/vincula todos los directorios necesarios 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(sustituya el nombre de usuario predeterminado por la instancia WSl).
    • mkdir var; mount --bind /var var
    • mkdir dev; mount --bind /dev dev
    • Y así sucesivamente para cualquier otro directorio requerido.
  • Preste atención a los enlaces simbólicos del directorio raíz en su distribución. Por ejemplo, al menos Ubuntu también requeriría:
    • ln -s usr/lib lib
    • ln -s usr/lib32 lib32
    • etcétera ...
  • mount -t proc none proc
  • mkdir init(El cliente requirió iniciodirectorioen lugar del inicio raíz "real"archivo)

Ahora, para iniciar la sesión wsl, configure un acceso directo para wsl -u root -e sh -c "cd /newroot; exec /usr/sbin/chroot /newroot/" su - username. Sustituya el valor predeterminado, usernamepor supuesto.

Esto lanzará al usuario a una cárcel chroot con solo la estructura de directorios que ha seleccionado, que obviamente no incluye el initarchivo, sino su initdirectorio.

Respuesta2

tl;dr: El /initarchivo no se puede eliminar de uncorrerDistribución WSL. Porque el subsistema está usando ese archivo y todos los procesos en esa distribución WSL en ejecución se bifurcan a partir de él.

  • ¿Así que lo que podemos hacer? El archivo esbloqueadopor el subsistema mientras se ejecuta esa distribución. La solución es esperar o finalizar la distribución en ejecución. Utilice wsl.exe --terminate Distroel comando donde Distroestá el nombre de la distribución WSL en ejecución que desea finalizar. Vaya a la carpeta donde está instalada la distribución, sigaesteoeste. Elimina el initarchivo.

  • O, si desea crear un tarball de toda la distribución WSL, no es necesario finalizar la distribución en ejecución. Crea tarball y excluye init:

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

Verifique todas las opciones de la línea de comandos antes de ejecutar este comando. Es imprescindible preservar el permiso del archivo.

  • ¿De dónde viene el archivo de inicio? El archivo de inicio es creado por desarrolladores de Microsoft WSL yno es similarcon systemd, sysVinit u otros sistemas de inicio tradicionales de GNU/Linux. El archivo real es System32\lxss\tools\init. Cuando se inicia una distribución, el Servicio de administrador del subsistema de Linux (LXSS) copia ese archivo en la carpeta rootfs (con CopyFileW()API Win32). ParaWSL2 Primero, la \toolscarpeta se monta con el protocolo 9p y luego se usa como se indica arriba.

información relacionada