Unix/Arch Linux

키움증권 OpenAPI 리눅스에 설치 (wine으로)

ForceCore 2021. 5. 6. 15:53

2021-12-09 https://forcecore.tistory.com/1430

 

docker + wine + MFC 조합으로 키움증권 OpenAPI 리눅스 실행 성공

평상시에는 윈도우 없이 편안하게 클라우드에서 실행이 가능하다. ㄷㄷㄷㄷㄷ https://github.com/forcecore/KiwoomRestfulCpp/blob/master/docker/README.md GitHub - forcecore/KiwoomRestfulCpp Contribute to..

forcecore.tistory.com

드디어 도커로 길들였는데... 이 글보다는 그 쪽을 추천한다. 훨씬 더 안정적이다.

 

 

아치리눅스에서 wine 6.7 기준이다.
한국존 아마존 인스턴스에서, 결론적으로는 서버가 자꾸 죽어서 포기했다.
vscode를 원격접속하면 죽듯이 자꾸 죽는데 이는 RAM 크기와 무관해서 노답이다.
하지만 물리적 컴퓨터에다 리눅스 + 키움증권 OpenAPI 시도하는 사람들에게 힌트가 되면 좋겠다.

  • arch linux 설치함
  • 미러 한국으로 설정
  • 업데이트 및 필요 패키지 설치
    '''
    pacman -Syy && pacman -Syu
    byobu
    wine
    lxde group (LXDE 데스크탑이 가볍고 있을 것 다 있다)
    '''
  • Headless면 wine을 못쓰니까 그게 문제.
  • X11 forwarding은 되어야 한다.
  • xorg-xauth, xorg-xhost 설치필요

Nomachien GUI 원격접속 설치

AUR nomachine 설치.
git, base-devel 패키지 설치해야했음.
4000 port다. 하지만 nomachine에 SSH가 있... 는데 enterprise용이네 ㅋ

$ ssh -vN -L 4000:localhost:4000 user@targetmachine

이러면 되긴 함.
에... 왜이리 안 되나
nxplayer를 remote에서 실행하면 놀랍게도 서버 설정이 있다.
거기에 보면 또 4000을 listen하는 것을 따로 실행하게 되어있다. 그것도 manual하게.
한 번은 GUI를 켜서 automatic하게 실행하라고 말해줘야 한다.
그러면 된다...

systemctl enable nxserver
systemctl start nxserver

를 잘 해도 안 되면 위와 같이 해보라.

우여곡절 끝에 gui 띄웠다. 위 GUI 한번은 들어가야 하는 것 몰라서 몇시간 썼다.
이제 와인에 한글이 나와야 하니까 ttf-nanum도 깔고 ttf-dejavu도 깔자.
일단은 오늘은 여기까지.
GUI띄우기도 빡셌다... nomachine이 좀 변해서...

API 설치하기

키움증권 api OpenAPISetup.exe를 받고 설치. 글씨가 ㅁㅁㅁ으로 뜬다.
그거부터 해결:
ko_KR.utf8로켈이 필요한데 없다.
/etc/locale 에서 ko_KR.UTF-8 코멘트 해제하고

$ sudo locale-gen

env.sh 만들고

#!/bin/bash
export WINEARCH=win32
export WINEPREFIX=$HOME/usr/kiwoom/wine
export LANG=ko_KR.utf8
export LC_ALL=ko_KR.utf8
$ source env.sh

wine으로 게임 돌리기 때문에 환경이 여러 개 필요한 경우 아니면
이걸 자동으로 소스되도록 .bashrc 에 넣어도 된다.

$ winecfg 로 윈도우 10 설정.
$ regedit 실행으로 아래 설명처럼 폰트 설정도 한다.

https://forcecore.tistory.com/1320 대로 했다:

  1. AUR에서 ttf-nanum 설치
  2. 작업중인 shell에서
    $ export LANG=ko_KR.utf8
  3. $ regedit 으로 레지스트리 들어가서
    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\FontSubstitutes
    Gulim 문자열값을 만들어 NanumGothic 으로 값 입력
    이제 한글 안 깨진다. (설치화면의 제일 첫 화면은 ㅁㅁㅁ 으로 나오기는 함...)

파이썬 설치

2021-05-06 현재, wine에서 설치가 되는 파이썬이 없다. embedded python을 받아 손으로 설치해야한다. 이거는 언젠가 wine이 버전업되면 해결이 되겠지...

공식 파이썬의 경우

2021-05-06현재, 윈도우 32비트로, 파이썬 3.9로 했다.
공식 파이썬은 설치가 되지 않는다. 왠지 몰라도.
https://www.python.org/downloads/

미니콘다

미니콘다... Miniconda3-py39_4.9.2-Windows-x86.exe는
설치를 끝내보면 아무것도 없다. python.exe 없음.

Miniconda3-latest-Windows-x86.exe
미니콘다 파이썬 3.8로 해봄. 역시 안 된다.

위 두개의 실패는 설치로그를 보니 권한 문제다. (WTF)
https://askubuntu.com/questions/1260783/wine-in-ubuntu-cannot-create-temporary-directory-error
내키지는 않지만 sudo 로 wine을 실행해서 해결했다고 한다 (...)
/root 안에 wine이 생성되고 난리가 나기 때문에 하지 않을 것이다.

Embedded Python

https://www.python.org/downloads/release/python-395/
python-3.9.5-embed-win32.zip

이걸로 받으면 설치가 필요 없다...

cd ~/usr/kiwoom/wine/drive_c
mkdir python-3.9.5
cd python-3.9.5
unzip ~/python-3.9.5-embed-win32.zip

~/usr/kiwoom/wine/drive_c/python-3.9.5/python.exe 가 생긴다.
작동한다.
pip가 있어야 하는데 없다. 어떻게 해야 할까?

https://pip.pypa.io/en/stable/installing/
Installing with get-pip.py
이걸 따라해야 한다.

python-3.9.5 에서...

$ wine python.exe get-pip.py

0144:err:winediag:gnutls_initialize failed to load libgnutls, no support for encryption
0144:err:winediag:gnutls_initialize failed to load libgnutls, no support for pfx import/export
0144:fixme:file:server_get_file_info Unsupported info class e
0144:fixme:file:server_get_file_info Unsupported info class e
Collecting pip
  Downloading pip-21.1.1-py3-none-any.whl (1.5 MB)
     |████████████████████████████████| 1.5 MB 1.7 MB/s
Collecting setuptools
  Downloading setuptools-56.1.0-py3-none-any.whl (785 kB)
     |████████████████████████████████| 785 kB 6.0 MB/s
Collecting wheel
  Downloading wheel-0.36.2-py2.py3-none-any.whl (35 kB)
Installing collected packages: wheel, setuptools, pip
  WARNING: The script wheel.exe is installed in 'C:\python-3.9.5\Scripts' which is n
ot on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning,
 use --no-warn-script-location.
  WARNING: The scripts pip.exe, pip3.9.exe and pip3.exe are installed in 'C:\python-
3.9.5\Scripts' which is not on PATH.
  Consider adding this directory to PATH or, if you prefer to suppress this warning,
 use --no-warn-script-location.

잘 되네.
윈도우에서처럼 컨트롤Z로 파이썬 콘솔 종료를 하면 된다.

python-3.9.5]$ wine python.exe -m pip
C:\python-3.9.5\python.exe: No module named pip

잘 안 되네;;

https://stackoverflow.com/questions/42666121/pip-with-embedded-python

In the file python39._pth or similar, uncomment the import command. Result should look similar to this:

python39.zip
.
import site

python39._pth 에 import site가 코멘트 아웃 되어있는데 해제해주면 pip모듈이 인식이 된다!

Restful 서버 실행

이제 할 일. restful 서버를 실행해야함.

drive_c/ 에서,
git clone https://github.com/forcecore/kiwoom-restful.git
cd kiwoom-restful

아 귀찮다
alias wpy='wine C:/python-3.9.5/python.exe' 를 걸어두고,

wpy -m pip install hydra-core
wpy -m pip install pandas
wpy -m pip install tornado
wpy -m pip install PyQt5
wpy kiwoom_restful_server.py

뭔가 실행이 되는 척 하는데 실제론 아무것도 안 된다... 에러가 나야 하는데 왜 안나지? kiwoom_api_handler가 없어서 에러가 나야 할텐데...

kiwoom_api_handler 를 설치해야 하는데 공식 버전은 마음에 안 든다.
Pandas를 저버전을 설치하려고 들어서.
그냥 설치할 때에 그러니, 소스에서 설치하자.
언젠간 koapy 로 이사해야 할지도 모르겠지만... 오늘은...

git clone https://github.com/DonghyungKo/kiwoom_api_handler.git

setup.py안에 install_requires=["pandas", "PyQt5"],
이것도 버전 지정을 해지한다. 위 처럼.

cd kiwoom_api_handler
wpy -m pip install .

이게, Restful 서버 실행을 시도하면 서버가 자꾸 죽는다.
vscode가 아마존 서버를 간간이 죽여버리듯이 (RAM 크기에 관계 없이)
이것도 그런다. 물리적 컴퓨터에서 하는 것 아니면 과감하게 포기!

사실 죽는 것만 아니면 물리컴퓨터+Linux 조합은 여기까지 왔으면 거의 완성됐다고 본다.

물리적 컴퓨터에선 전에 성공했고 오늘 실험해보니 매수 매도도 잘 된다. 스샷으로 인증하겠다.

 

좌측이 restful_api_server.py, 우측이 restful_api_client.py 이다.

 

하지만 amazon에서 돌리지 못한다고 하니 내게는 흥미가 떨어지는 주제이다.
나는 그냥 중고로 싸구려 노트북 줏어서 진짜 윈도우 환경에서 restful_api_server.py를 돌리기 때문이다.
그리고 reverse ssh tunnel을 통해 아마존 리눅스 서버와 통신하도록 하고 있다. (그래서 restful 서버를 중간 매개로 돌리는 것이다)
그래도 누군가에게는 힌트가 되면 좋겠다.

 

다음 아이템으로는, 파이썬을 제거하고 C++로 restful API를 작성하면 환경 setup이 깔끔해질거 같단 생각이 든다.