Linux의 systemd가 세월이 흘러도 여전히 분열적인 이유
게시 됨: 2022-01-29systemd는 10년이 되었지만 Linux 커뮤니티에서 이에 대한 감정은 누그러지지 않았습니다. 많은 주요 Linux 배포판에서 사용되지만 하드코어 반대는 누그러지지 않았습니다.
Linux 부팅 순서
컴퓨터의 전원을 켜면 하드웨어가 부팅되고 컴퓨터가 사용하는 부트 섹터 유형에 따라 MBR(마스터 부트 레코드)이 실행되거나 UEFI(Unified Extensible Firmware Interface)가 실행됩니다. 이 두 가지의 마지막 작업은 Linux 커널을 실행하는 것입니다.
커널은 메모리에 로드되고 자체 압축을 풀고 초기화됩니다. 임시 파일 시스템은 일반적으로 initramfs
또는 initrd
라는 유틸리티에 의해 RAM에 생성됩니다. 이를 통해 필요한 드라이버를 확인하고 로드할 수 있습니다. 이것은 차례로 사용자 공간 파일 시스템이 사용자 공간 환경을 설정하기 위해 로드하고 준비할 수 있도록 합니다.
사용자 공간 환경의 생성은 사용자 공간에서 커널이 실행하는 첫 번째 프로세스인 init 프로세스에 의해 처리됩니다. 프로세스 ID(PID)가 1입니다. 다른 모든 프로세스는 init 프로세스의 직접 또는 간접 자식입니다.
systemd
이전에 init 프로세스의 기본 기본값은 Unix System V init의 재작업이었습니다. 사용 가능한 다른 선택 사항이 있었지만 System V init는 대부분의 BSD(Berkeley Software Distribution) 파생 배포가 아닌 대부분의 표준 옵션이었습니다. Linux의 정신적 조상인 System V Unix에서 직접 가져왔기 때문에 많은 사람들이 init를 수행하는 "공식적인 방법"으로 간주합니다.
init 프로세스는 운영 체제가 의미 있고 대화식으로 작동하도록 하는 데 필요한 모든 데몬과 서비스를 시작합니다. 이 데몬은 네트워킹 스택과 같은 작업을 처리하여 컴퓨터 내부의 다른 하드웨어를 활성화하고 부팅 화면을 제공합니다.
이러한 백그라운드 프로세스 중 대부분은 시작된 후에도 계속 실행됩니다. 이벤트 정보를 기록하고, 장치를 삽입하거나 제거할 때 하드웨어 변경 사항을 관찰하고, 사용자 로그인을 관리하는 등의 작업을 수행합니다. 당연히 init 시스템에는 서비스를 관리하는 기능도 포함되어 있습니다.
ps
를 사용하여 PID가 1인 프로세스를 볼 수 있습니다. f
(전체 형식 목록) 및 p
(PID) 옵션을 사용합니다.
ps -fp 1
PID 1의 프로세스가 systemd
임을 알 수 있습니다. Manjaro Linux에서 동일한 명령을 실행하면 다른 결과가 나타납니다. PID가 1인 프로세스는 /sbin/init
로 식별되었습니다. 해당 파일을 간단히 살펴보면 systemd
에 대한 심볼릭 링크임을 알 수 있습니다.
ps -fp 1
ls -hl /sbin/초기화
ps
와 함께 ppid
(부모 프로세스 ID) 옵션을 사용하면 systemd
에서 직접 실행한 프로세스를 확인할 수 있습니다.
ps -f --ppid 1
아래 이미지에서 볼 수 있듯이 꽤 긴 목록입니다.
대안
여러 프로젝트에서 기존 System V init에 대한 대안을 만들려고 했습니다. 주요 문제 중 하나는 System V init에서 모든 프로세스가 차례로 차례로 시작된다는 것입니다. 부팅 순서의 효율성을 개선하기 위해 많은 대체 프로젝트에서 병렬 처리를 사용하여 프로세스를 동시에 비동기식으로 시작합니다.
다음은 이들 중 일부에 대한 정보입니다.
- Upstart: Canonical에서 개발했으며 Ubuntu 9.10, Red Hat, RHEL(Red Hat Enterprise Linux) 6, CentOS 6 및 Fedora 9에서 사용되었습니다.
- Runit: FreeBSD 및 기타 BSD 파생 제품, macOS, Solaris 및 Linux 시스템에서 실행됩니다. Void Linux의 기본 초기화 시스템이기도 합니다.
- s6-linux-init: System V init의 대체품은 Unix 철학을 밀접하게 따르도록 설계되었습니다. 이 철학은 종종 "한 가지만 하고 잘 하라"는 의미로 축소됩니다.
기능과 디자인이 다른 많은 것들이 있습니다. 그러나 그들 중 누구도 systemd
가 한 분노를 만들지 않았습니다.
체계적인 방법
systemd
는 2010년에 출시되었고 2011년에 Fedora에서 사용되었습니다. 그 이후로 많은 배포판에서 채택되었습니다. RedHat의 두 소프트웨어 엔지니어인 Lennart Poettering과 Kay Sievers가 개발했습니다.
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 코드베이스의 텍스트 줄과 GitHub 저장소의 systemd
마스터 분기를 계산했습니다.
이것은 비교적 조잡한 지표였습니다. 코드 줄뿐만 아니라 텍스트 줄도 계산했습니다. 따라서 여기에는 주석, 문서 및 기타 모든 것이 포함됩니다. 그러나 그것은 유사한 비교였으며 우리에게 간단한 척도를 제공했습니다.
( 찾기 ./ -name '*.*' -print0 | xargs -0 cat ) | 화장실 -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(Institute of Electrical and Electronics Engineers) 컴퓨터 학회나 POSIX(Portable Operating System Interface) 표준을 전혀 고려하지 않습니다. 실제로 그는 개발자들이 POSIX를 무시하도록 권장했습니다.
“따라서 Linux 프로그래밍 인터페이스 사본을 얻고 POSIX 호환성에 대한 모든 것을 무시하고 놀라운 Linux 소프트웨어를 해킹하십시오. 상당히 안심이 됩니다!”
systemd
가 Red Hat에만 혜택을 주는 Red Hat 프로젝트이지만 더 넓은 Linux 세계에 강제로 공급되고 있다는 비난이 있었습니다. 예, Red Hat 내에서 생성되었으며 Red Hat에 의해 관리 및 조정됩니다. 그러나 1,321명의 기고자 중 Red Hat에서 작동하는 사람은 극히 일부에 불과합니다.
그렇다면 Red Hat의 이점은 무엇입니까?
한때 레드햇의 CEO였던 IBM의 짐 화이트허스트(Jim Whitehurst) 사장은 다음과 같이 말했습니다.
“Red Hat은 사용 가능한 많은 옵션을 고려하고 Red Hat Enterprise Linux 6용 Canonical의 Upstart를 사용했습니다. 궁극적으로 우리는 systemd가 우리가 보는 문제를 해결하기 위해 확장성, 단순성, 확장성 및 잘 정의된 인터페이스를 제공하는 최고의 아키텍처이기 때문에 선택했습니다. 오늘 그리고 미래를 내다본다.”
Whitehurst는 또한 임베디드 시스템에서도 이점을 보았다고 말했습니다. Red Hat은 "특히 안정성과 신뢰성이 가장 중요한 관심사인 통신 및 자동차 산업에서 세계 최대의 임베디드 공급업체"와 파트너 관계를 맺고 있습니다.
이는 기술적으로 타당한 이유처럼 보입니다. 신뢰성에 대한 회사의 요구를 이해할 수 있으며 Red Hat이 자신의 이익을 추구하는 것이 부당한 것은 아니지만 다른 모든 사람들이 이를 따라야 합니까?
시스템 쿨에이드를 마시고 계십니까?
systemd
의 일부 반대자는 배포판과 사람들이 Red Hat의 리드를 맹목적으로 따르고 채택하고 있다고 말합니다.
그러나 '쿨에이드를 마신다'는 말처럼 옳지 않다. 1978년 컬트 지도자인 Jim Jones가 청산가리를 가한 포도 맛 액체를 마셔서 900명이 넘는 추종자들을 자살하도록 강요한 후 만들어낸 이 문구는 Kool-Aid를 잘못 수치스럽게 만듭니다. 그룹은 실제로 Flavor Aid를 마셨지만 Kool-Aid는 그 이후로 그 붓에 의해 타르가 붙었습니다.
또한 Linux 배포판은 Red Hat을 맹목적으로 따르지 않습니다. 그들은 진지한 고민 끝에 systemd
를 채택하고 있습니다. 이 논쟁은 데비안 메일링 리스트에서 오랫동안 격렬했습니다. 그러나 2014년에 커뮤니티는 systemd
를 기본 초기화 시스템으로 채택하고 대안도 지원하기로 결정했습니다.
Debian은 RedHat, Fedora 또는 CentOS에서 파생되지 않았기 때문에 중요한 예입니다. Red Hat에서 Debian에 적용되는 조정은 없습니다. 그리고 PID 1과 마찬가지로 데비안은 우분투와 그 파생물을 포함하여 많은 후손을 가지고 있습니다.
데비안 커뮤니티의 결정은 광범위합니다. 그들은 또한 격렬한 토론을 벌이고 Condorcet 투표 방법을 사용하는 것에 대해 투표했습니다. 커뮤니티도 그런 선택을 가볍게 하지 않는다.
2019년 12월에 계속해서 systemd
에 집중하고 대안을 계속 탐색하기로 다시 투표했습니다. 맹목적으로 따르는 것과는 달리 이것은 실제로 민주주의와 직장에서의 선택의 자유에 대한 교과서적인 예입니다.
선택의 한계
일반적으로 특정 Linux 배포판에서 systemd
를 사용할지 여부를 선택할 수 없습니다. 오히려 배포판 자체에서 사용 여부를 선택하고 선호하는 Linux 배포판을 선택할 수 있습니다. 아마도 당신이 좋아하는 Linux 배포판이 systemd
로 전환되었을 것입니다. 좋아하는 뮤지션이 장르를 바꾸는 것처럼 이것은 거북할 수 있습니다.
Debian, Fedora, CentOS, Ubuntu, Arch, Solus 및 openSUSE를 사용하고 systemd
채택에 반대하는 사람들은 자신이 선택한 배포판을 사용하는 데 한계가 있다고 느낄 수 있습니다. POSIX에 대한 아키텍처 선택, 범위 이동 또는 무시에 대해 충분히 강하게 느낀다면 해당 배포판을 계속 사용하는 것이 지지 않을 수 있습니다.
물론 스펙트럼이 있습니다. 한쪽에는 문제를 이해하지 못하는(또는 관심조차 두지 않는) 사람들이 있고 다른 한쪽에는 열렬한 반대자가 있습니다. 중간 어딘가에 변화를 좋아하지 않지만 배를 뛰어넘을 만큼 그것에 대해 신경 쓰지 않는 사람들이 있습니다. 하지만 자신의 취향이나 원칙 때문에 선택한 배급에 머물지 못하는 배급난민은?
불행히도 원하는 초기화 시스템을 설치하는 것만큼 쉽지는 않습니다. 모든 사람이 그렇게 할 수 있는 기술적인 능력을 가지고 있는 것은 아닙니다. 그놈과 같은 애플리케이션이나 데스크탑 환경이 systemd
에 의존할 때 발생하는 어려움은 신경쓰지 마십시오.
다른 배포판으로 이동하는 것은 어떻습니까? Devuan과 같은 일부는 systemd
를 채택한 비 systemd
배포판(이 경우 Debian)으로 나타났습니다. systemd
을 사용하는 것은 상위 배포판과 유사해야 하지만 모든 비 시스템 포크의 경우는 아닙니다. 예를 들어, Fedora를 떠나 AntiX, Gentoo 또는 Slackware로 이동하면 매우 다른 경험을 하게 될 것입니다.
아무데도 가지 않아
나는 systemd
가 하는 일(프로세스에 대한 간단하고 표준화된 제어 메커니즘)을 좋아합니다. 나는 그것이하는 일 (바이너리 로그)에 대한 근거를 이해하지 못합니다. 나는 또한 그것이하는 일 중 일부를 싫어합니다 (홈 폴더 개조 - 누가 그것을 요구 했습니까?).
Debian과 같은 배포판은 현명한 일을 하고 있으며 옵션을 열어 두는 대안을 조사하고 있습니다. 그러나 systemd
는 장기적으로 그 안에 있습니다.
다른 사람을 위해 Linux 시스템을 관리하는 경우 System V init와 마찬가지로 systemd
를 배우십시오. 이렇게 하면 어떤 일이 일어나더라도 임무를 수행할 수 있습니다.
집에서 리눅스만 쓰나요? 그렇다면 기술 요구 사항을 충족하고 Linux 이념을 보완하는 배포판을 선택하십시오.
관련: Systemd는 Linux 홈 디렉토리 작동 방식을 변경합니다 .