Openwrt : system service(/etc/init.d/*) 를 살짝 이해해보자.

systemd 도 마찬가지지만, 이런 ‘시스템 서비스’류를 enable/disable 하면 시스템 어딘가에 흔적이 남게 된다.

systemd 라면, enabled 되었을 때, /etc/systemd/system/multi-user.target.wants 등으로 심볼릭 링크가 걸리면서 실제로 사용될 예정임을 등록하게 된다. disable 하면, 여기서 링크가 지워지면서 더 이상 사용이 불가능하게 된다.
정의된 서비스 파일은 /lib/systemd/system 산하라든가 혹은 다른 곳에 위치하고 있고, 사용가능한 서비스만 해당 디렉토리로 링크시켜 사용하는 형식이 된다.

Openwrt 에서는 procd 라는 방식을 사용한다고 한다. 자세한 사항은 잘 모르겠고..
여기선 /etc/init.d/service 명령 형식을 사용한다. ‘명령’ 에는 start/stop/restart/enable/disable 등을 쓸 수 있다.

내가 알고 싶은 건, enable/disable 했을 때, 어디에 이 내용이 기록되느냐였다.
다소 격한(?) 검색 결과, 이 위치는 /etc/rc.d/ 임을 알아낼 수 있었다. service enable 을 하면, SXXservice 와 KXXservice 2개 링크가 생기는데, 모두 같은 서비스를 가리키게 설정된다.

S는 Start 이고, K는 Kill 로, 각각 시작될 때, 끝날 때를 의미한다. 자세한 설명이 있긴 한데, 굳이 열심히 보면서 짜증유발자를 건드릴 필요는 없을 듯.
대충 그렇게 돌아간다는 사실만 알면 될 듯 하다.


다만 한가지. (내가 정말 두려운 것은..)
extroot 를 하고, 원래 시스템 파티션을 /rwm (/dev/mtdblock11)으로 마운트를 했다. 그리고 여기에 있는 rc.d 를 봤는데.. 심볼릭 링크가 돼 있는 파일이 모두 보이지 않는다.
extroot 를 풀고 부팅을 하면, 당연히 있어야 할 파일들이 모두 rc.d 에 그대로 있다.
어떤 작용으로 이런 일이 벌어지게 되는 걸까?

역시나.. 열심히 파고들면 힘들어질 듯 하여 여기까지만.
슬쩍보니 jff2, squashfs 등이 단서가 될 듯은 한데.. 게다가 옛날 내용이라고 대문짝만하게 써있긴 해도, 참고할 문서도 있긴 하지만!
오늘은 여기까지만!

Author: 아무도안

안녕하세요. 글 남겨주셔서 고맙습니다.