It's just like pok    version4


SysVinit

 | 

대부분의 최신 리눅스 배포판은 Systemd로 init system이 변경되었지만, 나는 아직 데비안 wheezy를 사용하며, 이 시스템은 SysVinit 이라 불리우는 init system을 사용한다.

대표적인 초기 nix계열 simple application들이 그렇듯, SysVinit도 단순한 개념으로 여러 기능을들 껴넣으려고 노력한 흔적이 역역하며, 파일이름으로 실행순서 정하기 / 처다보기도 싫어지는 script 설정들 / 병렬적으로 실행되기 힘들고 파일이 전역변수처럼 관리되기 등등의 단점이 있다.

그럼에도 단순한 개념과, 여러 run-level 필요성등을 잘 충족하여 꽤 장수한 시스템이 되었던것 같다.

1. start_kenel은 kernel의 main.c에 있는 내용으로, kernel 마지막에 init_process를 실행함으로써 kernel space에서 user space로 실행 영역이 전환된다.

어떤 프로그램을 최초 실행할지는 kernel parameter에 영향을 받고 여러가지 proc 이름을 가지고 시도를 해보는데, SysVinit 계열의 init process인 /sbin/init도 물론 포함되어 있다.

/sbin/init은 init.c에 main 함수가 존재하는데, main은 초기설정 후 init_main 을 호출하고 init_main에서 read_inittab - start_if_needed를 호출하여 read_inittab를 통해 /etc/inittab에 있는 내용을 CHILD 구조체로 로딩한후 spawn하여 실행을 한다.

runlevel script들은 /etc/inittab 에 기록되어있는 /etc/init.d/rc를 0~5번의 argument와 함께 호출하는 구문에서 실행되며, script 형태로 되어있는 /etc/init.d/rc는 /etc/rc[run-level].d/[SK]* 스크립트들을 읽어 실행함으로써 초기 부팅 스크립트들이 수행된다.

/etc/rc[run-level].d/[SK]* 은 /etc/init.d 디렉토리 하위에 있는 스크립트들에 대한 심볼릭 링크인데, /etc/init.d/cron의 소스 일부는 다음과 같다.


#!/bin/bash
# Start/stop the cron daemon.
#
### BEGIN INIT INFO
# Provides:          cron
# Required-Start:    $remote_fs $syslog $time
# Required-Stop:     $remote_fs $syslog $time
# Should-Start:      $named slapd autofs ypbind nscd nslcd
# Should-Stop:       $named slapd autofs ypbind nscd nslcd
# Default-Start:     2 3 4 5
# Default-Stop:
# Short-Description: Regular background program processing daemon
# Description:       cron is a standard UNIX program that runs user-specified 
#                    programs at periodic scheduled times. vixie cron adds a 
#                    number of features to the basic UNIX cron, including better
#                    security and more powerful configuration options.
### END INIT INFO


test -f /usr/sbin/cron || exit 0

PIDFILE=/var/run/crond.pid

comment에 있는 Default-start 혹은 Default-stop은 약속된 comment이며, update-rc의 default 설정때 해당 comment의 내용으로 default가 설정된다.

update-rc 혹은 rcconf는 /etc/init.d에 있는 스크립트들을 /etc/rc[run-level].d/[SK]* 로 심볼릭 링크를 걸어주는 어플리케이션이며 이러한 여러 프로그램들의 수고로 드디어 부팅 스크립트가 수행된다.


컴퓨터 하드보일드