2011년 10월 15일 토요일

forked-daapd

mt-daapd를 써오면서 여러가지가 개선된 forked-daapd가 있다는 것은 알았지만 마땅히 최신 패키지가 있는 것도 아니고 직접 빌드를 할래도 antlr3 완전 최신 같은 걸 요구하는 통에 그냥 있다는 것만 알고 있었다.

iOS 5 배포에 맞춰 iTunes 10.5이 깔리면서 mt-daapd가 공유 목록에는 뜨지만 노래들을 가져오지 못하고 뱅글뱅글 돌기만 하는 상태가 됐다. 그래서 요즘은 어떤가 하고 forked-daapd를 찾아봤는데 어느 새 우분투 기본 저장소에 들어가 있는 걸 알게 되었다. 옳다꾸나 하고 설치했다.

먼저 한 것은 Remote 앱에서 인식되게 만드는 것이었는데, 기본 README에 적힌 대로 일단 Remote에서 보관함 추가를 눌러서 숫자가 뜨게 하고 .remote 확장자로 끝나는 파일에 iPhone의 이름과 Remote의 숫자를 적어서 음악 파일이 들어있는 디렉토리 안에 같이 넣어두면 인식이 된다. (음악 파일을 한창 읽어들이고 있는 동안이라면 순서에 밀려서 바로는 인식이 안 된다.)

일단 추가를 하고 나면 동작은 잘 되는데, Remote에서 forked-daapd 보관소를 지우고 나면 다시 추가하는 게 좀 곤란하다. iTunes에는 지금까지 연결했던 Remote를 없앨 방법이 있지만 forked-daapd에는 따로 초기화 기능이 제공되지는 않는다. forked-daapd가 쓰는 sqlite3 파일을 열어보면 pairings 테이블에 기록이 있기는 한데 이걸 지워도 다시 연결하는 게 곧바로 되지는 않았다. sqlite3 파일을 지우고 아예 처음부터 새로 설정을 시작하니 Remote에도 다시 추가할 수 있었다.

소리를 내는 것도 문제였는데, Ubuntu 환경에서는 PulseAudio를 통해서 소리가 나다보니 ALSA나 OSS를 통해서 소리가 나는 방식이라 기본적으로는 충돌이 난다. 노래를 재생하라고 하면 스피커 장치에 접근을 못하고, forked-daapd.log 파일에 Unable to connect: Connection refused 라고 남는다. pulseaudio 패키지를 지우고 ALSA로만 쓸까도 해보았는데 다른 프로그램들과 같이 쓰자면 아무래도 불편해서 설정 방법을 확인해보았다.

ALSA 설정이 pulse 모듈로 넘어가도록 하면 forked-daapd도 PulseAudio 장치로 소리를 내는데 여전히 접근은 못 한다. 여기부터는 uid, gid의 문제겠다 싶어서 구성을 바꾸었다. pulseaudio 프로세스가 사용자 별로 뜨는 설정에서 시스템 프로세스로 뜨게 하고, /etc/group 파일에서 pulse, pulse-access에 daapd와 일반 사용자를 추가했다. 이렇게 하니 일반 사용자와 daapd 모두에서 소리가 잘 난다. (pulseaudio 프로세스를 띄우는 사용자와 거기에 접근하는 사용자 권한이 맞기만 하면 문제는 없겠지만 가급적 계정을 별도로 유지하기 위해 일반 사용자 계정과 daapd 계정을 직접 연결시키지는 않았다.)

Remote를 통해 노래를 재생할 수 있는 DACP 통신 환경은 됐는데, iTunes 공유 목록에 뜨는 DAAP 부분은 오히려 불안해졌다. 접속한 다음 시간이 좀 지나면 노래 목록을 띄웠던 것이 사라지고 연결이 끊겨 있다. 노래를 틀어두어도 마찬가지라서, 공유 목록에 올리는 어딘가에서 문제가 되는 것이 아닌가 싶은데 iTunes도 바뀌었고 forked-daapd도 mt-daapd 대신에 새로 들어오다 보니 어느 쪽 문제인지 확인을 못 하겠다. 확인을 해보니 DAAP끼리 통신하는 절차에 문제가 좀 있다고 한다. 특히 iTunes 10.4는 괜찮고 10.5에서 뭔가 바뀌어서 forked-daapd의 동작이 안 맞게 된 거라고 한다.