OpenRC/Baselayout 1 to 2 migration/ko
이 안내서는 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-2
및 sys-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 파일에 있으며, 커널 버전은 상관없습니다.
예전 방식의 설정 예제는 다음과 같습니다:
'"`UNIQ--pre-00000003-QINU`"'
이걸 다음과 같이 바꾸면:
'"`UNIQ--pre-00000006-QINU`"'
위 예제에서, 모듈과 모듈에 붙은 매개변수는 2.6.x 계열 커널로 전달합니다. 새 설정에서는 커널 버전을 기반으로 어떤 모듈이든 세밀하게 모듈과 매개변수를 다룰 수 있습니다.
module* 변수는 누적 방식이 아닙니다. 버전별 변수 값은 일반 변수값보다 우선합니다.
module_ 및 modules_ 차이점을 참고하십시오.
더 자세한 예제는 다음과 같습니다:
'"`UNIQ--pre-00000009-QINU`"'
부팅 런레벨
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를 기본으로 시작하지 않습니다. /udev는 sysinit
런레벨에서 시작하도록 표시해야합니다. 앞서 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 할당은 다음과 같이 바꿉니다:
'"`UNIQ--pre-0000000D-QINU`"'
'"`UNIQ--pre-00000010-QINU`"'
시계
시계 설정은 /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 디렉터리에 들어있는 시간대의 상대 경로입니다. 예를 들어 미국 동부 해안에 사는 사람이라면 다음 설정이 올바른 값이 됩니다:
'"`UNIQ--pre-00000013-QINU`"'
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에 나타납니다.
'"`UNIQ--pre-00000017-QINU`"'
local.start 과 local.stop
OpenRC에서는 /etc/conf.d/local.start 과 local.stop 를 더이상 취급하지 않습니다. OpenRC 이전 작업을 진행하는 동안 이 파일을 /etc/local.d 에 옮기고 .start 또는 .stop 접미사를 붙입니다. 그 다음 알파벳 순으로 실행처리합니다.
시스템 하위 유형: 특수한 가상화 사례
OpenRC 이전 버전에서는 depend
함수의 keyword
호출을 활용하여 몇가지 초기화 스크립트를 건너 뛸 때 참고하는 가상화 기술의 다양한 형식을 발견합니다.
그러나, 0.7.0 릴리즈에서와 같이 관리자는 /etc/rc.conf의 rc_sys
변수를 활용하여 하위 형식을 분명하게 설정해야 합니다. 하위 형식은 주어진 루트가 속한 가상화 환경과 일치해야하빈다. 보통, 가상 컨테이너에는 비어있지 않은 rc_sys
값을 넣습니다. 호스트 노트는 rc_sys=""
값을 가집니다.
특정 하위 형식이 없다면 빈
""
문자열 기본 값을 활용하십시오. 변수 설정을 철회하면, 경고를 띄우고 예전 방식의 발견 알고리즘 사용을 시도합니다.자동 발견 처리 과정에서 기본 값이 알 수 없는 값일 경우
rc_sys
변수를 임시로 주석 해제하고 rc -S 발견 명령을 실행합니다.'"`UNIQ--pre-0000001A-QINU`"'
발견 알고리즘은 새 하위 형식 도입 및 우선순위 발견을 신뢰할 수 없는 커널로의 변경 때문에 수동 설정 방식으로 바꾸었습니다.
하위 형식 | 설명 | 참고 |
---|---|---|
기본, 하위 형식 없음 | 설정을 안한 상태와는 다릅니다; 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 page 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 because 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 each article's associated history page.