Install Home Assistant Supervised

✔참고 사이트:
  https://github.com/home-assistant/supervised-installer
  https://docs.jethome.ru/en/controllers/linux/howto/zigbee2mqtt.html
  https://www.zigbee2mqtt.io/guide/configuration/homeassistant.html
  https://www.zigbee2mqtt.io/guide/usage/integrations/home_assistant.html
  https://rayblog.tistory.com/m/207

✔사용한 장비:
  Raspberry Pi 4 Model B 4GB RAM / OS: Raspberry Pi OS Lite-Debian 12 (bookworm)
  SONOFF Zigbee 3.0 USB Dongle Plus V2 / SoC: EFR32MG21

✔HASS: Home ASSistant

------------------------------------------------------------------------------

1.Home Assistant 종류
  Home Assistant Core: 기본 기능만 탑재
  Home Assistant Supervised: Core에 Add-On 기능 추가

------------------------------------------------------------------------------

2.종속 패키지 설치
  apt -y install \
   apparmor \
   bluez \
   cifs-utils \
   curl \
   dbus \
   jq \
   libglib2.0-bin \
   lsb-release \
   network-manager \
   nfs-common \
   systemd-journal-remote \
   systemd-resolved \
   udisks2 \
   wget \
   network-manager
  apt --fix-broken install

------------------------------------------------------------------------------

3.Netplan을 제거하고 Network Manager 활성화
  # Network Manager 설치 후 netplan 비활성화
  apt -y install network-manager
  systemctl enable NetworkManager
  mv /etc/netplan/10-dhcp-all-interfaces.yaml /etc/netplan/10-dhcp-all-interfaces.yaml.orig
  mv /etc/netplan/00-installer-config.yaml /etc/netplan/00-installer-config.yaml.orig
  touch /etc/NetworkManager/conf.d/10-globally-managed-devices.conf
  netplan apply ; reboot

  # netplan 삭제
  apt -y remove --purge netplan.io

------------------------------------------------------------------------------

4.네임서버 설정
  resolvectl status
  ※Current DNS Server: 8.8.8.8 과 같은 줄이 보이면 정상
  cat /run/systemd/resolve/resolv.conf
  systemctl enable systemd-resolved.service

  # DNS 항목을 수정한다.
  vi /etc/systemd/resolved.conf
    DNS=168.126.63.1 219.250.36.130
  systemctl restart systemd-resolved.service

------------------------------------------------------------------------------

5.Network Manager 네트워크 설정
  # Delete Connection
  nmcli connection delete id "wired_conn_1"

  # DHCP
  nmcli con add con-name "wired_conn_1" ifname eth0 type ethernet autoconnect yes

  # Static
  nmcli con add con-name "wired_conn_1" \
        ifname eth0 type ethernet \
        ipv4.address 192.168.1.50/24 ipv4.gateway 192.168.1.1 \
        connection.autoconnect true ipv4.method manual
  nmcli con mod "wired_conn_1" ipv4.dns "168.126.63.1"
  nmcli con mod "wired_conn_1" +ipv4.dns "219.250.36.130"

  # 설정 확인
  nmcli device
  nmcli con show
  nmcli con show "wired_conn_1"

  # 설정 파일 확인
  cat /etc/NetworkManager/system-connections/wired_conn_1.nmconnection

  # 적용
  nmcli con reload
  nmcli con up "wired_conn_1"

------------------------------------------------------------------------------

6.cgroup v2 다운그레이드 및 AppArmor 활성화
  # Home Assistant Supervised는 cgroup v1을 사용하나 기본적으로 v2가 설치되어 있음.
  # 현재 cgorup 버전 확인
  findmnt -lo source,target,fstype,options -t cgroup,cgroup2

  # cgorup v2 사용안함 설정
  sed -i -e "1 s/$/ systemd.unified_cgroup_hierarchy=0/" /boot/firmware/cmdline.txt
 
  # Enable AppArmor
  sed -i -e "1 s/$/ apparmor=1 security=apparmor/" /boot/firmware/cmdline.txt

  # 적용
  reboot

  ※Armbian
    vi /boot/armbianEnv.txt
    아래 구문을 armbianEnv.txt 최하단에 추가한다.
      extraargs=systemd.unified_cgroup_hierarchy=0

------------------------------------------------------------------------------

7.AppArmor 설치
  ※RaspberryPi OS
    apt install -y apparmor apparmor-utils
    systemctl enable apparmor.service
    aa-status

------------------------------------------------------------------------------

8.docker CE 설치
  curl -fsSL get.docker.com | sh
  systemctl enable docker.service

------------------------------------------------------------------------------

9.os-agent 설치
  Home Assistant OS Agent는 Home Assistant Supervisor가 호스트 운영 체제와 통신할 수 있도록 한다.

  # 아래 사이트를 방문하여 최신버전 확인
    https://github.com/home-assistant/os-agent/releases

  # 위에서 확인한 최신 버전을 명시
    export OS_AGENT_VER="1.6.0"

  # 다운로드 후 설치
    wget -O os-agent_linux.deb https://github.com/home-assistant/os-agent/releases/download/${OS_AGENT_VER}/os-agent_${OS_AGENT_VER}_linux_`uname -m`.deb
    dpkg -i os-agent_linux.deb

  # 정상 설치 확인 (오류가 없으면 정상 설치)
    gdbus introspect --system --dest io.hass.os --object-path /io/hass/os

------------------------------------------------------------------------------

10.Home Assistant Supervised 설치
  # OS 검사 무시
    export BYPASS_OS_CHECK=true

  # 권한 이슈를 피하기 위해 별도의 디렉토리를 만들고 거기서 작업
    mkdir /work
    chmod 755 /work
    cd /work

  # homeassistant-supervised.deb 다운로드
    wget -O homeassistant-supervised.deb https://github.com/home-assistant/supervised-installer/releases/latest/download/homeassistant-supervised.deb

  # 설치 준비
    mkdir /usr/share/hassio
    chown -R nobody:nogroup /usr/share/hassio
    chown _apt:nogroup ./homeassistant-supervised.deb

  # Home Assistant 데이터 디렉토리 설정
    export DATA_SHARE=/usr/share/hassio

  # 설치
    apt install ./homeassistant-supervised.deb -y
    ※중간에 보드 종류를 물어보는데 orangepi zero2는 raspberrypi3-64 선택

  # 기다림...
    ghcr.io 사이트의 트래픽 문제로 여러번의 재시도가 이루어지므로 설치가 끝날때까지 30~60분 정도 모니터링 하며 기다린다.

  # 데이터 디렉토리 심볼릭 링크 처리
    ln -s /usr/share/hassio/homeassistant ${HOME}/.homeassistant

------------------------------------------------------------------------------

11.설치 현황 모니터링
  ① docker로 로그 모니터링
    docker logs -f hassio_supervisor

  ② 웹브라우저에서 설치 현황 모니터링
    http://192.168.1.50:4357/

  ③ docker ps로 현재 설치현황 확인 (아래의 7개 컨테이너가 올라와야 한다)
    docker ps --format "table {{.ID}}\t{{.Names}}"
      hassio_audio
      hassio_cli
      hassio_dns
      hassio_multicast
      hassio_observer
      hassio_supervisor
      homeassistant

------------------------------------------------------------------------------

12.오류 처리
  ‼외부 도메인을 찾을 수 없다는 오류가 발생하면 아래 구문 실행
    ha dns options --servers dns://168.126.63.1
    ha dns restart

  ‼설치가 실패할 경우 아래를 차례로 실행하고 homeassistant-supervised.deb 설치부터 다시 진행
    systemctl stop docker.service
    rm -rf /var/lib/docker
    apt remove --purge homeassistant-supervised -y
    dpkg --remove --force-remove-reinstreq homeassistant-supervised
    systemctl start docker.service

------------------------------------------------------------------------------

13.접속 확인
  아래 주소에 접속하여 정상 설치를 확인하고 진행중미면 완료될 때까지 기다린다.
  http://192.168.1.50:8123/

------------------------------------------------------------------------------

14.설정 변경 (필요한 경우만 실행!!)
  # 기본 설정 디렉토리는 /usr/share/hassio 이며 아래의 절차로 변경할 수 있다.
  mkdir /usr/share/hassio
  DATA_SHARE=/usr/share/hassio dpkg --force-confdef --force-confold -i homeassistant-supervised.deb

------------------------------------------------------------------------------

15. MQTT 구성
  ⑴ Mosquitto broker의 사용자를 만들기 위해
    설정 > 구성원 > 우측 하단 +구성원 추가하기: 아래 사용자를 추가
      아이디:  _mqttbroker
      비밀번호: kQ#9JOdt29

  ⑵ Mosquitto broker 설치
    설정 > 애드온 > 우측 하단에 애드온 스토어로 이동
    Mosquitto broker를 검색하여 설치
    설정 > 애드온 > Mosquitto broker > 상단 구성 탭 (Logins 항목을 아래와 같이 수정)
    Logins
-----
[{"username": "_mqttbroker", "password": "kQ#9JOdt29"}]
-----
    ※필요한 경우 https://onlineyamltools.com/convert-yaml-to-json 에서 YAML→JSON 변환하여 입력

  ⑶ Zigbee2MQTT 설치
    설정 > 애드온 > 우측 하단에 애드온 스토어로 이동
    우측 상단에 ... > 저장소 > 저장소 추가하기 란에 아래 주소를 입력
      https://github.com/zigbee2mqtt/hassio-zigbee2mqtt
    > 추가하기 클릭 후 홈화면으로 이동
    설정 > 애드온 > Zigbee2MQTT를 검색하여 설치

  ⑷ Zigbee2MQTT 설정
    설정 > 애드온 > Zigbee2MQTT > 상단 구성 탭 (serial 항목을 아래와 같이 수정)

    serial
-----
{
  "port": "/dev/ttyUSB0",
  "adapter": "ember",
  "rtscts": false
}
-----
    사이드바에 표시하기: On

  ⑸ 서비스 시작하기
    설정 > 애드온 > Zigbee2MQTT > 상단 정보 탭 > 시작하기
    설정 > 애드온 > Mosquitto broker > 상단 정보 탭 > 시작하기

------------------------------------------------------------------------------

16.MQTT 서비스 추가
  설정 > 기기 및 서비스 > 우측 하단 "+통합구성요소 추가하기" > "MQTT" 추가
    "Use the official Mosquitto Mqtt Broker add-on >" 선택

------------------------------------------------------------------------------

17.HACS(Home Assistant Community Store) 추가
  ⑴ docker shell에서 HACS 설치
    docker exec -it homeassistant bash
      cd /tmp
      wget -O - https://get.hacs.xyz | bash -
      exit

  ⑵ 설정 > 시스템 > 우측 상단 전원버튼를 클릭하여 HASS 재 시작

  ⑶ 설정 > 기기 및 서비스 > 우측 하단 "+통합구성요소 추가하기" > "HACS" 추가
    Before you can setup HACS you need to acknowledge the following
    ... 모두 체크 후 진행

    Waiting for device activation...

    Open https://github.com/login/device
    Paste the following key to authorize HACS:
    8DB9-3950

    위와 같은 메세지가 뜨면 github에 로그인 후 아래에 명시된 HACS 디바이스 인증코드(8DB9-3950)를 입력하여 인증한다.

   ⑶ 설치 확인
    좌측 메뉴에 HACS가 표시되면 설치 완료.

위로 스크롤