Linux의 systemd가 세월이 흘러도 여전히 분열적인 이유

systemd는 10년이 되었지만 Linux 커뮤니티에서 이에 대한 감정은 누그러지지 않았습니다. 많은 주요 Linux 배포판에서 사용되지만 하드코어 반대는 누그러지지 않았습니다.

Linux 부팅 순서

컴퓨터의 전원을 켜면 하드웨어가 부팅된 다음(유형에 따라 부트 섹터 귀하의 컴퓨터에서 사용) 마스터 부트 레코드 (MBR) 실행 또는 확장 가능한 통합 펌웨어 인터페이스 (UEFI)가 실행됩니다. 이 두 가지의 마지막 행동은 리눅스 커널.

커널은 메모리에 로드되고 자체 압축을 풀고 초기화됩니다. ㅏ 임시 파일 시스템 일반적으로 initramfs 또는 initrd라는 유틸리티에 의해 RAM에 생성됩니다. 이를 통해 필요한 드라이버를 확인하고 로드할 수 있습니다. 이것은 차례로 사용자 공간 파일 시스템이 사용자 공간 환경을 설정하기 위해 로드하고 준비할 수 있도록 합니다.

사용자 공간 환경의 생성은 사용자 공간에서 커널이 실행하는 첫 번째 프로세스인 init 프로세스에 의해 처리됩니다. 그것은 가지고있다 프로세스 ID (PID) 1. 다른 모든 프로세스는 init 프로세스의 직접 또는 간접 자식입니다.

systemd 이전에 init 프로세스의 기본 기본은 유닉스 시스템 V 초기화. 사용 가능한 다른 선택 사항이 있었지만 System V init는 대부분의 비버클리 소프트웨어 배포 (BSD) 파생 분포. Linux의 정신적 조상인 System V Unix에서 직접 가져왔기 때문에 많은 사람들이 init를 수행하는 “공식적인 방법”으로 간주합니다.

초기화 프로세스는 모든 데몬 운영 체제가 의미 있고 상호 작용하는 방식으로 작동하도록 하는 데 필요한 서비스. 이 데몬은 네트워킹 스택과 같은 작업을 처리하여 컴퓨터 내부의 다른 하드웨어를 활성화하고 부팅 화면을 제공합니다.

이러한 백그라운드 프로세스 중 다수는 시작된 후에도 계속 실행됩니다. 이벤트 정보를 기록하고, 장치를 삽입하거나 제거할 때 하드웨어 변경 사항을 관찰하고, 사용자 로그인을 관리하는 등의 작업을 수행합니다. 당연히 init 시스템에는 서비스를 관리하는 기능도 포함되어 있습니다.

우리는 사용할 수 있습니다 추신 PID가 1인 프로세스를 보려면 f(전체 형식 목록) 및 p(PID) 옵션을 사용합니다.

ps -fp 1

PID 1의 프로세스가 시스템화되어 있음을 알 수 있습니다. Manjaro Linux에서 동일한 명령을 실행하면 다른 결과가 나타납니다. PID가 1인 프로세스는 /sbin/init로 식별되었습니다. 해당 파일을 간단히 살펴보면 systemd에 대한 심볼릭 링크임을 알 수 있습니다.

ps -fp 1
ls -hl /sbin/init

ps와 함께 ppid(상위 프로세스 ID) 옵션을 사용하면 systemd에서 직접 실행한 프로세스를 확인할 수 있습니다.

ps -f --ppid 1

아래 이미지에서 볼 수 있듯이 꽤 긴 목록입니다.

대안

여러 프로젝트에서 기존 System V init에 대한 대안을 만들려고 했습니다. 주요 문제 중 하나는 System V init에서 모든 프로세스가 차례로 차례로 시작된다는 것입니다. 부팅 순서의 효율성을 개선하기 위해 많은 대체 프로젝트에서 병렬 처리를 사용하여 프로세스를 동시에 비동기식으로 시작합니다.

다음은 이들 중 일부에 대한 정보입니다.

건방진 녀석: 에 의해 개발 정식, 우분투 9.10에서 사용되었습니다. 빨간 모자, 레드햇 엔터프라이즈 리눅스 (RHEL) 6, 센트OS 6, 그리고 페도라 9.
루닛: 실행 프리BSD 및 기타 BSD 파생 상품, macOS 및 솔라리스, Linux 시스템뿐만 아니라. 또한 기본 초기화 시스템입니다. 무효의 리눅스.
s6-linux-init: System V init에 대한 이 교체는 다음을 밀접하게 따르도록 설계되었습니다. 유닉스 철학, 이것은 종종 “한 가지만 하고 잘 하라”는 소리로 축소됩니다.

기능과 디자인이 다른 많은 것들이 있습니다. 그러나 그들 중 누구도 난리를 일으켰다 시스템드 했다.

체계적인 방법

systemd는 2010년에 출시되었고 2011년에 Fedora에서 사용되었습니다. 그 이후로 많은 배포판에서 채택되었습니다. 에 의해 개발되었습니다. 레나르트 포터링 그리고 케이 시버스, RedHat의 두 소프트웨어 엔지니어.

systemd는 init 교체 이상입니다. 오히려 시스템 초기화, 데몬 및 서비스, 로깅 및 저널링, Linux의 전용 모듈에서 이미 처리되었던 기타 많은 기능을 처리하는 약 70개의 바이너리 모음입니다. 이들 대부분은 시스템 초기화와 관련이 없습니다.

systemd에서 제공하는 일부 데몬은 다음과 같습니다.

systemd-udevd: 물리적 장치를 관리합니다.
systemd-logind: 사용자 로그인을 관리합니다.
systemd-resolved: 로컬 응용 프로그램에 네트워크 이름 확인을 제공합니다.
systemd-networkd: 네트워크 장치를 관리 및 감지하고 네트워크 구성을 관리합니다.
systemd-tmpfiles: 휘발성 및 임시 파일과 디렉토리를 생성, 삭제 및 정리합니다.
systemd-localed: 시스템 로케일 설정을 관리합니다.
systemd-machined: 가상 머신과 컨테이너를 감지하고 모니터링합니다.
systemd-nspawn: 경량 네임스페이스 컨테이너에서 명령 또는 기타 프로세스를 시작할 수 있어 다음과 유사한 기능을 제공합니다. chroot.

그리고 그것은 문제의 핵심이기도 한 빙산의 일각에 불과합니다. systemd는 반대자들에 따르면 스코프 크리프의 정의인 초기화 시스템에 요구되는 것을 훨씬 능가했습니다.

“너무 커. 너무 많이 한다.”

systemd의 반대자들은 systemd가 포함하는 크고 흥미로운 기능의 조합을 지적합니다. 이러한 모든 기능은 이미 Linux에 존재했으며 일부는 새로 고침 또는 새로운 접근 방식이 필요했습니다. 그러나 이 모든 기능을 init 시스템으로 가정하는 것을 번들로 묶는 것은 구조적으로 어리둥절합니다.

systemd는 너무 많은 중요한 기능에 대해 단일 실패 지점이라고 했지만 이는 정당화되지 않는 것 같습니다. 분명히, 그것은 던진다. 유닉스 철학 창 밖의 모든 작업을 수행하는 큰 소프트웨어 대신 함께 작동하는 작은 도구를 만드는 것입니다. systemd는 엄격하게 모놀리식(모놀리식)이 아니지만(하나의 거대한 바이너리가 아닌 많은 바이너리로 구성됨) 하나의 우산 아래에 많은 이질적인 관리 도구와 명령이 포함됩니다.

단일체는 아닐 수도 있지만 크기는 큽니다. 규모에 대한 아이디어를 얻기 위해 우리는 커널 5.6.15 코드베이스와 systemd master 브랜치의 텍스트 줄을 세었습니다. GitHub 리포지토리.

이것은 비교적 조잡한 지표였습니다. 코드 줄뿐만 아니라 텍스트 줄도 계산했습니다. 따라서 여기에는 주석, 문서 및 기타 모든 것이 포함됩니다. 그러나 그것은 유사한 비교였으며 우리에게 간단한 척도를 제공했습니다.

( find ./ -name '*.*' -print0 | xargs -0 cat ) | wc -l

커널에는 거의 2,800만(정확히 27,784,340) 줄의 텍스트가 있었습니다. 대조적으로 systemd는 1,349,969 또는 거의 140만이었습니다. 우리의 happy-go-lucky 메트릭을 사용하면 systemd가 커널 크기의 약 5%로 나옵니다. 이는 미친 짓입니다!

또 다른 비교로, Arch Linux 배포판을 위한 System V init의 최신 구현에 대한 줄 수는 1,721줄로 나왔습니다.

Poettering은 분명히 다음을 고려하지 않습니다. 전기전자공학회 (IEEE) 컴퓨터 학회, 휴대용 운영 체제 인터페이스 (POSIX) 표준. 사실 그는 개발자가 POSIX를 무시하도록 권장:

“따라서 Linux 프로그래밍 인터페이스 사본을 얻고 POSIX 호환성에 대한 모든 것을 무시하고 놀라운 Linux 소프트웨어를 해킹하십시오. 상당히 안심이 됩니다!”

systemd가 Red Hat에만 혜택을 주는 Red Hat 프로젝트이지만 더 넓은 Linux 세계에 강제로 공급되고 있다는 비난이 있었습니다. 예, Red Hat 내에서 생성되었으며 Red Hat에 의해 관리 및 조정됩니다. 그러나 1,321명의 기고자 중 Red Hat에서 작동하는 사람은 극히 일부에 불과합니다.

그렇다면 Red Hat의 이점은 무엇입니까?

짐 화이트허스트, IBM의 사장이었던 한때 Red Hat의 CEO는 이렇게 말했습니다.

“Red Hat은 사용 가능한 많은 옵션을 고려하고 Red Hat Enterprise Linux 6용 Canonical의 Upstart를 사용했습니다. 궁극적으로 우리는 systemd가 우리가 보는 문제를 해결하기 위해 확장성, 단순성, 확장성 및 잘 정의된 인터페이스를 제공하는 최고의 아키텍처이기 때문에 선택했습니다. 오늘 그리고 미래를 내다본다.”

Whitehurst는 또한 임베디드 시스템에서도 이점을 보았다고 말했습니다. Red Hat은 “특히 안정성과 신뢰성이 가장 중요한 관심사인 통신 및 자동차 산업에서 세계 최대의 임베디드 공급업체”와 파트너 관계를 맺고 있습니다.

이는 기술적으로 타당한 이유처럼 보입니다. 신뢰성에 대한 회사의 요구를 이해할 수 있으며 Red Hat이 자신의 이익을 추구하는 것이 비합리적인 것은 아니지만 다른 모든 사람들이 이를 따라야 합니까?

시스템 쿨에이드를 마시고 계십니까?

systemd의 일부 반대자는 배포판과 사람들이 Red Hat의 리드를 맹목적으로 따르고 채택하고 있다고 말합니다.

그러나 ‘쿨에이드를 마신다’는 말처럼 옳지 않다. 1978년에 만들어진 컬트 지도자 짐 존스, 900명이 넘는 추종자들에게 청산가리를 가한 포도 향이 나는 액체를 마셔 자살하도록 강요한 이 문구는 Kool-Aid를 모욕하는 잘못된 표현입니다. 그룹은 실제로 Flavor Aid를 마셨지만 Kool-Aid는 그 이후로 그 붓에 의해 타르가 붙었습니다.

또한 Linux 배포판은 Red Hat을 맹목적으로 따르지 않습니다. 그들은 진지한 고민 끝에 systemd를 채택하고 있습니다. 에 대한 논쟁이 뜨겁다. 데비안 오랜만에 메일링 리스트. 그러나 2014년에 커뮤니티는 systemd를 채택하기로 결정했습니다. 기본 초기화 시스템이지만 대안도 지원합니다..

Debian은 RedHat, Fedora 또는 CentOS에서 파생되지 않았기 때문에 중요한 예입니다. Red Hat에서 Debian에 적용되는 조정은 없습니다. 그리고 PID 1과 마찬가지로 데비안은 우분투와 그 파생물을 포함하여 많은 후손을 가지고 있습니다.

데비안 커뮤니티의 결정은 광범위합니다. 그들은 또한 격렬하게 토론하고 사용에 대해 투표했습니다. 콩도르세 투표 방식. 커뮤니티도 그런 선택을 가볍게 하지 않는다.

2019년 12월에 다시 투표했습니다. 계속 집중하기 위해 시스템화하고 대안을 계속 탐색합니다. 맹목적으로 따르는 것과는 달리 이것은 실제로 민주주의와 직장에서의 선택의 자유에 대한 교과서적인 예입니다.

선택의 한계

일반적으로 특정 Linux 배포판에서 systemd를 사용할지 여부를 선택할 수 없습니다. 오히려 배포판 자체에서 사용 여부를 선택하고 선호하는 Linux 배포판을 선택할 수 있습니다. 아마도 당신이 좋아하는 Linux 배포판이 systemd로 전환되었을 것입니다. 좋아하는 뮤지션이 장르를 바꾸는 것처럼 이것은 거북할 수 있습니다.

데비안을 사용하는 사람들, 페도라, 센트OS, 우분투, 아치, 혼자서, 그리고 오픈수세, 그리고 systemd의 채택에 반대하는 사람들은 자신이 선택한 배포판을 사용하는 데 어려움을 겪고 있다고 느낄 수 있습니다. POSIX에 대한 아키텍처 선택, 범위 이동 또는 무시에 대해 충분히 강하게 느끼는 경우 해당 배포를 계속 사용하는 것이 유지되지 않을 수 있습니다.

물론 스펙트럼이 있습니다. 한쪽에는 문제를 이해하지 못하는(또는 관심조차 두지 않는) 사람들이 있고 다른 한쪽에는 열렬한 반대자가 있습니다. 중간 어딘가에 변화를 좋아하지 않지만 배를 뛰어넘을 만큼 그것에 대해 신경 쓰지 않는 사람들이 있습니다. 하지만 자신의 취향이나 원칙 때문에 선택한 배급에 머물지 못하는 배급난민은?

불행히도 원하는 초기화 시스템을 설치하는 것만큼 쉽지는 않습니다. 모든 사람이 그렇게 할 수 있는 기술적 능력이 있는 것은 아닙니다. GNOME과 같은 응용 프로그램이나 데스크탑 환경에서 발생하는 어려움은 신경쓰지 마십시오. 의존성이 있다 시스템화.

다른 배포판으로 이동하는 것은 어떻습니까? 일부, 같은 데부안, systemd를 채택한 비시스템 배포판(이 경우 Debian)으로 나타났습니다. Devuan을 사용하는 것은 상위 배포판과 유사해야 하지만 모든 비 시스템 포크에 해당하는 것은 아닙니다. 예를 들어 Fedora를 떠나 다음으로 이동하는 경우 안티엑스, 젠투, 또는 슬랙웨어, 당신은 매우 다른 경험을 할 것입니다.

아무데도 가지 않아

나는 systemd가 하는 일(프로세스에 대한 간단하고 표준화된 제어 메커니즘)을 좋아합니다. 나는 그것이하는 일 (바이너리 로그)에 대한 근거를 이해하지 못합니다. 나는 또한 그것이하는 일 중 일부를 싫어합니다 (홈 폴더 개조 – 누가 그것을 요구 했습니까?).

Debian과 같은 배포판은 현명한 일을 하고 있으며 옵션을 열어 두는 대안을 조사하고 있습니다. 그러나 systemd는 장기적으로 그 안에 있습니다.

다른 사람을 위해 Linux 시스템을 관리하는 경우 System V init와 마찬가지로 systemd를 배우십시오. 이렇게 하면 어떤 일이 일어나더라도 임무를 수행할 수 있습니다.

집에서 리눅스만 쓰나요? 그렇다면 기술 요구 사항을 충족하고 Linux 이념을 보완하는 배포판을 선택하십시오.