IT/Unified Communications

Raspberry Pi 4에 Asterisk 조금 쉽게 설치하기

변화의 물결1 2024. 8. 31. 00:05

 

 

안녕하세요.

 

  처음에 테스트할 때 Raspberry OS 자체에 Asterisk설치했는데 컴파일 에러 발생하고 그래서 다른 것과 충돌해서 그런가 해서 Raspberry Pi OS를 다시 설치해서 테스트했지만 동일하게 에러가 발생했습니다.

 

 그래서 인터넷상의 해결책을 찾으며 이런저런 것을 설치해 보고 설정도 해보니 엉망이 되어서 기본 OS는 건들지 않게 하기 위해서 도커를 설치해서 테스트하였습니다.

 

  또한 패키지 버전으로 쉽게 설치하는 것과 소스 버전으로 컴파일해서 설치하는 버전도 컨테이너만 바꿔서 작업하면 효율성도 높아질 것이라 생각이 되었습니다.


 

1. 도커 설치 및 ubuntu Image Container 설치

 

 - Raspberry OS위에 도커 설치하고 그 안에 ubuntu OS(Ubuntu 22.04.1 LTS)를 설치해서 Asterisk package 설치 진행합니다.

 - 도커 설치 스크립트받아서 설치를 진행하고 docker 명령어에 sudo를 붙이지 않게 하기 위해서 그룹에 등록합니다. 

pi@raspberrypi:~ $ curl -fsSL https://get.docker.com -o get-docker.sh
pi@raspberrypi:~ $ sh get-docker.sh

 

 

   

pi@raspberrypi:~ $ sudo usermod -aG docker $USER
pi@raspberrypi:~ $ su - ${USER}
pi@raspberrypi:~ $ groups ${USER}

 

 

 

 

- 권한이 적용될 수 있게 재부팅 한번 합니다. 

pi@raspberrypi:~ $  sudo shutdown -r now

 

- 최신 우분투 버전을 이미지 받아서 백그라운드로 실행될 수 있도록 옵션을 주고 네트워크는 상위네트워크와 동일하게 그냥 사용하도록 host옵션을 선택해서 컨테이너 생성합니다. 

pi@raspberrypi:~ $ docker run -itd --name ubuntu_base --network host ubuntu

 

 

 

- 컨테이너가 이미 시작되어 있기 때문에 접속해서 우선 update를 진행해 줍니다. 

pi@raspberrypi:~ $  docker attach ubuntu_base

 

 

- Ubuntu 컨테이너에 접속된 상태이므로 사용자가 root로 변경된 것을 확인할 수 있습니다. 

root@raspberrypi:/# apt update

 

 

2. Asterisk Package Install

 

 - Asterisk와 기타 필요한 패키지를 설치해 줍니다. 

root@raspberrypi:/# apt install asterisk vim net-tools -y

 

 

 

 

 - 설치 중간에 TimeZone 관련해서 설정이 나오면 현재 있는 지역에 맞게 선택해 줍니다. 현재 서울에 있기 때문에  “6. Asia -> 69. Seoul” 선택했습니다.

 

 

 

 - 그룹설정 등 해주어야 하는 일들을 스크립트가 자동으로 해주고 있습니다.

 

 

 

 - Asterisk 상태를 확인해 봅니다. 현재 설치는 되었고 작동은 하지 않는 것으로 나타납니다. 

root@raspberrypi:/# service asterisk status

 

 

 

- Asterisk Service를 실행하고 상태를 확인합니다. 

root@raspberrypi:/# service asterisk start
root@raspberrypi:/# service asterisk status

 

 

 

 

- Asterisk CLI에 접속하면 SIP 접속상태와 여러 가지 로그를 확인할 수 있습니다. “Tab”키를 누르면 실행할 수 있는 명령어가 나타납니다. 연결된 사용자를 보려면 sip show peers라고 입력하면 확인할 수 있습니다.

 -

CLI에서 빠져나오는 방법은 exit, quit를 입력하면 다시 ubuntu shell로 나옵니다.

 

 

 

- 참고로, 아래와 같이 실행시키면 프로세서가 점유되면서 실행되는데 실행되면서 모듈이 없다는 오류와 지원종류 되는 모듈들에 대해서 경고를 볼 수 있습니다. 빠져나오려면 Ctrl + c 

root@raspberrypi:/# /usr/sbin/asterisk -g -f -p -U asterisk

 

 

 

3. Asterisk 계정생성 및 작동 확인

 

 - 기본 설정(default)을 전제로 2가지 파일만 수정하여 작동테스트를 합니다. 사실, 내부 설정내용들이 많아서 별도로 공부해야 해서 작동 위주로 확인하였습니다. 상세한 내용은 Asterisk 사이트를 참조해야 합니다.

 

1) sip.conf 수정

 

  - sip.conf는 계정관리하는 파일로 전화번호와 비밀번호를 등록합니다.

  - vim /etc/asterisk/sip.conf 파일 맨 아래쪽에 6001, 6002 전화번호 등록과 비밀번호, 환경 등을 입력합니다.

 

[general]
udpbindaddr=0.0.0.0:5060

context=from-outside
srvlookup=no
mohsuggest=default
allowguest=no
alwaysauthreject=yes

allowsubscribe=yes
notifyhold=yes
notifyringing=yes
callcounter=yes

 
[6001]
type=friend
context=from-my-phone
host=dynamic
secret=6001
dtmfmode=rfc2833
disallow=all
allow=ulaw

[6002]
type=friend
context=from-my-phone
host=dynamic
secret=6002
dtmfmode=rfc2833
disallow=all
allow=ulaw

 

 

- 서비스를 멈춤 다음 다시 시작합니다.

 

 

 

 - SIP 연결이 가능한 프로그램 혹은 스마트폰 앱을 통해 연결을 시도해 봅니다. PC에서 사용할 수 있는 window opensouce인 프로그램을 가지고 테스트하였습니다. MicroSIP 사이트에 가서 원하는 버전을 받아서 설치합니다.

https://www.microsip.org/downloads

 

 

 - “계정추가” 메뉴를 선택해서 본인의 Raspberry Pi  IP주소를 넣고 생성한 전화번호와 패스워드를 입력합니다. 그리고 저장합니다.

 

 

 - 설정이 잘 저장되었다면 MicroSIP 하단에 “온라인” 상태로 나타납니다.

 

 

 

 

2) extensions.conf 수정

  - extensions.conf 파일은 전화 송수신을 관리하는 파일로 어떤 번호로 연결해 줄지, 대기시간 등 설정해 줍니다.

  - vim /etc/asterisk/extensions.conf 파일 맨 아래쪽에 6001, 6002 전화번호에 대한 연결번호를 입력합니다.

  - sip.conf 파일에서 추가한 context에 의해 extentions.conf의 from-my-phone 항목과 연결됩니다.

 

[from-my-phone]
exten=>6001,1,Dial(SIP/6001,20)
exten=>6002,1,Dial(SIP/6002,20)

 

- 다른 PC 혹은 스마트폰 앱에 6002 계정추가해서 온라인 상태로 만든 다음, 송신 쪽(전화 거는 쪽)에서 6002를 입력한 후 “통화” 버튼을 누르면 전화 연결신호가 가게 됩니다.

 

 

 

 - 수신(받는 쪽)에서는 다음과 같이 “응답, 거절” 버튼이 있는 팝업 창이 나타납니다. (사용하는 SIP 프로그램에 따라 다를 수 있습니다.)

 

 

 

4. 도커 이미지 생성 및 마무리

 

 - Asterisk 프로그램이 작동되는 것이 확인되었다면 여기까지 컨테이너를 이미지로 만들어서 여러 가지 테스트할 수 있는 컨테이너로 만들어서 활용합니다.

 - 현재 접속되어 있는 컨테이너에서 exit를 입력해서 빠져나갑니다.

 

 

 

 - 현재 작업한 컨테이너 ID를 확인합니다. 

pi@raspberrypi:~ $ docker ps -a

 

 

 

 

 - docker commit 할 container ID를 입력해 주고 추가로 이름과 버전관리하기 위해서 태그번호(0.1)를 넣어줍니다.   

pi@raspberrypi:~ $ docker commit 8c74245233f2 ubuntu_asterisk18_package:0.1

 

 - 완료가 되면 docker image로 추가된 것을 확인할 수 있습니다.

 

pi@raspberrypi:~ $ docker images

 

 

 

 - OS 새로 설치할 걱정 없이 새로 생성된 ubuntu_asterisk18_package:0.1 이미지를 컨테이너로 만들어 여러 가지  테스트해 볼 수 있습니다.

 

pi@raspberrypi:~ $ docker run -itd --name asterisk_package_18_01 --network host ubuntu_asterisk18_package:0.1
pi@raspberrypi:~ $ docker ps
pi@raspberrypi:~ $ docker attach asterisk_package_18_01

 

 

 

 

  이것으로 간단하게 Asterisk를 패키지를 docker container에 설치하고 전화 걸어보는 것을 해보았습니다. 나중에 된다면 소스 버전을 컴파일해서 실행하는 것을 공유하도록 하겠습니다.

 

 

감사합니다.

 

 

<참고사이트>

1. Installing Asterisk on a Raspberry Pi (Part 2 of 3)

https://www.youtube.com/watch?v=j9gp1CWkKF4

2. 도커(Docker) : 이미지 커밋(업데이트)하기

https://tttsss77.tistory.com/230

3. VOIP -- (DOCKER) Asterisk

https://www.youtube.com/playlist?list=PLkW6qBuit1ulYYjT-TGe734ogPA1d6MV4

4. can't run asterisk, no /etc/asterisk/asterisk.conf

https://superuser.com/questions/1416699/cant-run-asterisk-no-etc-asterisk-asterisk-conf

5. Asterisk CLI commands

https://www.voip-info.org/asterisk-cli/

6. Asterisk Command Line Interface

https://wiki.asterisk.org/wiki/display/AST/Asterisk+Command+Line+Interface  

 

 

반응형