WSL을 사용 중 systemd 환경이 아니라는 오류가 발생합니다.
$ sudo systemctl status
System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down
원인은 WSL은 루트 시스템 프로세스가 systemd가 아닌 init이기 때문입니다.
$ pstree 명령을 통해 확인할 수 있습니다. pstree 명령어는 실행되고 있는 프로세스들간의 연결구조를 트리형식으로 보여줍니다.
$ pstree
init─┬─init─┬─init───docker-desktop-───14*[{docker-desktop-}]
│ └─init───docker───20*[{docker}]
├─init───init───bash───pstree
└─2*[{init}]
근래 들어 리눅스 진영은 init에서 systemd로 바뀌는 추세라고 하며, WSL은 아직 그것을 반영하지 못하고 있는 것이라고 합니다.
아마 이번 오류의 경우 WSL1에 먼저 우분투를 설치한 후 WSL2로 버전 업데이트를 해서 그런것으로 추측했습니다.
따라서 WSL에서 init 시스템 프로세스를 systemd 체계로 바꿔주어야 합니다.
구글링을 하면 github의 systemd-genie라는 프로젝트를 통해 해결하라고 하는데, 잘 해결되지 않고 복잡하여 다른 해결방안을 찾았습니다.
해결방안
wsl 에서 리눅스 부팅 시 systemd 환경으로 부팅하도록 하면 됩니다.
먼저 $ cd / 로 최상단 디렉토리로 이동합니다.
$ cd etc 로 etc 폴더로 이동합니다.
$ sudo vim wsl.conf 로 파일을 생성한 뒤, 다음과 같이 작성 후 저장합니다.
wsl.conf
[boot]
systemd=true
이후 wsl 을 재부팅하면 됩니다.
$ pstree
그러면 $ sudo systemctl status 명령어 실행이 잘되는지 확인할 수 있습니다.
참고자료:
'개발 > 정리' 카테고리의 다른 글
[Docker] 도커 네트워크 (Docker Network) (0) | 2023.04.12 |
---|---|
[Linux] 우분투에서 사용중인 포트 확인 (0) | 2023.04.12 |
웹 브라우저로 개발하기 (온라인 IDE) (1) | 2022.12.28 |
C++ 백준 ios_base::sync_with_stdio(false); cin.tie(null); 구문을 추가해주는 이유 (2) | 2022.12.26 |
REMIX vs NEXT.JS 비교하기 (1) | 2022.12.23 |
댓글