반응형

 

PiKVM 이란?

PiKVM은 라즈베리 파이(Raspberry Pi)를 이용한 KVM-over-IP 솔루션

  • KVM (Keyboard, Video, Mouse) 기능을 네트워크를 통해 원격으로 제어할 수 있도록 해줍니다.
  • 서버나 PC의 BIOS 설정, OS 설치, 문제 해결 등을 물리적으로 접근하지 않고도 원격에서 수행할 수 있습니다.
  • 라즈베리 파이 + HDMI 캡처 + USB 연결로 간단하게 구축 가능하며, 웹 인터페이스를 제공하여 사용이 편리합니다.

PiKVM 을 쓰려면 일단 라즈베리 파이와 영상 캡쳐를 위한 몇몇 추가 장비가 필요합니다.
성능도 꽤 좋습니다.
그런데 집에 PC가 많으니까 한 PC 에서 다른 PC를 제어하면 되지 않을까? 하면서 찾아봤습니다.
github 에 보면 옛적부터 PiKVM 을 포팅해서 x86kvm 이나 기타 등등 여러가지 있지만 원하는 형태는 잘 안보였습니다만,
최근에 OneKVM 이라고 하나 찾아서 테스트 해보니 괜찮았습니다.

 

OneKVM

일단 중국 친구가 PiKVM 포크해서 만든 것 같고 도커로 실행이 잘 됩니다.
VM 이미지도 제공하는데 테스트 해보니 그것도 잘 됬습니다.
영상 캡쳐는 USB-HDMI 로 사용하고, 키보드 마우스 입력은 USB-TTL 장치와 ch9329 를 이용해서 합니다.

 

준비물

  • 도커 실행 가능 PC
  • KVM 적용할 PC 또는 장치 (클라이언트)
  • USB-TTL (USB UART, ch340 등 아무거나), 1,000원~4,000원
  • CH9329 (UART to HID), 3,000원
  • USB HDMI 캡쳐 카드 (MS2130 등), 5,000 ~ 14,000원
  • 총합 9,000~20,000원
    (가격은 알리익스프레스 보통 판매가이며 할인하면 더 싸게 구할 수 있습니다 )

 

One-KVM 설치

도커로 설치해서 사용하면 됩니다.
저는 docker-compose.yaml 만들어서 사용했습니다.
proxmox 환경에서 lxc 데비안 설치 하였으며 /dev/video0 와 /dev/ttyUSB0 를 passthrough 해서 사용했습니다.

services:
  onekvm:
    container_name: onekvm
    image: silentwind0/kvmd
    devices:
      - /dev/video0:/dev/video0
      - /dev/ttyUSB0:/dev/ttyUSB0
    network_mode: host  # 호스트 네트워크 사용, WebRTC용?
#    ports:
#      - "8080:8080"
#      - "4430:4430"
#      - "5900:5900"
#      - "623:623"
    volumes:
      - ./kvmd_config:/etc/kvmd
    environment:
      - CH9329SPEED=115200
      - USERNAME=KVM_WEB_USER
      - PASSWORD=KVM_WEB_PASSWORD
    restart: unless-stopped

접속 주소는 https://kvm-ip:4430 이며 처음 접속 시 영어로 언어 선택하면 됩니다.

 

USB-TTL 과 CH9329 연결

USB-TTL 과 CH9329 를 연결해주면 됩니다.
TTL CH9329
rx - tx
tx - rx
gnd - gnd
세개 선만 연결하고 vcc 는 연결하지 않습니다.

제가 가진 CH9329 와 CH340 은 생각없이 연결하고 써도 문제 없더군요.
tx 전압 측정해보니 5v 로직전압인듯 합니다.

CH9329 를 원격조종할 PC 에 연결하고, CH340 을 도커 설치할 PC 에 연결,
하드웨어가 인식 잘 되었는지 확인 후
잘 사용하면 됩니다.

 

CH9329 정지 문제 해결

클라이언트 PC 를 재부팅 하거나 하면 CH9329 가 자꾸 먹통이 됩니다.
CH9329 를 reset 시키면 살아납니다. (물리적으로 USB 제거 후 다시 연결, 또는 reset 신호)

x86 pikvm 에서 ch_reset.py 를 실행하면 된다고 해서 vm에 설치하고 파이썬 파일을 가져와서 조금 수정했습니다.
장치에 맞게 device path, serial 설정을 주면 됩니다.

 

도커 내부에 들어가서
python3 ./ch_reset.py
실행해주면 CH9329 가 리셋되면서 다시 사용 가능합니다.
(host 에서 해도 되나 파이썬 라이브러리 설치가 귀찮습니다..)

 

해당 파일은 kvmd_config 에 고이 넣어둡니다. 아래에서 쓰기 쉽게 만들거거든요.

kvmd_config/ch_reset.py

#!/usr/bin/python3
import serial
import time

device_path = "/dev/ttyUSB0"
chip = serial.Serial(device_path, 115200, timeout=1)

command = [87, 171, 0, 15, 0]
sum = sum(command) % 256
command.append(sum)

print("Resetting CH9329")

chip.write(serial.to_bytes(command))

time.sleep(0.2)

data = list(chip.read(5))
print("Initial data:", data)

if data[4] :
        more_data = list(chip.read(data[4]))
        data.extend(more_data)
print("Output: ", data)

chip.close()

실행하기 쉽게 쉘스크립트로 하나 만들어줍니다.

kvmd_config/ch_reset.sh

#!/bin/bash
/usr/local/bin/python3 /etc/kvmd/ch_reset.py

저장 후 실행 가능하게 권한 설정 해주고요
chmod +x ch_reset.sh

 

CH9329 추가 설정

CH9329 통신 속도가 기본값은 9600 인데 115200 으로 바꾸면 조금 더 안정적이라고 합니다.
도커 환경변수에 넣어서 반영 시켰지만 장치 기본값도 바꿔놓으면 좀 더 안정정입니다.

 

아래 링크에서 프로그램을 받아서 CH9329만 USB 에 꽃은 후 실행합니다. (윈도우 PC)
https://www.wch.cn/downloads/CH9329EVT_ZIP.html

메뉴가 다 깨지는데 대충 추측해서 눌러봅니다.
왼쪽 위에서 USB 로 연결되었다고 선택 한 후 연결 시키면 아래 정보가 뜹니다.
오른쪽 버튼 눌러서 불러오고 통신 속도를 115200 으로 바꾸고 다시 저장하면 됩니다.

KVM 에서 mouse jiggler 를 켜놓으면 계속 통신되니 안정적이라는 내용도 있네요.

KVM 메뉴 커스텀

KVM 접속 시 상단에 불필요한 중국어로 된 메뉴가 있어서 커스텀을 조금 했습니다.
위에서 만든 CH HID Reset 을 추가해주고 개인적으로 쓰는 ATX 전원제어 장치(Rest API 동작) 명령어를 넣어줬습니다.

아래 파일을 편집하면 됩니다. 필요한 부분만 수정했습니다. 안쓰는 내용도 좀 있어요.
수정 후 도커 재시작 하고 접속하면 이제 ch_reset 를 메뉴에서 바로 사용 할 수 있습니다.

 

kvmd_config/override.yaml

kvmd:
    auth:
        enabled: true

    atx:
        type: disabled

    hid:
        type: ch9329
        device: /dev/ttyUSB0
        speed: 115200
        read_timeout: 0.3

        jiggler:
            active: true
            enabled: true

        mouse_alt:
            device: /dev/kvmd-hid-mouse-alt

    msd:
        #type: otg
        remount_cmd: /bin/true
        msd_path: /var/lib/kvmd/msd
        normalfiles_path: NormalFiles
        normalfiles_size: 256

    ocr:
        langs:
            - eng
            - chi_sim

    streamer:
        resolution:
            default: 1920x1080

        forever: true

        desired_fps:
            default: 60
            max: 60

        h264_bitrate:
            default: 8000

        cmd:
            - "/usr/bin/ustreamer"
            - "--device=/dev/video0"
            - "--persistent"
            - "--format=mjpeg"
            - "--encoder=LIBX264-VIDEO"
            - "--resolution={resolution}"
            - "--desired-fps={desired_fps}"
            - "--drop-same-frames=30"
            - "--last-as-blank=0"
            - "--unix={unix}"
            - "--unix-rm"
            - "--unix-mode=0666"
            - "--exit-on-parent-death"
            - "--process-name-prefix={process_name_prefix}"
            - "--notify-parent"
            - "--no-log-colors"
            - "--h264-sink=kvmd::ustreamer::h264"
            - "--h264-sink-mode=0660"
            - "--jpeg-sink=kvmd::ustreamer::jpeg"
            - "--jpeg-sink-mode=0660"
            - "--h264-bitrate={h264_bitrate}"
            - "--h264-gop={h264_gop}"
            - "--h264-preset=ultrafast"
            - "--slowdown"
    gpio:
        drivers:
            ch_reset:
                type: cmd
                cmd: [/etc/kvmd/ch_reset.sh, short]
            wol_server1:
                type: wol
                mac: 2c:56:dc:db:7c:1e
            short_press:
                type: cmd
                cmd: [/etc/kvmd/power_control.sh, short]
            long_press:
                type: cmd
                cmd: [/etc/kvmd/power_control.sh, long]
            reset_press:
                type: cmd
                cmd: [/etc/kvmd/atx.sh, reset]
            input1:
                type: cmd
                cmd: [/etc/kvmd/kvm_input.sh, 1]    
            input2:
                type: cmd
                cmd: [/etc/kvmd/kvm_input.sh, 2]
        scheme:
            ch_reset:
                driver: ch_reset
                pin: 0
                mode: output
                switch: false
            wol_server1:
                driver: wol_server1
                pin: 0
                mode: output
                switch: false
            short_button:
                driver: short_press
                pin: 0
                mode: output
                switch: false
            long_button:
                driver: long_press
                pin: 0
                mode: output
                switch: false
            reset_button:
                driver: reset_press
                pin: 0
                mode: output
                switch: false
            input1-button:
                driver: input1
                pin: 0
                mode: output
                switch: false
            input2-button:
                driver: input2
                pin: 0
                mode: output
                switch: false
        view:
            header:
                title: 고급설정
            table:
                - ["#CH HID Reset"]
                - ["ch9329 reset :", ch_reset|실행]
                - ["----------------"]
                - [" "]
                - [" "]
                - [" "]
                - [" "]
                - [" "]
                - ["#ATX 전원제어"]
                - ["#전원버튼(On/Off):", short_button|실행]
                - [" "]
                - [" "]
                - [" "]
                - ["#강제종료(Power 5s):", long_button|실행]


vnc:
    keymap: /usr/share/kvmd/keymaps/en-us
    mouse_output: usb

    auth:
        vncauth:
            enabled: true

    memsink:
        jpeg:
            sink: "kvmd::ustreamer::jpeg"
        h264:
            sink: "kvmd::ustreamer::h264"

media:
    memsink:
        h264:
            sink: 'kvmd::ustreamer::h264'

        jpeg:
            sink: 'kvmd::ustreamer::jpeg'
janus:
    stun:
        host: stun.cloudflare.com
        port: 3478

otgnet:
    commands:
        post_start_cmd:
            - "/bin/true"
        pre_stop_cmd:
            - "/bin/true"

nginx:
    http:
        port: 8080
    https:
        port: 4430

 

 

여기까지 커스텀 완료했습니다.

도커는 영상모드는 mjpeg 만 사용되는데 내부망에서는 빠르고 좋습니다.

HW 패스스루/드라이버/캡쳐USB 문제인 것 같아서 몇번 해보고 포기했습니다.

VM 으로 깔면 WebRTC도 되긴 하는데 별로 좋은지 모르겠습니다.

 

저는 추가로 power_control.sh 에서 전원 버튼 누를때마다 ch_reset.py 실행하는 로직까지 넣어놨습니다.
바이오스 들어가기 한결 편하더라구요.

반응형
반응형

 

Proxmox 에 윈도우 VM 을 올려놓았는데

사용하지 않을때는 종료 시켜 놓는다.

그런데 짝꿍은 Proxmox 접근 권한이 없으니까...HA 에 전원 버튼을 만들어줬다.

 

 

참조 글은 아래 링크

https://www.jamescoyle.net/tag/api

 

API | JamesCoyle.net Limited

Proxmox has 2 API access points that can be used to control your Proxmox server and virtual guests. One of the API access points is using the command line, which you’re likely already familiar with. The other is the HTTP web API which is exposed as part

www.jamescoyle.net

 

 

대충 아래 내용들을 채워 넣어야 한다

  • TICKET is the authentication ticket that was produced in the Parse Proxmox Web API authentication ticket and the CSRFPreventionToken in Bash post. Ideally you would programatically call the authentication routine and then pass the values straight into the below API calls.
  • CSRF is produced in the same way as TICKET. It’s actually only required when writing data to the API but there is no harm in always including it.
  • HOST is the host or IP address of the Proxmox server.
  • NODE is the node name of the Proxmox server that the LXC Container resides on.
  • TARGET_VM  is the VMID of the LXC Container.

 

 

 

Proxmox 웹에 접속한 후에

Datacenter 선택 후

Permission -> User -> add 로 사용자를 하나 추가하고 아이디/암호 기억하자

 

 

Permission -> Roles 에서 Create 로 API 용 role 을 하나 추가해주자

 

proxmox host shell 에 접속해서 아래와 같은 명령어로 role 을 부여해주자.

pveum acl modify / -user API@pve -role APIrole

 

이제 아래와 같은 스크립트를 만들면 된다. 중간 5줄만 잘 채우자.

VM 시작 스크립트

VMwin10Start.sh

#!/bin/bash

decodeDataFromJson(){
    echo `echo $1 \
            | sed 's/{\"data\"\:{//g' \
            | sed 's/\\\\\//\//g' \
            | sed 's/[{}]//g' \
            | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \
            | sed 's/\"\:\"/\|/g' \
            | sed 's/[\,]/ /g' \
            | sed 's/\"// g' \
            | grep -w $2 \
            | awk -F "|" '{print $2}'`
}

PROX_USERNAME=user@pve
PROX_PASSWORD=password
HOST=proxmox_host_ip
NODE=proxmox_node
TARGET_VMID=VM_number

DATA=`curl -s -k -d "username=$PROX_USERNAME&password=$PROX_PASSWORD" $HOST/api2/json/access/ticket`
TICKET=$(decodeDataFromJson $DATA 'ticket')
CSRF=$(decodeDataFromJson $DATA 'CSRFPreventionToken')


START_TASK_DATA=`curl -s -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" -X POST $HOST/api2/json/nodes/$NODE/qemu/$TARGET_VMID/status/start`

 

VM 종료 스크립트

VMwin10Shutdown.sh

#!/bin/bash

decodeDataFromJson(){
    echo `echo $1 \
            | sed 's/{\"data\"\:{//g' \
            | sed 's/\\\\\//\//g' \
            | sed 's/[{}]//g' \
            | awk -v k="text" '{n=split($0,a,","); for (i=1; i<=n; i++) print a[i]}' \
            | sed 's/\"\:\"/\|/g' \
            | sed 's/[\,]/ /g' \
            | sed 's/\"// g' \
            | grep -w $2 \
            | awk -F "|" '{print $2}'`
}

PROX_USERNAME=user@pve
PROX_PASSWORD=password
HOST=proxmox_host_ip
NODE=proxmox_node
TARGET_VMID=VM_number

DATA=`curl -s -k -d "username=$PROX_USERNAME&password=$PROX_PASSWORD" $HOST/api2/json/access/ticket`
TICKET=$(decodeDataFromJson $DATA 'ticket')
CSRF=$(decodeDataFromJson $DATA 'CSRFPreventionToken')


START_TASK_DATA=`curl -s -k -b "PVEAuthCookie=$TICKET" -H "CSRFPreventionToken: $CSRF" -X POST $HOST/api2/json/nodes/$NODE/qemu/$TARGET_VMID/status/shutdown`

 

 

해당 스크립트를 HA config 폴더에 넣고

configuration.yaml 파일에 아래와 같은 shell 커맨드를 넣어준다.

shell_command:
  win10start: sh VMwin10Start.sh
  win10stop: sh VMwin10Shutdown.sh

 

이제 요렇게 추가 완료

전원 켜짐은 device_tracker 로 알아서 만들기

반응형
반응형

아래 링크대로 진행하면 잘 된다.

 

https://www.kreaweb.be/diy-home-server-2021-software-proxmox-ups/

 

DIY HOME SERVER 2021 - Software - PROXMOX - NUT UPS Monitoring | KREAWEB

When building a home lab server, you’re almost always going to use some kind of Uninterruptible Power Supply (UPS). Let's install some tools to monitor the system.

www.kreaweb.be

 

 

usb 가 porxmox 장치에 연결되어 있는 환경에서

 

대충 요약하면

 

USB 포트에 맞게 연결되어 있는지 확인하고

lsusb
lsusb -v -s [bus]:[device]

 

NUT 를 설치해주고

apt install nut -y

NUT 디바이스를 확인한다. 

nut-scanner -U

 

 

기본 설정 파일 백업은 생략한다.

 

파일 수정

nano /etc/nut/nut.conf

아래 내용만 입력 

MODE=netserver

 

파일 수정

nano /etc/nut/ups.conf

 

pollinterval = 15
maxretry = 3

offdelay = 120
ondelay = 240

[ups] 
# APC Back-UPS BX1400U-FR
driver = usbhid-ups
port = auto
desc = "APC Back-UPS BX1400U-FR"
vendorid = 051D
productid = 0002
serial = secret

 

ups 드라이버 시작

upsdrvctl start

 

파일 수정

nano /etc/nut/upsd.conf
LISTEN 0.0.0.0 3493
LISTEN :: 3493

 

nano /etc/nut/upsd.users
[upsadmin]
# Administrative user
password = ********
# Allow changing values of certain variables in the UPS.
actions = SET
# Allow setting the "Forced Shutdown" flag in the UPS.
actions = FSD
# Allow all instant commands
instcmds = ALL
upsmon master

[monuser]
# Normal user
password = ********
upsmon slave

 시놀로지에서 쓰려면 monuser 암호를 secret 으로 하면 된다.

 

nano /etc/nut/upsmon.conf
RUN_AS_USER root
MONITOR ups@localhost 1 upsadmin ******* master

MINSUPPLIES 1
SHUTDOWNCMD "/sbin/shutdown -h"
NOTIFYCMD /usr/sbin/upssched
POLLFREQ 4
POLLFREQALERT 2
HOSTSYNC 15
DEADTIME 24
MAXAGE 24
POWERDOWNFLAG /etc/killpower

NOTIFYMSG ONLINE "UPS %s on line power"
NOTIFYMSG ONBATT "UPS %s on battery"
NOTIFYMSG LOWBATT "UPS %s battary is low"
NOTIFYMSG FSD "UPS %s: forced shutdown in progress"
NOTIFYMSG COMMOK "Communications with UPS %s established"
NOTIFYMSG COMMBAD "Communications with UPS %s lost"
NOTIFYMSG SHUTDOWN "Auto logout and shutdown proceeding"
NOTIFYMSG REPLBATT "UPS %s battery needs to be replaced"
NOTIFYMSG NOCOMM "UPS %s is unavailable"
NOTIFYMSG NOPARENT "upsmon parent process died - shutdown impossible"

NOTIFYFLAG ONLINE   SYSLOG+WALL+EXEC
NOTIFYFLAG ONBATT   SYSLOG+WALL+EXEC
NOTIFYFLAG LOWBATT  SYSLOG+WALL+EXEC
NOTIFYFLAG FSD      SYSLOG+WALL+EXEC
NOTIFYFLAG COMMOK   SYSLOG+WALL+EXEC
NOTIFYFLAG COMMBAD  SYSLOG+WALL+EXEC
NOTIFYFLAG SHUTDOWN SYSLOG+WALL+EXEC
NOTIFYFLAG REPLBATT SYSLOG+WALL
NOTIFYFLAG NOCOMM   SYSLOG+WALL+EXEC
NOTIFYFLAG NOPARENT SYSLOG+WALL

RBWARNTIME 43200
NOCOMMWARNTIME 600

FINALDELAY 5

 

 

nano /etc/nut/upssched.conf
CMDSCRIPT /etc/nut/upssched-cmd
PIPEFN /etc/nut/upssched.pipe
LOCKFN /etc/nut/upssched.lock

AT ONBATT * START-TIMER onbatt 30
AT ONLINE * CANCEL-TIMER onbatt online
AT ONBATT * START-TIMER earlyshutdown 30
AT LOWBATT * EXECUTE onbatt
AT COMMBAD * START-TIMER commbad 30
AT COMMOK * CANCEL-TIMER commbad commok
AT NOCOMM * EXECUTE commbad
AT SHUTDOWN * EXECUTE powerdown
AT SHUTDOWN * EXECUTE powerdown

 

nano /etc/nut/upssched-cmd
#!/bin/sh
 case $1 in
       onbatt)
          logger -t upssched-cmd "UPS running on battery"
          ;;
       earlyshutdown)
          logger -t upssched-cmd "UPS on battery too long, early shutdown"
          /usr/sbin/upsmon -c fsd
          ;;
       shutdowncritical)
          logger -t upssched-cmd "UPS on battery critical, forced shutdown"
          /usr/sbin/upsmon -c fsd
          ;;
       upsgone)
          logger -t upssched-cmd "UPS has been gone too long, can't reach"
          ;;
       *)
          logger -t upssched-cmd "Unrecognized command: $1"
          ;;
 esac
chmod +x /etc/nut/upssched-cmd

 

아래 명령어로 이제 시작해주자.

service nut-server restart
service nut-client restart
systemctl restart nut-monitor
upsdrvctl stop
upsdrvctl start

 

ups 연결 확인 가능

upsc ups@localhost

 

 

이제 synology 에서도 ip 확인 가능...

반응형
반응형

 

서브로 사용하는 시놀로지(헤놀)에 duckdns의 dns challenge 로 인증서를 설정해봤다.

 

최근 acme 기본 서버가 zerossl 인데 뭔가 설정이 잘 안되서 삽질을 한참 했다.

 

 

테스트 환경은

synology 920+ 에 duckdns 얹어서 letsencrypt 로 인증서 받기

 

 

참조 문서 목록

https://www.clien.net/service/board/cm_nas/17436459

 

ACME를 이용한 와일드카드 인증서 시놀로지 발급 관련 자료 모음 : 클리앙

이번에 나스를 옮기면서 삽질을 여러번 했습니다. 1. 기존 나스에 설정해두었던 ACME설치방법을 완전히 까먹었었다는 것이 사건의 발단이었고 2. ACME 방식이 약간 변경이 있었다는 것 3. DSM7에서는

www.clien.net

 

https://github.com/acmesh-official/acme.sh/tree/master/dnsapi

 

GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol

A pure Unix shell script implementing ACME client protocol - GitHub - acmesh-official/acme.sh: A pure Unix shell script implementing ACME client protocol

github.com

 

https://github.com/acmesh-official/acme.sh/wiki/Synology-NAS-Guide

 

Synology NAS Guide

A pure Unix shell script implementing ACME client protocol - acmesh-official/acme.sh

github.com

 

https://siane.tistory.com/267

 

[Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #2

2021.10.01 - [Synology] 시놀로지에서 클라우드플레어 DDNS 설정하고 와일드카드 인증서 받기 #1 이 게시글의 연장입니다. 사용 환경은 DS1821+, DSM 7.0.1 입니다. 6.2 호환성에 대해서는 확인되지 않았습니

siane.tistory.com

 

 

  1. DSM 인증서 발급을 위한 사용자를 추가하고 시작하자. administrator 그룹에 포함 필요.
    (아니면 관리자 권한 있는 기존 사용자 사용해도 된다)
  2. DSM 에서 ssh 포트를 사용 가능하도록 하고 putty나 기타 등등 이용하여 ssh 접속해준다.
  3. 이제 ssh 에서 아래 명령어를 순서대로 입력한다. 중간에 sudo 명령어로 인해 암호를 다시 물어봄.
wget -O /tmp/acme.sh.zip https://github.com/acmesh-official/acme.sh/archive/master.zip


#acme 설치
sudo 7z x -o/usr/local/share /tmp/acme.sh.zip
sudo mv /usr/local/share/acme.sh-master/ /usr/local/share/acme.sh
sudo chown -R certadmin /usr/local/share/acme.sh/
cd /usr/local/share/acme.sh


#acme 업데이트
./acme.sh --force --upgrade --nocron --home /usr/local/share/acme.sh

# 이메일 계정 추가
./acme.sh --install --nocron --home /usr/local/share/acme.sh --accountemail "email@gmailcom"

#acme 기본 서버 letsencrypt 로 변경 
./acme.sh --set-default-ca --server letsencrypt

# 개인 도메인, 토큰 입력
export CERT_DNS='dns_duckdns'
export DuckDNS_Token='xxx-xxx'
export $CERT_Domain='your_domain'

#인증서 받아오기
./acme.sh --server letsencrypt --issue --home . -d '$CERT_Domain' --dns '$CERT_DNS'

#시놀로지 user id 와 암호를 입력해준다.
#만약 DSM 포트를 바꾸었으면 바꾼 포트도 넣어준다.
# certificate 항목 내용과 동일한 인증서를 갱신해준다.
export SYNO_Username='username'
export SYNO_Password='password'
export SYNO_Certificate='설명'
export SYNO_Port='DSM_http_port'
export SYNO_Create=1

# DSM 에 기본 인증서로 등록해준다. 
./acme.sh --deploy --home . -d ksdrive.duckdns.org --deploy-hook synology_dsm

 

 

인증서 갱신은 아래와 같은 명령어를 쓰면 된다.

제어판 -> 작업 스케쥴러 에서 생성해서 추가하면된다. 대충 매주 한번씩 체크하도록 하면 될듯 하다.

/usr/local/share/acme.sh/acme.sh --cron --home /usr/local/share/acme.sh/
반응형
반응형

 

Proxmox 7.0 CT 컨테이너에서 Intel CPU 내장 GPU 가속을 이용하여 plex hw 트랜스코딩 사용을 해보았다.

 

테스트 기기는 j4005 CPU 사용으로 4k 10bit 까지 디코딩이 된다고는 써있는데 잘 안되더란...

 

 

일단 host 에서 정상적으로 그래픽카드가 인식이 되어야 한다.

vainfo 명령어로 봤을 때 아래처럼 나왔다.

root@nuc:~# vainfo
error: can't connect to X server!
libva info: VA-API version 1.10.0
libva info: Trying to open /usr/lib/x86_64-linux-gnu/dri/iHD_drv_video.so
libva info: Found init function __vaDriverInit_1_10
libva info: va_openDriver() returns 0
vainfo: VA-API version: 1.10 (libva 2.10.0)
vainfo: Driver version: Intel iHD driver for Intel(R) Gen Graphics - 21.1.1 ()
vainfo: Supported profile and entrypoints
      VAProfileMPEG2Simple            : VAEntrypointVLD
      VAProfileMPEG2Main              : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointVLD
      VAProfileH264Main               : VAEntrypointEncSliceLP
      VAProfileH264High               : VAEntrypointVLD
      VAProfileH264High               : VAEntrypointEncSliceLP
      VAProfileJPEGBaseline           : VAEntrypointVLD
      VAProfileJPEGBaseline           : VAEntrypointEncPicture
      VAProfileH264ConstrainedBaseline: VAEntrypointVLD
      VAProfileH264ConstrainedBaseline: VAEntrypointEncSliceLP
      VAProfileVP8Version0_3          : VAEntrypointVLD
      VAProfileHEVCMain               : VAEntrypointVLD
      VAProfileHEVCMain10             : VAEntrypointVLD
      VAProfileVP9Profile0            : VAEntrypointVLD
      VAProfileVP9Profile2            : VAEntrypointVLD

아래 내용도 확인한다.

root@nuc:~# ls -l /dev/dri
total 0
drwxr-xr-x 2 root root         80 Aug 16 20:47 by-path
crw-rw---- 1 root video  226,   0 Aug 16 20:47 card0
crw-rw---- 1 root render 226, 128 Aug 16 20:47 renderD128

 

ubuntu 20.04 버전 CT templet 을 받아서 설치한다. priviliged 모드를 사용할 것. 

이제 설정 파일에 아래 내용을 추가해준다. (내 경우에는 CT번호가 101이다)

nano /etc/pve/lxc/101.conf 

lxc.cgroup2.devices.allow: c 226:0 rwm
lxc.cgroup2.devices.allow: c 226:128 rwm
lxc.cgroup2.devices.allow: c 29:0 rwm
lxc.mount.entry: /dev/dri dev/dri none bind,optional,create=dir
lxc.mount.entry: /dev/fb0 dev/fb0 none bind,optional,create=file
lxc.autodev: 1
lxc.hook.autodev: sh -c "mknod -m 0666 ${LXC_ROOTFS_MOUNT}/dev/fuse c 10 229"

위에 다섯줄은 intel gpu passthrough 을 위한 내용이고

마지막 두줄은 컨테이너 내에서 fuse 를 사용하기 위한 내용이다. (mount 용도)

 

중요한점은 proxmox 7.0 에서는 lxc.cgroup2 를 사용해야 한다는 내용이다..

하루종일 삽질했네..

 

 

참조 글

https://forum.proxmox.com/threads/pve-7-0-lxc-intel-quick-sync-passtrough-not-working-anymore.92025/

 

[SOLVED] - PVE 7.0 LXC Intel Quick Sync passtrough not working anymore

TLDR: lxc.cgroup.devices.allow MUST be changed to lxc.cgroup2.devices.allow https://forum.proxmox.com/threads/pve-7-0-lxc-intel-quick-sync-passtrough-not-working-anymore.92025/post-400916 Hi, with PVE 6.4, adding these lines to /etc/pve/lxc/.conf was enoug

forum.proxmox.com

 

https://forum.proxmox.com/threads/solved-nuc10-gpu-passthrough-pve-6-3.82023/

 

[SOLVED] - NUC10 GPU Passthrough (PVE 6.3)

Hi folks, I've one last niggle with my proxmox setup, and I'm hoping someone here can guide me to a solution. I have a cluster of 3 x NUC10 boxes, these are Frost Canyon CPUs with Intel UHD Graphics. I want to pass the Intel GPU down to one of my LXC conta

forum.proxmox.com

 

반응형
반응형

관공서에서 한글HWP를 많이 사용하기 때문에 가끔 해당 문서를 열어야 할 때가 있습니다.

그러나 정품 한글은 비싸고 뷰어도 매우 무겁습니다.

심지어 뷰어조차 프리웨어가 아니라서 회사에서 사용하면 불법입니다.

그렇지만 활용 가능한 다른 프로그램들이 있습니다.

 

급하게 한글 문서를 사용할때는 아래와 같은 방법들을 시도해 보세요.

이제 브라우저만 있으면 한글 파일을 보고 편집할 수 있는 세상이 열렸습니다.

 

 

 

크롬 브라우저에서 HWP 무료 편집 (MAC, 윈도우 가능)

크롬 브라우저에서 아래 사이트에 접속해서 무료로 시작하기 누른 후 가입하면 됩니다.

가입 후 웹용 아래아 한글 사용 가능합니다.

space.malangmalang.com/

 

한컴스페이스

어디서나 펼쳐지는
오피스 세상

space.malangmalang.com

 

 

클라우드 서비스에서 열어보기

구글 클라우드와 네이버 클라우드에서 해당 파일을 읽어볼 수 있습니다.

네이버 클라우드는 편집도 가능합니다.

해당 클라우드에 파일을 올려서 확인하면 됩니다.

 

cloud.naver.com/

 

네이버 클라우드

 

cloud.naver.com

drive.google.com/

 

Google 드라이브 - 모든 파일을 한 곳에서

하나의 계정으로 모든 Google 서비스를 Google 드라이브로 이동하려면 로그인하세요.

accounts.google.com

 

 

네이버 웨일 브라우저 사용

웨일 브라우저에서도 한글파일이 읽어집니다. 정확히는 네이버 클라우드에 잠시 업로드 해서 읽는 방법입니다.

https://funbug.co.kr/122

 

네이버 웨일 브라우저로 한글 hwp 파일 읽는법. 한글뷰어 무설치 한글 읽자.

네이버 웨일 브라우저로 한글 hwp 파일 읽는법. 한글뷰어 안깔아도 된다. 지난번 한컴오피스 2020 체험판 다운로드 관련 포스팅을 한 적 이 있는데요. 이번에 더 편한 기능이 있어 소개 시켜 드릴��

funbug.co.kr

 

 

이제 웹브라우저만 있으면 편하게 한글 파일을 확인 할 수 있습니다.

그런데 사실 무엇보다도 관공서에서 PDF 와 같은 파일을 같이 제공해주면 되는데 아직도 한글로만 배포한다는게 참 안타깝습니다. 

반응형
반응형

 하루종일 디스플레이를 보고 있는데 그중 대부분의 시간에는 글을 읽는다. 당연히 선명하고 잘 보이는 글자가 어떤 글자인지 고민하게 된다. e-ink, LCD, AMOLED 와 같은 디스플레이 장비별 차이점과 해상도(ppi) 에서 오는 차이점 밝기와 대비(Contrast Ratio) 에서 오는 차이점 등등 수많은 것들을 생각하게 된다. 사실은 LCD나 OLED도 sub pixel 하나의 개구율은 한자리 퍼센트를 차지할정도로 작기도 하다. 멀리서 보니까 그냥 대충 보이게 되는거다. 이런점을 생각하면 아날로그의 종이가 가장 좋은데 그건 너무 정적이고 순식간에 변하는 많은 정보를 보기 위해서는 디스플레이가 필수 불가결이 아닐까 싶다.

 

 화면에 가득 찬 글을 읽다 보면 눈이 피로해지고 그리고 가장 먼저 느끼는건 글씨가 흐리게 보이는거다. 강렬하게 선명했으면 좋겠는데 왜 그렇게 안될까? 예전에 저해상도 모니터를 쓸때인 dos 와 pc통신에서는 글자가 아주 선명했는데 말이다. 그건 예전에는 비트맵 폰트를 써서 해당 폰트 사이즈에 맞는 글자 모양을 미리 만들어 놨기 때문에 가능했다. 최근에는 폰트 사이즈 조절이 가능한 .ttf 나 .otf 폰트 파일을 많이 사용하는데 다시 말해서 사이즈 조절을 해도 예쁘게 보이도록 폰트 렌더링(rendering, 레스터화) 방법이 사용되야 한다.

 주변을 부드럽게 처리해주는 안티알라이싱(antialiasing, gray sclae)과 글이 가독성있게 보이도록 정보를 따로 넣어주는 힌팅(hinting) 이 사용된다. 추가로 윈도우에서는 LCD subpixel 단위로 rendering을 해주는 클리어 타입(clear type)이란 기술도 있다. 최근 윈도우는 클리어 타입에 상하방향 antialiasing을 추가한 direct write다이렉트 라이트를 쓰고 있다.

문자 표시 방법 - 출처 wikipedia

 

 가독성이 가장 좋은건 어떤 글자일까? 당연히 가장 좌측의 글이다. 안티얼라이싱이나 클리어타입을 사용하면 오히려 글씨가 더 흐릿하게 보인다. 다만 문제는 너무 작은 글자는 저해상도 모니터에서 표현조차 제대로 되지 않을거고 일부 곡선이나 삐침들은 표현이 안되버리기도 한다. 동시에 글씨가 너무 못생기게 생겼다. 그래서 일반적인 환경에서는 폰트가 작은 글을 표현하기 위해서는 힌팅이 잘 된 폰트를 사용해야 한다. 한글 기준으로 힌팅 정보가 제대로 들어간 폰트는 나눔 고딕, 나눔 고딕이 가장 유명하다. 이녀석들은 심지어 클리어타입 / 다이렉트 라이트 에도 최적화 되어 있다.

 

 이론적인건 둘째치고 그냥 윈도우와 맥 화면을 봤을 때 어디가 더 좋아 보이는가?

 최근 맥은 레티나 디스플레이(300ppi 이상)을 지향하면서 초 고해상도다. 이런 경우에는 힌팅이 들어간 grayscale 이면 충분하다. 오히려 클리어타입과 같이 불필요하게 R,G,B 서브픽셀을 활용하지 않아서 번져 보이지 않는다. 글자가 정말 미려하고 아름답게 보인다. 그럼 가독성은? 인터넷을 뒤져보면 맥과 같은 방식으로 렌더링 하면 가독성이 좋아진다고 맥타입 어플을 설치하고 사용하는 사람들이 많은데 사실은 잘 이해가 안된다. 작은 글자에서는 글자가 깨져서 보이는 것보다 나을테지만 큰 글자에서는 당연히 까만색 / 흰색으로 쨍 하게 구분하는게 잘 읽히는거 아닌가? 어쩌다 이런 미신이 퍼졌는지 이해가 안된다. 가독성에 민감한 전자책 eink device 에서도 안티얼라이싱이 먹으면 뿌옅게 보여서 디스플레이 대조(Contrast ration)를 조절해서 최대한 쨍하게 만들어서 쓰고 있는데 말이다. 물론 대부분 200~300ppi 고해상도다. 

 그럼 윈도우는 어떨까? 동일하게 레티나급 (300ppi) 이상이면 고해상도로 셋팅해서 쓰면 동일하게 잘 보일텐데 문제는 윈도우는 무조건 클리어타입이 기본 셋팅이다. 클리어타입을 끄고 그레이 스케일 렌더링을 켤 수도 있으나 이경우에 작은 사이즈의 폰트는 제대로 렌더링 되지 않는다. 시작화면에 앱 이름들이나 제목창의 이름들이 영판 못생기게 나온다. 내가 사용하는 크롬은 어떨까? 윈도우에서 클리어타입을 끄면 알아서 그레이 스케일 렌더링을 진행한다. 하지만 클리어타입을 켜면 무조건 클리어 타입 렌더링을 한다. 웹서핑에서는 충분히 큰 글자로 보기 때문에 그레이 스케일 렌더링을 하고 싶은데 아쉽다. 아래 글자중 어느게 더 보기 좋은가? 난 오른쪽인데..

 

좌: 클리어타입 렌더링, 우: 그레이 스케일 렌더링

 

 이게 또 신기한건 엣지는 grayscale 렌더링을 쓰고 있다. 알수 없는 윈도우의 세계다. 어쨋거나 다른 화면들이 처참해지는걸 포기할 수 없으니 클리어 타입 최적화를 해야한다.

 윈도우 시작에서 cleartype 텍스트 조정을 통해서 최적화를 해본다.

 그리고 아래 BetterClearTypeTuner 라는 프로그램도 사용해본다. 해당 프로그램은 claertype 적용 시 감마 레벨을 조절해서 선명도를 바꿀 수 있다. 지금 어플 버전에서는 영어만 확인 가능해서 조금 아쉽지만 그런대로 사용해본다.

https://github.com/bp2008/BetterClearTypeTuner/releases

 

 

 

자세한 힌팅에 대한 이야기는 아래 글이 보기 좋다. 

https://linegap.tistory.com/18

 

한글 최초의 힌팅 폰트, 맑은고딕을 말한다-5

힌팅의 종류 힌팅에는 기계적인 계산을 통한 오토힌팅 및 수작업을 통한 매뉴얼 힌팅의 2가지가 있습니다. 오토힌팅 폰트 제작 프로그램에서 미리 정해놓은 알고리즘 및 문자세트에 맞는 힌팅 �

linegap.tistory.com

 

몇일간의 삽질은 일단 여기까지...

아무래도 firefox 로 갈아타야 할까 싶다.

반응형
반응형

윈도우 10에는 시작 화면에서 필요한 항목을 검색하기 위한 검색창이 있습니다.

 

이 검색창에서 바로 웹사이트 검색을 진행 할 수도 있는데 기본적으로 bing 검색 사이트로 연결됩니다.

한국에서는 bing 이 쓰이지도 않아서 검색 결과가 정말 마음에 들지 않습니다. 그래서 우리는 방법을 찾습니다.

 

 

 

구글 크롬 브라우저

구글 크롬 브라우저를 사용하는 경우에 Chrometana pro를 설치하면 됩니다.

 

 

1. 기본 브라우저 설치

먼저 크롬 브라우저가 기본 브라우저로 설정되어야 합니다.

 

작업표시줄 검색창에서 "기본 앱" 을 검색해서 들어가주고

 

Chrome 을 선택해주면 됩니다

 

 

2. Chrometana pro 확장 프로그램 설치

크롬 웹스토어에서 크롬 확장 프로그램(chrome extention)을 찾을 수 있습니다.

https://chrome.google.com/webstore/detail/chrometana-pro-redirect-c/lllggmgeiphnciplalhefnbpddbadfdi?hl=ko

 

가볍게 설치하고 설치방법 창이 뜹니다.

여기서 EdgeDeflector 를 추가로 설치해야 하는데요. 검색창을 Edge가 아닌 다른 크롬 브라우저로 넘겨주는 프로그램입니다.

아래 링크에서도 받을 수 있습니다. (공식 github)

github.com/da2x/EdgeDeflector

 

받아서 설치한 후 시작에서 아무 단어나 검색을 해보면 아래와 같은 선택 창이 뜹니다. 이때 EdgeDeflector를 선택하고 항상 사용을 체크해두면 됩니다.

 

 

3. 시작 표시줄에서 크롬 - 구글로 검색 사용

이제 시작 표시줄에서 크롬 - 구글로 검색이 됩니다. 

 

Chrometana pro 설치 후 

 

Chrometana pro 설치 전 

 

4. 네이버로 검색하고 싶을 때

네이버로 검색을 하고 싶을 때 아래와 같이 설정하면 됩니다.

 

크롬 우측 상단에서 Chrometana pro 아이콘을 마우스 오른쪽으로 누른 후 옵션에 들어가서

Cortana and Bing to Google 항목에서 Google을 선택해서 Custom으로 바꾼 후

아래 입력창에 아래 내용을 입력하면 됩니다.

https://search.naver.com/search.naver?&query=

 

 

 

 

 

만약 Firefox를 사용하면

 

Firefox 의 경우 동일한 플러그인인 foxtana pro 가 있습니다.

설정 방법도 동일하니 사용해 보세요.

https://addons.mozilla.org/ko/firefox/addon/foxtana-pro-redirect-cortana/

 

이상입니다.

반응형

+ Recent posts