본문 바로가기

GATEWAY/ARTIK

ARTIK 530/710 AP mode 부팅 서비스 등록

  • 게이트웨이에 디바이스가 붙어서 데이터를 주고받아야했음. 
  • 블루투스 연결을 시도했는데 생각보다 블루투스 신호 범위가 약해 고민함. 
  • 그런데 어떤 통신 방법을 써도 상관 없다는 것을 알고 실무자들(?)끼리 이야기하다 
  • AP로 연결하고 HTTP 통신으로 요청, 응답 하는게 어떨까로 의견이 좁혀짐
  • 시도해본 결과 문제가 없어서 행복 ^^


  전제 조건


게이트웨이(ARTIK 710 사용)에 이더넷 연결

참고 페이지 : ARTIK Documentation Wi-Fi Access Point(AP)



  AP 연결 전 준비 단계


1. hostapd configuration 파일을 연다.

$ vi /etc/hostapd/hostapd.conf


2. 해당 파일안의 값 변경(하거나 추가)

interface=wlan0

driber=nl802011

ssid=ARTIK_AP (<- 이름 변경)

hw_mode=g

channel=6


#이 아랫 부분은 제공하는 AP 모드의 성격이 unsecured wi-fi라면 주석처리 한다.

auth_algs=1

wpa=2

wpa_passphrase=artik@iot (<- 비밀번호 5자리이상 입력)

wpa_pairwise=TKIP CCMP

rsn_pairwise=CCMP


3. dnsmasq configuration 파일을 연다.

$ vi /etc/dnsmasq.conf


4. '# bind-interfaces' 부분을 찾아 주석을 해제하고 dhcp-range 설정

# bind-interfaces

dhcp-range=192.168.XXX(제공하고자 하는 주소 범위).2, 192.168.XXX(제공하고자 하는 주소 범위).100


5. aproute.sh 쉘 스크립트를 작성하고 실행권한을 부여한다. 파일 작성 경로 고민 해봐야 함.

$ vi aproute.sh



# aproute.sh

sysctl net.ipv4.ip_forward=1

iptables --flush

iptables -t nat --flush

iptables --delete-chain

iptables -t nat --delete-chain

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE (<- eth0부분을 잘 살핀다. 내가 사용하는 게이트웨이는 eth1이 외부 이더넷과 연결됨)

iptables -A FORWARD -i wlan0 -j ACCEPT



$ chmod 777 aproute.sh




  Access Point(AP) 서비스 등록

  • AP모드를 게이트웨이 부팅시 자동으로 구동시키고 싶기 때문에 스크립트를 만들어 서비스 등록을 해야한다.
  • 스크립트 작성이 필요 없다면 AP 모드 활성화 부분의 명령어만 입력하면 된다.
  • 스크립트 작성이 필요하다면 AP 모드 활성화의 명령어들을 AP 서비스 스크립트 작성부의 start 명령 부에 써 넣으면 된다.

  AP 모드 활성화


1. ap모드 활성화전 연결 관리자(connman)가 연결을 가로채지 않도록 비활성화 시키고 재부팅한다.

$ systemctl disable connman

$ reboot


2. 이더넷 구동

$ ifconfig eth0 up

$ dhclient eth0


3. 네트워크 드라이버 재설정
$ modprobe -r dhd
$ modprobe dhd op_mode=2

4. 게이트웨이 IP 주소 지정해서 wi-fi 작동 시작

$ ifconfig wlan0 192.168.(제공하고자 하는 주소 범위).1 up


5. dnsmasq에 구성된 ip 주소 범위 내에서 지정한 호스트 이름 서비스 활성화

$ dnsmasq -C /etc/dnsmasq.conf


6. aproute.sh 실행한다. 스크립트 저장 위치 확인

$ ./aproute.sh


7. 호스트 액세스 지점 백그라운드 실행

$ hostapd /etc/hostapd/hostapd.conf -B



  AP 모드 비활성화


$ systemctl stop hostapd

$ systemctl stop dnsmasq

$ modporbe -r dhd

$ modprobe dhd op_mode=0

$ ifconfig wlan0 up

$ if [ -f "/usr/lib/systemd/system/wpa_supplicant.service" ]; then

systemctl restart wpa_supplicant

fi



  AP 서비스 스크립트 작성


1. /etc/init.d 폴더 안에 스크립트를 작성한다.
$ cd /etc/init.d
$ vi AP_on (<- 파일 제목은 마음대로)


#AP_on script 내용


#! /bin/bash

#chkconfig: -98 10


start()

{

// AP 모드 활성화 명령어

}

stop()

{

// AP 모드 비활성화 명령어

}

restart()

{

stop

start

}


case "$1" in

start)

start

;;

stop)

stop

;;

restart)

restart

;;

*)

echo "Usage:$0 {start|sop|restart}"

esac



  부팅 서비스 등록하기

  • 내가 사용하고 있는 710에는 OS로 fedora가 올라가 있음.
  • chkconfig로 서비스 등록이 가능 / ubuntu에서는 update-rc.d 나 sysv-rc-conf 사용

1. 서비스 등록
  • 부팅시 자동으로 작동시킬 기능의 스크립트를 서비스로 등록한다. 
  • 서비스로 등록할 스크립트는 /etc/init.d 디렉토리에 복사한다.
  • 등록한 스크립트 이름이 서비스 이름이 됨.
$ cp 복사할 스크립트 경로 /etc/init.d
$ cd /etc/init.d
$ chkconfig --add 스크립트이름


2. 서비스 런레벨(run level) 설정

  • 리눅스 계열마다 약간의 차이는 있지만 보통 0번은 정지 6번은 재시작
  • 설정할 런레벨을 옵션으로 입력해 추가한다.

$ chkconfig --level 12345 서비스이름 on (<- on을 잘 까먹게 됨)


3. 서비스 등록 확인 

$ chkconfig or $ chkconfig --list


<결과 화면>

  • 설정한 런레벨 12345에 on 되어 있는 것을 확인 할 수 있다.


4. 서비스 동작 확인

  • 재부팅 해본다.
$ reboot
  • 서비스의 동작 상태를 확인한다. 정상 동작 한다면 active(running) 메세지를 확인 할 수 있다.
$ systemctl status 서비스이름


<결과 화면>


5. 서비스 삭제

$ chkconfig --del 서비스이름