Ubuntu 16.04 에 telegram-cli 설치 및 데몬실행 설정

텔레그램을 이용한 알림 전송은 이전 포스트와 같이 처리하면 가능하다. 다만 chat_id를 확인하고 등록해야만 하는데 이런 불편함을 없애보고자 telegram-cli 를 개발서버에 설치해 메세지 전송을 테스트하려고 telegram-cli를 아래와 같이 설치했다.

telegram-cli : https://github.com/vysheng/tg

sudo apt-get install libreadline-dev libconfig-dev libssl-dev lua5.2 liblua5.2-dev libevent-dev libjansson-dev libpython-dev make
git clone --recursive https://github.com/vysheng/tg.git && cd tg
./configure
make

위 내용대로 진행하면 이상없이 설치가 된다.. 아니 되어야 한다. 그런데 나의 경우 libssl-dev 설치 버전이 1.1 이이서 make 과정에서 openssl 관련 오류가 발생했다. openssl은 시스템 전반에 영향을 끼치는 것이라 버전을 바꾸기도 애매했는데 확인해보니 PHP를 설치하기 위해 ondrej/php ppa 를 이용한 경우에 1.1 버전이 설치되는 듯 했다. PHP를 제거하고 ppa를 제거한 후 우분투 16.04에서 기본 제공하는 php 7.0.x 버전을 설치하면 1.0 버전을 유지할 수 있어 컴파일 때 오류가 발생하지 않는다. 컴파일 완료 후 아래 명령을 통해 telegram-cli를 실행한다.

bin/telegram-cli

휴대폰 번호 인증 후 telegram-cli 를 통해 메세지를 전송할 수 있다. 간단한 사용법은 http://tech.whatap.io/2015/09/25/telegram-cli/ 참고.

원래 목적이 휴대폰 번호를 이용해 메세지를 전송하고 사내에서는 쉽게 이용할 수 있도록 하는 것이기 때문에 telegram-cli를 서버 데몬으로 실행할 수 있도록 추가 작업을 진행했다. 데몬으로 설정하는 것은 https://github.com/vysheng/tg/wiki/Running-Telegram-CLI-as-Daemon 를 참고해서 진행했다. 문서에 나온대로 진행할 경우 데몬 실행에 오류가 발생하기 때문에 마지막 과정에서 데몬실행 telegram-daemon 파일의 내용을 수정했다.

sudo adduser telegramd
sudo mkdir /var/lib/telegram-daemon
sudo mkdir /usr/share/telegram-daemon
sudo mkdir /usr/share/telegram-daemon/bin
sudo cp bin/telegram-cli /usr/share/telegram-daemon/bin/
sudo cp start-telegram-daemon /usr/share/telegram-daemon/bin
sudo mkdir /etc/telegram-cli
sudo cp server.pub /etc/telegram-cli/server.pub
sudo vim /etc/init.d/telegram-daemon

telegram-daemon 파일에 아래 내용을 추가한다.

#! /bin/sh
### BEGIN INIT INFO
# Provides:          telegram-cli
# Required-Start:    $network $remote_fs $syslog
# Required-Stop:     $network $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: Commandline interface for Telegram chat program
# Description:       Telegram-cli is a (unofficial) cli version of Telegram to chat from your console.
#                    This is an init script do make it a daemon.
#                    When used as daemon in conjuction  with LUA (scripting) you can use it to send your system
#                    commands to execute via other Telegram apps (PC - Phone - Web or other) while not
#                    logged in to the system.
#
#                    Note #1: This version of the init script is developed for raspbian (rapberry PI port of Debian Wheezy).
#
#
#                    See: https://github.com/vysheng/tg for more information.
#                    Derived from https://github.com/vysheng/tg/issues/436 (updated 9th April 2015)
#                    Further derived from: https://www.domoticz.com/wiki/Installing_Telegram_Notification_System#.2Fetc.2Finit.d.2Ftelegram-cli
### END INIT INFO


# Set some variables
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin
DESC="Telegram Messaging System"
NAME=telegram-cli
USERNAME=telegramd
GROUPNAME=telegramd
LOGFILE=/var/log/telegramd.log
DAEMON=/usr/bin/telegram-cli
TGPORT=2391

TelegramKeyFile="/etc/telegram-cli/server.pub"

DAEMON_ARGS="-W -b -U $USERNAME -G $GROUPNAME -k $TelegramKeyFile -L $LOGFILE -P $TGPORT -d -vvvRC"
#DAEMON_ARGS="-W -U telegramd -G telegramd -k $TelegramKeyFile -L /var/log/telegramd.log -P $TGPORT -d -vvvRC"

PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME

# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME

# Carry out specific functions when asked to by the system
case "$1" in

    start)
        echo -n "Starting $DESC ... "
        start-stop-daemon --start --background --make-pidfile $PIDFILE --pidfile $PIDFILE \
            --exec $DAEMON -- $DAEMON_ARGS || true
        echo "Done."
    ;;

    stop)
        echo -n "Stopping $DESC ... "
        start-stop-daemon --stop --retry 2 --pidfile $PIDFILE \
            --exec $DAEMON || true
    rm -f $PIDFILE
    echo "Done."

    ;;
    restart)
        echo -n "Restarting $DESC "
        start-stop-daemon --stop --retry 2 --pidfile $PIDFILE \
            --exec $DAEMON || true
        rm -f $PIDFILE
        start-stop-daemon --start --background --make-pidfile $PIDFILE --pidfile $PIDFILE \
            --exec $DAEMON -- $DAEMON_ARGS || true
        echo "Done."
    ;;

    status)
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
        else
                echo "No pid file, telegramd not running?"
                exit 1
        fi
        if [ "`ps -p $PID -o comm=`" = "telegram-cli" ]; then
                echo "telegramd running with pid $PID"
        else
                echo "telegramd not running. removing $PIDFILE"
                rm -f $PIDFILE
                exit 1
        fi
    ;;

    *)
        N=/etc/init.d/$NAME
        echo "Usage $NAME: $SCRIPTNAME {start|stop|restart|status}"
        exit 1
    ;;

esac

데몬을 서비스로 등록하기 위해 아래 명령을 실행한다. 데몬의 포트를 변경하려면 위 스크립트 내용 중 2391 을 다른 포트번호로 변경한다. 참고 : https://github.com/vysheng/tg/issues/373#issuecomment-165580387

sudo update-rc.d telegram-daemon defaults

telegram-cli 데몬을 실행하기 위해 아래 명령을 실행한다. start 와 restart, stop, status 도 사용할 수 있다.

sudo service telegram-daemon start

telegram-cli 데몬에 명령을 전달하기 위해 netcat 또는 telnet 을 이용할 수 있다. 아래 명령은 netcat을 이용한 것이다.

nc localhost 2391
contact_list

사용할 수 있는 명령은 https://github.com/vysheng/tg#messaging 를 참고한다.

편리

PHP와 MariaDB, jQuery 등을 사용해 게시판, 쇼핑몰 솔루션을 개발합니다. 그누보드5와 영카트5 개발에 참여 했습니다. Linux와 Nginx는 물론 WordPress, Git 등에도 관심이 많습니다. 자전거 타기 및 사진 촬영을 취미로 하고 있습니다.

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.