Barrier 설치했는데, 연결이 안되는데요? – 초기에 서버에서 반드시 SSL Fingerprint 확인하세요.

저도 처음에 설치하고 나서 좀 여러모로 헷갈렸는데, 해당하는 내용이 좀 부실하게 되어있습니다. (배리어 프로젝트의 README.md에 나와있질 않아서요…ㅠㅠ)

설치 후에 실행하고 나면 별 거 없이 실행되겠지 싶을 겁니다. 그리고 내가 주로 쓰는 컴퓨터를 서버로 설정합니다. (서버로 설정한 컴퓨터의 키보드와 마우스를 이용해서 클라이언트를 제어합니다.)

봐, 걍 이렇게 평온하게 실행되고 있으면 누가 오류인 줄 알아…ㅠㅠ

근데, 처음 설치 후에 서버로 설정하고 그냥 서버 설정에서 봐도 뭔가 더 할 게 있나 싶은데… 로그를 보면 다른 상황이죠. ㅠㅠ

?!?!

갑자기 ssl 인증서를 쓸 수 없다고 합니다. ;ㅅ;

진짜 뜬금없습니다.

서버는 클라이언트를 자동으로 찾습니다. 그때에 연결을 승인해야 하는데, 그걸 ssl 인증으로 프로그램 내부에서 진행하는 건데, 그걸 위한 인증서가 없다는 것입니다. ;ㅅ; 이건 윈도우, 맥, 리눅스 어디 할 거 없이 서버로 처음 설치하고 실행했을 때에 저렇게 ssl이 없다고 합니다.

근데 아무 ssl 인증서나 되는 건 아닐 꺼 아냐! 해서 좀 찾아보니… 일단 깃헙에 이슈에 대한 쓰레가 있습니다. 좀 한참 밑으로 쭉 내려가면 명령어 쳐서 만들어라 하는 데 그 명령어가 이겁니다.

openssl req -x509 -nodes -days 365 -subj /CN=Barrier -newkey rsa:4096 -keyout Barrier.pem -out Barrier.pem

그래서 해당 디렉터리로 이동해서 작업을 진행했습니다. 전 윈도우에서 이용하는 wsl의 우분투를 이용해서 직접 만들었습니다. 윈도우 사용자 분들은 openssl 윈도우 설치 프로그램 이용하셔서 하시면 되고, 리눅스나 맥은 뭐… 이미 있을수도 있습니다. (자기가 모르는 사이에 패키지 설치하면서 깔렸을 수 있습니다.)

저렇게 만들고 나서 Barrier를 다시 실행하거나, 중지 후 시작을 다시 하면 로그 내용이 바뀌어있을 것입니다.

앗싸!

그러면 이제 다른 컴퓨터에서 클라이언트를 실행하면, 서버 화면에는 자기 컴퓨터 기준으로 어디에 배치할 것인지를 선택하는 화면이 나옵니다. 선택한 후에는 클라이언트에도 뭔가 뜨는데, 바로 ssl 인증내용을 보여주면서 이 클라이언트와 연결 승인할 것인지를 묻습니다. 승인하게 되면 바로 연결되어 제어할 수 있게 됩니다.

워낙 유명한 프로그램이라서 사용하는 내용은 간단하게 적힌 블로그 글들이 여럿 있는데, ssl fingerprint 설정에 대해서는 잘 안적어놔서 정리 좀 해봤습니다. 간만에 블로그 적는데 생각보다 글이 잘 안써지네요. ;ㅅ;

다시 잘 써서 C언어 글 완결지어야 되는데 말입니다. ;ㅅ;

Barrier – Opensource Software KVM

오늘은 간만에 블로그 글 좀 쓰는 연습 겸 해서 오픈소스 프로그램 하나 소개해 보려고 합니다.

여러분 작업하면서 컴퓨터 몇 대 쓰시나요? 전 윈도우, 맥, 리눅스 가리지 않고 여러대 이용하고 있습니다. 이러면 반드시 키보드랑 마우스를 여럿 쓰게 되는 불상사가 발생하는데…. 책상이 완전 엉망진창이 되죠. ;ㅅ;

그래서 보통 kvm 스위치라는 하드웨어를 이용하게 됩니다. 이름 그대로 키보드, vga, 마우스를 이어주는 제품으로, 하나의 모니터, 키보드, 마우스를 가지고 여러대의 컴퓨터에 연결해서 버튼으로 선택해 연결해주는 장치를 이용합니다. 주로 서버 렉에서 렉 하나 구성할 때, 가운데에서 여러 서버들 설정하고 할 때 주로 이용합니다.

보통은 이런 식으로 생겼습니다. 4:1 제품으로, 1개의 그룹에 대해 최대 컴을 4대까지 연결할 수 있습니다.

이건 집이나 사무실에서 쓰는 스타일입니다. 사진의 모델은 좀 고급 모델이라 듀얼 모니터도 지원됩니다. 당연히 비쌉니다. 한 60만원 하려나..?

이런 스타일은 서버 렉에 넣고 이용합니다. 연결은 뒤에 KVM을 연결하는 전용 RJ-45 규격 혹은 전용 시리얼 포트가 따로 있습니다.

그리고 이런 녀석들이 랙에 서버들 구축할 때에 서버 설정 한곳에서 할 수 있도록 하는데 이용하는 kvm입니다. 랙 한번 구축해보신 분들은 잘 알겠지만, 서버에는 저런 전용 kvm 연결단자 연결하고, 가운데에 전용 터미널 사다 달아서 하나하나 그냥 그자리에서 바로 셋팅할 수 있도록 많이들 해놓습니다. (사실 랙마운트 뒤에 선이 많은 것도 네트워크 케이블이나 SAN 스토리지일수도 있지만, kvm일수도 있습니다.)

근데 저런 걸 쓰기도 뭐하고 해서 소프트웨어 방식의 kvm을 찾아보면 유명한 녀석이 하나 튀어나옵니다. 바로 synergy라는 녀석인데, 아쉽게도 이녀석은 유료입니다. 그래서 이녀석의 오픈소스판인 Barrier를 이용하고자 합니다. 윈도우, 맥, 리눅스에서 다 되면서 오픈소스라니..! 이건 해야되! 라는 수준입니다!

누가 이렇게 돈주면서 쓰라고 하면 감사히 쓰겠지만…ㅠㅠ

설치 방법 자체는 간단합니다. 사용법에 대해서도 설정의 거의 대부분은 auto config가 되어있어서 그렇게 어렵게 하진 않고요.

이거 사용법 좀 정리해서 다른 것보다 설정 내용이 헷갈릴 수 있어서 그러는데, 제 기준에서 좀 헷갈렸던 내용을 다음 글에 정리해서 올려보겠습니다.

이론도 이론인데 일단 있는 라이브러리들도 써봐

규링은 응용 프로그램 개발로 시작했지만 대학원 다니면서 컴퓨터 아키텍쳐, CPU, 운영체제에 관심을 엄청 두고 이쪽만 죽어라 팠었다. 근데 결과 내놓고 하기에는 시간이 모자라서 막판에 다른 주제 확 잡고 프로젝트를 진행했었다.

그 때, NLP(Natural-language processing)를 해야 했었다. 논문에 꼭 필요한 내용이었다. 솔직히 관심도 없던 분야라 이론적으로 좀 배운 거 제외하곤 알지도 못했다. 그래서 일단 이론적으로 나와있는 내용에 대한 라이브러리들을 먼저 찾았다. 그러면서 좀 이해되는 내용들이 하나 둘 모이니깐 어떻게 해야 할 지 감이 좀 왔었다. 그걸 토대로 이리저리 좀 끼워맞춰 가면서 해보니 아주 완성적인 것은 아니지만 일단 먼저 필요한 부분은 적당한 수준으로 만들 수 있었다.

사실 규링이 만들고 있는 짤 필터링도 솔직히 제대로 이미지 프로세싱을 알고 하는 건 아니다. 단, 게임을 좀 만들어본 것하고 함께 머신러닝으로 필터링 기준을 학습시켜보는 것들을 미친듯이 짜집고 해본 결과로 만들어진 것이 지금의 짤봇이다. (수동 짤봇 계정이 갑자기 확확 올리는 짤들은 그걸 테스트 하는 것이다. ㅇㅅㅇ;)

가끔 개발자들끼리 좀 웃으면서 하는 이야기가 있다면 바로 “짜집기”일 것이다. 그렇다고 그냥 이론같은 거 다 필요없고 그냥 있는 거 죄다 긁어서 붙이고 하면 되는 이야기는 아니다. 다들 어떻게 돌아가고 하는지는 전부 제대로 알고 한다.  아니, 그래야만 한다. (의외로 치명적인 버그는 이런 부분을 무시한 결과 많이 발생한다.)

근데 이론에만 빠지고 하다보면 도중에 대학 수업때처럼 이론을 증명하는 프로그램을 직접 짜고 있을 경우가 있다. 근데 그건 직접 짜야 할 때가 오면 그때 하면 될 꺼다. 바로 당장 이걸 가지고 응용하는 프로그램을 개발해야 하는 입장에서는 이런 게 필요할까?

게다가 요즘 바로 눈앞에서 결과 보여주는 환경을 많이 겪은 개발자들의 경우에는 이론적으로 깊게 들어가거나 하는 그런 식의 방법을 아예 몸부터 거절하는 개발자들도 있다. 그런 이들은 아예 첨부터 바로바로 도는 예제를 같이 찾는 편이긴 하다만…. 틀렸다고도 할 수도 없다.

사실 그렇게 하나 둘 건드려보면서 뭔가 하나라도 해봤다는 진행을 한다는 느낌도 받기 때문에 이론만 파다가 힘들면 가끔은 저런 실행 가능한 코드나 라이브러리를 돌려보면서 확인하는 절차가 필요하다. 특히 요즘 원하는 수준들이 너무 높다보니 이론에 휘말려서 개판되는 경우 많다.

ubuntu에서 MATLAB을 설치했는데 java 관련 오류가 발생

이거 은근 골때린다. MATLAB R2016A를 설치 다 하고나서 실행을 하는데 MATLAB이 죽는다. 근데 이때 실행 안되는 것에 대한 답변으로 Octave를 쓰라는 답변 다는 것들 진짜 열심히 패고 싶었다만…

다행이도, 매틀랩은 친절해서 그런지 크래시 덤프를 남겨준다. 그걸 열어보니 참으로 어이없는 상황이 만들어졌다.

Segmentation violation

…설치 하자마자 바로 첫 실행한 프로그램이 저러는 것에는 이유가 있을 것이라 생각했다. 그래서 일단 사실 확인을 위해 내용을 뒤져보니..

Virtual Machine     : Java 1.7.0_60-b19 with Oracle Corporation Java HotSpot(TM) 64-Bit Server VM mixed mode

…저기요? java 1.8 쓰고 있는지가 몇년인데..?

사실 매틀랩은 자바 환경에서 GUI를 제공한다. 그래서 최소한 java 1.4 이상을 지원해 줘야 하는데, 시스템이 잘 지원 안해줄까봐 스스로도 자바 런타임을 가지고 있다. 근데 그게 꼬인거다.

stack trace도 도중에 잘렸지만, 불려진 바이너리의 위치가 매틀랩 내부에 있는 자바 런타임 코드랑 현재 돌아가는 window 시스템이랑 꼬인 내용들이 대부분이다.

그래서 일단 지금 내 우분투에 설치되어 있는 java의 jre 경로로 위치를 변경해 줘야겠다 싶었다.

구동을 위해 필요한 것은 바로 위에 터미널에 경로에 있는 libjvm.so이다. 매틀랩은 저걸 못찾아서 Segmentation violation을 일으키는 것이었다.

나보다도 자바에 대해서 더 뛰고 날고 하는 사람들은 많겠지만… 저 파일에 대해서도 잠깐 적겠다.(내가 잊어버리지 않기 위해서) 저 파일은 Java Stored Procedure(자바 저장 프로시저)를 수행하기 위한 환경을 만들어주는 바이너리이다. 자바 개발자들 중에서 개발환경 설정할 때 경로 설정에 LD_LIBRARY_PATH를 설정해서 쓰는 분들 있는데 그 라이브러리에 들어있는 것이다. 경로는 운영체제, 아키텍쳐에 따라 다를 수 있지만 기본적으로는 [java home path]/jre/bin 경로에 있다.

그럼 저걸 어떻게 바꿔주느냐? 매틀랩 실행을 위한 경로로 들어가서 아래와 같이 MATLAB_JAVA 변수에 jre 경로를 입력하면 된다.

export MATLAB_JAVA=/usr/lib/jvm/java-8-oracle/jre

그리고 나서 실행을 하면 제대로 실행되는 것을 확인할 수 있다.

자바 기반의 GUI 환경에 익숙해지면 이런 것쯤이야 뭐 알아서 수정할 수 있겠지만… 난 그런 게 별로 없는 환경을 좋아해서 그런지 이거에 좀 삽질을 많이 했다.

Git -could not read from remote repository

git에 로컬 저장소를 만들고 나서 remote를 추가할 때, remote의 주소가 잘못 지정된 상태에서 push를 하려고 하면 저런 메시지가 나타난다. github에서 만들어서 하면 저런 걸 별로 보진 못하는데, 다른 원격 저장소를 이용하면서 가끔 주소 문제로 저렇게 오류가 나는 경우가 있다.

그럴 때에는 remote의 주소를 변경해 주면 된다.

현재 지정된 원격 저장소의 주소를 알고자 할 경우에는 다음 명령어를 입력한다.

$ git remote -v

원격 저장소의 위치를 설정해주고자 할 때에는 다음 명령어를 입력한다. 난 여기서 origin의 저장소 주소를 변경하고자 한다.

$ git remote set-url origin [저장소주소]

어려운 건 아닌데 원격 저장소에서 만들어준 주소 그냥 복붙하다가 저런 오류 만나면 당황해 하진 말아야지 하면서 정리해본다.

Link+ IDE 사용 경험

(이 글은 워드프레스로 확인하여 주시기 바랍니다.)

Link+ IDE를 설치하고 나서 좀 사용해보았다. 메뉴얼의 양이 좀 상당히 많은 편이긴 한데, 이 메뉴얼 내용대로가 사실 리눅스 커널 프로그래밍에서 컴파일하고 설정하고 빌드하고 하는 여러 작업들을 다 가지고 있는 것이다보니 그렇게까지 어렵다고 생각하진 않았다.

뭐, 검색해보신 분들은 다 갖고 있겠지만, 최신판 메뉴얼을 확인해 보면 은근 양이 많아도 금방 따라할 수 있는 수준이다.

게다가 흔히 쓰는 배포판들의 경우에는 구성하기도 편하다. 우분투는 apt-get 명령어 몇 줄 입력해서 필요한 패키지 다 설치하고 하면 pre-install은 끝나는 수준. ㅡㅅㅡ

위의 화면은 분석하고 있는 리눅스 4.1.20 lts 커널을 열어서 qemu에 연동되어 시뮬레이팅하는 중이다. 디버깅도 되고, 시스템 콜 테스트도 가능한 거 같아서 좀 더 확인해서 보고 있다.

이런 게 있었으면 좀 더 빨리 할 수 있으려나…ㅠㅠ 안쓰신 분들 있으면 써보라고 하고 싶군요.

Linux Kernel Programming IDE(Link+ IDE)

(이 글은 워드프레스에서 보시길 바랍니다)

아이엠루트나 다른 리눅스 커널 스터디했다고 하는 자료들 보면 해당 환경들이 터미널에 vim 환경에 ctags, cscope 연동하고 해서 열심히 찾아보고 하는 환경들을 많이 설명해두었다. 이 환경들이야 익숙해지면 뭐 나쁠껀 없다고 본다.

그래도 IDE 환경을 원했다. 코드 뒤지고 수정하는 것 뿐만 아니라, 수정한 걸 그대로 가상 환경에서 돌려볼 수 있을 정도까지 할 수 있었으면 했다. 그래서 미친듯이 뒤졌었다. 아는 사림이 있었을지도 모르겠지만, 혼자서 뒤지고 볶고 해야 하는 입장에서 그냥 혼자서 찾았다. 그리고는 2.6 커널 + 이클립스 CDT + qemu 환경에 대해서 적어둔 것을 찾아서 한번 따라해봤는데, 안되더라. ㅠㅠ 글도 10년전의 오래된 글이어서 그냥 환경과 버전 차이때문인가 했는데 나만 그런 것도 아니었고… (10년전 글에 13년에 첫 덧글 달려있던 게 나처럼 안된다는 덧글이었다..)

이클립스 베이스 플러그인 결합인 데다가 지원되는 하드웨어 아키텍쳐도 x86, x86_64, ARM 플랫폼을 지원한다고 한다. 그러나 ARM 버전의 경우에는 아직 지원이 제대로 다 되진 않는 듯 하다. 문서상에도 아직 ARM에 대해서는 미완하다고 하니… static 버전에서는 아직은 안된다고 보면 된다.

Kernel Configuration & Compilation wizard, Multiple Kernel Configuration Options support, Multiple Kernel Compilation Options support, Kernel Compilation Time reduction, QEMU Emulator Support(Kernel Debugging), System Call Dev, Device Driver Auto Code Generation 등등 지원되는 거 많은 거 보면 유용하게 쓰고 있는 사람들은 많을 거 같다. 아직 나한테는 벅찬 툴이겠지만… 지금 연구하는 작업에 대해서 좀 더 빠르게 할 수 있다면 엄청난 툴일 것이다. 맨날 툭하면 러널 내부에서 내용 찾아보고 한다고 웹 네비게이션 뒤지고 커널 소스코드를 doxygen으로 빌드해서 링크 따라다니가 바쁜 것에 비하면 더 나은 환경을 제공해 줄지도..ㅠㅠ

일단 설치해서 써보고 또 정리해둬야지. ㅡㅅㅡ

The JDK is missing and is required to run some NetBeans modules

연구실 컴이 주분투로 바꾸고 나서 자바 프로그램 개발이나 웹 개발용 IDE로 NetBeans(넷빈즈)를 쓴다. 쓰는 사람 얼마나 되는지는 솔직히 모르겠지만…

근데 언제부턴가 다른 짓 땜에 아두이노 IDE 땜에 그런가 오라클 JDK 1.8을 깔고도 주분투가 openJDK 1.7을 설치하더라. ㅡㅅㅡ (이것들은 왜그런지 모르겠다 진짜..) 그리고 나서도 오라클 jdk 1.8을 써야 되어서 기본 jdk 설정을 해줬다. 그러도고 이런 오류가 넷빈즈에 떴다. 자바 개발을 할 필요가 없다면 모듈을 꺼도 된다는 옵션을 선택하고 넷빈즈를 써도 되겠지만… 그럴 수는 없는 상황이라 해당 해결책을 찾아서 해결했다.

우선 다들 알다시피 jdk 위치부터 찾아야할 것이다. 수동설치한 사람들이야 알아서 path가 지정되어 있을 것이지만, add-apt-repo를 통해 jdk를 설치한 사람들은 당연 저 위치(/usr/lib/jvm/)에 설치된다는 걸 알 것이다. (우분투 기준인데 페도라도 rpm 설치하면 비슷한지는 모르겠다)

그리고 나서 netbeans.conf를 변경해 줘야 한다. 설치된 위치에 etc 폴더 안에 존재한다.

마꿔야 할 값은 netbeans_jdkhome의 값인데, 해당 오류가 나타날 때에는 저 값이 제대로 된 값이 아니거나 경로가 이상할 것이니 찾아둔 경로를 지정해둔다.

의외로 간단한 작업이지만 난 좀 적어둬야겠단. 아무 이상없이 이 화면을 보기 위해서 말이지.. ㅇㅅㅇ;