Docker как место для сборки

Попался вот тут интересный проект https://habr.com/ru/articles/1052536 - дай, думаю, потестирую, как оно работает?

А потестировать сходу нельзя, в релизах имеются разные сборки под разные платформы, вот только для моей arm64 (aarch64) нет.
Надо бы собрать - но оно написано на Rust, с Rust я не работаю, поэтому на компьютере ничего нужного для сборки нет, устанавливать всё это на настроенный компьютер как-то не очень хочется - но ведь можно сделать это в контейнере!

И получилась вот такая пошаговая инструкция:

Первым делом запускаем новый контейнер:

docker run -ti debian
#

Устанавливаем всякое нужное и не очень:

apt update
apt upgrade
apt install vim mc git curl build-essential
apt clean

Rust собирается через cargo - но как выяснилось, в пакетах cargo старый, а новый можно установить путем "скачай неизвестно что и запусти" - поэтому на всякий случай сделать это лучше под отдельным юзером:

adduser user
su -l user
curl https://sh.rustup.rs | sh
exit
su -l user

"Что-то" скачалось, и установило программы в домашнем каталоге юзера user.
А вот это exit & su -l user - для того чтобы перелогиниться и подхватить нужные переменные окружения.

Дальше - скачиваем сам проект, и следуя гайду по сборке - собираем:

git clone https://github.com/litvinovtd/qeli qeli_vpn
cd celi_vpn/qeli
cargo build --release

Ура! всё собралось, в target/release появился готовый бинарник!
Вытащить его из контейнера можно разными способами, например прямо изнутри через Midnight: просто открыть по sftp свою же рабочую машину: cd sh://username@ip_addr/home/username и скопировать бинарник и каталог с примерами.
Можно конечно и scp ... - но в панельках нагляднее, проще ориентироваться в незнакомом каталоге.

Выходим из контейнера, запускаем...

./qeli
./qeli: /lib/aarch64-linux-gnu/libc.so.6: version `GLIBC_2.39' not found (required by ./qeli)

Не ура. Не работает. А не работает оно потому, что на рабочей машине Debian bookworm, а в контейнере Debian trixie, и разные версии библиотек.

Фальшстарт, надо пересобрать:

docker run -ti debian:bookworm
... далее по тексту ...

Вот теперь - запускается и работает.
В реальных условиях - для организации каналов между серверами во внешнем мире - потестирую его попозже, но это уже другая история.

Собственно говоря, это всё к тому "зачем нужно собирать что-то в контейнерах, когда можно собирать сразу на рабочей машине!" - да вот как раз затем: на рабочей машине, и на рабочих серверах могут быть вообще разные версии ОС и разные архитектуры, и контейнеры позволяют сделать нужную версию и туда и сюда.

@JBFW
27.06.2026 21:50 UTC
Первоисточник

Комментарии

@Bombila_Xa4
27.06.2026 18:16 UTC
0

Уже и инструкцию сделали))

@JBFW
27.06.2026 18:32 UTC
0

Кстати, при работе по UDP: no data from server for >45s — reconnecting
Где это настраивается? Вроде ничего такого не указано.

27.06.2026 18:44 UTC
0

#в серверном конфиге
[profile:udp]
obf.heartbeat.enabled = true #включите обязательно
obf.heartbeat.interval_ms = 10000

попробуйте поиграться с этим

27.06.2026 19:11 UTC
0

было 15, из example, поставил 5 - теперь пишет про 30 секунд )
Это наверное из-за nat, сервер отправить ничего не может, если клиент не отправил только что, а клиент не отправляет, потому что настройка серверная...

Костыльное решение - пингать с интервалом через скрипт, с клиента, но это костыль, конечно.

А так вроде работает.

27.06.2026 19:43 UTC
0

я выкатил фикс, обнови из репозитория и пересобери бинарник. Должно исправить.
вступай в группу, удобнее будет
https://t.me/qeli_vpn

28.06.2026 07:52 UTC
0

Да, помогло, спасибо )

28.06.2026 08:52 UTC
+1

мои тесты были в основном на tcp, для беты мелкие шероховатости это норма. Со временем выловим все баги)

@zanzack
27.06.2026 19:34 UTC
+1

скоро в Клод засунут и на С++ перепишут, чтоб понять что там под капотом