
Встречайте: muenvsubst — улучшенный envsubst
navrocky 28 минут назад Встречайте: muenvsubst — улучшенный envsubst 5 мин 1K C++ * DevOps * IT-инфраструктура * Микросервисы * Настройка Linux * Ранее я уже выкладывал пост об этой утилите, сейчас решил описать её...
В сфере искусственного интеллекта произошло заметное событие. navrocky 28 минут назад Встречайте: muenvsubst — улучшенный envsubst 5 мин 1K C++ * DevOps * IT-инфраструктура * Микросервисы * Настройка Linux * Ранее я уже выкладывал пост об этой утилите, сейчас решил описать её более развернуто и дать больше примеров и описания, так как функционал подрос за год. ПредысторияЯ в своей работе часто использовал стандартную линуксовую утилиту envsubst, с помощью неё удобно шаблонизировать конфигурационные файлы в разных скриптах. Но её функционала мне не хватало, она только умеет подставлять переменные среды в текст шаблона, например менять $VAR_NAME на её значение.
" | envsubstЗатем я нашел отличную реализацию шаблонизатора Mustache написанном на чистом bash - mo. И долго использовал его вместо envsubst. Синтаксис Mustache давал намного больше возможностей по шаблонизации чем простой envsubst.
Технические детали
echo "Hello, {{ USER }}! " | moНо всё-таки Mustache довольно примитивен, а синтаксис немного инопланетен, и не включает в себя некоторые продвинутые возможности типа макросов, преобразований текста. Поэтому мои поиски решения не прекращались.
Я смотрел в сторону полноценных шаблонизаторов такие как Jinja, ERB, Freemarker и пр. , и на утилиты на их основе, но мне не нравилось что они за собой тянут какой-то язык и его жирный рантайм. Да, я видел что есть утилиты-шаблонизаторы на Go, например Gomplate, которые собраны в статику, но когда я гляжу на размер этих бинарников мне становится грустно (~100Мб).
Возможно есть достойные шаблонизаторы и на Rust, но я уже не стал искать, решение было принято )Появление muenvsubstВ общем я решил что надо исправлять ситуацию, так родился мой проект muenvsubst. У меня большой опыт кодинга на C++. Я в своё время игрался со сборкой статики, с пакетным менеджером conan для C++.
Отраслевые последствия
Нашел в Conan Center шаблонизатор mustache, который минималистичный и ни от чего не зависит. Первый релиз утилиты был как раз с этим шаблонизатором, отсюда и возникла приставка "mu" перед envsubst. С этим шаблонизатором мой статический бинарник собранный под Alpine получился 1,3Мб, это уже вдохновляло!
Некоторое время я вёл борьбу с размером бинарника, я переделал сборку с Alpine на uClibc, размер бинарника стал 900Кб, также я добавил upx и получил 260Кб, это уже было прямо очень хорошо! Теперь шаблонизатор можно добавлять прямо в Git в нужный проект, где нужна шаблонизация. Всё интересное по сборке находится в Dockerfile.
Я специально сделал сборочный образ с uClibc на основе проекта Buildroot, так как эта стандартная библиотека даёт самый минимальный по размеру рантайм из известных мне. Обычный gnu libc - конечно громадный монстр по сравнению с этой библиотекой. Как я писал раньше - mustache довольно примитивен, я нашел ещё один более мощный шаблонизатор Inja, он также присутствует на Conan Center.
Событие, по словам экспертов, усилит конкуренцию в сфере ИИ.




