F.2.4. /sbin/init 프로그램
/sbin/init
프로그램 (init
라고도 부름)은 나머지 부트 프로세스를 주관하며 사용자를 위한 환경을 설정합니다.
init
명령이 시작할 때, 이는 시스템에서 자동으로 시작하는 모든 프로세스의 부모 또는 조부모가 됩니다. 먼저, 이는 /etc/rc.d/rc.sysinit
스크립트를 실행하여 환경 경로, 스왑 시작, 파일 시스템 확인, 시스템 초기화에 필요한 다른 단계를 실행합니다. 예를 들어, 대부분의 시스템에서는 클럭을 사용하므로, rc.sysinit
은 하드웨어 클럭을 초기화하기 위해 /etc/sysconfig/clock
설정 파일을 읽습니다. 다른 예로서 초기화되어야 하는 특정 직렬 포트 프로세스가 있을 경우, rc.sysinit
은 /etc/rc.serial
파일을 실행합니다.
init
명령은 그 후 /etc/event.d
디렉토리에 있는 작업을 실행합니다. 이 디렉토리는 시스템이 각각의 SysV init 런레벨에 따라 어떻게 설정될지를 지정합니다. 런레벨은 SysV /etc/rc.d/rc<x>.d/
(여기서 <x>은 런레벨 숫자) 디렉토리에 나열된 서비스들로 정의되는 시스템의 상태 또는 모드를 말합니다. SysV init 런레벨에 대한 더 자세한 정보는 F.4절. “SysV Init 런레벨”에서 참조하십시오.
다음으로,
init
명령은 시스템에 대한 소스 기능 라이브러리 /etc/rc.d/init.d/functions
을 설정하여, 프로그램의 시작, 종료, PID 결정 방법을 설정합니다.
init
프로그램은 /etc/inittab
에서 기본값으로 지정된 런레벨에 대한 올바른 rc
디렉토리에 따라 모든 백그라운드 프로세스를 시작합니다. rc
디렉토리는 제시된 런레벨에 상응하는 숫자로 번호가 매겨집니다. 예를 들어, /etc/rc.d/rc5.d/
는 런레벨 5에 대한 디렉토리입니다.
런레벨 5로 부팅할 때,
init
프로그램은 /etc/rc.d/rc5.d/
디렉토리를 보고 시작 및 중지할 프로세스를 결정합니다.
다음은
/etc/rc.d/rc5.d/
디렉토리의 예시 목록입니다:
K05innd -> ../init.d/innd K05saslauthd -> ../init.d/saslauthd K10dc_server -> ../init.d/dc_server K10psacct -> ../init.d/psacct K10radiusd -> ../init.d/radiusd K12dc_client -> ../init.d/dc_client K12FreeWnn -> ../init.d/FreeWnn K12mailman -> ../init.d/mailman K12mysqld -> ../init.d/mysqld K15httpd -> ../init.d/httpd K20netdump-server -> ../init.d/netdump-server K20rstatd -> ../init.d/rstatd K20rusersd -> ../init.d/rusersd K20rwhod -> ../init.d/rwhod K24irda -> ../init.d/irda K25squid -> ../init.d/squid K28amd -> ../init.d/amd K30spamassassin -> ../init.d/spamassassin K34dhcrelay -> ../init.d/dhcrelay K34yppasswdd -> ../init.d/yppasswdd K35dhcpd -> ../init.d/dhcpd K35smb -> ../init.d/smb K35vncserver -> ../init.d/vncserver K36lisa -> ../init.d/lisa K45arpwatch -> ../init.d/arpwatch K45named -> ../init.d/named K46radvd -> ../init.d/radvd K50netdump -> ../init.d/netdump K50snmpd -> ../init.d/snmpd K50snmptrapd -> ../init.d/snmptrapd K50tux -> ../init.d/tux K50vsftpd -> ../init.d/vsftpd K54dovecot -> ../init.d/dovecot K61ldap -> ../init.d/ldap K65kadmin -> ../init.d/kadmin K65kprop -> ../init.d/kprop K65krb524 -> ../init.d/krb524 K65krb5kdc -> ../init.d/krb5kdc K70aep1000 -> ../init.d/aep1000 K70bcm5820 -> ../init.d/bcm5820 K74ypserv -> ../init.d/ypserv K74ypxfrd -> ../init.d/ypxfrd K85mdmpd -> ../init.d/mdmpd K89netplugd -> ../init.d/netplugd K99microcode_ctl -> ../init.d/microcode_ctl S04readahead_early -> ../init.d/readahead_early S05kudzu -> ../init.d/kudzu S06cpuspeed -> ../init.d/cpuspeed S08ip6tables -> ../init.d/ip6tables S08iptables -> ../init.d/iptables S09isdn -> ../init.d/isdn S10network -> ../init.d/network S12syslog -> ../init.d/syslog S13irqbalance -> ../init.d/irqbalance S13portmap -> ../init.d/portmap S15mdmonitor -> ../init.d/mdmonitor S15zebra -> ../init.d/zebra S16bgpd -> ../init.d/bgpd S16ospf6d -> ../init.d/ospf6d S16ospfd -> ../init.d/ospfd S16ripd -> ../init.d/ripd S16ripngd -> ../init.d/ripngd S20random -> ../init.d/random S24pcmcia -> ../init.d/pcmcia S25netfs -> ../init.d/netfs S26apmd -> ../init.d/apmd S27ypbind -> ../init.d/ypbind S28autofs -> ../init.d/autofs S40smartd -> ../init.d/smartd S44acpid -> ../init.d/acpid S54hpoj -> ../init.d/hpoj S55cups -> ../init.d/cups S55sshd -> ../init.d/sshd S56rawdevices -> ../init.d/rawdevices S56xinetd -> ../init.d/xinetd S58ntpd -> ../init.d/ntpd S75postgresql -> ../init.d/postgresql S80sendmail -> ../init.d/sendmail S85gpm -> ../init.d/gpm S87iiim -> ../init.d/iiim S90canna -> ../init.d/canna S90crond -> ../init.d/crond S90xfs -> ../init.d/xfs S95atd -> ../init.d/atd S96readahead -> ../init.d/readahead S97messagebus -> ../init.d/messagebus S97rhnsd -> ../init.d/rhnsd S99local -> ../rc.local
이 목록에서 볼 수 있듯이, 실제적으로 서비스를 시작하고 중지하는 어떤 스크립트도
/etc/rc.d/rc5.d/
디렉토리에 위치하고 있지 않습니다. 대신, /etc/rc.d/rc5.d/
에 있는 모든 파일은 /etc/rc.d/init.d/
디렉토리에 위치한 스크립트에 대한 심볼릭 링크합니다. 심볼릭 링크는 각각의 rc
디렉토리에 사용되며, 원래의 스크립트에는 영향을 미치지 않고 심볼릭 링크를 생성, 수정, 삭제하는 것으로 런레벨을 재설정할 수 있습니다.
각각의 심볼릭 링크 이름은
K
또는 S
로 시작됩니다. K
링크는 런레벨에서 종료시켜야 할 프로세스이며, S
로 시작되는 링크는 런레벨에서 시작되는 프로세스입니다.
init
명령은 디렉토리에 있는 모든 K
심볼릭 링크를 /etc/rc.d/init.d/<command> stop
명령을 내려서 중단합니다. 여기서 <command>는 중단될 프로세스를 말합니다. 그 후, 모든 S
심볼릭 링크를 /etc/rc.d/init.d/<command> start
명령을 내려서 시작합니다.
참고
시스템이 부팅된 후, 루트로 로그인할 수 있게 되며 서비스를 시작 및 중지하기 위해 이와 동일한 스크립트를 실행할 수 있습니다. 예를 들어,
/etc/rc.d/init.d/httpd stop
명령은 Apache HTTP 서버를 중지합니다.
각각의 심볼릭 링크는 시작 순서를 지정하기 위해 번호 매겨집니다. 서비스가 시작 또는 중지되는 순서는 이러한 번호를 바꾸어 변경될 수 있습니다. 낮은 번호일 수록 더 먼저 시작하게 됩니다. 같은 번호를 갖는 심볼릭 링크는 알파벳 순으로 시작됩니다.
참고
init
프로그램이 마지막으로 실행하는 것 중 하나는 /etc/rc.d/rc.local
파일입니다. 이 파일은 시스템 사용자 정의에 유용합니다. rc.local
파일 사용에 관한 보다 자세한 정보는 F.3절. “부팅시 추가 프로그램 실행하기”를 참조하시기 바랍니다.
init
명령이 런레벨에 따라 적절한 rc
디렉토리를 처리한 다음, Upstart는 /sbin/mingetty
프로세스를 /etc/event.d
디렉토리의 작업 정의에 따라 런레벨에 할당된 각각의 가상 콘솔(로그인 프롬프트)에 대해 실행합니다. 런레벨 2부터 5까지는 모두 6개의 가상 콘솔을 가지며, 런레벨 1(단일 사용자 모드)은 하나만을 가지며, 런레벨 0과 6은 가상 콘솔이 없습니다. /sbin/mingetty
프로세스는 tty 장치[16]에 대한 통신 경로를 열고, 그 장치의 모드를 설정하고, 로그인 프롬프트를 표시한 후, 사용자의 사용자명과 암호를 입력받아 로그인 과정을 진행합니다.
런레벨 5에서 Upstart는
/etc/X11/prefdm
라는 스크립트를 실행합니다. prefdm
스크립트는 지정된 X 디스플레이 관리자([17]) — 이는 /etc/sysconfig/desktop
의 내용에 따라 gdm
, kdm
, xdm
등이 될 수 있습니다.
실행이 완료되면, 시스템은 런레벨 5에서 작동하고 로그인 화면이 나타나게 됩니다.