Меня тут спрашивают, почему я не пишу про llvm/clang18, хотя он вышел 3 дня назад - https://github.com/llvm/llvm-project/releases
По моему опыту, самый всратый релиз компилятора за последние несколько лет.
В целом, с точки зрения сборки, все хорошо, почти ничего не пришлось править в проектах, но:
* Сломан busybox
gdb/strace говорят, что в функцию bind() передается мусор, поэтому мы просто не можем разрезолвить это имя
* epiphany просто падает на старте, с segmentation fault, в каком-то совершенно нормальном месте.
* вишенка на торте - падает компилятор: https://gist.github.com/pg83/e138892353aed9d76b47f85109a1ea05 Давненько такого не было.
В общем, откатился назад, на 17 версию, жду фиксов.
По моему опыту, самый всратый релиз компилятора за последние несколько лет.
В целом, с точки зрения сборки, все хорошо, почти ничего не пришлось править в проектах, но:
* Сломан busybox
ping: bad address 'ya.ru'
pg# ping ya.ru
gdb/strace говорят, что в функцию bind() передается мусор, поэтому мы просто не можем разрезолвить это имя
* epiphany просто падает на старте, с segmentation fault, в каком-то совершенно нормальном месте.
* вишенка на торте - падает компилятор: https://gist.github.com/pg83/e138892353aed9d76b47f85109a1ea05 Давненько такого не было.
В общем, откатился назад, на 17 версию, жду фиксов.
GitHub
Releases · llvm/llvm-project
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies. - llvm/llvm-project
😁7😱5🤡4👍2🐳2😭2✍1
Продолжаем цикл заметок "История трех херобор" - https://xn--r1a.website/itpgchannel/1730 #herobora
История вторая - "avahi, она же mDNS".
Ресь тут пойдет про https://xn--r1a.website/itpgchannel/1709
Я решил остановиться на https://en.wikipedia.org/wiki/Bonjour_(software) для настройки имен хостов в своей локальной сети.
Под macOS это все работает из коробки, под Linux есть две известные реализации:
* https://avahi.org/
* запчасть systemd https://wiki.archlinux.org/title/systemd-resolved
У этих двух реализаций есть один большой общий недостаток - их запилил господин Поттеринг, а, значит, это сырое и неработающее говно.
Вот, например, феерический тред про Avahi - https://github.com/avahi/avahi/issues/117
Речь там про то, что в Avahi есть race, и оно иногда начинает барахлить, и, вместо {{hostname}}.local генерировать какие-то всратые имена типа {{hostname}}-1.local, и так по возрастающей.
Баг висит с 17 года, разработчики его подтверждают, но пофиксить не могут.
Я наткнулся на этот баг уже после того, как поднял сам Avahi, и поднял дополнительную штуку, которая реализует гейт из dns в avahi: https://wiki.alpinelinux.org/wiki/MDNS
https://github.com/LouisBrunner/avahi2dns (простая прокся, отвечающая по dns протоколу, и ходящая за резолвингом в Avahi, через d-bus)
Это нужно для non-glibc систем, потому что для интеграции с dns Avahi предоставляет nss плюгин (https://en.wikipedia.org/wiki/Name_Service_Switch), который, очевидно, не работает с musl, и, тем более, не работает в статически слинкованном окружении.
В общем, я расстроился, и пошел пилить херобору!
Я взял https://github.com/apple-oss-distributions/mDNSResponder от Apple. Да, да, это ровно тот же самый код, который работает у вас на macOS.
Я, с матюгами, собрал его под Linux, и изучил его исходники, потому что под Linux вместо половины функциональности стоят затычки.
Я разобрался с тем, как в него запушить свой hostname. Это оказалось не очень просто, потому что наружу mdnsresponder отдает только API для публикации в mDNS сервисов, а не hostname, пришлось придумать, как запаблишить фейковый сервис, чтобы пророс hostname.
Мне пришлось запилить gate из dns мира в mdns - https://github.com/pg83/mdns2dns Это такой прокси, который отвечает по протоколу DNS, но, under the hood, запускает command line тулзу из поставки mDNSResponder - https://github.com/pg83/mdns2dns/blob/main/query.go#L56, парсирует ее output, и оборачивает в ответ DNS сервера.
Над этим у меня работает локальный кеширующий dns - dnsmasq, который занимается кешированием, и тем, что все запросы вида X.local отправляет в мою херобору, а остальные - куда-то еще.
И вы знаете, именно вот это мое костыльное решение я и отправил в прод, потому что оно работает, как часы. Вот, просто, работает, и все.
Ну и, если убрать вот этот мой mdns2dns, то, так-то, это антикостыльное решение, в отличие от Avahi/SystemD:
* Потому что работает тот же код, что и у всех остальных клиентов Bonjour.
* Это ровно тот же код, который работает, например, в вашем принтере, если он умеет в ZeroConf. Да, да, Apple не занимается благотворительностью, а этот SDK в open source нужен производителям устройств.
История вторая - "avahi, она же mDNS".
Ресь тут пойдет про https://xn--r1a.website/itpgchannel/1709
Я решил остановиться на https://en.wikipedia.org/wiki/Bonjour_(software) для настройки имен хостов в своей локальной сети.
Под macOS это все работает из коробки, под Linux есть две известные реализации:
* https://avahi.org/
* запчасть systemd https://wiki.archlinux.org/title/systemd-resolved
У этих двух реализаций есть один большой общий недостаток - их запилил господин Поттеринг, а, значит, это сырое и неработающее говно.
Вот, например, феерический тред про Avahi - https://github.com/avahi/avahi/issues/117
Речь там про то, что в Avahi есть race, и оно иногда начинает барахлить, и, вместо {{hostname}}.local генерировать какие-то всратые имена типа {{hostname}}-1.local, и так по возрастающей.
Баг висит с 17 года, разработчики его подтверждают, но пофиксить не могут.
Я наткнулся на этот баг уже после того, как поднял сам Avahi, и поднял дополнительную штуку, которая реализует гейт из dns в avahi: https://wiki.alpinelinux.org/wiki/MDNS
https://github.com/LouisBrunner/avahi2dns (простая прокся, отвечающая по dns протоколу, и ходящая за резолвингом в Avahi, через d-bus)
Это нужно для non-glibc систем, потому что для интеграции с dns Avahi предоставляет nss плюгин (https://en.wikipedia.org/wiki/Name_Service_Switch), который, очевидно, не работает с musl, и, тем более, не работает в статически слинкованном окружении.
В общем, я расстроился, и пошел пилить херобору!
Я взял https://github.com/apple-oss-distributions/mDNSResponder от Apple. Да, да, это ровно тот же самый код, который работает у вас на macOS.
Я, с матюгами, собрал его под Linux, и изучил его исходники, потому что под Linux вместо половины функциональности стоят затычки.
Я разобрался с тем, как в него запушить свой hostname. Это оказалось не очень просто, потому что наружу mdnsresponder отдает только API для публикации в mDNS сервисов, а не hostname, пришлось придумать, как запаблишить фейковый сервис, чтобы пророс hostname.
Мне пришлось запилить gate из dns мира в mdns - https://github.com/pg83/mdns2dns Это такой прокси, который отвечает по протоколу DNS, но, under the hood, запускает command line тулзу из поставки mDNSResponder - https://github.com/pg83/mdns2dns/blob/main/query.go#L56, парсирует ее output, и оборачивает в ответ DNS сервера.
Над этим у меня работает локальный кеширующий dns - dnsmasq, который занимается кешированием, и тем, что все запросы вида X.local отправляет в мою херобору, а остальные - куда-то еще.
И вы знаете, именно вот это мое костыльное решение я и отправил в прод, потому что оно работает, как часы. Вот, просто, работает, и все.
Ну и, если убрать вот этот мой mdns2dns, то, так-то, это антикостыльное решение, в отличие от Avahi/SystemD:
* Потому что работает тот же код, что и у всех остальных клиентов Bonjour.
* Это ровно тот же код, который работает, например, в вашем принтере, если он умеет в ZeroConf. Да, да, Apple не занимается благотворительностью, а этот SDK в open source нужен производителям устройств.
Telegram
commit -m "better"
Я как-то писал, что одно из самых больших удовольствий, которое доставляет наш род занятий, это "соединить несоединимое" - https://xn--r1a.website/itpgchannel/1000.
Вот, взять какие-то разнородные штуки, грубо подогнать их друг к другу, и получить какое-то новое value…
Вот, взять какие-то разнородные штуки, грубо подогнать их друг к другу, и получить какое-то новое value…
👍15🔥7❤3
commit -m "better"
У меня сегодня большой день - я перенес загрузчик на свою партицию, и загрузился с него. Старые FS и линуксы можно стирать, окончательно перерезав пуповину с материнской системой. Это оказалось сложнее, чем я думал, потому что разработчик efibootmgr сошел…
#xfs #perf
https://blog.allegro.tech/2024/03/kafka-performance-analysis.html
Вот, например, почему xfs - все еще лучшая FS под Linux.
https://blog.allegro.tech/2024/03/kafka-performance-analysis.html
Вот, например, почему xfs - все еще лучшая FS под Linux.
blog.allegro.tech
Unlocking Kafka’s Potential: Tackling Tail Latency with eBPF
At Allegro, we use Kafka as a backbone for asynchronous communication between microservices. With up to 300k messages published and 1M messages consumed every second, it is a key part of our infrastructure. A few months ago, in our main Kafka cluster, we…
👍9🔥4❤3
commit -m "better"
Вышел go 1.22, https://www.opennet.ru/opennews/art.shtml?num=60564 И, тра-та-та, в нем появился yield, https://go.dev/wiki/RangefuncExperiment На первый взгляд, цельнотянуто с Python, разве что, StopIteration() там нет, по понятным причинам. Чаты кипят.…
Вышел, но сломал вендоринг зависимостей.
Вернее, не сломал, но что-то так немножко поменял, что архивы, после вендоринга, у меня стали получаться чуть другими.
Хеши едут, сборка ломается.
Пришлось откатить вендоринг на go 1.21, а сборку оставить на go 1.22.
Теперь нужно придумывать какой-то "ползучий" процесс обновления архивов и их перехеширования.
Грусть, тоска, ну вот зачем было ломать то, что хорошо работало?
Вернее, не сломал, но что-то так немножко поменял, что архивы, после вендоринга, у меня стали получаться чуть другими.
Хеши едут, сборка ломается.
Пришлось откатить вендоринг на go 1.21, а сборку оставить на go 1.22.
Теперь нужно придумывать какой-то "ползучий" процесс обновления архивов и их перехеширования.
Грусть, тоска, ну вот зачем было ломать то, что хорошо работало?
🤔4🐳4👍2😱1😢1
https://github.com/python/cpython/pull/116338
А вот это прямо бомба - #nogil в транке Python.
И чувак, который это таки сделал, войдет в историю (https://xn--r1a.website/itpgchannel/1241)
Потрясающее упорство, надо сказать.
А вот это прямо бомба - #nogil в транке Python.
И чувак, который это таки сделал, войдет в историю (https://xn--r1a.website/itpgchannel/1241)
Потрясающее упорство, надо сказать.
GitHub
gh-116167: Allow disabling the GIL with `PYTHON_GIL=0` or `-X gil=0` by swtaarrs · Pull Request #116338 · python/cpython
In free-threaded builds, running with PYTHON_GIL=0 or -X gil=0 will now disable the GIL. #116322 and #116329 track follow-up work to re-enable the GIL when loading an incompatible extension, and to...
🔥31
commit -m "better"
Проект #carbon продолжает нас радовать кодом лулзами своими transparency reportами - https://github.com/carbon-language/carbon-lang/discussions/3615 Ждем, надеемся.
Смотрите, что Google пишет про #carbon:
https://security.googleblog.com/2024/03/secure-by-design-googles-perspective-on.html
"We see no realistic path for an evolution of C++ into a language with rigorous memory safety guarantees that include temporal safety"
"A large-scale rewrite of all existing C++ code into a different, memory-safe language appears very difficult and will likely remain impractical"
https://security.googleblog.com/2024/03/secure-by-design-googles-perspective-on.html
"We see no realistic path for an evolution of C++ into a language with rigorous memory safety guarantees that include temporal safety"
"A large-scale rewrite of all existing C++ code into a different, memory-safe language appears very difficult and will likely remain impractical"
Google Online Security Blog
Secure by Design: Google’s Perspective on Memory Safety
Alex Rebert, Software Engineer, Christoph Kern, Principal Engineer, Security Foundations Google’s Project Zero reports that memory safety v...
😁11👍9🆒4
commit -m "better"
Раз уж я занялся автоматизацией своего home #lab, то расскажите мне за DNS. Вот у меня изначально каждый хост знает свой hostname. Ну потому, что хост - это единственное, что отличает его конфигурацию от всех остальных, и это единственное, что я задаю руками…
В фоне продолжаю заниматься своей home #lab.
Там уже 3 ноды, автоматическая наливка с 0, нормальная сеть между всеми узлами (2.5gb), IaC для выкладки (конечно же, на основе #ix), сервисы сами рассказывают про себя через mdns, и вообще, красота.
Коллеги, а порекомендуйте нормальную очередь задач для распределенного кластера?
Я это вижу примерно так - etcd + какая-то встраиваемая библиотека, которая реализует скучные вещи, типа очередей поверх etcd, какой-нить простой work stealing алгоритм шедулинга, эфемерные ноды для каждого хоста, разгребающего очередь, для того, чтобы задачи с упавших нод прозрачно возвращались в общую очередь, и прочий crud.
Вот, например, как https://github.com/lytics/metafora, только живое, и чтобы звезд побольше?
Там уже 3 ноды, автоматическая наливка с 0, нормальная сеть между всеми узлами (2.5gb), IaC для выкладки (конечно же, на основе #ix), сервисы сами рассказывают про себя через mdns, и вообще, красота.
Коллеги, а порекомендуйте нормальную очередь задач для распределенного кластера?
Я это вижу примерно так - etcd + какая-то встраиваемая библиотека, которая реализует скучные вещи, типа очередей поверх etcd, какой-нить простой work stealing алгоритм шедулинга, эфемерные ноды для каждого хоста, разгребающего очередь, для того, чтобы задачи с упавших нод прозрачно возвращались в общую очередь, и прочий crud.
Вот, например, как https://github.com/lytics/metafora, только живое, и чтобы звезд побольше?
GitHub
GitHub - lytics/metafora: Distributed long running work system in Go
Distributed long running work system in Go. Contribute to lytics/metafora development by creating an account on GitHub.
👍1
Forwarded from Технологический Болт Генона
Мы живем в обществе
https://gitlab.freedesktop.org/mesa/mesa/-/issues/10803
Спасибо подписчику за ссылку
😁25👍4🤯3😢3
commit -m "better"
В фоне продолжаю заниматься своей home #lab. Там уже 3 ноды, автоматическая наливка с 0, нормальная сеть между всеми узлами (2.5gb), IaC для выкладки (конечно же, на основе #ix), сервисы сами рассказывают про себя через mdns, и вообще, красота. Коллеги,…
Мне тут сказали, что я не смогу запилить херобору, которая бы решала эту задачу, за 5 минут.
Вызов был принят, и вот результат:
Это демон, может быть запущен на нескольких хостах:
Это клиент:
По ссылке - результат:
https://gist.github.com/pg83/3528e80835386fac13175aec353e5d3a
Вызов был принят, и вот результат:
Это демон, может быть запущен на нескольких хостах:
pg# cat run.sh
#!/bin/sh
set -xue
while true; do
sleep 1
etcdctl get --keys-only --prefix /tasks/ | grep '/' | while read l; do
etcdctl lock ${l} -- /bin/sh -c "(etcdctl get ${l} | tail -n +2 | /bin/sh) || true; etcdctl del ${l}"
done
done
Это клиент:
etcdctl put /tasks/${RANDOM} 'ls -la'По ссылке - результат:
https://gist.github.com/pg83/3528e80835386fac13175aec353e5d3a
Gist
gist:3528e80835386fac13175aec353e5d3a
GitHub Gist: instantly share code, notes, and snippets.
🔥16👍5❤4❤🔥2🤯1🐳1
commit -m "better"
Новости из мира Linux: https://www.phoronix.com/news/Bcachefs-Merged-Linux-6.7 #bcachefs bcachefs вот так взяли, и смержили в 6.7. Видимо, #Kent нашел правильное место, куда надо лизнуть, потому что иначе такой прогресс сложно объяснить. Вышло ядро 6.6…
https://www.phoronix.com/news/Linux-6.9-Bcachefs-Attempt
Классная заруба между Линусом и автором #bcachefs #Kent.
TL;DR - Кент хочет выделить кусок bcachefs в библиотеку, чтобы ей могли воспользоваться разработчики #XFS
Линус тут встает в позицию "пока ты держишь свое говно при себе, оно может быть сделано произвольно всратым образом, но если ты делаешь из этого либу, то она должна быть устроена так-то и так-то". Ну и щедро наваливает комментариев про то, как она должна быть устроена (причем комментариев по существу).
Не знаю.
Мне кажется, чтовзрослые люди за закрытыми дверями могут делать все, что захотят если Кенту ОК, и XFS тоже ОК, то и ладно. Если этим говнокодом захочет воспользоваться третий участник, хехе, то его еще больше причешут.
Хороший и красивый код чаще всего рождается не в процессе дизайна, а в процессе постоянного переписывания и вылизывания под все большее число потребителей.
А Линусу просто не нравится автор bcachefs (и вообще, что это за выскочка?!), вот он и находит причины для rant.
Классная заруба между Линусом и автором #bcachefs #Kent.
TL;DR - Кент хочет выделить кусок bcachefs в библиотеку, чтобы ей могли воспользоваться разработчики #XFS
Линус тут встает в позицию "пока ты держишь свое говно при себе, оно может быть сделано произвольно всратым образом, но если ты делаешь из этого либу, то она должна быть устроена так-то и так-то". Ну и щедро наваливает комментариев про то, как она должна быть устроена (причем комментариев по существу).
Не знаю.
Мне кажется, что
Хороший и красивый код чаще всего рождается не в процессе дизайна, а в процессе постоянного переписывания и вылизывания под все большее число потребителей.
А Линусу просто не нравится автор bcachefs (и вообще, что это за выскочка?!), вот он и находит причины для rant.
Phoronix
Linus Torvalds Isn't Happy With Some Of The Bcachefs Code For Linux 6.9
Since the Bcachefs file-system was upstreamed in the Linux 6.7 kernel it's been humming along fairy well
😁8👍4🤔2❤1👎1
commit -m "better"
Мне тут сказали, что я не смогу запилить херобору, которая бы решала эту задачу, за 5 минут. Вызов был принят, и вот результат: Это демон, может быть запущен на нескольких хостах: pg# cat run.sh #!/bin/sh set -xue while true; do sleep 1 etcdctl…
Про пользу #etcd в home #lab.
В качестве роутера я использую коробочку от Xiaomi.
Ну, потому что она мне дает простой в эксплуатации mesh, и потому что, когда-то, дала мне возможность быстро развернуть нормальную сетку в доме за городом.
Нормальную - это значит, что я из любой точки дома получаю заявленный гигабит от провайдера, по воздуху.
Но у этой коробочки есть один небольшой недостаток - она конфигурируется из web gui, и настроек там очень мало.
(openwrt? нет, не хочу, когда руки до этого дойдут, запилю свой роутер, на #stal/ix)
В общем, в форме, которая настраивает port forwarding, можно установить только один адрес на входящий порт.
А я, знаете ли, решил, что в моем home lab будет сколько возможно мало точек отказа.
Поэтому, когда я решил наконец-то настроить edge proxy, который бы занимался тем, что делал ретраи, разбрасывал запросы по бекендам, и делал dispatch по vhost, я приуныл.
Потому что если взгромоздить этот прокси на 1 тачку, то это +1 точка отказа, а если хочется взгромоздить на несколько, то смотри выше пункт про то, что в формочке можно указать только 1 адрес для одного внешнего порта.
У меня в голове закрутились слова IPVS, keepalived, и я, признаться, приуныл еще больше!
Вот, придумал решение, которое мне кажется не очень всратым, решает мою проблему, и не содержит слов ipvs, keepalived, и прочих ноковых приблуд.
У меня на трех хостах крутится скрипт, который в цикле пытается, под etcd lock, запустить прокси. Везунчик, который получил блокировку, вешает на eth0 какой-то заранее известный IP адрес, и запускает на нем proxy. А все остальные, если блокировку взять не удалось, у себя этот IP адрес убирают, чтобы он всегда был только на одном интерфейсе.
В роутере прописываю этот самый IP адрес.
Если хост умирает, то кто-то другой получает блокировку, и цикл повторяется.
Ну, то есть, получился такой автоматический failover, без IP балансировки нагрузки.
У этого решения есть понятные проблемы - что произойдет, если master умер "странно", Ну, вот, блокировку в etcd проебал, а IP адрес с интерфейса снять не получается? Не знаю, расцениваю вероятность этого, как довольно низкую.
В качестве роутера я использую коробочку от Xiaomi.
Ну, потому что она мне дает простой в эксплуатации mesh, и потому что, когда-то, дала мне возможность быстро развернуть нормальную сетку в доме за городом.
Нормальную - это значит, что я из любой точки дома получаю заявленный гигабит от провайдера, по воздуху.
Но у этой коробочки есть один небольшой недостаток - она конфигурируется из web gui, и настроек там очень мало.
(openwrt? нет, не хочу, когда руки до этого дойдут, запилю свой роутер, на #stal/ix)
В общем, в форме, которая настраивает port forwarding, можно установить только один адрес на входящий порт.
А я, знаете ли, решил, что в моем home lab будет сколько возможно мало точек отказа.
Поэтому, когда я решил наконец-то настроить edge proxy, который бы занимался тем, что делал ретраи, разбрасывал запросы по бекендам, и делал dispatch по vhost, я приуныл.
Потому что если взгромоздить этот прокси на 1 тачку, то это +1 точка отказа, а если хочется взгромоздить на несколько, то смотри выше пункт про то, что в формочке можно указать только 1 адрес для одного внешнего порта.
У меня в голове закрутились слова IPVS, keepalived, и я, признаться, приуныл еще больше!
Вот, придумал решение, которое мне кажется не очень всратым, решает мою проблему, и не содержит слов ipvs, keepalived, и прочих ноковых приблуд.
У меня на трех хостах крутится скрипт, который в цикле пытается, под etcd lock, запустить прокси. Везунчик, который получил блокировку, вешает на eth0 какой-то заранее известный IP адрес, и запускает на нем proxy. А все остальные, если блокировку взять не удалось, у себя этот IP адрес убирают, чтобы он всегда был только на одном интерфейсе.
В роутере прописываю этот самый IP адрес.
Если хост умирает, то кто-то другой получает блокировку, и цикл повторяется.
Ну, то есть, получился такой автоматический failover, без IP балансировки нагрузки.
У этого решения есть понятные проблемы - что произойдет, если master умер "странно", Ну, вот, блокировку в etcd проебал, а IP адрес с интерфейса снять не получается? Не знаю, расцениваю вероятность этого, как довольно низкую.
😁10🥴7🤔4👌3❤2🐳2
commit -m "better"
Вот, опять, ровно те же круги по воде - новая libadwaita, новая версия webkitgtk. Значит, скоро 45-ый #GNOME. Вот вам соображение - libadwaita и webkitgtk пишет, в основном, #igalia, в первую переносят запчасти из epiphany, а вторую - в ней же и используют.…
Сегодня вышли новая libadwaita и новый webkitgtk, значит, скоро 46 релиз.
https://webkitgtk.org/2024/03/16/webkitgtk2.44.0-released.html
https://webkitgtk.org/2024/03/16/webkitgtk2.44.0-released.html
🥴6👍4❤2
commit -m "better"
Про пользу #etcd в home #lab. В качестве роутера я использую коробочку от Xiaomi. Ну, потому что она мне дает простой в эксплуатации mesh, и потому что, когда-то, дала мне возможность быстро развернуть нормальную сетку в доме за городом. Нормальную - это…
Рубрика #делай_без_изъебов, #нормально_делай_нормально_будет
Кстати, в качестве edge proxy хочу посоветовать https://github.com/umputun/reproxy
(не на правах рекламы! #lab)
Прелесть этой тулзы в том, что в ней есть примерно все, чтобы сделать проксирование "начального уровня":
* несколько видов discovery endpoint (статика, файлы, и всякие dns - консулы)
* простой load balancer (random, round robin). Причем простой не только в использовании, но и в настройке, я даже сначала не понял, что он там есть.
* интеграция с Let's Encrypt acme certificates. Https из коробки за пару минут.
Ну, то есть, установил 1 файл (приблуда написана на Go, статика, а это всегда приятно), передал пару настроек через command line (даже конфиг не нужен), и все работает.
Понятное дело, что, по каждому направлению, вам может потом захотеться того, чего тулза не умеет, но это будет "потом", и расширять тоже можно по частям.
Ну, вот, нужна балансировка получше, поставил рядом sidecar, который умеет это лучше.
Мне пока больше ничего не надо, мои потребности тулза закрыла целиком. То, что заявлено, работет хорошо.
Пожалуй, единственный заметный недостаток - не умеет прикрывать авторизацией отдельный vhost, а только все целиком.
Кстати, в качестве edge proxy хочу посоветовать https://github.com/umputun/reproxy
(не на правах рекламы! #lab)
Прелесть этой тулзы в том, что в ней есть примерно все, чтобы сделать проксирование "начального уровня":
* несколько видов discovery endpoint (статика, файлы, и всякие dns - консулы)
* простой load balancer (random, round robin). Причем простой не только в использовании, но и в настройке, я даже сначала не понял, что он там есть.
* интеграция с Let's Encrypt acme certificates. Https из коробки за пару минут.
Ну, то есть, установил 1 файл (приблуда написана на Go, статика, а это всегда приятно), передал пару настроек через command line (даже конфиг не нужен), и все работает.
Понятное дело, что, по каждому направлению, вам может потом захотеться того, чего тулза не умеет, но это будет "потом", и расширять тоже можно по частям.
Ну, вот, нужна балансировка получше, поставил рядом sidecar, который умеет это лучше.
Мне пока больше ничего не надо, мои потребности тулза закрыла целиком. То, что заявлено, работет хорошо.
Пожалуй, единственный заметный недостаток - не умеет прикрывать авторизацией отдельный vhost, а только все целиком.
GitHub
GitHub - umputun/reproxy: Simple edge server / reverse proxy
Simple edge server / reverse proxy. Contribute to umputun/reproxy development by creating an account on GitHub.
👍12🔥6🤔5❤1👌1
#bootstrap #rant #svg
https://github.com/hyprwm/Hyprland/releases/tag/v0.37.0
Передовицы всех газет пишут про наш вклад в дело open source!
fix libc++/clang build by @pg83 in #4886
На самом деле, в случае hyprland это какой-то сизифов труд, потому что я примерно каждый релиз чиню им чего-нить для собираемости с libc++/clang, но каждый новый релиз все равно сломан в каком-то новом месте.
0.37.1 сломан в https://github.com/hyprwm/hyprcursor/commit/60f9c53cf2e482c4ee9d2ce2f9c6f26af2f76a91 (пофикшено в trunk)
Поэтому получается, что в моем setup собирается только или патченый hyprland, или hyprland из промежуточной ревизии. Школота.
Еще они завязались на librsvg для рендеринга курсоров - https://github.com/hyprwm/hyprcursor/blob/main/libhyprcursor/hyprcursor.cpp#L369 Я им поканапихал за щеку подсунул заглушек, потому что таких курсоров не встречал in the wild. https://github.com/pg83/ix/commit/11d3869d765cdc73c5d40d977f896ec9381c9421#diff-b9e5df4feed50ceee7a2bc09956a9bcae55f1e87c6902686aa073deaf0272c81R15-R38
Да, да, коллеги совершенно перестали стесняться, и изобретают свои форматы для хранения курсоров в svg (https://github.com/hyprwm/hyprcursor?tab=readme-ov-file#why). Вот бы еще server side курсоры прикрутили, было бы совсем хорошо.
https://github.com/hyprwm/Hyprland/releases/tag/v0.37.0
Передовицы всех газет пишут про наш вклад в дело open source!
fix libc++/clang build by @pg83 in #4886
На самом деле, в случае hyprland это какой-то сизифов труд, потому что я примерно каждый релиз чиню им чего-нить для собираемости с libc++/clang, но каждый новый релиз все равно сломан в каком-то новом месте.
0.37.1 сломан в https://github.com/hyprwm/hyprcursor/commit/60f9c53cf2e482c4ee9d2ce2f9c6f26af2f76a91 (пофикшено в trunk)
Поэтому получается, что в моем setup собирается только или патченый hyprland, или hyprland из промежуточной ревизии. Школота.
Еще они завязались на librsvg для рендеринга курсоров - https://github.com/hyprwm/hyprcursor/blob/main/libhyprcursor/hyprcursor.cpp#L369 Я им пока
Да, да, коллеги совершенно перестали стесняться, и изобретают свои форматы для хранения курсоров в svg (https://github.com/hyprwm/hyprcursor?tab=readme-ov-file#why). Вот бы еще server side курсоры прикрутили, было бы совсем хорошо.
GitHub
Release v0.37.0 · hyprwm/Hyprland
Happy 2 years of Hyprland!! Thanks to everyone who has supported Hyprland in any way shape or form, couldn't have done it without yall. <3
A chonker update for y'all for this occasion.
N...
A chonker update for y'all for this occasion.
N...
🤡10🔥3🤔3❤🔥1💩1