Harmony-API container 재부팅시 자동 실행(Raspberry Pie)

간단한 설치 및 실행과정을 위해서 여러 Docker 명령어를 안쓰고
바로 실행 확인 하도록 설치 과정을 포스팅하였다.

Logitech Harmony 기기별 컨트롤을 위한 SmartApp~~~(Updated 18/02/08)

하지만 필요로 하신 분들도 있고, 나도 우선 ‘동작은 하니깐’ 하면서
현상태에 안주해버렸다는 것을 깨닫고 조사를 시작했다.

알아보니 한 방법은 docker 명령어를 부팅시 실행하는
init script 부분에 명령어를 넣는 방법이 있을 것이고,
init 보다 더 사용하기 좋고 많은 기능을 제공한다는
systemd를 통해서 service 등록하는 방법이 있는 것 같다.

깔끔하게 systemd를 통해서 docker container를 자동 start 하도록 해보자.

1. 기존 stop 되어 있는 container들 정리
우선 기존 실행방법을 통해서 Harmony-API를 실행하였다면, container들이 많이 남아 있을 것이다.
아래 명령어를 통해서, stop되어 있는 container들을 삭제 하고 시작하자.
(혹 기존 docker 사용자분들은 각자 관리하고 있는 container가 삭제 되지 않도록 조심하세요)

# docker ps --all
현재 등록되어 있는(start/stop) 모든 container 리스트를 확인

# docker rm $(docker ps -a -q)
Stop되어 있는 모든 container들을 삭제

 

# docker ps --all
지워졌는지 container 리스트를 확인

 

2. 이름 지정하여 ‘Harmony-API’ container 생성
이제부터는 하나의 container 만 생성하고 start/stop으로 관리 하기 위해서
이전에 Harmony-API를 실행하던 명령어도 변경이 필요하다.
기존에는 container의 이름 지정없이 매번 자동할당되어 실행되게 하였지만,
이젠 이름을 부여해서 해당 container를 재부팅시에 다시 시작하도록 변경 할 것이다.

– 이전 방식
# docker run -ti --net=host --name harmony-api turlvo/harmony-api:latest /home/harmony-api/harmony-api/script/server

– Container 이름 지정 방식
harmony-api 라는 이름으로 container를 생성하는 것이고,
재부팅이나 stop 명령으로 container가 stop 되어도
다시 정해 놓은 harmony-api라는 이름으로 다시 start 시키도록 하는데 사용 될 것이다.
# docker run -ti --net=host --name harmony-api turlvo/harmony-api:latest /home/harmony-api/harmony-api/script/server
우선 ‘harmony-api’라는 이름으로 container를 생성시키고 Ctrl+C로 바로 종료 시키자.

# docker ps --all
그리고 다시 container 리스트를 확인 해보면, ‘harmony-api’ 이름을 가진 container가 생성 및 stop 되어있음

 

3. container 자동 실행
# cd /etc/systemd/system/
# vi [원하는 service name].service

[Unit]
Description=Harmony-API container
Requires=docker.service
After=docker.service 

[Service]
Restart=always
ExecStart=/usr/bin/docker start -a harmony-api
ExecStop=/usr/bin/docker stop -t 2 harmony-api

 

[Install]
WantedBy=multi-user.target

# systemctl enable [원하는 service name].service
systemctl enable 명령어를 통해 service 파일을 systemd에 등록

4. container auto-run service 등록 확인 후 재부팅
# systemctl is-enabled [원하는 service name].service

 

# reboot
5. 재부팅 후 container auto-run 동작 확인
# docker ps

이것으로 Harmony-API service 등록을 통한 자동실행 포스팅 종료.


   21 Comments


  1. Makelism
      2017-05-14

    아래 명령어를 입력했더니.
    systemctl enable [원하는 service name].service

    아래와 같이 나왔습니다.
    The unit files have no [Install] section. They are not meant to be enabled
    using systemctl.
    Possible reasons for having this kind of units are:
    1) A unit may be statically enabled by being symlinked from another unit’s
    .wants/ or .requires/ directory.
    2) A unit’s purpose may be to act as a helper for some other unit which has
    a requirement dependency on it.
    3) A unit may be started when needed via activation (socket, path, timer,
    D-Bus, udev, scripted systemctl call, …).

    이 부분에 대해 검색된 내용으로 여러 시도를 해봤는데 해결이 안 되네요.
    혹시 이와 같은 경험이 있으신지요?

    • turlvo
        2017-05-16

      안녕하세요.
      몇일동안 컴퓨터로부터 자리를 비워서 확인이 필요한 부분은 답변이 늦어졌습니다.

      포스팅은 역시 어려운 일이네요
      수정해도 계속 위에 코드가 계속 붙어서 보여지게 됩니다 ㅠㅠ

      혹시 아래와 같이 [Unit], [Service], [Install]부분을 개행으로 구분을 하시고 확인해주시겠어요?

      [Unit]
      Description=Harmony-API container
      Requires=docker.service
      After=docker.service

      [Service]
      Restart=always
      ExecStart=/usr/bin/docker start -a harmony-api
      ExecStop=/usr/bin/docker stop -t 2 harmony-api

      [Install]
      WantedBy=multi-user.target

      고맙습니다.

      • Makelism
          2017-05-16

        댓글 알림이 안 오네요?
        가르쳐주신 방법으로 성공했습니다.
        진.심.으.로. 감사합니다.

  2. lsh
      2018-01-12

    docker toolbox로 설치한 docker에선 ls 명령어로 docker harmony-api.service를 찾을 수가 없네요;

    혹시 어디에 속하는지 아십니까?

    • turlvo
        2018-01-12

      음…
      docker 안에서 harmony-api docker를 또 돌리시려는 건가요?
      해당 포스팅은 리눅스 환경에서 자동으로 harmony-api docker를 부팅시 실행 시키도록 설정하는 내용입니다.

      폴더위치는 아래와 같고 파일은 직접 생성시켜주고 등록해야합니다.
      /etc/systemd/system/

  3. lsh
      2018-01-24

    안녕하세요. 하모니 API를 직접 써보려는 사람입니다.
    뜻대로 전혀 되지 않지만요ㅠ
    그래서 이 블로그에 있는 라즈베리에 docker를 얹어 server를 실행해서 postman으로 보는 것까지를 당면의 목표로 삼고 있습니다.

    헌데, # docker run -ti –net=host –name harmony-api turlvo/harmony-api:latest /home/harmony-api/harmony-api/script/server

    위 명령어를 실행하니.

    Updating activies for test1.
    Updating devices for test1.
    Updating state for test1.
    Updating state for test1.
    Updating state for test1.
    Updating state for test1.

    … (무한반복)

    같은 반응이 나오네요;

    전에는 없던, 제 하모니를 인식하는 반응을 보여줘서 기쁘긴 한데..

    무엇때문에 저러는지 알려주실 수 있으신가요?

    • turlvo
        2018-01-24

      안녕하세요.

      우선 harmony-api 데몬이 동작하면서 나오는 정상로그로 보입니다.
      포스트맨(웹브라우저로 하셔도됩니다.)으로 커맨드 전송하면
      해당 화면에 관련 로그가 나오시는 것이 보이실거에요
      그럼 다 되신겁니다.

      • lsh
          2018-01-24

        감사합니다. ㅎㅎ
        딴짓하면서 상태변화를 본터라 postman 생각을 못했네요 ㅎㅎ

        {“message” : “Not Found”} 라는 답이 오긴 하네요 ㅎㅎ

        • turlvo
            2018-01-24

          오잉….
          로그상으론 뭔가 허브 찾고 액티비티도 찾은것 같은데…
          왜 ‘Not found’가 오나요???? 오잉오이오잉

          /hubs 하신거죠?

          • lsh
              2018-01-24

            그러게요;

            get으로 “http://192.168.0.86:8282/hubs/kuku-hub/devices” 로 날렸는데 말이죠?…

          • turlvo
              2018-01-24

            오잉….
            그건… 제 허브이름입니다.

            우선 http://192.168.0.86:8282/hubs 로 본인의 허브를 확인하시고
            /hubs/본인허브/devices 를 하셔야합니다.

          • lsh
              2018-01-24

            ‘[2018-01-24T02:21:32.813Z] – ::ffff:192.168.0.41 – GET /hubs/kuku-hub/devices 404 3.417 ms – 23b’

            이런식으로 로그도 남는데 말이죠?;;

            device도 test용으로 하나 연결해놨는뎁 ..

    • lsh
        2018-01-24

      warn : –minUptime not set. Defaulting to : 1000ms
      warn : –spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms

      라는 경고가 뜨긴 했는데 위의 무한 반복과는 관계가 없는거 같은데 …

  4. lsh
      2018-01-24

    앜ㅋㅋㅋㅋ 그렇군요.

    이미지가 kuku님꺼라 쿼리가 그냥 그런갑다 했어용ㅎㅎ

  5. lsh
      2018-01-24

    감사합니다 !! ㅎㅎ

    제 hub에 등록되어 있는 device 를 제어할 수 있는 쿼리를 postman으로 날려보고 싶은데,

    참고할 자료가 있나요?

    • turlvo
        2018-01-24

      https://github.com/maddox/harmony-api
      가보시면 사용예제가 잘 나와있습니다.

      • lsh
          2018-01-24

        감사합니다ㅎ 좋은 하루 되세요!

        다음에 또 여쭤봐도 될까요 ㅠ?

        • turlvo
            2018-01-24


          답변이 늦을수도있고 잘 모를 수도있습니다 ^^;;

          • lsh
              2018-01-24

            감사합니다 ㅎㅎ

  6. kukuri
      2018-08-01

    안녕하셨습니까. 쿠쿠리 입니다…
    멀쩡하게 돌아가는 큐냅을 내던지고.. ( 뭐 좀 알아보려 해도 아무도 안쓰니까.. 어찌어찌 홈킷이랑 HA 등은 깔기는 했는데..혼자 따로 도는거 같아서 슬픈..)
    라즈베리파이 3B+는 사서 지난주부터 머리 쥐어 뜯다가 도움 요청드려야 할거 같아 끄적거려 봅니다..

    기기:3B+
    os:hassbian
    Ha:헤즈비안에 기본 설치 포함

    어제 여섯번째 재설치와 변수를 좀 추스려 나가다가 이제는 더 뭘 만져봐야 할지 감도 안와서요..

    제가 만난 해결 못한 이슈는..

    1. 라즈비안에 HA가 안깔림.. (3B+는 도커에 올리는게 아직 미지원 이라고 함…. 이틀 버벅 거려보고 그냥 삭제)
    2. 헤즈비안 깔고 도커 깔고. 홈브릿지 깔고, 다 문제 없음.. 쿠쿠하모니 까는데. .여기서 부터 엉킴..
    3. 사용기를 너무 여러개를 열어놓고 그래서 꼬였나 싶어서 밀고 다시 시작… ..끝까지 다 갔는데.. 포스트맨을 포함해서 응답 없음.. 기존에 큐냅에서 설치한번 성공해서 깔가웠던 ST앱 설정들도 다 지우고 처음부터 재도전… 응답없음
    4. 다시 밀고 처음부터 시작… 아 포트포워딩 하고 회사가서 퍼티로 작업해야지.. 하고 회사와서 SSH 포트 방어 위해서 포트번호 변경했는데.. 접속이 안됨.. 포기
    5. 다 밀고 HA 기본만 잡고 쿠쿠하모니 먼저 설치 시도.. (뭔가 여러가지 버전들이 꼬여서 그럴수 있다고 생각함).. 뭔들…
    쿠쿠님 블로그의 설치방법에 언급된 도커는 설치가 안됨…(전에는 홈브리짓지를 먼저 깔고 작업해서 도커가 있었더래서 몰랐음)
    ‘Hypriot Docker Debian Packages for Raspberry Pi’ 에서 커맨트 따라 붙여도 두번째 # sudo apt-get install docker-hypriot=1.11.1-1 여기서 계속 문제생김
    뒤져보니 안된다고 함.. PULL 명령을 못쓴다나..
    그런데 그냥 홈브릿지 깔던 사용기 처럼 까니까 됨
    sudo apt-get install docker.io
    sudo docker version
    sudo docker info

    모두 오케이..
    여기저기 사용기들 메모장에 모아놓고 다시 정리하며 보니.. 저처럼 짜집기 해서 뭔지도 모르고 따라하는 사람은.. 정작 해당 서비스 명 같은게 명령어 마다 다 다르게 집어넣고 있는 경우가 종종 있을거 같습니다. 이를테면 Harmony-api 는 harmony-API와 다르다는거. (다들 조금씩 네이밍을 다르게 하시고.. 또 해당 후기들에서도 문장마다 다르고 막 그런데.. 그게 에러나는것도 많더군요..)

    쿠쿠하모니 도커에 잘 들어감 돌아가고 있는거 확인함…
    저장 안되는 에러나는 # vi harmony-api.service 이놈은 sudo 앞에 붙여주니 저장 에러는 해소됨

    sudo docker –ap로 확인해도 그렇고 모두 잘 돌아가고 계시고 리부팅해도 자동 실행 잘 되고 있는데… (이건 사실 처음 시도때문에 여기까지는 잘 온..)

    정작..포스트맨이나 브라우저에서 해당 ip를 확인하면..연락두절 입니다. STapp 쿠쿠하모니 에서도 역시 무소식 이구요.

    제가 로그는 어디서 따오는지 잘 몰라서 제가 마지막으로 셋팅한 순서 와 명령어만 나열해 보겠습니다.

    $ sudo passwd pi
    $ sudo hassbian-config upgrade hassbian
    $ sudo reboot
    $ sudo hassbian-config upgrade homeassistant
    $ sudo reboot
    $ sudo raspi-config
    4. localisation Options — 2. select time zone — Asia — Seoul
    4. localisation Options — 4. Change Wi-fi Country – KR korea(south)

    $ sudo hassbian-config install samba
    $ sudo hassbian-config install mosquitto

    HA web gui 접속, 체크 (저같은 경우 http://192.168.1.32:8123) 문제없음

    $ docker install
    $ sudo apt-get install docker.io
    $ sudo docker version
    $ sudo docker info

    $ sudo docker search turlvo/harmony-api
    $ sudo docker pull turlvo/harmony-api
    $ sudo docker run -ti –net=host –name harmony-api turlvo/harmony-api:latest /home/harmony-api/harmony-api/script/server

    hub discovered 192.168.1.31 이라는 메세지가 처음에 지나간.. (라즈베리 허브는

    아래 command를 통해서 harmony-api를 부팅시에 자동으로 실행하도록 설정

    $ cd /etc/systemd/system/
    $ sudo vi harmony-api.service

    [harmony-api.service] vi 편집기 열어서 아래 내용 적고 저장하고 나감

    [Unit]
    Description=harmony-api container
    Requires=docker.service
    After=docker.service

    [Service]
    Restart=always
    ExecStart=/usr/bin/docker start -a harmony-api
    ExecStop=/usr/bin/docker stop -t 2 harmony-api

    [Install]
    WantedBy=multi-user.target

    이제 포스트맨이나 브라우저에서 확인 해야하는데.

    $Postman
    (http://192.168.1.32:8282/hubs/kuku-hub/device)

    여기서 부터 먹통 입니다.
    위 순서대로 오면서 sudo 빼먹은 경우 말고는 별도 에러는 없이 깔린 상태구요.
    어디에서 놓혀서 일주일 넘게 이러고 있는 지 이제는 짐작가는게 없어서 너무 답답합니다.ㅠ
    아낌없는 조언 부탁드립니다.

    • turlvo
        2018-08-06

      안녕하세요.

      아이고… 다오셨는데………
      (http://192.168.1.32:8282/hubs/kuku-hub/device)
      여기서 kuku-hub는 제 harmony hub 이름입니다 ㅠㅠㅠㅠㅠㅠㅠㅠ

      192.168.1.32:8282/hubs 해보시면 등록되어있는 허브이름이 나올거에요.
      hub discoverd되었기때문에 그냥 바로 ST smartapp으로 진행하셔도 될 것 같긴합니다.

lsh 에 응답 남기기 응답 취소