"Trans:GentooX86Handbook2-4"의 두 판 사이의 차이
Darkcircle (토론 | 기여) (새 문서: == Init 스크립트 == === 런레벨 === ==== 시스템 부팅하기 ==== 시스템을 부팅하면 수많은 텍스트가 떠다닙니다. 더 자세히 들여다보면 여러분...) |
Darkcircle (토론 | 기여) (→동작 방식) |
||
29번째 줄: | 29번째 줄: | ||
이 줄은 시스템을 초기화 하는 {{blue|/sbin/rc sysinit}}을 실행해야 한다고 {{blue|init}}에 일러줍니다. /sbin/rc 스크립트는 초기화를 다루므로 {{blue|init}}이 더 이상의 일을 못하도록 여러분이 알려야 합니다. -- 이는 시스템이 초기화 작업을 하도록 다른 프로세스에 일임합니다. | 이 줄은 시스템을 초기화 하는 {{blue|/sbin/rc sysinit}}을 실행해야 한다고 {{blue|init}}에 일러줍니다. /sbin/rc 스크립트는 초기화를 다루므로 {{blue|init}}이 더 이상의 일을 못하도록 여러분이 알려야 합니다. -- 이는 시스템이 초기화 작업을 하도록 다른 프로세스에 일임합니다. | ||
− | 두번째로, {{blue|init}}은 /etc/runlevels/boot에 심볼릭 링크를 걸어둔 모든 스크립트를 실행합니다. 이는 다음 줄에서 | + | 두번째로, {{blue|init}}은 /etc/runlevels/boot에 심볼릭 링크를 걸어둔 모든 스크립트를 실행합니다. 이는 다음 줄에서 설정되어 있습니다. |
{{Example|코드 예제 1.2: 시스템 초기화(계속)|rc::bootwait:/sbin/rc boot | {{Example|코드 예제 1.2: 시스템 초기화(계속)|rc::bootwait:/sbin/rc boot | ||
}} | }} | ||
+ | 다시 말씀드리지만 {{blue|rc}} 스크립트는 필요한 작업을 수행합니다. 참고로 {{blue|rc}} (boot) 에 주어진 옵션은 이것이 사용하는 /etc/runlevels의 하위 디렉터리와 같습니다. | ||
+ | |||
+ | 이제 {{blue|init}} 는 어떤 ''런레벨''을 실행해야 하는지 설정 파일을 확인합니다. 이를 결정하려고 /etc/inittab에서 다음 줄을 읽어 들입니다. | ||
+ | |||
+ | {{Example|코드 예제 1.3: initdefault 줄|id:3:initdefault: | ||
+ | }} | ||
+ | |||
+ | 이 경우 (대부분의 젠투 사용자들이 사용할 경우), ''런레벨'' id는 3입니다. 이 정보를 사용하여 {{blue|init}} 은 ''런레벨'' 3을 시작하기 위해 무엇을 실행해야 하는지 확인합니다. | ||
+ | |||
+ | {{Example|코드 예제 1.4: 런레벨 정의|l0:0:wait:/sbin/rc shutdown | ||
+ | l1:S1:wait:/sbin/rc single | ||
+ | l2:2:wait:/sbin/rc nonetwork | ||
+ | l3:3:wait:/sbin/rc default | ||
+ | l4:4:wait:/sbin/rc default | ||
+ | l5:5:wait:/sbin/rc default | ||
+ | l6:6:wait:/sbin/rc reboot | ||
+ | }} | ||
+ | |||
+ | 다시 말해 런레벨 3를 설정하는 줄에서 서비스를 시작하기 위해 (이 시점의 인자는 ''default''입니다) {{blue|rc}}스크립트를 사용합니다. 강조해서 말하지만 {{blue|rc}} 인자는 /etc/runlevels의 하위 디렉토리 이름과 같습니다. | ||
+ | |||
+ | {{blue|rc}} 실행이 끝나면 {{blue|init}}은 어떤 가상 콘솔을 활성화 할지, 각각의 콘솔에서 실행할 필요가 있는 명령이 어떤 것인지를 결정합니다. | ||
+ | |||
+ | {{Example|코드 예제 1.5: 가상 콘솔 정의|c1:12345:respawn:/sbin/agetty 38400 tty1 linux | ||
+ | c2:12345:respawn:/sbin/agetty 38400 tty2 linux | ||
+ | c3:12345:respawn:/sbin/agetty 38400 tty3 linux | ||
+ | c4:12345:respawn:/sbin/agetty 38400 tty4 linux | ||
+ | c5:12345:respawn:/sbin/agetty 38400 tty5 linux | ||
+ | c6:12345:respawn:/sbin/agetty 38400 tty6 linux | ||
+ | }} | ||
=== rc-update로 작업하기 === | === rc-update로 작업하기 === |
2012년 8월 9일 (목) 20:46 판
목차
Init 스크립트
런레벨
시스템 부팅하기
시스템을 부팅하면 수많은 텍스트가 떠다닙니다. 더 자세히 들여다보면 여러분이 다시 부팅할 때마다 이 텍스트가 같은 내용이 항상 나오는 것을 보실 수 있습니다. 이 동작의 순서를 부트 시퀀스라고 하며, (더 혹은 덜) 정적으로 정의합니다.
먼저 부트로더는 CPU한테 커널을 실행하라고 알린 다음에 부트로더 설정에 지정되어 있는 커널 이미지를 메모리에 불러올 것입니다. 커널을 불러와서 실행하면 모든 커널 관련 구조를 초기화 하고 init 과정을 시작할 것입니다.
이 프로세스는 (/etc/fstab에 지정한) 모든 파일 시스템을 마운트 했는지 사용할 준비가 되었는지를 확인합니다. 그 다음 시스템을 성공적으로 부팅하기 위해 필요한 시작할 서비스인, /etc/init.d에 위치한 많은 스크립트를 실행합니다.
마지막으로 모든 스크립트를 실행하고 나면, init 에서 터미널(대부분의 경우 Alt-F1, Alt-F2 키로 숨겨놓은 가상 콘솔입니다)을 활성화하고 agetty라고 하는 특별한 프로세스를 터미널과 붙입니다. 이 과정에서 login을 실행하여 이들 터미널을 통해 로그온을 할 수 있는지 확인할 것입니다.
Init 스크립트
여기서 init는 /etc/init.d/에 있는 스크립트를 임의의 순서대로 실행하는 것이 아닙니다. 게다가 /etc/init.d에 있는 모든 스크립트를 실행하는 것도 아니며 실행하라고 지시한 스크립트만 실행합니다. 이는 /etc/runlevels를 확인하여 어떤 스크립트를 실행할 지 결정합니다.
먼저 init는 /etc/runlevels/boot에 있는 심볼릭 링크가 되어 있는 /etc/init.d/의 모든 스크립트를 실행합니다. 보통 철자순으로 스크립트를 실행하겠지만 어떤 스크립트의 경우 이들 스크립트를 실행하기 전에 다른 스크립트를 먼저 실행해야 한다고 시스템에 일러주는 의존성 정보를 가지고 있습니다.
/etc/runlevels/boot가 참조하는 스크립트를 실행하고 나면 init는 /etc/runlevels/default에 심볼릭 링크되어 있는 스크립트의 실행을 계속합니다. 다시 한 번 말씀드리지만, 어떤 스크립트를 먼저 실행할 지는 유효한 시작 순서를 제공하도록 순서를 바꾸는 의존성 정보를 가지고 있지 않는 한 철자순서를 사용하여 결정할 것입니다.
동작 방식
물론 init 에서 모든 사항을 자체적으로 결정하지 못합니다. 어떤 동작을 취해야 할지 지적하는 설정 파일이 필요합니다. 이 설정 파일은 /etc/inittab입니다.
우리가 적은대로 부팅 순서를 기억한다면, 여러분이 기억하기로는 init에서 처음 하는 동작은 모든 파일 시스템을 마운트 하는 것입니다. 이는 /etc/inittab의 다음 줄에 설정되어 있습니다.
코드 예제 1.1:/etc/inittab에 있는 시스템 초기화 줄 |
si::sysinit:/sbin/rc sysinit |
이 줄은 시스템을 초기화 하는 /sbin/rc sysinit을 실행해야 한다고 init에 일러줍니다. /sbin/rc 스크립트는 초기화를 다루므로 init이 더 이상의 일을 못하도록 여러분이 알려야 합니다. -- 이는 시스템이 초기화 작업을 하도록 다른 프로세스에 일임합니다.
두번째로, init은 /etc/runlevels/boot에 심볼릭 링크를 걸어둔 모든 스크립트를 실행합니다. 이는 다음 줄에서 설정되어 있습니다.
코드 예제 1.2: 시스템 초기화(계속) |
rc::bootwait:/sbin/rc boot |
다시 말씀드리지만 rc 스크립트는 필요한 작업을 수행합니다. 참고로 rc (boot) 에 주어진 옵션은 이것이 사용하는 /etc/runlevels의 하위 디렉터리와 같습니다.
이제 init 는 어떤 런레벨을 실행해야 하는지 설정 파일을 확인합니다. 이를 결정하려고 /etc/inittab에서 다음 줄을 읽어 들입니다.
코드 예제 1.3: initdefault 줄 |
id:3:initdefault: |
이 경우 (대부분의 젠투 사용자들이 사용할 경우), 런레벨 id는 3입니다. 이 정보를 사용하여 init 은 런레벨 3을 시작하기 위해 무엇을 실행해야 하는지 확인합니다.
코드 예제 1.4: 런레벨 정의 |
l0:0:wait:/sbin/rc shutdown
l1:S1:wait:/sbin/rc single l2:2:wait:/sbin/rc nonetwork l3:3:wait:/sbin/rc default l4:4:wait:/sbin/rc default l5:5:wait:/sbin/rc default l6:6:wait:/sbin/rc reboot |
다시 말해 런레벨 3를 설정하는 줄에서 서비스를 시작하기 위해 (이 시점의 인자는 default입니다) rc스크립트를 사용합니다. 강조해서 말하지만 rc 인자는 /etc/runlevels의 하위 디렉토리 이름과 같습니다.
rc 실행이 끝나면 init은 어떤 가상 콘솔을 활성화 할지, 각각의 콘솔에서 실행할 필요가 있는 명령이 어떤 것인지를 결정합니다.
코드 예제 1.5: 가상 콘솔 정의 |
c1:12345:respawn:/sbin/agetty 38400 tty1 linux
c2:12345:respawn:/sbin/agetty 38400 tty2 linux c3:12345:respawn:/sbin/agetty 38400 tty3 linux c4:12345:respawn:/sbin/agetty 38400 tty4 linux c5:12345:respawn:/sbin/agetty 38400 tty5 linux c6:12345:respawn:/sbin/agetty 38400 tty6 linux |