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 에서도 마찬가지로 자동 마운트와 타 프로그램 꾸러미에서의 해당 파일 시스템 사용에 영향을 준다는 점을 참고하셨으면 합니다.

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

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

부팅 시간에 /usr이 나타나는지 확인하기
For a split configuration, use an initramfs to mount  before starting systemd. See the Initramfs Gentoo Guide for instructions.

LVM2 와 Initramfs 사용하기
When sys-fs/lvm2 is used and the system is booted using an initramfs, the initramfs will have to be created using by running:

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

When LVM is used, the lvmetad daemon needs to be started as well. Otherwise systemd will be unable to mount LVM volumes. lvmetad can be enabled in :

설치
contains udev. Once installed, can be removed as systemd will be the provider for.

Enable the  USE flag globally (in ). The  USE flag should also be disabled to prevent conflicts with the systemd-logind service. It is also possible to switch to a systemd subprofile to use saner USE flags defaults in which case it is not necessary to change :

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

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

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

The following subsections document how to switch the init in one of the boot managers or the kernel.

Grub Legacy (0.x)
The  argument should be added to the kernel command-line. An example excerpt from would look like so:

Should the system boot using OpenRC, try using  instead of.

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

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

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

커널 설정
The init configuration can also be hard-coded in the kernel configuration. See "Processor type and features -> Built-in kernel command line". Note that this technique works for both grub</tt> and grub2</tt>.

루트 암호 설정
At this point don't forget to set the system's root password. If something goes wrong, systemd will prompt for the root password to go into maintenance mode.

설치 후 설정
systemd supports a few system configuration files to set the most basic system details.

호스트 이름
To set the hostname, create/edit and simply provide the desired hostname.

When booted using systemd, a tool called exists for editing  and. To change the hostname, run:

Refer to for more options.

로캘
Usually, locales will be properly migrated from OpenRC when installing systemd. When required, the locale can be set in as per the Gentoo handbook instructions:

Once booted with systemd, the tool localectl</tt> is used to set locale and console or X11 keymaps. To change the system locale, run the following command:

To change the virtual console keymap:

And finally, to set the X11 layout:

If needed the model, variant and options can be specified as well:

Time and date
Time and date can be set using the timedatectl</tt> utility. That will also allow users to set up synchronization without needing to rely on or other providers than systemd's own implementation.

To learn how to use timedatectl</tt> simply run:

Automatic module loading
Automatic module loading is configured in a different file, or rather directory of files. The configuration files are stored in. On boot every file with a list of modules will be loaded. The file format is a list of modules separated by newlines and can have any name as long as it ends with. The module loading can be separated by program, service or whatever way that fits personal preference. An example virtualbox.conf</tt> is listed below:

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

To configure systemd-networkd, create a file under. See systemd.network(5) for reference. A simple DHCP configuration is given below:

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

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

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

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

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

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

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


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

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

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

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

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

Alternatively the systemctl</tt> tool can be used to list all services (including implicit ones):

And finally check for services that failed to start:

Enabling, disabling, starting, and stopping services
The usual way of enabling a service is using the following command:

Services can be disabled likewise:

These commands enable services using their default name in default target (both specified in "Install" section of the service file). However, sometimes services either don't provide that information or users prefer to have another name/target.

Note that these commands only enable or disable the system to be started on a next boot; to start the service right now, use:

Services can be stopped likewise:

Installing custom unit files
Custom unit files can be placed in, where they will be recognized after running systemctl daemon-reload</tt>:

is reserved for service files installed by the package manager.

Customizing unit files
When only minor changes to a unit are needed, there's no need to create a full copy of the original unit file in. Overriding settings in a package management provided unit can be achieved by drop-in files in a directory named after the original unit (e.g. ) in.

A reload of systemd is needed to inform it of the changes:

Then the service needs to be restarted to apply the changes:

Verify that the changed property was applied to the service:

Enabling a service under a custom name
When the name provided by "Alias" in the unit's "[Install]" section does not meet the expectations and providing a permanent new value for this through a customization is not desired, a symlink can be created manually in. The name of the directory can either specify a target or another service which will depend on the new one.

For example, to install as  in the :

To disable the service, just remove the symlink:

Native services
Some of Gentoo packages already install systemd unit files. For these services, it is enough to enable them. A quick summary of packages installing unit files can be seen on systemd eclass users list.

The following table lists systemd services matching OpenRC ones:

Timer services
Since version 197 systemd supports timers, making cron unnecessary on a systemd system. Since version 212 persistent services are supported, replacing even anacron. Persistent timers are run at the next opportunity if the system was powered down when the timer was scheduled.

The following is an example on how to make a simple timer that runs in the context of a user. It will even run if the user is not logged in. Every timed service needs a timer and a service file that is activated by the timer as follows:

Firstly, tell systemd to rescan the service files:

It is possible to trigger the backup manually by running the following command:

Start and stop the timer manually as follows:

Finally, to activate the timer at every system start, run:

To check the last results of running the service:

Emailing failures
If a timed service runs and fails an e-mail can be send out to inform the user or administrator. This is possible with the "OnFailure" stanza which specifies what should happen if a service fails. A failure is detected by a non-zero return code of the invoked script.

For that change the script as follows:

This requires to have the service installed, which can be found in kylemanna's systemd-utils repository.

Replacing cron
The above timer and service files can also be added to to make them available system-wide. The install section should then say  to enable the service at system start.

However, cron also runs the scripts in and other locations. Several packages place scripts there that they expect to be run daily. This behavior can be emulated with systemd by installing. Then activate the new cron replacement with the following commands:

Troubleshooting

 * Upstream debugging guide
 * Upstream debugging guide
 * Upstream debugging guide

Graphical sessions opened in random places
By default systemd only launches a getty</tt> process when it's going to be used. This causes some display managers (like GDM) to use the remaining TTYs for opening graphical sessions on demand, which can result in having consoles and graphical sessions placed randomly depending on the order they were used.

To stick with a more "classical" behavior (i.e, consoles placed from to  and graphical sessions using the remaining TTYs) force it to always launch getty</tt> on those:

lvm
When switching from OpenRC to systemd and lvm is needed to properly mount the system volumes, activate the lvm service:

While it might not be needed for activation of the root volume (if lvm is integrated into the initramfs) it might not work for other lvm volumes, unless the service is activated.

systemd-bootchart
As systemd-bootchart attempts to start, reconfigure it to invoke systemd instead:

The result of the bootchart is a report in SVG format located in.

syslog-ng conflicts with systemd
systemd creates as datagram socket  so syslog-ng needs to be told to read from a unix-dgram instead of a unix-stream as otherwise syslog-ng would be using a "wrong" stream:

sys-fs/cryptsetup configuration
systemd does not seem to respect (see ) so it needs to be configured through the  file:

You may need to create a new service file from your file. To do this, enable the  USE flag for. It will install. Executing it will create a service file in, which you can now copy to , adjust manually and add to the desired runlevel.

Check for units that failed to start
Check for units that failed to start with:

Enable Debug Mode
To get more informations set the following in :

Or enable the debug-shell, that opens a terminal at tty9. This helps to debug services during the boot process.

e4rat usage
Please remember to edit setting 'init' to, otherwise it will keep booting OpenRC.

GRSecurity hardening
With grsecurity enabled, systemd-networkd might log the following error:

The error raises due to systemd-networkd working under a non-root user with grsecurity refusing access to the complete structure for such users. To disable this option, disable the kernel option.

External resources

 * FAQ
 * Tips and tricks