서론

제목에서 말한 ‘데탑을 서버에 넣는다.’ 라는 문장은 사실
Proxmox에 익숙한 사람이라면 아주 당연하게 받아들여질 문장이다.
BIOS 설정에서 IOMMU 설정을 활성화한 다음에
GPU Passthrough를 진행한 다음, 윈도우 VM에 할당하면 된다.
이렇게 구성한 경우 GPU 단자에 디스플레이 케이블을 연결하기만 하면
우리가 통상적으로 쓰는 데스크탑 마냥 사용할 수 있다.
하지만 여기서 다룰 내용은 해당 내용이 아니니 다른 포스트로 이동하길 바란다.

나는 항상 서버라 하면 헤드리스로 구성하는 것을 지향한다.
헤드리스는 간단하게 말하면 본체에 키보드, 모니터, 마우스
(약칭으로 KVM이라 불리는 것들. 커널 기반 가상머신을 연상했다면 나랑 결혼하자.)
없이 오직 랜선과 전원선만 꽂혀있는 구성이다.
리눅스에 익숙한 사람들은 이런 구성이 얼마나 깔쌈한지 알고 있을 것이다.
보통 그런 사람은 SSH로 주로 접근하고, 요즘엔 RDP를 이용해서 원격접속을 가능케해주는 xrdp 기능을 쓰기도 한다.
나 역시 VGA가 지원될 환경이라면 Sunshine, Moonlight 조합으로 원격 접속을 하고,
그런 환경이 아니라면 SSH, VNC, RDP 등을 활용한다.

각설하고, 이런 식으로 자원을 효율적으로 쓰고(오버헤드,가 약간은 발생하지만) 미니멀한 구성을 꿈꾼다면
한번쯤은 데스크탑 자체를 PVE 노드로 만들고 싶다는 상상을 해볼 것이다.
보통은 안정성이라는 명목으로, 또 실용성이 떨어진다는 이유로 구성을 관둘 것이다.
네이티브로 OS가 돌아가는 것이 VM보다 성능 상 낫다는 것은 부정할 수 없는 사실이고,
VM으로 구성된 Windows OS의 전원을 켜려면 항상 PVE의 WebUI에서 조작을 해야 하기 때문에
PVE에서 데스크탑의 용도로 VM을 돌린다는 발상이 여간 성가신 일이 아니다.
하지만 PVE의 WebUI에서 조작을 해야한다는 성가심을 어느 정도 완화할 수 있는 방법이 존재하기는 한다!

Proxmox VE Addon

Home Assistant는 아주 많은 애드온을 지원한다.
그 중 ProxmoxVE Addon은 PVE 노드의 각종 정보를 Home Assistant에 불러오는 역할을 한다.
불러와지는 정보는 노드의 대시보드와, 각 VM 또는 LXC의 대시보드, 그리고 저장장치의 상태 등이다.
이걸로 우리는 PVE의 개략적인 상태를 관제할 수 있고, 각각의 VM, LXC에 대해 명령을 내릴 수 있다.
이 명령들은 기본적으로는 비활성화되어 있으며, 활성화 후 reboot, start, shutdown 등을 사용할 수 있다.
물론 이 명령들이 수행되기 위해서는 PVE의 WebUI에서도 수행되는 상태여야 하며,
VM 측에 Qemu Guest Tool이 설치되어 있어야 한다.
여기서 Qemu Guest Tool을 설치하는 방법은 생략하겠다.

즉, 해당 명령들은 Home Assistant 측에서 Entity로 인식되며,
우리는 이를 토대로 해당 Entity들을 자동화에 활용할 수 있다.
Zigbee 프로토콜을 이용하는 리모컨 같은 것들을 이에 묶는다면,
보다 더 직관적인 형태로 VM을 켜고 끄는 것이 가능해진다.
우리가 데스크탑에서 하던 그대로의 느낌으로 말이다.
폰이 더 친숙하고, 폰으로 모든 것을 하고 싶은 사람이라면
Home Assistant 앱에서 해당 스위치에 접근하여 직접 켜고 끄는 방법이 있을 수도 있다.
더 나아가 삼성 DeX 같은 것들이 가능한 갤럭시 기기라면,
프로그래밍된 NFC 태그와 독 연결 인식으로 스위치를 트리거하고
문라이트 같은 원격 앱으로 리다이렉트 하도록 구성할 수 있다.

적용하기

일단 ProxmoxVE 애드온을 구성하는 방법은 다음과 같다.

  1. configuration.yaml로 엔티티 구성
  2. HACS를 통하여 Proxmox VE 애드온 설치

Home Assistant를 구성한 사람들이라면 HACS를 어느 정도 활용해 보았을 것이니 편의상 후자를 추천하지만,
경우에 따라 HACS를 활용하지 못하는 경우도 있을 수 있으므로 취사 선택해서 활용하기를 바란다.

1. configuration.yaml로 엔티티 구성

먼저 Home Assistant에 File Editor 애드온을 설치하여 접근하거나, SSH로 접근하거나 하여
configuration.yaml을 열어야 한다.

해당 파일을 열어서 아래의 내용을 붙여넣기 해준다. 한국어 부분은 설명대로 작성하여야 한다.

# Home Assistant에서 configuration.yaml에 해당 내용 첨부
proxmoxve:
  - host: PVE의 IP 주소
    username: PVE에서의 아이디
    password: PVE에서의 비밀번호
    nodes:
      - node: 노드 이름
        vms:
          - VM의 ID
          - LXC의 ID

이렇게 하면 구성 내용에 오류가 있지 않는 한 정상적으로 애드온이 구성되고 관련 엔티티가 생겨야 한다.
생기지 않았거나 노드가 제대로 적용되지 않았다면 Home Assistant 측의 로그를 확인하고 그에 맞는 조치를 취하여야 한다.

2. HACS를 통하여 Proxmox VE 애드온 설치

HACS를 통해 Proxmox VE를 설치하기 위해서는 Proxmox VE의 Custom Integration을 참고해야 한다.

애드온 설치 링크를 누르면 위 링크에서 제공하는 바로가기 링크로 가게 된다.

본인의 Home Assistant 접속 주소를 Your Instance URL 항목에 적으면
Home Assistant에 설치할 수 있도록 리다이렉트 될 것이다.

만일 이 링크가 작동하지 않는다면 HACS custom repository에
https://github.com/dougiteixeira/proxmoxve를 추가해줘야 한다.

위 사진처럼 HACS 탭에서 우측 3점 버튼을 누른 후, Custom Repositories를 누른다.
그 곳에서 위 링크를 붙여넣고, Type은 Integration으로 지정한다.

그럼 위와 같이 Repository가 등록될 것이고,
이를 통해 Proxmox VE 서버와 노드를 등록할 수 있다.

이 방법을 통해 설치한 경우, 아래와 같은 화면이 나온다.

Host* 부분에는 PVE의 IP 주소를 적어주면 되고,
Port 는 PVE의 포트를 바꾸지 않은 이상 기본값 그대로 8006을 적어주면 된다.
혹시 이 부분을 Nginx Proxy Manager로 대체한 URL로 채우면 오류가 뜰 것이다.
아무래도 인증서 관련 문제인 듯 한데, 일단은 IP:포트 구성을 NPM 존재 여부와 상관없이 활용해야 할 듯 하다. 추후 해당 부분에 대해 알아내는 것이 있으면 추가 작성하겠다.
Username은 PVE에서의 아이디를 입력하면 되고
Token name은 PVE에서 발행한 토큰이 있다면 그 이름을 적어주면 된다.
Password는 PVE에서의 비밀번호를 입력하면 되는데,
Token name을 채웠다면 Token value 값을 채워줘도 무방하다.
경험상 Token을 활용한 연결은 노드 값이 제대로 불러와지지 않는 등의 버그가 있었어서
원래대로 UsernamePassword를 입력하고 추가하는 것을 추천한다.

Submit를 누르면 노드와 VM, LXC 등 각종 Entity 들의 위치를 정하는 화면이 나오며
Entity의 위치, 용도에 따라 자유롭게 정하면 되겠다.

설치 후 Finishing Touch

이제 추가적으로 해줘야 할 것은 노드, VM, LXC에 대한
제어 명령들을 보내는 Entity를 구성하는 것이다.

위 이미지는 VM에서 찍은 스크린샷이나, 노드, VM, LXC 모두
같은 방법으로 Entity를 구성할 수 있다.

여기서 Disabled Entities를 눌러 항목들을 보면,
Start, Stop, Hibernate, Reboot, … 등의 비활성화된 버튼들이 보일 것이다.
예시로 Reboot 버튼을 살려보도록 하겠다.

여기서 황색 Enable 버튼을 누르면 30초 이내로 활성화될 거라는 안내가 뜨고
30초 이내로 해당 버튼이 Entity로 추가된다.
다른 버튼들도 같은 방법으로 활성화하면
VM을 Home Assistant에서 켜고 끌 수 있게 된다.

활용하기

이 자체만으로도 충분히 유용하게 활용 가능한 구성이 완성되었다.
Home Assistant는 앱으로도 접근이 가능하고, 해당 앱 자체로도
빅스비 루틴이나 Shortcut과 연동하여 활용할 수 있기 때문이다.

그러나 여기서 좀 더 유용하게 활용하는 방법을 생각해보기로 했다.

출퇴근(?) 트리거와 연동

지그비 리모컨과 연동

###