https://forcecore.tistory.com/1430
2021-12-09 도커까지 써서 안정화 했다. 이 글보다는 위 글로 가길 추천.
결론적으로 말해서 wine이 버전업되면서 성공하게 되었다. (주식도 그렇고) 존버는 승리한다!
github.com/forcecore/kiwoom-restful : 사용한 서버/클라이언트 구현체
forcecore.tistory.com/1420 : setup 과정을 한번 정리한 것
$ wine --version
wine-6.3
multilib/wine 6.4-1 [installed: 6.3-1]
A compatibility layer for running Windows programs
----------------------------------
윈도우 azure 환경에서 윈도우 환경으로 API 서버를 굴리자니 좀 버벅거림이 심하고 불만족스럽다.
그래서 이 삽질에 뛰어들었다. Amazon EC2에서 OpenAPI만 어떻게든 굴리면 될 것 아닌가? 이런 접근법임.
우선 한글 깨지는 것을 바로잡아야 한다. 뭐가 보야야지 디버깅도 하지.
https://forcecore.tistory.com/1320
이 글을 참조한다.
mkdir ~/usr/kiwoom
cd ~/usr/kiwoom
env.sh 만듦.
#!/bin/bash
export WINEARCH=win32
export WINEPREFIX=$HOME/usr/kiwoom/wine
export LANG=ko_KR.utf8
export LC_ALL=ko_KR.utf8
이 파일을 소스 하고나서 와인을 건들도록 하자.
Miniconda3-latest-Windows-x86.exe
OpenAPISetup.exe
준비.
API 설치하고 Miniconda 설치함. (c:\OpenAPI 와 c:\Miniconda 에 설치됨)
https://pypi.org/project/kiwoom-api-handler/
이것 사용 예정이다. 이제 파이썬 환경을 갖춰보자. (와인 내에 ㅠㅠ)
$ wine cmd
그러면 윈도우 콘솔처럼 되는데...
C:\Miniconda3
여기에서...
> condabin\conda.bat
을 실행한다. 이렇게 실행해야 한다.
set CONDA_FORCE_32BIT=1
conda create -n py36_32 python=3.6 anaconda
# 설치 후 conda activate py36_32
대략 이런 과정인데, 안 될 것이다. libssl, libcrypto 어쩌구 하면서 초장부터 안 될텐데, libcrypto-1_1, libssl-1_1 DLL 파일 (윈도우용)을 구해다가, winecfg 켜서, 라이브러리 탭에다 native로 지정을 한다. 그리고 와인의 windows\system32에다가 dll파일들을 넣어주면 된다.
그러면 conda create가 될 것이다.
drive_c/Miniconda3/envs/py36_32
이런 데 생겼구만. 하지만 conda activate 명령어가 전혀 먹혀들지 않는다. 윈도우의 shell interpreter와 간극이 있어서...
C:\Miniconda3\envs\py36_32>lib\venv\scripts\nt\activate.bat
이거는 된다. kiwoom_api_handler 를 git clone 한 뒤...
__VENV_PROMPT__C:\Miniconda3\envs\py36_32>scripts\pip install -r c:\kiwoom_api_handler\requirements.txt
기괴하군...
c:\Miniconda3\envs\py36_32\python xxx.py
이렇게 해야 파이썬 실행도 되고... pandas, numpy 로딩이 실패해서 그냥 kiwoom_api_handler에서 import pandas as pd 행을 다 삭제했다. (연구 개발목적으로 넣었지만, 실제로는 안 쓰임)
02c0:err:module:open_builtin_file failed to load .so lib "/usr/lib32/wine/wldap32.dll.so"
이건 sudo pacman -S lib32-libldap 로 해결.
02cc:err:winediag:gnutls_initialize failed to load libgnutls, no support for encryption
sudo pacman -S lib32-gnutls
inicore_v2.3.42, inisafenet_v7.2 는 DLL을 와인의 windows\system32에 복사, winecfg로 네이티브 지정 함.
여기서 더이상 진행이 없다. 에러도 안 나고, 그렇다고 로그인 창이 뜨지도 않는다.... 인줄 알았는데
한참을 기다리니 뭔가 변화가 생긴다.
00c4:err:module:import_dll Library MFC42.DLL (which is needed by L"C:\\OpenAPI\\ASTxManager.dll") not found
이런 말이 나온다. MFC42.DLL 이 없어서.
winetricks mfc42
로 설치.
되는 것 같다가 이번에는 버전처리가 실패한다.
이렇게 되는 것이다. ㅋㅋ;;;;
00a0:fixme:mountmgr:harddisk_ioctl Unsupported ioctl 74080 (device=7 access=1 func=20 method=0)
이런 것과 관련 있을 것 같은데, 파일을 업데이트 하면서 교체하는 부분의 코드가 와인에 없으니 어떻게 할 방법이 없다...;; 여기까지 왔는데 아깝다.
한참 막혀있다가 이게 윈도우에서도 일어나는 일이라는 것을 알고...
ps -eaf | grep
USER 4306 1 2 17:04 pts/1 00:00:01 c:\Miniconda3\envs\py36_32\python kiwoom_restful_server.py
이런식으로 파이썬이 도는 것이 있는데 kill 4306 처럼 킬 한다음 opstarter 의 확인 버튼을 누르니 진행되었다. (윈도우에서도 유사하게 해야 한다)
이번에는 공인인증서가 없다. ㄷㄷㄷ;;
PC에서 복사하면 되지... 인증서 갱신은 1년에 한번정도만 하면 되니 굳이 와인으로 스마트폰->wine쪽으로 복사 작업까지 할 필요는 없다.
c:\users\USER\AppData\LocalLow\NPKI 여기 공인인증서가 있는데 PC쪽에서 복사를 하여 wine/drive_c 에서도 똑같이 배치를 해주면 된다.
설레이는 마음으로 로그인 완료 화면까지 보았는데...
crypt32/context.c:111: Context_Release: assertion `ref >= 0'
이런 에러가 나오면서 안 된다...
crypt32.dll 받고 native로 설정. 어... 쟤가 범인이 아니었다. 그럼 뭐지... ㄷㄷㄷ
OK... stack trace를 보고 bcrypt.dll 도 native로 해봤다.
Traceback (most recent call last):
File "kiwoom_restful_server.py", line 204, in <module>
main()
File "kiwoom_restful_server.py", line 182, in main
tornado_app.listen(port)
File "c:\Miniconda3\envs\py36_32\lib\site-packages\tornado\web.py", line 2116, in listen
server.listen(port, address)
File "c:\Miniconda3\envs\py36_32\lib\site-packages\tornado\tcpserver.py", line 151, in listen
sockets = bind_sockets(port, address=address)
File "c:\Miniconda3\envs\py36_32\lib\site-packages\tornado\netutil.py", line 174, in bind_sockets
sock.bind(sockaddr)
OSError: [WinError 10048] Windows Error 0x2740
이런 에러가 나온다. 혹시... 이거... 그냥 tornado 때문에 나는 에러 아닐까 ㄷㄷㄷ 키움 API는 정상이고.
---------------
위 까지 해둔다음 와인 버전업을 기다렸다.
2020-12-15
Failed to create dump file 'C:\OpenAPI\OPStarter.dmp' (error32)
이렇게 된다. wine error가 나는 것도 아니고 그냥 아무것도 안 된다;;;
native dll들 다 없애고 나니 inicore_v2.3.42.dll
, inisafenet_v7.2.dll 이 없어서 나는 에러였다. 이것듯만 네이티브로 전환...
소용 없네.
--------------
2021-03-28존버 끝에 와인이 버전업 되면서 위의 문제도 사라졌다 (ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ)
이런 에러로 바뀌었다.
하지만? 트레이에는 여전히 키움증권 뭔가 도는 것처럼 보인다.
이렇게.
위 스샷처럼 보안프로그램 어쩌구 하는 에러는 한 번 나오는데, 이후부터는 잘 된다 ㅎㄷㄷㄷ 트레이딩 잘 되라고 계좌 비밀번호 저장도 했다.
yeeeeessss