Windows wsl2 es compatible con systemd

fondo

Muchas distribuciones de Linux usan systemd para administrar los procesos del programa, pero en WSL, init se usa de manera predeterminada para administrar los procesos.

Para cumplir con los hábitos de uso a largo plazo y ahorrar costos de aprendizaje innecesarios, systemd es compatible con la distribución WSL (instalé Ubuntu20.04 aquí) y puede usar el comando systemctl para iniciar y detener el proceso.

información relacionada

Hay muchos proyectos que pueden admitir el uso del comando systemctl y proporcionar un systemd completo:

Los principios básicos de estos proyectos no son muy diferentes, no es más que la calidad del procesamiento de detalles y la cantidad de funciones adicionales, pero el punto más importante puede ser los diferentes niveles de trabajo.

Los primeros tres scripts funcionan en la capa de shell en la figura y dependen de comandos externos para ejecutar llamadas al sistema.

Genie trabaja en la capa de aplicación, está escrito en C# y ejecuta llamadas al sistema a través del shell, es una capa más que las tres primeras.

Aunque las dos últimas también son aplicaciones, están escritas en Rust. No pasan por el shell, sino que ejecutan directamente llamadas al sistema mediante el contenedor de llamadas del sistema C. Tienen la menor dependencia y solo tienen unos pocos cientos de K después del enlace dinámico y Compilacion.

sistemad

En los sistemas Linux más nuevos, systemd se usa para administrar el proceso y se convierte en el primer proceso del sistema (PID es igual a 1), y otros procesos son sus procesos secundarios.

systemd proporciona una solución completa para el inicio y la gestión del sistema. Proporciona un conjunto de comandos. La letra d es la abreviatura de demonio.

en eso

Todas las distribuciones WSL2 tienen init proporcionado por Microsoft, que es una alternativa a systemd y no admite el comando systemctl.

WSL2 en sí es ejecutado por Windows, por lo que cuando use el comando tree o ps, verá que el proceso raíz no es systemd, lo que resultará en la imposibilidad de iniciar el demonio del servicio del sistema Linux.

Cuando ejecutamos el comando systemctl, se mostrará que nuestro sistema de inicio (PID 1) no es systemd, sino el init proporcionado por Microsoft.

systemctl
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

Instalar

Primero, debe confirmar que está utilizando la versión WSL2. Puede ejecutar el siguiente comando en PowerShell para verificar:

wsl -l -v

Si se muestra como 1, puede usar el siguiente comando para configurarlo, donde <Versión> se puede cambiar a 2:

wsl --set-default-version <Version>

También puede utilizar el siguiente método para configurar la distribución de Linux predeterminada, donde <nombre de distribución> se reemplaza con el nombre de la distribución de Linux que se configurará.

Por ejemplo, wsl --set-version Ubuntu-20.04 configurará la distribución Ubuntu20.04 para usar WSL2:

wsl --set-version <distro name> 

Hay muchos métodos compatibles que se encuentran en Internet, el más simple es el método proporcionado oficialmente por Microsoft, que solo requiere agregar un archivo de configuración.

  1. Abra la línea de comando de PowerShell y actualice WSL.

    wsl --update
    
  2. Abra Ubuntu 22.04, /etc/cree un nuevo archivo en el directorio wsl.confy agregue el siguiente contenido:

    [boot]
    systemd=true
    
  3. Cierra la ventana de Ubuntu.

  4. Abra la línea de comando de PowerShell y reinicie WSL.

    wsl --shutdown
    
    
  5. Vuelva a abrir la distribución de Ubuntu en la Terminal de Windows e ingrese el siguiente comando para verificar si se realizó correctamente:

    systemctl
    

    El resultado anterior indica que systemd se admite correctamente.


Supongo que te gusta

Origin blog.csdn.net/qq_37770674/article/details/132451026
Recomendado
Clasificación