OpenRC/Baselayout 1 to 2 migration/ko

From Gentoo Wiki
Jump to: navigation, search
This page is a translated version of the page OpenRC/Baselayout 1 to 2 migration and the translation is 100% complete.

Other languages:
English • ‎italiano • ‎日本語 • ‎한국어 • ‎русский

이 안내서는 OpenRC를 통해 baselayout-1 에서 baselayout-2 로 옮겨가는 방법을 안내합니다.

배경

baselayout이 뭐죠?

Baselayout은 전체 시스템을 제대로 동작하기 위해 /etc/hosts와 같은 기본 파일을 모아둔 모음입니다. 또한 젠투에서 활용하는 기본 파일 시스템 배치(예: /etc, /var, /usr, /home 디렉터리)를 제공하기도합니다.

OpenRC는 뭔가요?

OpenRC는 보통 /sbin/init라고 하는 시스템에서 제공하는 init 프로그램과 함께 동작하는 의존성 기반 rc (run command) 시스템입니다. OpenRC는 /sbin/init를 대체하지 않습니다. Gentoo/FreeBSD에서는 sys-freebsd/freebsd-sbin에서 제공하는 FreeBSD init 을 활용하지만, 젠투에서 사용하는 기본 init 시스템은 sys-apps/sysvinit입니다.

왜 옮겨야 하나요?

원래 젠투 rc 시스템은 baselayout 1에 빌드했으며 bash로 작성했습니다. 몇가지 제한 사항이 있습니다. 예를 들면 각 시스템 콜은 부팅 과정에 접근해야 하는데 C 기반 콜 아웃을 추가해야합니다. 이 콜 아웃은 정적으로 연결하는데 rc 시스템이 팽창하는 문제를 야기합니다.

게다가 Gentoo/FreeBSD와 Gentoo 임베디드와 같은 다른 플랫폼에서의 경우는 bash 기반 rc 시스템을 요구할 수 없습니다. 이 때문에 C로 작성했고 POSIX 호환 쉘만 필요한 baselayout 2를 개발했습니다. baselayout 2를 개발하는 동안 baselayout이 젠투용 근본 파일과 파일 시스템 구성요소를 제공하고 rc 시스템이 꾸러미 자체에서 깨진다면 꽤 괜찮겠다 생각했습니다. 그래서 OpenRC가 생겼습니다.

OpenRC는 처음에는 Roy Marples가 2010년까지 개발했습니다. 그리고 지금은 Gentoo OpenRC Project에서 관리합니다. OpenRC는 현재 다양한 모든 젠투 변형 버전(Gentoo Linux, Gentoo/FreeBSD, Gentoo Embedded, Gentoo Vserver)과 FreeBSD, NetBSD 같은 다른 플랫폼을 지원합니다.

OpenRC로 옮겨가기

OpenRC를 옮겨가는 과정은 상당히 간단합니다. 꾸러미 관리자에서 일반 업그레이드 절차 일부를 끌어냅니다. 대부분 중요한 단계는 >=sys-apps/baselayout-2sys-apps/openrc 꾸러미를 설치하고 나서 이루어집니다. 시스템을 다시 부팅하기 전에 dispatch-conf 또는 유사 도구를 실행하여 /etc 에 있는 파일이 최신인지 확인하는 과정이 중요합니다. 이 과정을 실패하면 시스템을 부팅하지 못하게 만드는 결과를 초래 하고 아래 절차를 거쳐 시스템을 복구하기 위해 LiveCD가 필요합니다.

설정 파일을 업데이트 하고 나면 다시 부팅하기 전에 우선 확인해야 할 몇가지가 있습니다.

/etc/conf.d/rc

/etc/conf.d/rc는 오래됐습니다. 이 파일에 들어간 설정은 /etc/rc.conf에 적당한 설정 값으로 옮겨야합니다. /etc/rc.conf 파일과 /etc/conf.d/rc 파일을 살펴보시고 설정을 옮기십시오. 끝나면 /etc/conf.d/rc 파일을 직접 제거하십시오.

커널 모듈

보통 부팅하는 과정에서 각각의 커널 모듈을 자동으로 불러올 때, 매개 변수를 전달할 모듈은 /etc/modules.autoload.d/kernel-2.6 에 있습니다. baselayout-2에서는 이 파일을 더 이상 사용하지 않습니다. 대신, 자동으로 불러오는 모듈과 모듈 매개변수는 /etc/conf.d/modules 파일에 있으며, 커널 버전은 상관없습니다.

예전 방식의 설정 예제는 다음과 같습니다:

파일 /etc/modules.autoload.d/kernel-2.6
ivtv
cx88_dvb video_br=2

이걸 다음과 같이 바꾸면:

파일 /etc/conf.d/modules
# Modules autoloaded at boot
modules_2_6="ivtv cx88_dvb"
# Module parameters
module_cx88_dvb_args_2_6="video_br=2"

위 예제에서, 모듈과 모듈에 붙은 매개변수는 2.6.x 계열 커널로 전달합니다. 새 설정에서는 커널 버전을 기반으로 어떤 모듈이든 세밀하게 모듈과 매개변수를 다룰 수 있습니다.

중요
module* 변수는 누적 방식이 아닙니다. 버전별 변수 값은 일반 변수값보다 우선합니다.
참고
module_modules_ 차이점을 참고하십시오.

더 자세한 예제는 다음과 같습니다:

파일 /etc/conf.d/modules
# Only load ivtv for 2.6.23-gentoo-r5
modules_2_6_23_gentoo_r5="ivtv"
# Only load cx88_dvb for 2.6.23 kernels (other than -gentoo-r5)
modules_2_6_23="cx88_dvb"
# Only load tun and usbserial for 2.6.x series kernels where x != 23
modules_2_6="tun usbserial"
# Otherwise load ochi1394 and ieee1394
modules="ohci1394 ieee1394"
  
# For 2.6.23-gentoo-r5, pass video_br=2 to cx88_dvb
module_cx88_dvb_args_2_6_23_gentoo_r5="video_br=2"
# For 2.6.x series kernels, always pass vendor and product
module_usbserial_args_2_6="vendor=0x1410 product=0x2110"
# Always pass debug to ieee1394
module_ieee1394_args="debug" 

부팅 런레벨

boot 런레벨에서는 전체 머신에 중요한 몇가지 단계를 거칩니다. 예를 들어, 부팅을 시작할 때 루트 파일 시스템을 읽기/쓰기로 마운트했는지, 파일시스템 오류, 마운트 지점의 존재여부를 확인한 후 /proc 의사 파일 시스템을 시작합니다.

OpenRC에서 블록 저장 장치에 대한 볼륨 관리자 서비스는 더이상 부팅 과정에서 자동으로 실행하지 않습니다. LVM, RAID, swap, device-mapper (dm), dm-crypt 같은게 여기에 해당합니다. 시스템 관리자는 이 서비스에 대한 적당한 초기화 스크립트를 boot 런레벨에 추가했는지 확인해야 하며, 그렇지 않으면 시스템을 부팅할 수 없습니다.

OpenRC 이빌드에서 이전 작업을 시도하는 동안, 관리자는 볼륨 관리 서비스를 제대로 옮겼는지 확인해야합니다:

root #ls -l /etc/runlevels/boot/

root, procfs, mtab, swap, fsck가 위 항목에서 빠져있다면 다음 명령을 실행하여 boot 런레벨에 해당 항목을 추가하십시오:

root #rc-update add root boot
root #rc-update add procfs boot
root #rc-update add mtab boot
root #rc-update add fsck boot
root #rc-update add swap boot

시스템에서 mdraid, LVM 을 사용하는데 목록에 언급되지 않았다면 다음 초기화 스크립트를 boot 런레벨에 추가해야합니다:

root #rc-update add mdraid boot
root #rc-update add lvm boot

Udev

OpenRC는 udev를 기본으로 시작하지 않습니다. /udevsysinit 런레벨에서 시작하도록 표시해야합니다. 앞서 udev를 활성화했고 sysinit 런레벨에 추가했는지 OpenRC 이빌드에서 발견합니다. 하지만, 안전하게 처리하려면 udev가 있는지부터 확인하십시오:

root #ls -l /etc/runlevels/sysinit
lrwxrwxrwx 1 root root 14 2009-01-29 08:00 /etc/runlevels/sysinit/udev -> \
/etc/init.d/udev

udev가 목록에 없다면, 올바른 런레벨에 추가하십시오:

root #rc-update add udev sysinit

네트워크

baselayout과 OpenRC가 두 개의 다른 꾸러미로 갈라졌기 때문에 net.eth0 초기화 스크립트는 업그레이드 과정에서 나타나지 않습니다. 이 초기화 스크립트를 바꾸고 기본 런레벨에 넣으려면 다음 과정을 진행하십시오:

root #cd /etc/init.d
root #ln -s net.lo net.eth0
root #rc-update add net.eth0 default

다른 네트워크 초기화 스크립트가 빠졌다면 다시 추가하기 위해 위 과정을 따르십시오. 간단하게, eth0 를 빠진 네트워크 장치 이름으로 바꾸면됩니다.

/etc/conf.d/net(oldnet)은 더이상 bash 방식 배열 값을 설정에 활용하지 않습니다. 설정 방법을 알아보려면 /usr/share/doc/openrc-<version>/net.example 파일을 검토하십시오. 변한 과정은 상대적으로 간단하며, 각각의 항목을 새로운 줄로 바꾸면 됩니다. 예를 들면 정적 IP 할당은 다음과 같이 바꿉니다:

파일 /etc/conf.d/net예전 방식
config_eth0=( "192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255" )
routes_eth0=( "default via 192.168.1.100" "10.0.0.0/8 via 192.168.1.2" )
파일 /etc/conf.d/net새 방식
config_eth0="192.168.1.37 netmask 255.255.255.0 brd 192.168.1.255"
routes_eth0="default via 192.168.1.100
10.0.0.0/8 via 192.168.1.2"

시계

시계 설정은 /etc/conf.d/clock에서 시간을 조절하는 시스템 자체 도구 이름으로 이름을 바꾸었습니다. 리눅스에서는 /etc/conf.d/hwclock이며 FreeBSD에서는 /etc/conf.d/adjkerntz입니다. 실제 시간(RTC) 칩이 동작하지 않는 시스템은 시스템을 끌 때 파일의 mtime을 기반으로 만드는 시스템 시간을 설정하는 /etc/init.d/swclock를 사용하십시오. /etc/init.d/ 의 초기화 스크립트는 그에 따라 이름이 바뀌므로 boot 런레벨에 시스템의 적절한 스크립트를 추가했는지 확인하십시오.

또한, 이 파일에서 TIMEZONE 변수는 더 이상 사용하지 않습니다. 이 내용은 /etc/timezone 파일에서 찾을 수 있습니다. 이 파일이 없다면, 적절한 시간대를 넣어 만들어야합니다. 각 파일을 열어보고 파일의 내용을 확인하십시오.

이 파일의 적절한 값은 /usr/share/zoneinfo 디렉터리에 들어있는 시간대의 상대 경로입니다. 예를 들어 미국 동부 해안에 사는 사람이라면 다음 설정이 올바른 값이 됩니다:

파일 /etc/timezone
America/New_York

XSESSION

XSESSION 변수는 더이상 /etc/rc.conf에서 찾을 수 없습니다. 대신, ~/.bashrc 파일 (또는 이에 상응하는 파일)에서 사용자 기반으로 설정하거나, 또는 /etc/env.d/의 파일에서 시스템 전체적으로 활용하도록 XSESSION 변수를 설정할 수 있습니다.

전체 시스템에 대한 기본 XSESSION 값을 설정하는 예제입니다:

root #echo 'XSESSION="Xfce4"' > /etc/env.d/90xsession
중요
env-update/etc/env.d에 파일을 만든 다음에 실행해야 합니다. 바뀐 설정을 적용하려면 사용자는 로그아웃 한 다음 다시 로그인해야합니다. 만약 변수를 ~/.bashrc에 설정했다면 source ~/.bashrc를 실행하여 파일로부터 환경 변수를 다시 끌어와야합니다.

EDITOR 및 PAGER 변수

EDITOR 변수는 더 이상 /etc/rc.conf에서 찾을 수 없습니다. EDITOR 변수 및 PAGER 변수는 /etc/profile에 기본값으로 설정합니다. 필요한 대로 설정한다면 ~/.bashrc 파일(또는 이에 상응하는 파일)로 사용자 기반 설정을 하든지 /etc/env.d/99editor 파일을 만들어서 시스템 기본 값을 설정하십시오.

중요
env-update/etc/env.d에 파일을 만든 다음에 실행해야 합니다. 바뀐 설정을 적용하려면 사용자는 로그아웃 한 다음 다시 로그인해야합니다. 만약 변수를 ~/.bashrc에 설정했다면 source ~/.bashrc를 실행하여 파일로부터 환경 변수를 다시 끌어와야합니다.

부팅 기록

앞에서 app-admin/showconsole 꾸러미를 활용하여 부팅 과정을 기록할 수 있었습니다. 그러나, OpenRC는 모든 기록 작업을 내부적으로 처리합니다. 따라서 showconsole의 역할을 뜯어볼 필요가 없습니다. showconsole은 이제 안전하게 제거할 수 있습니다. 부팅 메시지를 계속 기록하고 싶으면, /etc/rc.conf 파일의 적당한 변수(rc_logger) 값을 설정하십시오. 기록 내용은 /var/log/rc.log에 나타납니다.

파일 /etc/rc.conf기록 활성화
rc_logger="YES"

local.startlocal.stop

OpenRC에서는 /etc/conf.d/local.startlocal.stop 를 더이상 취급하지 않습니다. OpenRC 이전 작업을 진행하는 동안 이 파일을 /etc/local.d 에 옮기고 .start 또는 .stop 접미사를 붙입니다. 그 다음 알파벳 순으로 실행처리합니다.

시스템 하위 유형: 특수한 가상화 사례

OpenRC 이전 버전에서는 depend 함수의 keyword 호출을 활용하여 몇가지 초기화 스크립트를 건너 뛸 때 참고하는 가상화 기술의 다양한 형식을 발견합니다.

그러나, 0.7.0 릴리즈에서와 같이 관리자는 /etc/rc.confrc_sys 변수를 활용하여 하위 형식을 분명하게 설정해야 합니다. 하위 형식은 주어진 루트가 속한 가상화 환경과 일치해야하빈다. 보통, 가상 컨테이너에는 비어있지 않은 rc_sys 값을 넣습니다. 호스트 노트는 rc_sys="" 값을 가집니다.

중요
특정 하위 형식이 없다면 빈 "" 문자열 기본 값을 활용하십시오. 변수 설정을 철회하면, 경고를 띄우고 예전 방식의 발견 알고리즘 사용을 시도합니다.
참고
자동 발견 처리 과정에서 기본 값이 알 수 없는 값일 경우 rc_sys 변수를 임시로 주석 해제하고 rc -S 발견 명령을 실행합니다.
파일 /etc/rc.conf시스템 하위 형식 설정 비우기
rc_sys=""

발견 알고리즘은 새 하위 형식 도입 및 우선순위 발견을 신뢰할 수 없는 커널로의 변경 때문에 수동 설정 방식으로 바꾸었습니다.

하위 형식 설명 참고
기본, 하위 형식 없음 설정을 안한 상태와는 다릅니다; FreeBSD, Linux, NetBSD
jail FreeBSD 제한
lxc Linux 컨테이너 자동발견 방식 아님
openvz Linux OpenVZ
prefix Prefix 자동발견 방식 아님; FreeBSD, Linux & NetBSD
vserver Linux vserver
xen0 Xen0 Domain Linux & NetBSD
xenU XenU Domain Linux & NetBSD

오래된 설정 파일 지우기

이전 작업이 끝나면 아직 포티지에서 지우지 않은 파일이 시스템에 남습니다. 이들은 설정 파일 보호 기능이 동작하는 포티지가 보호한 설정 파일입니다.

대부분 볼만한 예제는 /usr/share/doc/openrc-*/net.example.bz2에서 온 /etc/conf.d/net.example입니다.

끝내기

설정 파일과 초기화 스크립트 업데이트가 끝나면, 마지막으로 할 일은 reboot를 루트 권한으로 터미널에 입력하는 일입니다. 업그레이드를 하는 중에는 시스템 상태 정보를 보존하지 못하기 때문에 새로 부팅해야합니다.

바뀐 기능

멈춤 동작

/etc/init.d/service pause 명령으로 모든 의존 서비스를 내리지 않고 임시로 서비스를 멈출 수 있습니다. OpenRC에서 pause 동작을 제거했습니다. 이 기능은 이전 baselayout에서도 동작하는 /etc/init.d/service --nodeps stop 명령으로 지원합니다.

/etc/mtab의 루트 파일 시스템 항목

이전에, 초기 rootfs 항목을 /etc/mtab에서 제거하고 실제 / 루트 항목만 남겨두었습니다. 중복 rootfs 항목은 시스템을 끄는 동안 다시 추가합니다. OpenRC에서는 initramfs와 tmpfs-on-root를 완전하게 지원하려면 두 항목이 있어야합니다. 이는 시스템을 끄는 과정을 처리하는 동안 기록 작업을 덜 처리해야 함을 의미합니다.



This article is based on a document formerly found on our main website gentoo.org.
The following people contributed to the original document: cardoe, nightmorph, robbat2, uberlord
They are listed here as the Wiki history does not allow for any external attribution. If you edit the Wiki article, please do not add yourself here; your contributions are recorded on the history page.