/etc/init.d 와 /etc/init 폴더의 차이점

/etc/init.d 는 System V init tools(SysVinit)가 사용하는 스크립트를 담고 있습니다. 이는 리눅스가 지금까지 전통적으로 사용해온 서비스 관리 프로그램인 init 프로세스가 사용하는 스크립트 들입니다. init 프로세스는 커널이 초기화되고 나서 가장 처음 실행되는 프로세스 입니다. /etc/init.d 안에는 init 프로세스가 특정한 서비스(apache, mysql, …) 들을 start, stop, restart, reload 할 수 있는 쉘 스크립트들이 들어있습니다. 이 스크립트들은 사용자가 직접 실행할 수도 있고 /etc/rc?.d 디렉토리에 링크가 연결되어 부팅시에 자동으로 실행하게 할수도 있습니다

/etc/init 은 Upstart가 사용하는 설정파일들을 담고 있습니다. Upstart는 너무 오래된 init을 대체하기 위한 비교적 최근에 개발된 프로그램 입니다. /etc/init 디렉토리에는 Upstart가 start, stop, reload, status 명령을 통해서 특정 서비스를 어떻게 동작시켜야 하는지 설정을 담고있습니다. 우분투 10.04(lucid) 버전부터 우분투는 전통적인 SysVinit 프로세스에서 Upstart 로 전환중입니다. Upstart 로 시스템 구성이 선호되지만 당분간은 SysVinit 구조도 같이 제공될것입니다. 사실, SysVinit 스크립트는 Upstart의 호환성 레이어를 이용해서 처리되게 됩니다.

.d 디렉토리 이름은 일반적으로 어떤 환경에 필요한 설정 파일이나 스크립트를 담고 있다는 의미로 쓰입니다.(예를 들어 /etc/apt/sources.list.d 는 sources.list 를 작성하는데 필요한 파일들이 들어있습니다. /etc/network/if-up.d 는 네트워크 인터페이스를 활성화 시킬때 필요한 스크립트를 담고 있습니다).
이 경우에는 “init”은 논리적인 이름을 가진 디렉토리 이지만, SysVinit이 먼저 init.d 디렉토리를 사용하고 있으니, Upstart는 그냥 init 을 같은 목적으로 사용하는 디렉토리명으로 선택했습니다.

Upstart 는 systemd로 언젠가는 대체될 예정입니다.

참고자료
http://blog.sapzil.org/2014/08/12/upstart/
http://lunatine.net/about-systemd/

Advertisements

pulse audio 고생기

5422보드에서 오디오 작업을 하고 있는데 어느 순간 부터 재생음이 끊기고 겹치는 현상이 발생했다.
처음엔 안 괜찮다가, 어느 순간 부터 그랬다.
뭔가 apt-get으로 시스템 업데이트를 하면서 꼬였거나, 설정을 잘못 건들인 것으로 생각되서 문제점을 뒤졌다.
증상을 자세히 살펴보니,

$ aplay -D hw:0,0 test.wav

이렇게 명시적으로 장치를 지정하면 문제가 없는데,

$ aplay test.wav

이렇게 default 장치를 쓰면 문제가 발생했다.

차이점을 살펴보니 default 장치를 사용하게 되면, aplay가 PulseAudio PCM I/O Plugin을 이용해서 소리르 재생한다는 것을 알았다.

aplay는 alsa를 이용하는 저수준 프로그램인데 그 상위 계층인 PulseAudio에게 음악 재생을 시키다니..? 이해가 안됬지만, 뭐 편리함을 위해서 그럴수 있지…라고 결론짓고 이 부분은 그냥 패스..

문제의 핵심은 audio device -> ALSA -> PulseAudio로 넘어갔다.

PulseAudio는 디버깅 해본적이 한번도 없어서 자료를 찾아서 문제점을 파악하는 방법을 공부했다.
우선 PulseAudio는 환경설정 파일이 /etc/pulse 디렉토리에 몰려있었다.
여기서 특히 default.pa 파일은 어떤 모듈을 로딩할지에 대한 설정을 담고 있었다.
그 외에는 ~/.config/pulse 디렉토리에 안에 캐시 파일이나 개인 환경 설정이 저장된다.

여튼 PulseAudio가 밷어내는 출력 메세지를 보는 방법을 찾았는데 아래 문서에 자세하게 설명되어 있다.
https://wiki.ubuntu.com/PulseAudio/Log

$ echo autospawn = no >> ~/.config/pulse/client.conf

위 명령은 PulseAudio 서버가 자동으로 실행되는 것을 막아준다.

$ killall pulseaudio

이미 실행되고 있는 PulseAuido 서버를 다 죽인다.

LANG=C pulseaudio -vvvv –log-time=1 > ~/pulseverbose.log 2>&1

로그 기능을 활성화 해서 새롭게 PulseAudio 데몬 하나를 띄운다.

이렇게 해서 음악을 재생하면 긴 로그가 쌓이게 된다. 너무 내용도 길고 어려워서 뭔말인지 모르겠다…

그래서 실시간으로 보기 위해서 그냥 콘솔에서 직업 로그가 나오게 했다.

$ pulseaudio -vvvv –log-level=debug

이렇게 하고 다른 창에서 aplay로 음악을 재생해보니, 음이 문제가 되는 시점마다 로그에 아래 메세지가 찍힌다.

( 4.176| 0.000) I: [alsa-sink-Playback wm8960-hifi-0] alsa-sink.c: Increasing wakeup watermark to 40.00 ms

구글링을 통해서 정확한 답은 찾지 못했지만 비슷한 이슈를 하나 찾았다.
http://mailman.alsa-project.org/pipermail/alsa-devel/2015-August/097068.html

그래서 나도 /etc/pulse/default.pa 파일의 아래 라인을 수정했더니 잘 되었다!

load-module module-alsa-sink rate=44100 tsched=0

이 글은 Ubuntu 14.04 에서 테스트 되었음

PulseAudio 관련 명령어들

$ pacmd

이 문제를 조사하면서 참고한 자료들이다.
* https://wiki.ubuntu.com/PulseAudio
* https://wiki.ubuntu.com/PulseAudio/Log
* https://wiki.archlinux.org/index.php/PulseAudio/Examples