기본 콘텐츠로 건너뛰기

추천 가젯

Tmux 환경에서 Vim 컴파일 시 발생하는 termio/termios 감지 오류 해결 방법

 리눅스 환경에서 소스코드를 직접 빌드하다 보면 의외의 환경 변수나 터미널 세션 설정 때문에 엉뚱한 빌드 에러를 마주할 때가 있습니다. 대표적인 예로 Tmux 세션 내부에서 Vim 소스를 컴파일할 때 발생하는 termio/termios 감지 오류 가 있습니다. 이번 글에서는 해당 에러가 발생하는 원인과, 단순한 clean 으로는 해결되지 않는 이유 및 올바른 해결 방법을 정리합니다. 1. 문제 원인 Vim의 소스 코드 빌드 과정( configure )은 시스템이 System V 계열인지 Linux 계열인지 판별하기 위해 termio.h 와 termios.h 헤더 파일 및 터미널 인터페이스를 검사(Probe)합니다. 하지만 Tmux 내부(세션 안)에서 컴파일을 진행할 경우 , Tmux가 제공하는 PTY(Pseudo-Terminal) 환경과 TERM=screen 등의 특수한 환경 변수 영향으로 인해 Autoconf가 터미널 인터페이스를 검출하는 과정에서 오동작을 일으킵니다. 그 결과, 실제 시스템 조건과 무관하게 설정 에러를 발생시키게 됩니다. 2. 왜 make clean 으로는 해결되지 않을까? 일반적인 개발 과정에서는 빌드가 꼬였을 때 make clean 을 실행하곤 합니다. 하지만 make clean 은 컴파일된 오브젝트 파일이나 바이너리( .o 파일 등)만 삭제할 뿐, Autotools가 시스템 환경을 탐색한 결과로 남긴 캐시( config.cache 또는 내부 매크로 변수)나 설정 파일들은 그대로 유지 합니다. 일반적인 상황에서는 시스템의 하드웨어/OS 정보가 바뀌지 않기 때문에 이 잔여물이 문제가 되지 않습니다. 그러나 Tmux나 Screen 같은 터미널 멀티플렉서 환경에서 탐색된 왜곡된 정보가 캐시에 박혀버리면, 나중에 Tmux 외부(일반 터미널)로 나와서 빌드를 시도해도 이전의 오염된 캐시 때문에 계속해서 오류가 발생하게 됩니다. 3. 해결 방법 이 문제를 해결하기 위해서는 반드시 Tmux 외부 환경 에서 기존의 오염된 설정 파일을 ...

gcalcli를 이용한 작업이 끝났을 때, 그 사실을 알리기.



이전에는 linux에서 기본으로 가지고 mail인지 mailx인지 mail이라는 명령어를 사용해서 알리는 방식을 많이 사용했다.  (smtp server 방식)

그 다음으로는 terminal용 smtp 이메일 클라이언트를 사용하기도 하고 다양한 방법들을 사용했다. (smtp client 방식)


일단 첫번째 방법은 많은 이메일 서버에서 스팸으로 거르는 경우가 많다. 서버를 사용한 무차별 이메일 유포를 거르기 위해서 그렇게 하는 듯 하다.

두번째 방법도 좋다. 뭐 설정만 잘한다면 좋은데, 세상이 많이 바뀌었는지 별로 설명을 따라해서 뭔가를 이루는게 쉽지 않다.

  일단 이 두가지 방법이 기존에 하던 방법이라면,

이번에는 아예 새로운 방법으로 접근한다. 구글캘린더를 이용해서 캘린더에 기록으로 남기고 구글캘린더 알림서비스를 사용 한다.

이러한 일에 있어 기본은 terminal에서 사용가능한 툴이어야 한다.
  일단 나는 gcalcli를 사용하도록 한다.

gcalcli를 설치할 때, source를 직접 빌드하던지, 아니면 pip를 사용해서 접근하던지 두가지 방법을 잘 시도해서 하면 된다.


일단 내가 겪었던 이슈들이 있으니 설명하도록 한다. 나는 pip를 사용했다.  중요한 점은 gcalcli는 python2로 코딩 되어 있다는 점이다. 그러므로 당연히 pip2.7이나 이런 식으로 python2에 맡게 다운 받아야 한다. 물론 pip3를 사용해도 제대로 설치된다.

다시 시도해보지 않아 모르지만 나는 user 권한에서 했을 때, 특정패키지가 부족했다.

그리고 pip3를 사용해서 설치하다보니 소스의 첫줄이 /home/user/anaconda/bin/python이었는데 요게 python3.6인가 3.5이다. 아마 pip2.7등을 사용하면 알아서 이 부분을 고쳐주지 않을까 하는 생각이 든다.

난 직접 vim편집기로 저 부분을 /usr/bin/python2.7로 수정하였다.



자 이제 설치가 잘 되었다는 가정하에 진행해보자. gcalcli만 치면  "Error: no command"가 나오면 정상 설치 상태이다.

먼저 gcalcli list라는 명령어를 쳐보자.

그러면 기본 웹브라우저가 켜지면서 oauth를 받아오는 작업을 해준다. 요즘은 이런 식의 보안이 기본이다. 

다시 gcalcli list라는 명령을 쓰면 다음과 같이 자기가 수정가능한 calender와 보고 있는 calendar 등이 나온다.


자 다음은 간단하다.

나 같은 경우는 워크스테이션에서 일할때는 tsp로 job spooling을 하므로, 
문법이 많이 이상하지만 다음과 같이 명령을 집어넣는다.

tsp gcalcli quick 'Job has been the end after 3 minutes' --calendar gcal --reminder 60

저 quick이라는 명령어는 제목 내용 시간 이런거 달지 않고도 일상 언어를 캘린더에 집어넣는 용도로 사용한다. 저 명령어의 의미는 작업이 3분후쯤 끝난다. (문법이 망가졌지만...) 그리고 뒤에 calendar를 지정해주고, 60분동안 계속해서 핸드폰 알림창에 뜨도록 지정한다. 자 그러면 잘 작동한다. 수고.

댓글