Buildroot Init 스크립트 및 서비스 설정
Buildroot를 활용하여 Root File System을 구성할 때, 시스템의 초기화 과정(init)과 서비스 관리 방법을 설정하는 것은 매우 중요합니다. Init 시스템은 부팅 과정에서 시스템을 초기화하고, 다양한 서비스 및 데몬을 실행하는 역할을 합니다. 이번 포스팅에서는 Buildroot 환경에서 Init 스크립트를 설정하고, 서비스 관리 방안을 적용하는 방법을 다루겠습니다.
1. Init 시스템 개요
Linux 기반 시스템에서는 대표적으로 다음과 같은 Init 시스템이 사용됩니다.
- SysVinit: 전통적인 Init 시스템으로,
/etc/inittab
을 이용하여 초기화 단계를 정의합니다. - BusyBox init: 임베디드 시스템에서 많이 사용되는 경량화된 Init 시스템으로,
inittab
기반의 동작을 유지하면서 간소화된 구조를 가집니다. - systemd: 현대적인 Init 시스템으로, 서비스 관리 기능이 강력하며 병렬 실행이 가능합니다.
- runit: 최소한의 기능을 제공하는 간단한 Init 시스템으로, 빠른 부팅이 특징입니다.
Buildroot는 기본적으로 BusyBox의 Init 시스템을 사용하며, 필요에 따라 systemd 등의 다른 Init 시스템을 선택할 수도 있습니다.
2. Buildroot에서 Init 시스템 선택
Buildroot의 설정 메뉴(make menuconfig
)에서 Init 시스템을 선택할 수 있습니다.
make menuconfig
다음 경로에서 Init 시스템을 설정합니다.
System configuration --->
Init system (BusyBox) --->
[*] Support /etc/inittab
- 기본적으로 BusyBox Init이 선택되어 있으며,
inittab
을 지원하도록 설정할 수 있습니다. - 필요에 따라 systemd를 선택하려면
Init system
항목에서 systemd를 활성화합니다.
3. inittab 설정
BusyBox Init을 사용하는 경우 /etc/inittab
파일을 작성하여 시스템 초기화 동작을 정의해야 합니다.
3.1 기본적인 inittab 구성 예제
다음은 기본적인 /etc/inittab
예제입니다.
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::shutdown:/bin/umount -a -r
::sysinit
: 부팅 시 실행되는 스크립트를 지정합니다. 일반적으로/etc/init.d/rcS
를 사용합니다.::respawn
: 종료 후 다시 시작할 프로세스를 지정합니다.-/bin/sh
를 사용하면 콘솔에서 쉘을 제공합니다.::shutdown
: 시스템 종료 시 실행되는 명령을 지정합니다.
4. Init 스크립트 작성
시스템 부팅 시 실행되는 rcS
스크립트를 작성하여 서비스 및 기본 환경을 설정할 수 있습니다.
4.1 /etc/init.d/rcS
스크립트 예제
#!/bin/sh
# 기본 시스템 설정
echo "Initializing system..."
mount -o remount,rw /
mount -a
# 네트워크 설정 실행 (필요한 경우 활성화)
[ -f /etc/network/interfaces ] && /sbin/ifup -a
# 사용자 서비스 실행
/etc/init.d/my_service start
이 스크립트는 시스템 부팅 시 다음과 같은 작업을 수행합니다.
- 루트 파일 시스템을 읽기-쓰기 모드로 재마운트
/etc/fstab
에 정의된 마운트 설정을 적용- 네트워크 인터페이스 설정 적용
- 사용자 정의 서비스(
my_service
) 실행
5. 서비스 스크립트 작성
5.1 서비스 스크립트 기본 구조
Buildroot 환경에서 서비스는 /etc/init.d/
디렉터리 아래에 배치되며, 실행 가능하도록 권한을 설정해야 합니다.
다음은 간단한 서비스 스크립트 예제입니다.
#!/bin/sh
### BEGIN INIT INFO
# Provides: my_service
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Example service
### END INIT INFO
case "$1" in
start)
echo "Starting my_service..."
/usr/bin/my_service &
echo $! > /var/run/my_service.pid
;;
stop)
echo "Stopping my_service..."
kill $(cat /var/run/my_service.pid)
rm -f /var/run/my_service.pid
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
exit 1
;;
esac
exit 0
5.2 서비스 스크립트 적용
서비스 스크립트를 적용하려면 다음 명령을 실행하여 실행 권한을 부여합니다.
chmod +x /etc/init.d/my_service
그리고 /etc/inittab
파일에 다음과 같이 등록하여 서비스가 자동으로 실행되도록 설정할 수 있습니다.
::respawn:/etc/init.d/my_service start
6. 서비스 자동 실행 등록
일반적으로 서비스 스크립트를 /etc/init.d/
아래에 배치한 후, rcS
에서 실행하도록 설정합니다. 그러나 inittab
에 직접 등록하여 자동 실행되도록 할 수도 있습니다.
Buildroot에서 추가적인 서비스 관리가 필요하다면 systemd 또는 runit을 활용할 수도 있습니다.
7. 마무리
이번 포스팅에서는 Buildroot에서 Init 스크립트를 구성하고, 서비스 스크립트를 설정하는 방법을 다루었습니다. 임베디드 시스템 환경에서는 불필요한 서비스는 제거하고, 필요한 서비스만 최소한으로 실행하는 것이 중요합니다. 필요에 따라 Init 시스템을 변경하거나, systemd를 활용하는 방법도 고려할 수 있습니다.
'Linux > buildroot' 카테고리의 다른 글
Buildroot에서 External Toolchain 설정 방법 (0) | 2025.04.15 |
---|---|
Buildroot의 내부 툴체인과 외부 툴체인 차이점 (0) | 2025.04.14 |
Buildroot에서 사용자 정의 디렉터리 및 파일 추가 방법 (0) | 2025.04.12 |
기본 파일 시스템 구성 요소 (0) | 2025.04.11 |
Buildroot 간단한 C/C++ 애플리케이션 추가 및 실행 (0) | 2025.04.10 |