시놀로지 NAS에서 윈도우 사용하기 (수정)
페이지 정보
본문
시놀로지 NAS에서 윈도우 사용하기
================================
1. 서설
-------
시놀로지에서 도커(Docker)가 된지 꽤 됐죠? 도커를 활용하면 리눅스에서나 가능한 풍부한 서버용 프로그램을 시놀로지에서도 활용할 수 있습니다. 그 중 하나가 가상화 환경인 KVM/QEMU 입니다. 이제 도커로 쉽게 가상화 환경을 만들어서 윈도우를 돌릴 수 있게 되었습니다. 저는 낡은 삼성 레이저 복합기(SL-C472W)가 있는데요, 여기 스캐너 프로그램이 윈도우용 밖에 없어서 이것을 시놀로지와 결합해서 어떻게 활용할 수 있을까 고민하다가 윈도우 가상화까지 오게 되었습니다. 결론적으로 잘 돌아가네요.
아래 기술하는 내용은 원래 인터넷에 다 있습니다. 다만, 시놀로지.헤놀로지에서 쓰는 방법에 대한 설명이 좀 불충분하고 흩어져 있을 뿐이지요. 제가 설명하는 내용은 간단합니다. 1) 가상화 터널 장치를 만들고, 2) 가상화 환경을 만들고(VMM 설치하고 실행하면 끝), 3) 가상화 윈도우 도커를 실행하자 입니다.
참조: https://github.com/dockur/windows
2. 사용준비
-----------
위 dockur 설명에 따르면 /dev/net/tun과 /dev/kvm 디바이스가 필요합니다. 아래는 시놀로지에서 이 장치들을 만드는 방법입니다.
2-1. /dev/net/tun
이건 네트워크 터널 디바이스인데요, VPN 과 같이 가상 터널을 뚫고자할 때 사용되는 장치입니다. 시놀로지가 실행될 때 마다 장치가 만들어지도록 스크립트 파일을 스케줄러에다가 넣어서 실행해 주시면 됩니다.
tun.sh 파일 내용
```
#!/bin/sh
# Create the necessary file structure for /dev/net/tun
if ( [ ! -c /dev/net/tun ] ); then
if ( [ ! -d /dev/net ] ); then
mkdir -m 755 /dev/net
fi
mknod /dev/net/tun c 10 200
chmod 0755 /dev/net/tun
fi
# Load the tun module if not already loaded
if ( !(lsmod | grep -q "^tun\s") ); then
insmod /lib/modules/tun.ko
fi
```
위 파일을 적당한 곳에 넣어 놓습니다. 그리고 제어판->작업 스케줄러로 가서 "생성"->"트리거된 작업"->"사용자 정의 스크립트" 를 실행합니다. 이 스크립트를 시놀로지가 기동될 때마다 root 권한으로 실행되게 하면 됩니다.
작업생성 창에서 "일반" 항목에서는 작업에 적당한 이름을 넣어주고, 사용자는 root로 바꿔줍니다. 이벤트는 부트업으로 되어 있는 것을 확인하고 "작업설정" 항목으로 넘어갑니다. 실행명령에 실행할 명령을 입력하는데요, 위에 스크립트 파일이 /volume1/docker/tun.sh 라면, bash /volume1/docker/tun.sh 로 입력해 주고 확인을 눌러 마칩니다.
2-2. /dev/kvm
패키지 센터에서 virtual machine manager 를 찾아서 설치합니다. 그리고 실행해서 가상화 환경이 작 작동중이라는 화면을 보시면 됩니다. 그러면 kvm 장치가 만들어집니다.
3. docker-compose.yml 예시 및 실행
----------------------------------
제 docker-compose.yml 파일 예시입니다.
```
services:
windows:
image: dockurr/windows
container_name: windows
environment:
VERSION: "11"
devices:
- /dev/kvm
- /dev/net/tun
cap_add:
- NET_ADMIN
ports:
- 8006:8006
- 3389:3389/tcp
- 3389:3389/udp
volumes:
- /volume1/scan:/data
stop_grace_period: 2m
```
중요한 몇가지 옵션을 설명드릴께요. VERSION은 가상화 환경에서 어떤 윈도우가 설치.실행될지를 결정하는 변수입니다. 11은 윈도우 11 프로, 10은 윈도우 10 프로, 7e은 윈도우 7 엔터프라이즈, xp는 윈도우 xp 프로 등등입니다. https://github.com/dockur/windows 에 상세하게 설명되어 있습니다. 다음으로 volumes 부분은 윈도우 내에서 시놀로지와 자료를 주고 받은 수 있는 통로를 설정하는 곳입니다. 윈도우가 실행되면 /data 부분은 \\host.lan\Data 으로 접근할 수 있습니다.
이 docker-compose.yml 이 있는 디렉토리에서 docker-compose up -d 으로 실행하면 알아서 윈도우 이미지 받아 설치.로그인까지 실행됩니다. 전 xp로 실행해봤는데요, 한 10분 내외면 설치가 완료되고 바탕화면까지 볼 수 있었습니다.
실행되는 화면은 웹브라우저에서 http://시놀로지 접근 ip:8006 으로 접근하시면 QEMU 화면으로 보실 수 있습니다.
4. NAS 부팅할때마다 자동으로 실행하기
-------------------------------------
컨테이너에 restart:always 나 restart:unless-stopped 옵션이 제대로 작동되지 않습니다. 제 에러 메세지는 다음과 같았습니다.
Start container container_name failed: {"error gathering device information while addind custom device \"/dev/kvm\": no such file or directory"}.
컨테이너를 실행할 때 컨테이너에 부착할 /dev/kvm 디바이스에 대한 정보를 수집하는데 그러한 파일이 없다는 메세지입니다. 시놀로지 부팅할 때 VMM이 실행되면서 /dev/kvm 장치가 만들어집니다. VMM 실행이 완료되지 전, 그러니까 /dev/kvm이 아직 생성되지 않은 상태에서 가상화 컨테이너가 실행되면서 에러메세지를 내뿜고 제대로 실행되지 않는 것입니다. 시놀로지에 들어가서 도커 프로그램에서 다시 실행을 해보면 잘 실행될 것입니다.
이를 해결하기 위해서는 /dev/kvm 장치가 만들어지고 난 뒤에 이 컨테이너를 실행하는 것입니다. 위에 tun.sh 실행한 것처럼 부팅할때 /dev/kvm 이 생성되었지 확인하고 컨테이너를 실행하는 간단한 쉘 스크립트를 만들면 됩니다. 위 tun.sh 처럼 아래 kvm.sh 스크립트를 시놀로지에 올려놓고 동일하게 작업 스케줄러를 설정하면 됩니다. 단 하나의 차이가 있다면 개념상 /dev/net/tun 장치가 만들어지고 나서 컨테이너가 시작되야 하므로, 사전작업에서 TUN 을 설정해주면 됩니다.
```
#!/bin/sh
while true; do
if [ -e /dev/kvm ]; then
echo $(date): /dev/kvm is created and ready.
/usr/local/bin/docker container start windows
break
fi
echo $(date): /dev/kvm is not ready. wait for 30 seconds.
wait 30s
done
```
5. 추가 고려사항
----------------
웹브라우저로 QEMU에 접근해서 사용하실 수도 있지만, 원격 데스크톱 연결을 통해서 사용할 수 있습니다. 원격 데스크톱 연결이 QEMU로 접근하는 것보다 속도가 낫다고 합니다.
원격 데스크톱으로 연결을 자주 하시면 rdpwrap 를 활용해 보세요. 다중 원격 접속을 허용하는 랩퍼입니다.