Udostępnij przez


Użyj systemd do zarządzania usługami Linux w WSL

Podsystem Windows dla systemu Linux (WSL) obsługuje teraz systemd, system init i menedżer usług używany przez wiele popularnych dystrybucji systemu Linux, takich jak Ubuntu, Debian i nie tylko. (Co to jest systemd?).

Ustawienie domyślne systemu inicjowania zostało ostatnio zmienione z SystemV, a systemd jest teraz domyślnym systemem dla bieżącej wersji Ubuntu, która zostanie zainstalowana przy użyciu polecenia wsl --install domyślne. Dystrybucje systemu Linux inne niż bieżąca wersja systemu Ubuntu mogą nadal używać init WSL, podobnie jak init systemu SystemV. Aby przejść na systemd, zobacz Jak włączyć systemd.

Co to jest systemd w systemie Linux?

Zgodnie z systemd.io: "systemd jest zestawem podstawowych bloków konstrukcyjnych dla systemu Linux. Zapewnia system i menedżera usług, który działa jako PID 1 i uruchamia resztę systemu."

Przede wszystkim, jako system inicjalizacji i menedżer usług, systemd zawiera funkcje takie jak uruchamianie demonów na żądanie, montowanie i utrzymywanie punktów automatycznego montowania, obsługa migawek, oraz śledzenie procesów przy użyciu grup kontrolnych systemu Linux.

Większość głównych dystrybucji systemu Linux działających teraz w systemd sprawia, że jego włączenie w WSL przybliża doświadczenie do korzystania z Linuksa bezpośrednio na sprzęcie. Zobacz ogłoszenie wideo z demonstracjami systemd albo przykłady użycia systemd poniżej, aby dowiedzieć się więcej o tym, co systemd ma do zaoferowania.

Jak włączyć systemd?

Systemd jest teraz domyślnym rozwiązaniem dla bieżącej wersji systemu Ubuntu, która zostanie zainstalowana przy użyciu polecenia wsl --install.

Aby włączyć systemd dla innych dystrybucji Linuksa działających na WSL 2 (zmieniając domyślne ustawienie z systemv init):

  1. Upewnij się, że twoja wersja WSL to 0.67.6 lub nowsza:

  2. Otwórz wiersz polecenia dystrybucji systemu Linux i wprowadź cd /, aby uzyskać dostęp do katalogu głównego, a następnie ls, aby wyświetlić listę plików. Zostanie wyświetlony katalog o nazwie "etc", który zawiera plik konfiguracji programu WSL dla dystrybucji. Otwórz ten plik, aby można było wprowadzić aktualizację za pomocą edytora tekstów Nano, wprowadzając polecenie: nano /etc/wsl.conf.

  3. Dodaj następujące wiersze w pliku wsl.conf, który jest teraz otwarty, aby zmienić inicjowanie używane do systemd:

    [boot]
    systemd=true
    

    Włącz systemd na WSL 2

  4. Zamknij edytor tekstu Nano (Ctrl + X, wpisz Y, aby zapisać zmianę i potwierdzić przy użyciu enter).

  5. Następnie należy zamknąć dystrybucję systemu Linux. Możesz użyć polecenia wsl.exe --shutdown w programie PowerShell, aby ponownie uruchomić wszystkie wystąpienia programu WSL.

  6. Po ponownym uruchomieniu dystrybucji systemu Linux systemd będzie działał. Możesz to sprawdzić przy użyciu polecenia systemctl status, aby wyświetlić uruchomiony stan i polecenie systemctl list-unit-files --type=service, które pokaże stan wszystkich usług skojarzonych z dystrybucją systemu Linux.

Jeśli dystrybucja systemu Linux to Debian/Ubuntu/Kali Rolling, nie tylko powinien być zainstalowany pakiet systemowy, ale także upewnij się, że pakiet systemd-sysv jest zainstalowany.

sudo apt-get update -y && sudo apt-get install systemd systemd-sysv -y

Dowiedz się więcej na temat konfiguracji zaawansowanych ustawień w WSL, w tym różnicy między plikiem konfiguracji specyficznym dla dystrybucji wsl.conf a plikiem konfiguracji globalnym .wslconfig, jak zaktualizować ustawienia montowania automatycznego itp.

Film demonstracyjny systemd

Firma Microsoft współpracuje z firmą Canonical w celu zapewnienia obsługi systemu WSL. Zobacz, jak Craig Loewen (PM dla WSL w Microsoft) i Oliver Smith (PM dla Ubuntu na WSL w Canonical) ogłaszają wsparcie dla systemd i prezentują kilka demonstracji tego, co umożliwia.

Przykłady systemu

Oto kilka przykładów aplikacji systemu Linux, które są zależne od systemu:

  • snap: system pakowania i wdrażania oprogramowania opracowany przez firmę Canonical dla systemów operacyjnych korzystających z jądra Linux i systemowego systemu init systemd. Pakiety nazywane są "snaps", narzędzie wiersza polecenia do tworzenia snapów nosi nazwę "Snapcraft", centralne repozytorium, w którym można pobrać/zainstalować snaps, nosi nazwę "Snap Store", a demon wymagany do uruchamiania snapów (pobieranie ze sklepu, montowanie na miejscu, izolowanie i uruchamianie aplikacji z nich) nazywany jest "snapd". Cały system jest czasami nazywany "snappy". Spróbuj uruchomić polecenie: snap install spotify.

  • mikrok8s: otwartoźródłowy, niskiego nakładu pracy, minimalny Kubernetes do produkcyjnego użytku, który automatyzuje wdrażanie, skalowanie i zarządzanie aplikacjami w kontenerach. Postępuj zgodnie z instrukcjami, aby zainstalować MicroK8s naWSL2, zapoznaj się z samouczkiemlub obejrzyj wideo o Kubernetes w systemie Windows za pomocą MicroK8s i WSL 2.

  • systemctl: narzędzie wiersza polecenia używane do kontrolowania i inspekcji systemu oraz ułatwia interakcję z usługami w dystrybucji systemu Linux. Spróbuj wykonać polecenie: systemctl list-units --type=service, aby zobaczyć, które usługi są dostępne i ich stan.

Kilka powiązanych samouczków demonstrujących sposoby korzystania z systemu:

Jak włączenie systemu wpływa na architekturę WSL?

Włączenie obsługi dla systemd wymagało zmian w architekturze WSL. Systemd wymaga PID 1, więc proces inicjowania WSL uruchomiony w dystrybucji systemu Linux staje się procesem podrzędnym systemd. Ponieważ proces inicjowania WSL jest odpowiedzialny za zapewnienie infrastruktury komunikacji między składnikami systemu Linux i Windows, zmiana tej hierarchii wymaga ponownego przemyślenia niektórych założeń wprowadzonych w procesie inicjowania WSL. Należy wprowadzić dodatkowe modyfikacje w celu zapewnienia czystego zamknięcia (ponieważ zamknięcie jest teraz kontrolowane przez systemd) i aby zapewnić zgodność z WSLg, składnik WSL, który uruchamia graficzne interfejsy użytkownika systemu Linux (GUI) lub aplikacje systemu Linux, które są wyświetlane w oknach, a nie wiersz polecenia.

Należy również pamiętać, że w przypadku tych zmian usługi systemd nie będą utrzymywać działania wystąpienia WSL. Instancja WSL pozostanie aktywna w taki sam sposób jak przed tą aktualizacją, o czym można dowiedzieć się więcej w tym wpisie na blogu Background Task Support (Obsługa zadań w tle) z 2017 r..