키움증권 OpenAPI 리눅스에 설치 (wine으로)
2021-12-09 https://forcecore.tistory.com/1430
드디어 도커로 길들였는데... 이 글보다는 그 쪽을 추천한다. 훨씬 더 안정적이다.
아치리눅스에서 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 대로 했다:
- AUR에서 ttf-nanum 설치
- 작업중인 shell에서
$ export LANG=ko_KR.utf8 - $ 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이 깔끔해질거 같단 생각이 든다.