рдЬреИрд╕рд╛ рдХрд┐ рд╕рднреА рдиреЗ рдкрд╣рд▓реЗ рд╣реА
рд╕реБрдирд╛ рд╣реИ , рдордИ рдХреЗ рдЕрдВрдд рдореЗрдВ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдиреЗ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ MTProto рдкреНрд░реЙрдХреНрд╕реА (рдЙрд░реНрдл MTProxy) рд╕рд░реНрд╡рд░ рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛, рдЬреЛ
рдирд┐рдореНрди рднрд╛рд╖рд╛ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред 2018 рдореЗрдВ, рдбреЙрдХрд░ рдХреЗ рдмрд┐рдирд╛ рдмрд╣реБрдд рдХреБрдЫ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рд╢реВрдиреНрдп-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╕рдорд╛рди "рдЖрдзрд┐рдХрд╛рд░рд┐рдХ"
рддрд░реАрдХреЗ рд╕реЗ рд╣реИред рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рддреАрди "рдмрдЯреНрд╕" рдиреЗ рд░рд┐рд▓реАрдЬ рдХреА рдзрд╛рд░рдгрд╛ рдХреЛ рдереЛрдбрд╝рд╛ рдЦрд░рд╛рдм рдХрд░ рджрд┐рдпрд╛: рдЫрд╡рд┐ рдХрд╛ рд╡рдЬрди> 130 рдПрдордмреА (рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрд▓реНрдкрд╛рдЗрди рдирд╣реАрдВ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдЕрд▓реНрдкрд╛рдЗрди рд╣реИ), "рд╢реВрдиреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕" рдХреЗ рдХрд╛рд░рдг рдпрд╣ рд╣рдореЗрд╢рд╛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдХреЗрд╡рд▓ рдкрд░реНрдпрд╛рд╡рд░рдг рд╕реЗрдЯрд┐рдВрдЧреНрд╕ рджреНрд╡рд╛рд░рд╛) рдФрд░ рд▓реЛрдЧ рдЕрднрд┐рдпрд╛рди рдХреЛ рднреВрд▓ рдЧрдП, рдбреЙрдХрд░рдлрд╛рдЗрд▓ рдХреЛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ред
TL; DR рд╣рдо 5.94MB рдХреЗ рдЖрдХрд╛рд░ рдХреА 1-рдЗрди -1 рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЕрд▓реНрдкрд╛рдЗрди-рдЖрдзрд╛рд░рд┐рдд рдбреЙрдХрдЯрд░ рдЫрд╡рд┐ рдмрдирд╛рдпреЗрдВрдЧреЗ рдФрд░ рдЗрд╕реЗ
рдпрд╣рд╛рдБ рдбрд╛рд▓реЗрдВрдЧреЗ (рдФрд░
рдпрд╣рд╛рдБ Dockerfile); рдЗрд╕рдХреЗ рд╕рд╛рде-рд╕рд╛рде, рд╣рдо рдпрд╣ рднреА рдкрддрд╛ рд▓рдЧрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдЖрдк рдХрднреА-рдХрднреА рдПрд▓реНрдкрд╛рдЗрди рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдХреЗ рд╕рд╛рде nippers рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдорд┐рддреНрд░ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рд╣рдо рдЖрдХрд╛рд░ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЦреЗрд▓реЗрдВрдЧреЗ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдПред
рдЫрд╡рд┐ рд╕рд╛рдордЧреНрд░реА
рдПрдХ рдмрд╛рд░ рдлрд┐рд░, рдХреНрдпреЛрдВрдХрд┐ рд╕рднреА рдЙрдкрджреНрд░рд╡ рдХреНрдпрд╛ рд╣реИ? рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдЪрд┐рддреНрд░
рдЗрддрд┐рд╣рд╛рд╕ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдХреНрдпрд╛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
$ docker history --no-trunc --format "{{.Size}}\t{{.CreatedBy}}" telegrammessenger/proxy
рдкрд░рддреЛрдВ рдХреЛ рдХреНрд░рдорд╢рдГ рдиреАрдЪреЗ рд╕реЗ рдКрдкрд░ рддрдХ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ:

рд╕рдмрд╕реЗ рдореЛрдЯреА рдПрдХ рдбреЗрдмрд┐рдпрди рдЬреЗрд╕реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдореВрд▓ рдЫрд╡рд┐ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓реА рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдирд╛ рд╣реИ (рдЕрд▓реНрдкрд╛рдЗрди: 3.6, рддреБрд▓рдирд╛ рдХреЗ рд▓рд┐рдП, рдЗрд╕рдХрд╛ рд╡рдЬрди 3.97MB рд╣реИ); рдЖрдпрд╛рдореЛрдВ рдХреЗ рдмрд╛рдж рдХрд░реНрд▓ рдФрд░ рддрд╛рдЬрд╛ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдЕрдиреНрдп рджреЛ рдлрд╛рдЗрд▓реЗрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ, рд╣рдо
рд░рди рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЕрдВрджрд░ рджреЗрдЦреЗрдВрдЧреЗ, рд╕реАрдПрдордбреА рдХреЛ рдмреИрд╢ рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрдВрдЧреЗ (рдпрд╣ рдЖрдкрдХреЛ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдЫрд╡рд┐ рдХреЗ рдЪрд╛рд░реЛрдВ рдУрд░ рдШреВрдордиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдЧрд╛, рдПрдХ рджреВрд╕рд░реЗ рдХреЛ рдФрд░ рдЕрдзрд┐рдХ рдмрд╛рд░реАрдХреА рд╕реЗ рдЬрд╛рдиреЗрдВрдЧреЗ, рдХреБрдЫ рдЕрдВрд╢реЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:
$ docker run -it --rm telegrammessenger/proxy /bin/bash
рдЕрдм рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЗрд╕ рдШрдЯрдирд╛ рдХреА рддрд╕реНрд╡реАрд░ рдХреЛ рдлрд┐рд░ рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдЦреЛрдП рд╣реБрдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдЬреИрд╕рд╛ рдХреБрдЫ:
FROM debian:jessie-20180312 RUN set -eux \ && apt-get update \ && apt-get install -y --no-install-recommends curl ca-certificates \ && rm -rf /var/lib/apt/lists/* COPY ./mtproto-proxy /usr/local/bin RUN mkdir /data COPY ./secret/ /etc/telegram/ COPY ./run.sh /run.sh CMD ["/bin/sh", "-c", "/bin/bash /run.sh"]
рдЬрд╣рд╛рдВ mtproto- рдкреНрд░реЙрдХреНрд╕реА рдПрдХ рд╕рдВрдХрд▓рд┐рдд рд╕рд░реНрд╡рд░ рд╣реИ, рдЧреБрдкреНрдд рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдХреЗрд╡рд▓ AES рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХреБрдВрдЬреА рдХреЗ рд╕рд╛рде рд╣реИрд▓реЛ-рдЦреЛрдЬрдХрд░реНрддрд╛-рдХреИрд╕реЗ-рдЖрдк-рдХрд░ рд░рд╣реА рдлрд╝рд╛рдЗрд▓ рд╣реИ (рд╕рд░реНрд╡рд░ рдЖрджреЗрд╢ рджреЗрдЦреЗрдВ, рд╡рд╣рд╛рдБ, рд╡реИрд╕реЗ, рдПрдкреАрдЖрдИ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд╕рд┐рдлрд╛рд░рд┐рд╢ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░рдЦреЗрдВ рд╢рд╛рдпрдж рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрдм рдПрдкреАрдЖрдИ рднреА рдЕрд╡рд░реБрджреНрдз рд╣реИ), рдФрд░ рд░рди.рд╢ рдкреНрд░реЙрдХреНрд╕реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рднреА рддреИрдпрд╛рд░реА рдХрд░рддрд╛ рд╣реИред
рдореВрд▓ run.sh рдХреА рд╕рд╛рдордЧреНрд░реА рд╕рднрд╛
CentOS 7 рдХреЗ рддрд╣рдд Habr├й рдкрд░ MTProxy рдкрд╣рд▓реЗ рд╕реЗ рд╣реА
рдПрдХрддреНрд░рд┐рдд рд╣реИ , рд╣рдо рдЕрд▓реНрдкрд╛рдЗрди рдХреЗ рддрд╣рдд рдПрдХ рдЫрд╡рд┐ рдПрдХрддреНрд░ рдХрд░рдиреЗ рдФрд░ рдореЗрдЧрд╛рдмрд╛рдЗрдЯ, рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ, 130 рдХреЛ рдкрд░рд┐рдгрд╛рдореА docker рдЫрд╡рд┐ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВрдЧреЗред
рдЕрд▓реНрдкрд╛рдЗрди рд▓рд┐рдирдХреНрд╕ рдХреА рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ glibc рдХреЗ рдмрдЬрд╛рдп рдорд╕рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╣реИред рджреЛрдиреЛрдВ рдорд╛рдирдХ рд╕реА рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИрдВред рдорд╕рд▓ рдЫреЛрдЯрд╛ рд╣реИ (рдЗрд╕рдореЗрдВ "рдорд╛рдирдХ" рдХрд╛ рдкрд╛рдВрдЪрд╡рд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИ), рд▓реЗрдХрд┐рди рд╡реЙрд▓реНрдпреВрдо рдФрд░ рдкрд░рдлреЙрд░реНрдореЗрдВрд╕ (рдХрдо рд╕реЗ рдХрдо рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ) рдпрд╣ рддрдп рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдХрдм рдбреЙрдХрдЯрд░ рдЖрдПред рдФрд░ рдЕрд▓реНрдкрд╛рдЗрди рдкрд░ рдЧреНрд▓рд┐рдмрд┐рдЪ рдбрд╛рд▓рдирд╛ рдирд╕реНрд▓реАрдп рд░реВрдк рд╕реЗ рд╕рд╣реА рдирд╣реАрдВ рд╣реИ, рдЪрд╛рдЪрд╛ рдЬреИрдХрдм рдЬрд┐рд░реБрдЯрдХрд╛ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
рдирд╣реАрдВ рд╕рдордЭреЗрдВрдЧреЗ ред
рд╣рдо рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдФрд░ рдкреНрд░рдпреЛрдЧ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░рддрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП docker рдореЗрдВ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП рдПрдХ рдирдпрд╛ Dockerfile рдмрдирд╛рдПрдВ:
FROM alpine:3.6 RUN apk add --no-cache git make gcc musl-dev linux-headers openssl-dev RUN git clone --single-branch --depth 1 https://github.com/TelegramMessenger/MTProxy.git /mtproxy/sources RUN cd /mtproxy/sources \ && make -j$(getconf _NPROCESSORS_ONLN)
рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ рд╕реЗ, рдЬреАрдЖрдИрдЯреА рдХрд╛рдо рдореЗрдВ рдЖрдПрдЧрд╛ (рдФрд░ рди рдХреЗрд╡рд▓ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рдХреНрд▓реЛрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрдХ рдлрд╝рд╛рдЗрд▓ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╢рд╛ рдХрдо рд╕рдВрд▓рдЧреНрди рдХрд░реЗрдЧрд╛), рдореЗрдХ, рдЬреАрд╕реАрд╕реА рдФрд░ рд╣реЗрдбрд░ рдлрд╛рдЗрд▓реЗрдВ (рдиреНрдпреВрдирддрдо рд╕реЗрдЯ рдХреЛ рдЕрдиреБрднрд╡ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛)ред рд╣рдо рдХреЗрд╡рд▓ 1 рдкреНрд░рддрд┐рдмрджреНрдз рдХреА рдЧрд╣рд░рд╛рдИ рдХреЗ рд╕рд╛рде рдорд╛рд╕реНрдЯрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдХреНрд▓реЛрди рдХрд░рддреЗ рд╣реИрдВ (рд╣рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЗрддрд┐рд╣рд╛рд╕ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред рдЦреИрд░, -j рд╕реНрд╡рд┐рдЪ рдХреЗ рд╕рд╛рде рд╕рдВрдХрд▓рди рдХрд░рддреЗ рд╕рдордп рд╕рднреА рд╣реЛрд╕реНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВред рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг рдХреЗ рджреМрд░рд╛рди рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреИрд╢рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдЗрд╕реЗ рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдкрд░рддреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛ (рдЖрдорддреМрд░ рдкрд░ рдЗрдирдореЗрдВ рд╕реЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╣реИрдВ)ред
рд╣рдо
рдмрд┐рд▓реНрдб рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдВрдЧреЗ (рдбреЙрдХрд░реАрдлрд╛рдЗрд▓ рдХреЗ рд╕рд╛рде рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА рдореЗрдВ рд╣реЛрдВрдЧреЗ):
$ docker build -t mtproxy:test .
рдФрд░ рдпрд╣рд╛рдБ рдкрд╣рд▓реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
In file included from ./net/net-connections.h:34:0, from mtproto/mtproto-config.c:44: ./jobs/jobs.h:234:23: error: field 'rand_data' has incomplete type struct drand48_data rand_data; ^~~~~~~~~
рджрд░рдЕрд╕рд▓, рдЗрд╕рдХреЗ рдмрд╛рдж рд╡рд╛рд▓реЗ рд╕рднреА рдЗрд╕рд╕реЗ рдЬреБрдбрд╝реЗ рд░рд╣реЗрдВрдЧреЗред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЙрди рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛ рд╕реНрд╡рдпрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдирд╣реАрдВ рд╣реИрдВ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрдХрд▓рдХ drand48_aata рд╕рдВрд░рдЪрдирд╛ рдХреА рдШреЛрд╖рдгрд╛ рдХреА рдХрдореА рдкрд░ рд╢рдкрде рд▓реЗрддрд╛ рд╣реИред рджреВрд╕рд░реЗ, musl рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рдереНрд░реЗрдб-рд╕реЗрдл рд░реИрдВрдбрдо рдлрд╝рдВрдХреНрд╢рдВрд╕ (_r рдкреЛрд╕реНрдЯрдлрд┐рдХреНрд╕ рдХреЗ рд╕рд╛рде) рдФрд░ рдЙрдирд╕реЗ рдЬреБрдбрд╝реА рд╣рд░ рдЪреАрдЬрд╝ рдкрд░ (рд╕рдВрд░рдЪрдирд╛рдУрдВ рд╕рд╣рд┐рдд) рд░рди рдмрдирд╛рдПред рдФрд░ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЗ рдбреЗрд╡рд▓рдкрд░реНрд╕, рдмрджрд▓реЗ рдореЗрдВ, рдЙрди рдкреНрд░рдгрд╛рд▓рд┐рдпреЛрдВ рдХреЗ рд╕рдВрдХрд▓рди рдХреЗ рд╕рд╛рде рдкрд░реЗрд╢рд╛рди рдирд╣реАрдВ рд╣реБрдП, рдЬрд╣рд╛рдВ random_r рдФрд░ рдЗрд╕рдХреЗ рд╕рдордХрдХреНрд╖реЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ (рдХрдИ OS рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдореЗрдВ рдЖрдк HAVE_RANDOM_R рдзреНрд╡рдЬ рдпрд╛ рдЗрд╕рдХреЗ рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЙрдкрд╕реНрдерд┐рддрд┐ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рд╕рдореВрд╣ рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдСрдЯреЛ-рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рдирдХрд░реНрддрд╛ рдореЗрдВ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ)ред
рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЧреНрд▓рд┐рдмреЗрдХ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВрдЧреЗ? рдирд╣реАрдВ! рд╣рдо glibc рд╕реЗ рдиреНрдпреВрдирддрдо рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╡рд╛рд▓реЗ рдХреЙрдкреА рдХрд░реЗрдВрдЧреЗ рдФрд░ MTProxy рд╕реНрд░реЛрддреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрдЪ рдмрдирд╛рдПрдВрдЧреЗред
Random_r рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╣рдо рдмреИрдХрдЯреНрд░реЗрд╕ рдлрд╝рдВрдХреНрд╢рди (execinfo.h) рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрд╡рд╛рдж рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕реНрдЯреИрдХ рдмреИрдХрдЯреНрд░реЗрд╕ рдХреЛ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ: рдЖрдк рдЗрд╕реЗ libunwind рд╕реЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд╕рд╛рде рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдХреЙрд▓ рдХреЛ рдЬрд╛рдБрдЪ рдХреЗ рд▓рд┐рдП рдЬрд╛рдБрдЪ рдХрд░ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдерд╛ред __GLIBC__ред
Random_compat.patch рдкреИрдЪ рд╕рд╛рдордЧреНрд░реА рдЗрд╕реЗ ./patches рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдбрд╛рд▓реЗрдВ рдФрд░ рдлреНрд▓рд╛рдИ рдкрд░ рдкреИрдЪ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдбреЙрдХрд░реАрдлрд╝рд╛рдЗрд▓ рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░реЗрдВ:
FROM alpine:3.6 COPY ./patches /mtproxy/patches RUN apk add --no-cache --virtual .build-deps \ git make gcc musl-dev linux-headers openssl-dev \ && git clone --single-branch --depth 1 https://github.com/TelegramMessenger/MTProxy.git /mtproxy/sources \ && cd /mtproxy/sources \ && patch -p0 -i /mtproxy/patches/randr_compat.patch \ && make -j$(getconf _NPROCESSORS_ONLN) \ && cp /mtproxy/sources/objs/bin/mtproto-proxy /mtproxy/ \ && rm -rf /mtproxy/{sources,patches} \ && apk add --no-cache --virtual .rundeps libcrypto1.0 \ && apk del .build-deps
рдЕрдм рдЗрдХрдЯреНрдареЗ mtproto- рдкреНрд░реЙрдХреНрд╕реА рдмрд╛рдЗрдирд░реА рдХреЛ рдХрдо рд╕реЗ рдХрдо рд▓реЙрдиреНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдФрд░ рд╣рдо рдЖрдЧреЗ рдмрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред
рдкрдВрдЬреАрдХрд░рдг
рдпрд╣ рдореВрд▓ run.sh рдХреЛ docker-entrypoint.sh рдореЗрдВ рдмрджрд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдореЗрд░реА рд░рд╛рдп рдореЗрдВ, рдпрд╣ рддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдЬрдм "рдЕрдирд┐рд╡рд╛рд░реНрдп рдмрд╛рдзреНрдпрдХрд╛рд░реА" рдПрдирдЯреНрд░рд╛рдпрдкрдВрдЯ рдореЗрдВ рдЪрд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ (рдпрд╣ рд╣рдореЗрд╢рд╛ рдмрд╛рд╣рд░ рд╕реЗ рдЕрддрд┐рднрд╛рд░рд┐рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ), рдФрд░ рдбреЙрдХреНрдпреВрдореЗрдВрдЯ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд╕реАрдПрдордбреА рдореЗрдВ рдЕрдзрд┐рдХрддрдо рдлрд┐рдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ (рдПрдХ рдирд╛рд╕рдордЭ рдХреЗ рд░реВрдк рдореЗрдВ + рдбрд┐рдЬрд┐рдЯрд▓ рдЪрд░)ред
рд╣рдо рдЕрдкрдиреА рдЕрд▓реНрдкрд╛рдЗрди рдЫрд╡рд┐ рдореЗрдВ рдмреИрд╢ рдФрд░ рдлреБрд▓ рдЧреНрд░реАрдк рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдореИрдВ рдмрд╛рдж рдореЗрдВ рд╕рдордЭрд╛рдКрдВрдЧрд╛) рд╕рд┐рд░рджрд░реНрдж рд╕реЗ рдмрдЪрдиреЗ рдФрд░ рдореВрд▓ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╣рдорд╛рд░реА рд▓рдШреБ рдЫрд╡рд┐ рдХреЛ рдЕрдкрдорд╛рдирд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдХрд╕рд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ, рдЙрд╕рдХреА рдорд╛рдВ, рдмреЛрдиреНрд╕рд╛рдИ рдХреЛ рдмрдбрд╝рд╛ рдХрд░реЗрдВрдЧреЗред
рдЪрд▓рд┐рдП рд╢реЗрдмрдВрдЧ рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ,
#!/bin/bash
рдЬрдЧрд╣
#!/bin/bash
with
#!/bin/sh
ред рдЕрд▓реНрдкрд╛рдЗрди рд░рд╛рдЦ рдХреЗ рд▓рд┐рдП рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд▓рдЧрднрдЧ рд╕рднреА рдмреИрд╢ рдХреЛ рдкрдЪрд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реИ "рдЬреИрд╕рд╛ рдХрд┐" рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдо рдЕрднреА рднреА рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдЕрдЬреНрдЮрд╛рдд рдХрд╛рд░рдгреЛрдВ рд╕реЗ, рдЙрд╕рдиреЗ рдХрд┐рд╕реА рдПрдХ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдХреЛрд╖реНрдардХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рддреБрд▓рдирд╛рддреНрдордХ рддрд░реНрдХ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдХреЗ рдЗрд╕рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░реЗрдВрдЧреЗ:

рдЕрдм рд╣рдо grep рдХреЗ рд╕рд╛рде рдПрдХ рддрд╕рд▓реАрдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рдбрд┐рд▓реАрд╡рд░реА рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ (рдФрд░, рд╡реИрд╕реЗ, рдмрд╣реБрдд рдзреАрдореА, рдЖрдкрдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдореЗрдВ рдзреНрдпрд╛рди рд░рдЦреЗрдВ)ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╡рд╣ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐
{,15}
рдХреЛ рдирд╣реАрдВ рд╕рдордЭрддрд╛ рд╣реИ, рдЙрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ
{0,15}
рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ, рдпрд╣
-P
рдлреНрд▓реИрдЧ (рдкрд░реНрд▓ рд╕реНрдЯрд╛рдЗрд▓) рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд┐рд╕реНрддрд╛рд░рд┐рдд (-E) рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдкрд░ рдЪреБрдкрдЪрд╛рдк рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдкрдЪрд╛рддрд╛ рд╣реИред
рд╣рдорд╛рд░реЗ рдЖрд╢реНрд░рд┐рддреЛрдВ рдореЗрдВ, рдХреЗрд╡рд▓ рдХрд░реНрд▓ рд░рд╣рддрд╛ рд╣реИ (рдмрд┐рдЬреАрдмреЙрдХреНрд╕ рд╕реЗ рдЫреВрдЯ рдХреЗ рд╕рд╛рде рдЗрд╕реЗ рдмрджрд▓рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ) рдФрд░ рд▓рд┐рдмрдХреНрд░реЗрдкреНрдЯреЛ (рдпрд╣ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ, рдЗрд╕ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдореЗрдВ рд╕реАрдзреЗ рдЦреБрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ)ред
рдПрдХ рдЦреВрдмрд╕реВрд░рдд
рдорд▓реНрдЯреА-рд╕реНрдЯреЗрдЬ рдмрд┐рд▓реНрдб рдбреЙрдХрд░ рдореЗрдВ рдХреБрдЫ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рджрд┐рдЦрд╛рдИ рджрд┐рдпрд╛ рдерд╛, рдпрд╣ рдЖрджрд░реНрд╢ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЧреЛ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЙрди рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬрд╣рд╛рдВ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдЬрдЯрд┐рд▓ рд╣реИ рдФрд░ рдЕрдВрддрд┐рдо рд╕рдлрд╛рдИ рдХрд░рдиреЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЫрд╡рд┐ рд╕реЗ рдХрд▓рд╛рдХреГрддрд┐рдпреЛрдВ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред рд╣рдо рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдЕрдкрдиреЗ рдмреЛрдиреНрд╕рд╛рдИ рдХреЛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░реЗрдВрдЧреЗ, рдЗрд╕рд╕реЗ рдереЛрдбрд╝реА рдмрдЪрдд рд╣реЛрдЧреАред
FROM alpine:3.6 # ( ) RUN apk add --no-cache --virtual .build-deps \ # ... , && make -j$(getconf _NPROCESSORS_ONLN) FROM alpine:3.6 # , , WORKDIR /mtproxy COPY --from=0 /mtproxy/sources/objs/bin/mtproto-proxy . # #
рдмреЛрдиреНрд╕рд╛рдИ рдХреЛ рдмреЛрдиреНрд╕рд╛рдИ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП - рд▓рд┐рдмрд╛рд╕рд┐рдкреНрдЯреЛ рдЗрдВрд╕реНрдЯреЙрд▓реЗрд╢рди рд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдПрдВред рдирд┐рд░реНрдорд╛рдг рдХрд░рддреЗ рд╕рдордп, рд╣рдореЗрдВ рдУрдкрдирд╕реНрд▓реЗ-рджреЗрд╡ рдкреИрдХреЗрдЬ рд╕реЗ рд╣реЗрдбрд░ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЬреЛ рдХрд┐ рдирд┐рд░реНрднрд░рддрд╛ рдореЗрдВ libcrypto рдЦреАрдВрдЪреЗрдЧрд╛ рдФрд░ рд╣рдорд╛рд░реА рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп libcrypto.so.1.0.0 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдУрд░ рдЙрдиреНрдореБрдЦ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХрдорд╛рддреНрд░ рдирд┐рд░реНрднрд░рддрд╛ рд╣реИ, рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣ рдЕрд▓реНрдкрд╛рдЗрди рдореЗрдВ рдкреВрд░реНрд╡рд╕реНрдерд╛рдкрд┐рдд рд╣реИ (рд╕рдВрд╕реНрдХрд░рдг 3.6 рдореЗрдВ рдпрд╣ libcrypto.so.41, 3.7 - libcrypto.so.42 рд╣реИ, рдпрд╣ / lib / рдореЗрдВ рд╣реИ)ред рд╡реЗ рдореБрдЭреЗ рдЕрдм рдбрд╛рдВрдЯрддреЗ рд╣реИрдВ, рдпрд╣ рд╕рдмрд╕реЗ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЗрд╕рдХреЗ рд▓рд╛рдпрдХ рд╣реИ рдФрд░ рд╣рдо рдЕрднреА рднреА рдореМрдЬреВрджрд╛ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд╣рд┐рд╖реНрдгреБрддрд╛ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ (рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмреЗрд╣рддрд░ рддрд░реАрдХрд╛ рд╣реИ, рддреЛ рдореИрдВ рд╕рд╣рд░реНрд╖ рдкреАрдЖрд░ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реВрдВ)ред
рдЕрдВрддрд┐рдо рд╕реНрдкрд░реНрд╢ рдФрд░ рдкрд░рд┐рдгрд╛рдо:
рдбреЙрдХрдЯрд░ рд╣рдмGitHubрдореИрдВ рдХрд┐рд╕реА рднреА рд╕рд▓рд╛рд╣ рдФрд░ рдпреЛрдЧрджрд╛рди рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред