기본 콘텐츠로 건너뛰기

추천 가젯

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 외부 환경 에서 기존의 오염된 설정 파일을 ...

리눅스 홈서버 알림용 텔레그램 봇(Telegram Bot) 연동 및 쉘 스크립트 구축 가이드

개인 홈서버를 운영하다 보면 백업 완료 여부나 시스템 에러 같은 단방향 알림을 스마트폰으로 빠르게 받아보고 싶어집니다. 외부 메일 서버나 복잡한 SMTP 설정을 거치지 않고, 가장 확실하고 가볍게 쓸 수 있는 텔레그램 봇을 이용한 홈서버 알림 구축 방법을 정리합니다.


1단계: 텔레그램 봇 생성하기 (BotFather)

  1. 텔레그램 앱을 켜고 상단 검색창에 BotFather를 검색하여 공식 봇(파란색 체크마크 확인)을 엽니다.

  2. 대화창에 아래 명령어를 입력하여 새로운 봇을 만듭니다.

    Plaintext
    /newbot
    
  3. 봇의 이름(Name)을 입력합니다. (예: My Home Server Bot)

  4. 봇의 아이디(Username)를 입력합니다. (반드시 영문이며 끝에 bot 또는 _bot으로 끝나야 합니다. 예: my_home_backup_bot)

  5. 생성이 완료되면 HTTP API 토큰(Token)이 발급됩니다. 이 토큰을 안전하게 보관합니다.


2단계: 내 Chat ID(채팅방 고유 번호) 확인하기

텔레그램은 보안상 사용자가 먼저 봇에게 말을 걸어야 메시지를 받을 수 있으며, 봇이 나에게 메시지를 보내려면 고유 Chat ID가 필요합니다.

  1. 텔레그램 검색창에 userinfobot을 검색하여 들어갑니다.

  2. 하단의 [시작하기] 버튼을 누르면 내 계정의 정보와 함께 Id (숫자) 값을 알려줍니다. 이 숫자를 복사해 둡니다.

  3. [중요] 1단계에서 만든 내 봇의 아이디(예: @my_home_backup_bot)를 검색해서 대화창을 열고, [시작] 버튼을 누르거나 아무 메시지나 먼저 한 번 전송해 둡니다.


3단계: 리눅스 쉘 스크립트 작성 및 테스트

서버(터미널)에서 환경변수를 설정하고 curl 명령어를 통해 테스트 메시지를 보낼 수 있습니다. 특히 인자값이 없을 때를 대비해 기본값 처리를 해두면 유용합니다.

아래 내용을 포함하는 쉘 스크립트 파일(예: send_telegram.sh)을 작성합니다.

Bash
#!/bin/bash

# 환경변수 설정 (실제 토큰과 Chat ID 입력)
TELEGRAM_API_TOKEN="발급받은_API_토큰"
INFINITEKH_CHAT_ID="내_Chat_ID_숫자"

# 인자($1)가 없으면 기본 테스트 메시지 사용
MESSAGE="${1:-테스트 알림: 홈서버 작동 확인완료!}"

# 텔레그램 API로 메시지 전송
curl -s -X POST "https://api.telegram.org/bot${TELEGRAM_API_TOKEN}/sendMessage" \
     -d "chat_id=${INFINITEKH_CHAT_ID}" \
     -d "text=${MESSAGE}" > /dev/null

echo "텔레그램 알림 전송 완료!"

실행 방법 및 테스트

  1. 스크립트에 실행 권한을 부여합니다.

    Bash
    chmod +x send_telegram.sh
    
  2. 인자 없이 실행하여 기본 테스트 메시지를 보냅니다.

    Bash
    ./send_telegram.sh
    
  3. 원하는 메시지를 인자로 넘겨서 보냅니다.

    Bash
    ./send_telegram.sh "백업 작업이 성공적으로 완료되었습니다."
    

마무리하며

복잡한 이메일 인증이나 포트 개방, 신용카드 등록이 필요한 외부 API 서비스를 쓸 필요 없이, 텔레그램 봇과 간단한 curl 명령어 조합만으로도 홈서버의 든든한 알림망을 구축할 수 있습니다. 백업 스크립트나 시스템 모니터링 크론잡(Cronjob) 하단에 해당 스크립트 호출 한 줄만 추가해 보세요!

댓글