Bullshitting Blog

개소리하는 블로그

[ linux ]

리눅스에서 증권사 ActiveX 사용하기

개발팀 기술검토 의뢰(?)로 들어왔다. 회사 서버에서 주문을 집행하기 위해 증권사 Open API 이용이 가능하냐는 것. 근데 문제는 그 증권사 API는 ActiveX 기반이다. 변태같은 레거시다. 그리고 서버는 당연 리눅스.

결론부터 말하면 기술적으로는 된다.

방법은 간단히 말하면 wine이다. 윈도우 프로그램을 리눅스에서 돌릴 수 있도록 해주는 프로그램이다. 그래서 ActiveX를 이용하는 것 자체는 빠르게 해결되었다.

그런데 다음 문제가 남아 있었다. 인코딩이 EUC-KR이라는 것이다. 담당자가 사고치기 싫다고 레거시는 하나도 안 건드린 듯 하다.

UTF-8에 비해 용량이 반밖에 안되는 EUC-KR을 이용하기 때문인 것으로 보이지만, 여튼 그걸 전송속도 빠르다고 자랑….하고 있었다. 역시 꿈보다 해몽이다. 담당자는

  1. 사고도 안치고
  2. 성능 우위도 홍보하고
  3. 꿀도 빨았을 것이다
    역시 사람은 머리를 써야 한다. 여기서 머리라는건 잔머리도 포함인 듯 하다.

뭐 그래도 원래 금융쪽은 레거시 파티다. 그래서 EUC-KR일 것이라는걸 빠르게 눈치채고 같이 해결. 환경변수 세팅으로 해결했다.

LANG=ko_KR.EUC-KR

각설하고, 여기서 한가지 주의할 것이 있다. 이걸 .bashrc같은데 박아넣는 불상사는없어야 한다. 이 환경변수는 wine을 이용할 때 외에는 이용되지 않아야 한다. 안그럼 그럼 평소에 한글이 깨진다. 그래서 난 wine을 도커로 돌림. 비슷한 이유로 리서치팀 프로그램을 돌릴 때 필요한 conda도 로컬에 직접 설치하지 않고, 도커 컨테이너에 home 디렉터리 마운트 해서 필요할 때만 씀.

다음 문제는 공인인증서이다. 한국투자증권 API의 경우 Token을 이용할 수 있도록 되어 있어서 편했는데, 의뢰받은 API는 그게 아니었다. 공인인증서를 매번 사용해야 함. NPKI 디렉터리를 위치해야 하는 위치에 아무리 둬봐도 인식이 안됨. 힌트는 인코딩에 있다.

LC_ALL=ko_KR.UTF-8

이 부분을 처음엔 따로 세팅하지 않았었다. 그래서 UTF-8 인코딩인 공인인증서는 인식이 안된 것. 저렇게 넣어 주니 잘 인식되었다.

해결 완료.

Arch Linux를 사용할 때 각오해야 하는 것

오늘 아침에, 리눅스를 업데이트했다. 그리고 재부팅 하는 순간, 모니터 하나가 죽어버림.

리눅스 상에서 인식은 되고, 작동은 다 되는데, 한가지, 화면만 안나온다. 커널 업그레이드 과정에서 하드웨어쪽이 깨졌음을 알 수 있다. 참고로 업그레이드된 버전은 6.6.37-1-lts 이다.

그래픽카드 드라이버 재설치

  • 그래도 안됩니다.

롤백

  • 싫은뒈?

위의 이유로, 그냥 모니터 두개만 쓰는 중이다. 해결될 때까지 매일 업글 돌려야지.

아치리눅스를 이용한다면, 이건 각오해야 한다. 만약 모니터 세 개가 다 죽었다면, usb로 부팅해서 ssd 드라이브에 있는 커널을 롤백해줘야 하는데, 그게 아닌게 어디인가.

인생이 지루할 때 쯤이면 한번씩 안 지루하게 해줘서 좋다. (!@$#!$)

왜 계속 쓰는지 궁금할 것이다. 예전엔 재미있어서라고 답했을텐데, 지금은 그냥 남이 이해할 수 없는 재미의 존재에 대해 길게 설명하기 귀찮아서, 스스로를 변태로 간주하고 대충 넘기는 중이다.

커널 패닉으로 인한 부팅 불가 현상 해결하기

어제, 정말 기괴한 일을 했다. 리서치용 서버에 서버행이 떠서 재부팅을 했는데 커널 패닉이 반복되며 부팅이 안되는 현상이 발생함. 그리고 이걸 고치는 과정에서 세상 강제적인 방법을 다 동원했다.

시스템

  • 우분투 20.04
  • 다른건 알 필요 없음. 다만 이 문제를 잘 야기하는 하드웨어에는 리얼텍 NIC가 있다고 함.

문제 원인

  • 하드웨어를 인식하는 과정에서 잘못된 메모리 참조
  • 아치리눅스 부팅USB로 부팅해서 살펴보니, /dev에 ssd, hdd, 기타 디바이스 모두 없었음

해결방법

  • 하드웨어는 누가 잡는다? -> 커널 -> 커널을 업데이트
  • 커널을 어떻게 업데이트? -> apt upgrade하면 편한데 -> 부팅USB로 부팅한 후 파티션을 /etc/fstab과 맞춰서 마운트 -> chroot -> apt update && apt upgrade
  • 네임서버 설정 안됨 -> apt source url을 /etc/hosts에 강제로 박아넣고 진행

결과

  • 깔끔-
  • 이게 된다고???

후기

  • 다덤벼

Linux에 카카오톡 설치

리눅스의 최대 단점은 바로 카카오톡이 아닐까 싶다. 그동안 카카오톡 설치가 번거로워서 PC로는 이용 안하고 있었는데, 최근 업무 중 윈도우 어플리케이션을 돌릴 일이 있어서 wine을 좀 파보게 되면서, 다시 자신감이 붙음. 다 덤벼라.

그래서 다시 카카오톡 설치에 도전했다. 아주 가장 간단하고 기본에 가깝게. 방법은 아래와 같다.

wine, wine-mono, wine-gecko 설치

배포판은 신경쓰지 말자. wine은 말그대로 wine, wine-mono는 wine의 .NET 프레임워크 이용을 위한 패키지, wine-gecko는 Internet Explorer를 위한 패키지이다. IE에 대한 본능적 거부감에 일단 wine-mono까지만 설치하고 카톡 실행을 해봤더니, 결국 안돼서 이것도 마저 설치했음.

wine 환경설정

winecfg

winecfg

위의 커맨드를 실행하면 뭔 창이 하나 뜰 것이다. 그냥 OK 하면 wine 환경이 구성됨. 구성되는 환경은 아래와 같다.

$HOME/.wine

여기를 들어가보면 매우 익숙한 구조가 나옴. 맞다. 말그대로 윈도우의 디렉터리구조가 보인다.

한글 폰트 추가

카톡을 설치할 때, 설치 프로그램에서 한글이 깨지지 않게 나오게 하고싶다면, 한글 폰트를 설치하자.

방법은 간단하다. $HOME/.wine/system.reg에 들어가서 MS Shell Dlg 항목을 한글 지원되는 폰트 이름으로 바꾸면 된다. 폰트 리스트는 해당 라인 위로 올라가면서 쭉 보면 있을 것이다(리눅스에서 한글을 사용하는 이상 아마 있을 것).

한글 입력 활성화

wine reg add "HKEY_CURRENT_USER\\Software\\Wine\\X11 Driver" /v InputStyle /t REG_SZ /d root /f

아, 참고로 kime 입력기를 이용하는 경우, kime-xim이란걸 이용해야 하는데 후술하겠다.

또, 카카오톡 설치할 때 한글 버전으로 안하고 영어 버전으로 했는데, 기본 폰트가 Arial로 되어 있어서, 한글 입력 시 다 깨졌다. 혹시 한글 입력이 안되는 문제가 있다면 카톡 설치 후 설정에서 폰트 변경하자.

카카오톡 설치

지금부터 wine이 어떻게 도는지 간결하게 이해할 필요가 있다. wine <exe file> 를 실행하면, 아까 구성된 $HOME/.wine 디렉터리 내에서 윈도우 환경처럼 exe 파일을 실행하게 된다. 아 물론, 정확히 코드 까보거나 공식문서 정독한건 아니지만, 실행하는덴 이 정도 이해만 하면 된다. 그럼, 이제 어떻게 해야 하는지 슬슬 눈치챘을 것이다.

카카오톡 설치파일 다운로드 및 실행

카카오톡 PC버전 설치파일을 다운로드하고 해당 exe 파일을 wine으로 실행한다. (wine KakaoTalk_Setup.exe)

카카오톡 실행파일 실행

설치 중에 특별히 설치 디렉터리를 변경한게 아니라면 아마 $HOME/.wine/drive_c/Program\\ Files\\ (x86)/Kakao/KakaoTalk/ 디렉터리에 KakaoTalk.exe 실행파일이 들어가 있을 것이다. 이걸 그냥 wine으로 설치파일 실행한 것과 동일한 방법으로 실행하면 된다.

난 매번 찾기 귀찮아서 스크립트로 빼놨다.

#!/bin/bash
wine "$HOME/.wine/drive_c/Program Files (x86)/Kakao/KakaoTalk/KakaoTalk.exe"

kime 사용자 한글입력 문제 해결

카카오톡 실행 전에 kime-xim을 실행해 놓아야 한다. 그렇지 않으면 한글 입력이 안됨.

슬슬 귀찮아질 것이다. 귀찮으면 조금만 더 힘내서 서비스로 등록하는걸 추천한다.

PC의 OS로써 Arch Linux를 사용하는 이유

난 아치리눅스(Arch Linux)를 메인 OS로 이용하고 있다. PC는 물론, 노트북, 회사 업무용 PC까지 모두 아치리눅스이다.

아치리눅스를 쓰게 된 계기는, 회사의 CTO가 아치리눅스를 사용하셨는데, 꽤 재미있어 보였기 때문이었다. 뭔가 저걸 하면, 그냥 자연스럽게 따라오는 것들이 있을 것 같았다.

백문이 불여일견. 바로 트라이했다.

관문들

관문 1. OS 설치

당시까지 써봤던 설치 USB는 설치를 위한 GUI가 뜨는게 대부분이었다. 최소한 TUI더라도 설치를 진행하는게 바로 진행되는, 설치만을 위한 절차가 진행되었다.

그런데 아치리눅스 설치 USB를 만들어서 USB로 부팅했더니, 그저 검은 리눅스 커맨드라인이 하나 나왔다. 띠용? 하고 찾아보니, 설치를 위한 리눅스가 실행된 것이다. 아치리눅스를 PC에 설치하기 위해서는 커맨드라인을 이용하여 파티셔닝과 마운트를 진행하고, 이걸 부트로더에 등록하는 절차를 거치고, 마운트한 디렉터리 중, / 디렉터리가 되는 곳에서 아치리눅스 환경을 설치해야 했다. 이 때 필요한 것을 설치하지 않으면 리눅스 부팅에 성공한다고 해도 반쪽짜리가 된다. 특히 노트북에 설치하는데, 와이파이를 이용해야 하는 경우... 그냥 집 가서 랜선 이용하는걸 추천한다. 정신건강에 좋지 않다.

관문 1로 얻은 것: 만능 해킹USB

아니 이거 지금보니, USB로 부팅하면, 루트잖아? 어딜 가든 이 USB 하나 있으면 이 USB로 부팅해서 자료를 뜯어낼 수 있다. 아 물론 암호화되었다면 할 수 없겠지만. 근데 암호화 파티션 구성하는게 꽤 귀찮아서 거의 안할 것이다. 물리적 보안이 중요한 이유다.

뭐 그렇더라도 내가 이걸 진짜 해킹에 이용하진 않는다. 굳이 밥벌어먹는데 문제 없는데 할 이유가 없다. 아 밥 벌어먹는데 문제 있어도 굳이 앞으로 더 힘들어지게 그럴 이유가 없다. 가끔 퇴사자가 남겨둔 PC에 로그인이 불가한데 OS를 재설치해야 하는 경우 자료 백업을 위해 이용한다.

관문 2. GUI 설치

사용자친화적인 리눅스들은 처음에 gui 설치 여부를 선택하면 알아서 설치해 준다. 그래서 왠만하면 건들지 않고, 최적화된 윈도우 매니저를 이용하게 된다. 아치리눅스는? 그런거 없다. 그래서 CTO가 자신이 아치리눅스에 bspwm 올리고 뭐시기 뭐시기로 개발한다 했던 것을 떠올려서 bspwm을 검색해서 겨우 하나 찾아서 따라했음. 그리고 쓸만한 환경을 구성하기 위해서는 bspwm 뿐만 아니라 설치할 것들이 더 많았다.

관문 2로 얻은 것: OS 설치를 다시 할 때 편하게 하기 위한 꾀를 부리기 시작함

사실 OS 설치 자체는 그리 어렵지 않았다. 유선 환경이면 몇 번 해보면 익숙해지고, 까먹으면 살짝 검색해 보면 됨. 문제는 GUI 구성은 자잘자잘한게 많아서 다 기억하기 어려움.
그래서 GUI 구성을 위해 이용했던 ~/.config 디렉터리를 백업해 두게 되었다. 사실 설치 스크립트도 만들까 하다가 안했는데, 정말 한 번만 더 재설치할 일 있으면 정말 만들 것이다. 그리고, 외장 SSD를 구매해서 거기에 아치리눅스와 GUI를 설치했다. 그리고 intel, amd cpu 모두 호환되도록 설치해서 intel cpu인 PC와 amd cpu인 노트북 모두 이 SSD로 부팅해서 동일한 환경을 이용하고 있다. 짐이 좀 늘고, 부팅하기 위해 외장SSD를 꽂는게 조금 불편하긴 한데, 아무데서나 동일한 환경으로 부팅할 수 있으니 좋다. 아 그리고 이것도, 따지고 보면 만능 해킹 외장 SSD다. 그리고 가끔 수틀리면, 주인의 동의를 구하고 이 SSD를 이용해서 다른 사람의 PC를 빌릴 수 있다. 그리고 내 환경 그대로 이용할 수 있음.

관문 3. 각종 프로그램 설치

아치리눅스의 패키지 매니저는 pacman이다. 그리고 AUR이라는걸 이용할 수 있는데, 난 AUR Helper로 yay를 이용한다. 그런데 아치리눅스가 마이너하다 보니, pacman은 물론 yay에서도 조회되지 않는 프로그램이 가끔 있다. 그럼 공식 홈에서 받게 될텐데, 데비안 계열이나 페도라 계열은 쉽게 설치할 수 있는 패키지 파일이 제공되지만, 다른 리눅스는 그런거 없다. tar.xz를 대부분 이용한다. 받아서 makepkg 등의 절차를 거쳐야 한다.

관문 3으로 얻은 것

tar.xz만 있으면 어디든 설치 가능한거네? 를 깨우침

아치리눅스를 사용한다면?

Vim

vim 써줘야 한다. 이게 완전체라고 본다.

vim으로 개발하면 좋은 점?

일단, vim 세팅을 제대로 하면, 꽤 편하다. 게다가 ssh 접속만 하면 굳이 다른 프로그램 필요 없이 코딩이 가능하다. 추가적으로, 마우스 사용 빈도가 줄어든다. 과거 손목에 문제가 생긴 경험이 있는데 그 때 문제의 원인은 과도한 마우스 사용이었다. 당시 고객사의 클라우드에 제품을 설치하기 위해, 회사의 클라우드에서 이것저것 테스트해보고 실습해보면서 고객사에서 발생한 문제 재현해서 해결하기 위해 밤낮없이 일했던 때였다. 그 때, 하다하다 안돼서 결국 버티컬마우스를 구매했다. 지금은 12시간 코딩만 해도 손목에 아무 문제가 없다.

아 그리고, tui에 익숙해지게 된다. 보통 리눅스를 사용하더라도 vs-code같은걸 깔아두게 되면 터미널은 code .을 입력하기 위해 cd를 반복하는데 사용한다. vs-code를 켠 이후, 커맨드라인을 사용할 일은 빌드/컴파일 할 때 정도이다. 하지만 vim으로 개발하는 경우, 왠만한건 다 명령으로 해결하기 때문에 편해지기 위해 명령을 잘 하는 법을 찾게 되고, 실력이 는다. 게다가 language server를 설치하지 않았더라도, 대충 라이브러리 위치 찾아가는 센스가 생김. 언어가 추가될 때마다 vim 세팅을 진행해야 하는데, 보통 처음엔 그냥 불편한 대로 사용하기 때문이다. 그러다가 사용 빈도가 올라가서 불편함이 가중되면 세팅을 진행한다. 그 때는 이미 해당 언어에 대해 어느정도 익숙해진 후이다.

그냥 불편한게 다인 것 같은데?

맞다. 불편하기 때문에 편해지기 위해 발악하는 과정에서 이해도가 높아진다. 그런데, 주니어일 때 아치리눅스를 사용한건 신의 한 수였던 것 같다. 왠만한 문제는 당황하지 않는다. ㅋㅋㅋㅋㅋㅋ