Systemd/ko

systemd는 리눅스 시스템용 최신 SysV 방식의 init 및 rc(run command) 를 대체하는 시스템입니다. 젠투에서는 대안 init 시스템으로 지원합니다.

커널
systemd에서는 최신 리눅스 커널 기능의 대부분을 사용할 수 있습니다. 이제 최소 커널 지원 버전은 2.6.39입니다. 최근의 에서는 systemd용 필수, 선택 커널 옵션을 선택하는 간편한 수단을 도입했습니다:

커널 옵션(를 사용하지 않는 경우의 옵션)을 직접 설정하려면 다음 커널 옵션이 필요하거나 추천합니다:

UEFI 시스템에서는 다음 옵션을 활성화하십시오:

시스템에서 BFQ 스케쥴러를 사용한다면 "Enable the block layer -> IO Schedulers"의 BFQ 업스트림에서 "BFQ hierarchical scheduling support" 활성화를 추천합니다.

최신 목록은, 업스트림 README 파일에서 "REQUIREMENTS" 섹션을 참고하십시오.

디렉터리
디렉터리는 systemd가 사용하며 또한 기타 프로그램의 경우 파일, 소켓, 상태 파일과 같은 실행 시간 데이터를 저장하는 반영구 저장소로 활용합니다.

systemd 꾸러미에서는 자체적으로 디렉터리를 만듭니다. 그러나 이러한 변경 동작은 OpenRC 에서도 마찬가지로 자동 마운트와 타 프로그램 꾸러미에서의 해당 파일 시스템 사용에 영향을 준다는 점을 참고하셨으면 합니다.

업스트림에서는 로 연결하는 심볼릭 링크 파일만 지원합니다. 이 심볼릭 링크를 만들지 않으면 와  에서 문제가 발생합니다. 예전에는 일부 프로그램에서 (마운트 옵션과 같은) 정보를 에 써서 일반 파일이었습니다. 이제 모든 프로그램이 이 문제를 해결하도록 지원합니다. 여전히, 이 파일을 심볼릭 링크로 만들기 전에 보고된 문제점으로 하여금 시스템이 영향을 받는지 알아보려면 버그를 확인해보십시오.

심볼릭 링크를 만들려면 다음 명령을 실행하십시오:

부팅 시간에 /usr이 나타나는지 확인하기
For a split configuration, use an initramfs to mount  before starting systemd. For now, this means using or  until support for  is available in. Set aside time now to migrate:

When using dracut, enable the usrmount module if it is not automatically enabled to mount automatically.

When genkernel-next is used, before rebuilding the kernel, be sure to set the UDEV variable in 's configuration file to. This will pull into the initramfs:

See the Initramfs guide for more alternatives.

LVM2 와 Initramfs 사용하기
sys-fs/lvm2를 사용하여 시스템을 initramfs로 부팅하려 할 때, 의 다음 명령을 사용하면 initramfs를 만듭니다:

is either  or one of the other genkernel targets which imply the creation of an initramfs. For more information, look at the output of :

LVM을 사용한다면, 이에 따라 데몬을 시작해야 합니다. 그렇지 않으면 systemd에서 LVM 볼륨을 마운트할 수 없습니다. 데몬은 에서 활성화할 수 있습니다:

설치
에 udev가 있습니다. 일단 설치하면, 의 프로바이더가 systemd가 되므로 를 제거할 수 있습니다.

USE 플래그를(에서) 전체적으로 활성화하십시오. 서비스와 충돌하는 현상을 막으려면   USE 플래그를 비활성해야합니다. 분명한 USE 플래그를 기본으로 사용하려 systemd 하위 프로파일로 전환할 수도 있는데, 이런 경우 의 설정을 바꿀 필요는 없습니다.

마지막으로 새 플래그로 시스템을 업데이트하십시오:

의존성 문제가 발생하면(를 막는 ), 가 world 파일에 등록한 상태일수도 있습니다. 선택을 취소하여 이 문제를 해결해보십시오:

systemd로 부팅
systemd를 실행하려면, 실행 커널(또는 initramfs)이 활용하는 을 전환해야합니다.

다음 하위 장에서는 부팅 관리자 또는 커널에서 설정을 바꾸는 방법을 언급합니다.

이전 Grub 버전 (0.x)
매개 변수 값을 커널 명령줄에 추가하십시오. 에서 온 예제는 다음과 같습니다:

OpenRC로 시스템을 부팅할 경우  대신   를 사용하십시오.

Grub 2
를 사용할 때, init 옵션을 GRUB_CMDLINE_LINUX 에 붙여넣으십시오:

GRUB 2 설정 파일을 직접 작성할 경우(전문가에게만 해당),   매개 변수를   또는   명령에 추가하십시오.

genkernel-next의 Initrd를 활용할 경우  대신  를 사용하십시오.

커널 설정
init 설정은 커널 설정으로 하드코딩할 수 있습니다. "Processor type and features -> Built-in kernel command line" 부분을 참고하십시오. 이 기법은 과 에서 동작합니다.

루트 암호 설정
여기서 시스템 루트 암호 설정을 잊지 마십시오. 뭔가 잘못됐다면 systemd에서 관리 모드로 진입할 루트 암호를 물어봅니다.

설치 후 설정
systemd에서는 대부분의 기본 시스템 세부 정보 설정할 몇가지 시스템 설정 파일을 지원합니다.

호스트 이름
호스트 이름을 설정하려면 를 만들거나 편집하여 원하는 호스트 이름을 넣으십시오.

systemd로 부팅할 때, 와 를 편집하는  도구가 있습니다. 호스트 이름을 바꾼다면, 다음처럼 명령을 실행하십시오.

더 많은 옵션은 를 참고하십시오.

로캘
보통 로캘은 systemd를 설치할 때 OpenRC에서 적절하게 가져옵니다. 필요하다면 젠투 핸드북에 언급된 절차대로 에서 설정할 수 있습니다.

systemd로 부팅 했다면 도구로 로캘, 콘솔, X11 키 배치를 설정할 수 있습니다. 시스템 로캘을 바꾸려면, 다음 명령을 실행하십시오:

가상 콘솔 키 배치를 바꾸려면:

마지막으로 X11 배치를 설정하려면:

모델에서 필요하다면, 변수 및 옵션 값을 설정할 수 있습니다:

날짜와 시간
날짜와 시간은 유틸리티로 설정할 수 있습니다. 이 유틸리티에서는 또는 systemd의 자체 구현체가 아닌 다른 구현체 없이 시간 동기화를 처리하도록 설정할 수 있습니다.

사용 방법을 알아보려면 간단하게 다음처럼 실행하십시오:

자동 모듈 불러오기
자동 모듈 불러오기는 파일의 디렉리가 아닌, 각자 다른 파일에 설정합니다. 설정 파일은 에 있습니다. 부팅 과정에서 모듈 목록에 있는 파일을 불러옵니다. 파일 형식은 개행 문자로 구분한 모듈 목록이며, 를 붙여 파일 이름이 길어질 수 있습니다. 모듈 불러오기 동작은 프로그램, 서비스 또는 개인으 취향에 따른 방직으로 나눌 수 있습니다. 하단의 예제를 통해 를 보여드리겠습니다:

systemd-networkd
systemd-networkd는 유선 네트워크 인터페이스를 설정할 때 쓸만합니다. 기본적으로는 비활성화 상태입니다.

systemd-networkd를 설정하려면 의 파일을 만드십시오. systemd.network(5)를 참고하십시오. 간단한 DHCP 설정을 예로 아래에 보여드립니다:

systemd-networkd는 기본적으로 를 업데이트 하지 ㅇ낳습니다. systemd에서 DNS 설정을 관리하려면 를 심볼릭 링크로 바꾸고 systemd-resolved를 시작하십시오.

NetworkManager
NetworkManager는 주로 네트워크를 설정할 때 사용합니다. 이 용도로, X11 기반으로 동작하는 데스크톱을 사용한다면 간단하게 다음 명령을 실행하십시오.

이 경우가 아니라 콘솔에서 네트워크를 설정해야 한다면, nmcli를 사용해보시거나, 를 통해 설정 안내 과정을 따라가십시오:

nmtui은 콘솔에서 실행할 경우, 사용자에게 설정 과정을 안내하는 curses 프론트엔드입니다.

로그 파일 처리
systemd에는 ( 나 같은) 외부 로그 시스템에 의존할 필요 없이 로그 파일을 자체적으로 처리하는 수단을 지니고 있습니다. 이제 메시지는 로 읽어볼 수 있습니다. 허나 로그를 처리하는데 적당한 외부 도구로도 설정할 수 있습니다. 개인적인 요구에 맞춘 journald 설정 방법을 알아보려면 를 입력하십시오.

옵션의 일부는 다음과 같습니다:

더 많은 옵션은 을 살펴보십시오.

tmpfs에 있는 /tmp
에서 에 어떤 다른 파일 시스템을 마운트하지 않으면 systemd에서는 를 tmpfs로 마운트합니다. 이는 매번 부팅할 때마다 비어있고 시스템에 장착한 RAM 용량의 50%로 제한된 상태임을 의미합니다. 왜 이런 동작이 타당한지, 이 설정을 어떻게 수정하는지 알아보려면 API File Systems를 살펴보십시오.

부팅 과정 세부 설정
systemd로 이전하는 과정에서 사용자 여러분은 보통 부팅 과정 출력 내용 규모가 다르다는걸 눈치챕니다:


 * 부팅 옵션은 커널 출력에만 영향을 줄 뿐만 아니라, systemd 자체에도 영향을 줍니다. 머신에 systemd를 설정한다면, 언제든 일어나는 오류를 쉽게 살펴보려면 이 옵션을 치워놓으십시오. 오류를 다 해결하고 다시 추가하면 잠잠한(그리고 빠른) 부팅 과정을 진행할 수 있습니다.
 * 부팅 옵션을 전달해도, 어차피 systemd 에서는  설정을 전달하여 상태를 표시하도록 설정할 수 있습니다.
 * 부팅 옵션을 설정하지 않으면, 일부 메시지를 콘솔에 겹쳐 출력할 수 있습니다. 이는 커널 설정에 기인합니다(의 참조). 이 설정을 조절하려면,   부팅 매개 변수를 커널에 전달하십시오(그리고 설정에 따라 값을 업데이트 하십시오. 예를 들어, 가장 작은 값은 1입니다.).

서비스
시스템에서 어떨 때는 systemd를 (시스템 모드로) 동작하게 하려 다시 부팅할 필요가 있을 수도 있습니다. 다시 부팅하기 전에는, 가능한한 완벽하게 systemd를 설정했는지 확인하려는 목적으로 이 문서를 전반적으로 읽어내려가십시오. 참고로 은 systemd가 동작하지 않아도 동작하지만, 은 systemd가 동작하지 않으면 무용지물입니다. systemd가 동작하는 시스템에 로그인 한 후 서비스 설정(서비스 활성화 및 시작)을 완료하십시오.

OpenRC 서비스
systemd가 근본적으로 이전 Init.d 스크립트 동작을 지원하도록 의도했지만, 지원 기능이 독립기반 OpenRC에 적합하지 않기 때문에 젠투에서는 완전히 먹통입니다. OpenRC는 OpenRC를 시스템 부팅 과정에서 사용하지 않았을 경우 init.d 스크립트를 실행할 수 없는지 확인(그렇지 않으면 결과를 예상할 수 없습니다)하는 추가 도구를 제공합니다.

존재 서비스 목록
존재하는 모든 서비스 유닛은 에  매개 변수를 붙여 목록을 확인할 수 있습니다:

다음 파일 접미부 항목은 자주 사용하는 요소입니다:

대신 도구로 (암묵적으로 동작하는) 모든 서비스 목록을 볼 때  사용할 수 있습니다:

그리고 마지막으로 시작에 실패한 서비스를 점검하려면:

서비스 활성화, 비활성화, 시작, 중단
일반적인 서비스 활성화 방식은 다음 명령을 사용합니다:

서비스는 다음과 같이 비활성화 할 수 있습니다:

이 명령은 기본 대상의 기본 이름으로 서비스를 활성화합니다(각각의 내용은 서비스 파일의 "Install" 섹션에 설정했습니다). 그러나 가끔 서비스는 이런 정보 또는 사용자가 원하는 다른 이름/타겟을 제공하지 않기도 합니다.

이 명령은 다음에 시스템을 부팅할 때 유닛을 활성화, 비활성화 할 수 있습니다. 지금 서비스를 시작하려면 다음 명령을 사용하십시오:

다음과 같이 서비스를 멈출 수 있습니다:

개별 유닛 설치
개별 유닛 파일은 를 실행한 후 systemd에서 인식할 에 놓을 수 있습니다:

는 꾸러미 관리자에서 설치한 서비스 파일용으로 예약되어 있습니다.

유닛 파일 개별 설정
유닛의 중요하지 않은 설정을 바꿀 필요가 있다면, 에서 원래 유닛 파일의 완전한 사본을 만들 필요가 없습니다. 원본 유닛 이름 뒤에 가 붙은 디렉터리에서 해당 설정 파일을 넣으면 유닛에서 제공하는 꾸러미 관리 설정을 바꿀 수 있습니다.

바뀐 내용을 systemd 에 알리려면 systemd를 다시 불러와야합니다:

이제 바뀐 내용을 적용하려면 서비스를 다시 시작해야 합니다:

서비스에 바뀐 속성을 적용했는지 확인하십시오:

개별 설정 이름으로 서비스 활성화
유닛의 "[Install]" 섹션에 "Alias"에서 제공하는 이름이 없어 기대한 조건에 일치하지 않고 개별 설정을 통해 이 이름을 완전한 새 값으로 제공하고 싶지 않다면, 에 직접 심볼릭 링크로 만들 수 있습니다. 디렉터리의 이름은 타겟 또는 사로운 요소에 의존할 다른 서비스를 지정할 수 있습니다.

예를 들어 를 에 로 설치하려면:

서비스를 비활성화하려면, 심볼릭 링크를 제거하기만 하시면 됩니다:

자체 서비스
일부 젠투 꾸러미는 이미 systemd 유닛 파일을 설치합니다. 이 서비스들은 충분히 활성화 할 요건을 갖추었습니다. 꾸러미 설치 유닛 파일의 간단한 요약 정보는 systemd eclass users list에서 살펴볼 수 있습니다.

OpenRC의 서비스와 일치하는 systemd 서비스는 다음 테이블 목록과 같습니다:

타이머 서비스
197 버전 부터 systemd에서는 타이머를 지원하는데 systemd 시스템에서 크론을 필요없게 만듭니다. 212 버전 부터는 영속 서비스를 지원하며 anacron을 대체합니다. 영속 타이머는 시스템의 전원이 꺼진 상태에서 타이머 작업이 계획 상태일 경우 다음 기회에 실행합니다.

다음 예제는 사용자 관점에서 실행하는 간단한 타이머를 만드는 방법을 보여줍니다. 사용자가 로그인 상태가 아니어도 실행합니다. 모든 timed 서비스에서는 타이머가 필요하며 서비스 파일은 다음과 같이 타이머가 활성화합니다.

우선 systemd에 서비스 파일을 다시 검색하라고 요청하십시오:

다음 명령을 통해 직접 백업을 실행할 수 있습니다:

다음과 같이 타이머를 직접 시작하고 멈춰보십시오.

마지막으로, 매번 시스템을 시작할 때마다 타이머를 활성화하려면, 다음 명령을 실행하십시오:

서비스 실행 최종 결과를 확인하려 한다면:

전자메일 처리 실패
timed 서비스가 동작중이면, 사용자 또는 관리자에게 시스템 정보를 보낼 수 있는 전자메일 처리에 실패합니다. 서비스 동작에 실패할 경우의 "OnFailure" 상태일 가능성이 있습니다. 이러한 실패 현상은 스크립트 실행 후 비-제로 반환 값으로 나타납니다.

문제를 해결하려면 다음과 같이 스크립트 내용을 바꾸십시오:

이 문제를 해결하려면 설치가 필요하며, kylemanna's systemd-utils repository에서 찾아볼 수 있습니다.

크론 바꾸기
상단의 타이머와 서비스 파일은 시스템 전체에서 사용할 수 있도록 에 추가할 수 있습니다. 시스템을 시작할 때 서비스를 활성화하려면 설치 섹션에 를 적어두어야 합니다.

그러나, 크론은  또는 기타 위치의 스크립트를 실행하기도 합니다. 다양한 꾸러미에서는 매일마다 실행하려는 여러가지 스크립트를 해당 위치에 놓습니다. 이 동작은 을 설치해서 systemd에서 시험해 볼 수 있습니다. 그 다음 다음 명령을 통해 새 크론을 활성화합니다:

문제 해결

 * 업스트림 디버깅 안내서
 * 업스트림 디버깅 안내서
 * 업스트림 디버깅 안내서

/dev/kmsg buffer overrun, some messages lost

 * Problem: When booting the system displays an infinite loop of . The login screen to console never appears since the system never gets to that point in the boot process.


 * Solution: Most of the time this issue is caused when the CONFIG_POWER_SUPPLY_DEBUG option is enabled in the kernel. The current workaround is to disable this option in the kernel, then recompile, install, and boot the new kernel. The solution can also be found in this thread on the Gentoo forums. According to one user one the forum, this issue was also seen when using I2C EEPROM on an embedded system . The solution in this case was to disable the CONFIG_I2C_DEBUG_CORE kernel option.

임의의 위치에서 열리는 그래픽 세션
기본적으로 systemd는 사용하려는 프로세스만 실행합니다. 때문에 일부 (GDM 같은) 디스플레이 관리자 프로그램에서 필요할 때마다 열려있는 그래픽 세션에 대한 기존의 tty를 사용하게 하는데, 이 때문에 콘솔과 그래픽 세션이 사용 순서에 따라 임의대로 배치되는 결과를 초래할 수 있습니다.

좀더 "기존의" 동작과 가깝게 (예: 콘솔은 부터 까지의 프로세스에 위치하며 그래픽 세션은 남아있는 tty를 활용) 항상 를 실행하도록 강제하려면:

lvm
OpenRC에서 systemd로 넘어오면서 시스템 볼륨을 올바르게 마운트하려 lvm이 필요한 경우 lvm 서비스를 활성화하십시오:

(lvm이 initramfs에 들어갔다면) 루트 볼륨 활성화가 따로 필요한건 아니겠지만, 서비스를 시작하기 전에는 다른 lvm 볼륨이 동작하지 않을지도 모릅니다.

systemd-bootchart
systemd-bootchart가 를 시작하려 하므로, systemd를 대신 실행하도록 다시 설정하십시오:

부팅 차트 결과는 에 SVG 형식으로 보고합니다.

syslog-ng 와 systemd의 충돌
systemd에서는 를 데이터그램 소켓 으로 만들므로 systlog-ng 에서 "잘못된" 스트림을 사용하는 현상을 막으려면 unix-stream 대신 unix-dgram에서 불러오도록 설정해야합니다.

syslog-ng source for systemd
There is no need to add  to the  config file. It will cause to fail (at least on version syslog-ng-3.7.2). Update the  line mentioned in the syslog-ng article as follows:

sys-fs/cryptsetup 설정
systemd에서 를 고려하는 것 같지 않으므로( 참고) 파일로 설정해야합니다:

Based on the system's file, a new service file might need to be created. To do this, enable the  USE flag for. It will install. Executing it will create a service file in, which can now be copied to , adjusted manually and added to the desired runlevel.

시작에 실패한 유닛 점검
시작에 실패한 유닛을 점검하려면 다음 명령을 실행하십시오:

디버깅 모드 활성화
자세한 내용은 의 다음 부분을 참고하십시오:

또는 tty9에서 터미널을 여는 debug-shell을 활성화하십시오. 부팅 과정을 진행하는 동안 디버깅 서비스 동작을 돕습니다.

e4rat 사용법
를 편집하여 'init'를 로 설정하는 것을 잊지 마십시오. 그렇지 않으면 OpenRC로 부팅합니다.

GRSecurity 강화
grsecurity를 활성화하면, systemd-networkd에서 다음 오류를 로그로 남깁니다:

비 루트 사용자가 grsecurity를 사용하는 상황에서 각 사용자에게 파일 시스템 구조에 완전히 접근하려는 시도를 막기 때문에 systemd-networkd에서 오류가 발생합니다. 이 옵션을 비활성화하려면 CONFIG_GRKERNSEC_SYSFS_RESTRICT 커널 옵션을 비활성화하십시오.

추가 참조

 * Comparison of init systems - 젠투 Init 시스템과의 차이점을 반영한 게시글.
 * Sakaki's EFI Install Guide - Configuring systemd and installing necessary tools 만 참고하세요.
 * OpenRC to Systemd Cheatsheet

외부 자료

 * FAQ
 * Tips and tricks