simply run 'make'


Всем привет. Обойдусь без лишних прелюдий — многие ждали официального релиза, и вот — дождались. На хабре уже есть парочка статей как установить MTProxy из докера.

А вот с установкой из исходников многие обломались — после simply run 'make' выдаются ошибки. Как установить MTProxy из исходников без ошибок на Centos 7 — под катом

Загружаем исходники


cd ~
git clone https://github.com/TelegramMessenger/MTProxy

Проверяем версию openssl


openssl version

Скорей всего вывод будет вроде:

OpenSSL 1.0.2k-fips  26 Jan 2017

Обновляем openssl до 1.1.0


Гайд взят отсюда

Устанавливаем вспомогательные тулзы

sudo yum install libtool perl-core zlib-devel -y

Скачиваем исходники версии 1.1.0

curl -O -L https://github.com/openssl/openssl/archive/OpenSSL_1_1_0g.tar.gz

Распаковываем и переходим в папку

tar -zxvf OpenSSL_1_1_0g.tar.gz
cd openssl-OpenSSL_1_1_0g

Собираем и устанавливаем

./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
make
make test
sudo make install

Добавляем новую версию в PATH:

Создаем файл

sudo vi /etc/profile.d/openssl.sh

Содержимое:

# /etc/profile.d/openssl.sh
pathmunge /usr/local/openssl/bin

>Перезагружаем shell

Создаем файл

sudo vi /etc/ld.so.conf.d/openssl-1.1.0g.conf

Содержимое:

# /etc/ld.so/conf.d/openssl-1.1.0g.conf
/usr/local/openssl/lib

Применяем

sudo ldconfig -v

Проверяем версию openssl


openssl version

OpenSSL 1.1.0h  27 Mar 2018

Открываем Makefile и добавляем
CFLAGS: -I/usr/local/openssl/include
LDFLAGS: -L /usr/local/openssl/lib

CFLAGS = -I/usr/local/openssl/include -m64 -O3 -std=gnu11 -Wall -mpclmul -march=core2 -mfpmath=sse -mssse3 -fno-strict-aliasing -fno-strict-overflow -fwrapv -DAES=1 -DCOMMIT=\"${COMMIT}\" -D_GNU_SOURCE=1 -D_FILE_OFFSET_BITS=64
LDFLAGS = -L /usr/local/openssl/lib -m64 -ggdb -rdynamic -lm -lrt -lcrypto -lz -lpthread -lcrypto

Сохраняем

И только теперь simply make.

make clean
make

Дальше согласно readme

Всем успехов, надеюсь помог

Мой прокси на дедике(интересно бы было нагрузочное тестирование провести)
t.me/proxy?server=mtp.proxy.mediatube.xyz&port=443&secret=f3f0a2df006d4b4913cc7fd77cc77ffa

VDS в России и Нидерландах

Наш канал в Telegram
Чат для вопросов

Комментарии (19)


  1. Lordbl4
    31.05.2018 09:34

    Спасибо за статью.

    Подскажите, на десктопном клиенте есть возможность настроить соединение чрез MTProto?


    1. ColdHam
      31.05.2018 09:42

      в альфа версии есть. скачать можно с офиц. сайта


      1. Lordbl4
        31.05.2018 11:28

        да, спасибо. нашел — https://desktop.telegram.org/changelog#alpha-version
        (не очевидное расположение в коне чеиндж-лога)


  1. zCooler
    31.05.2018 10:01

    ./config --prefix=/usr/local/openssl --openssldir=/usr/local/openssl shared zlib
    make
    make test
    sudo make install

    На rpm-based дистрибутиве? Srsly?
    Взять spec с ближайшей версии srpm, собрать rpm, при ошибках поправить spec, не?


  1. ujifgc
    31.05.2018 10:08

    Для Debian 9:

    sudo apt-get install git curl build-essential libssl-dev libz-dev
    git clone https://github.com/TelegramMessenger/MTProxy.git
    cd MTProxy/
    make
    


    Результат будет в папке MTProxy/objs/bin

    Чтобы хостить на портах < 1024 перед запуском нужно ещё это сделать:

    sudo apt-get install libcap2-bin
    sudo setcap CAP_NET_BIND_SERVICE=+eip "полный путь бинарника mtproto-proxy"
    


  1. ShashkovS
    31.05.2018 10:10

    Спасибо! У меня был настроенный 3proxy, отлично и стабильно работающий.
    Вчера тоже ткнулся с MTProto на CentOS7 — и фиг. Попробую сегодня эту инструкцию.


  1. shifttstas
    31.05.2018 10:11

    Может быть вы сделаете PR на гитхаб с правкой документации?


  1. Infidel
    31.05.2018 10:19

    Ставил на Ubuntu 16.04 LTE, напоролся на ту же проблему. Выяснил, что дело в версии openssl. Не стал разбираться со сборкой openssl 1.1 из исходников, опыта возни с линуксами не хватило, зато где-то нашел, что указанные «недостающие» функции EVP_MD_CTX_new и EVP_MD_CTX_free были и в openssl 1.0.2, но назывались там, соответственно, EVP_MD_CTX_create и EVP_MD_CTX_destroy.

    Короткая пробежка по исходникам поиском и заменой (по 2 вхождения каждой функции в common/sha256.c и common/sha1.c, и одно в net/net-msg.c) привела к тому, что прокси прекрасно собрался и работает на «штатной» openssl 1.0.2g.

    На гитхабе тем временем уже есть чей то пуллреквест, который делает примерно то же самое (алиасит _new и _free через дефайны в _create и _destroy).


    1. XDred
      31.05.2018 12:58

      Собрал из исходников openssl 1.1h на Ubuntu 16.04.4, добавил в makefile нужные параметры.
      Стало собиратся лучше чем раньше. Но всё равно с ошибкой. Ругается так:
      objs/lib/libkdb.a(sha256.o): In function `sha256_starts':
      sha256.c:(.text+0x5): undefined reference to `EVP_MD_CTX_init'
      objs/lib/libkdb.a(sha1.o): In function `sha1_starts':
      sha1.c:(.text+0x5): undefined reference to `EVP_MD_CTX_init'
      objs/lib/libkdb.a(aesni256.o): In function `tg_ssl_aes_ctr128_crypt':
      aesni256.c:(.text+0x4d0): undefined reference to `AES_ctr128_encrypt'
      collect2: error: ld returned 1 exit status
      Makefile:86: recipe for target 'objs/bin/mtproto-proxy' failed
      make: *** [objs/bin/mtproto-proxy] Error 1

      Возможно я что-то криво собрал или криво подключил. Не знаю теперь куда копать.


  1. Qdim
    31.05.2018 10:31

    под ubuntu 18.04 собирается само :), и это радует так как оно появляется на vps


  1. xeonz
    31.05.2018 11:02

    Получилось ли у кого то подключить промо канал?


    1. SlavikMIPT Автор
      31.05.2018 11:03

      1. xeonz
        31.05.2018 11:22

        Да, теперь у меня получилось, забыл передать TAG в контейнер.


  1. ShashkovS
    31.05.2018 12:35
    +1

    Добавлю, что можно добавить mtproto в автозапуск, используя Systemd.

    nano /lib/systemd/system/mtproxyd.service
    

    [Unit]
    Description=MTproxy service
    After=network.target
    StartLimitIntervalSec=0
    
    
    [Service]
    Type=simple
    Restart=always
    RestartSec=1
    User=setup_user  # Юзер должен иметь права к mtproto-proxy, proxy-secret и proxy-multi.conf
    ExecStart=/path_to_1/mtproto-proxy -u nobody -p 8888 -H 443 -S you_secret --aes-pwd /path_to_2/proxy-secret /path_to_3/proxy-multi.conf -M 1
    # path_to_1, path_to_2, path_to_3 зависит от того, как вы устанавливали
    
    [Install]
    WantedBy=multi-user.target
    

    systemctl daemon-reload
    systemctl start mtproxyd
    systemctl status mtproxyd
    systemctl enable mtproxyd


    А ещё можно настроить sslh: habr.com/post/412779


    1. ZAZmaster
      31.05.2018 13:58

      Ещё можно сделать setcap 'cap_net_bind_service=+ep' /path_to_1/mtproto-proxy, чтобы пользователь setup_user смог открыть порт 443


  1. fedorro
    31.05.2018 13:58

    За статью спасибо. /s Но как бы Хабр не заблокировали за пособничество пособникам пособников террористов. /s


  1. sim2q
    31.05.2018 22:31

    на 32 битах не собралось, на 64 и со старой openssl норм (gentoo OpenSSL 1.0.2o)
    теперь это надо в tor завернуть?


  1. Renaissance
    02.06.2018 16:25

    Собралось успешно на Ubuntu 16.04 после обновления openssl.
    Юнит-файл для systemd создал, теперь возник такой вопрос: а нужно ли перезапускать сам mtproto-proxy для того чтобы он перечитал обновленный proxy-multi.conf?


    1. Renaissance
      02.06.2018 16:32

      Судя по тому что я нашел: github.com/TelegramMessenger/MTProxy/issues/46 перезапуск все же обязателен…