우리가 배운 바와 같이, init 프로세스는 리눅스 부팅 과정에서 가장 먼저 실행되는 프로세스입니다. 이는 다른 모든 프로세스의 부모이며, 시스템을 사용 가능한 상태로 만드는 데 필수적인 서비스를 시작할 책임이 있습니다. 그렇다면 어떻게 이를 달성할까요?
리눅스 init 시스템에는 서비스를 관리하는 방식이 다른 세 가지 주요 구현체가 있습니다.
System V Init
sysvinit라고도 불리는 System V init 은 리눅스의 전통적인 init 시스템입니다. 이는 스크립트로 정의된 순차적인 시작 절차를 따릅니다. 시스템의 상태는 런레벨 (예: 단일 사용자 모드, 네트워킹을 포함한 다중 사용자 모드) 을 통해 관리되며, 각 런레벨은 시작하거나 중지해야 할 특정 서비스 집합을 가집니다. 이는 클래식 리눅스 부팅 과정에서 오랫동안 표준이었습니다.
Upstart
이전 Ubuntu 버전에서 발견된 Upstart 는 이벤트 기반 init 시스템입니다. 이는 System V 의 엄격한 순차적 모델에서 벗어났습니다. 대신, Upstart 는 네트워크 장치가 사용 가능해지는 것과 같은 시스템 이벤트에 응답하여 서비스 (작업이라고 함) 를 시작하고 중지합니다. 이를 통해 더 유연하고 빠른 부팅 시간을 얻을 수 있습니다.
systemd
리눅스 init 시스템의 현대적 표준은 systemd입니다. 이는 의존성을 공격적으로 관리하는 목표 지향적 시스템입니다. 단순히 서비스 목록을 시작하는 대신, 그래픽 인터페이스와 같은 목표 상태를 정의하면, systemd는 해당 목표에 대한 모든 의존성을 충족시키기 위해 작동하며, 종종 서비스를 병렬로 시작하여 부팅 프로세스를 크게 가속화합니다.
Init 시스템에 대한 전체 과정이 있으며, 이들 각 시스템에 대해 더 자세히 다룰 예정입니다.