Rurima: лёгкий контейнерный рантайм для систем без Docker и Podman

Rurima запускает контейнеры там, где Docker и Podman не работают: на embedded-устройствах, старых ядрах или Android в Termux. Один статический бинарник без демона и cgroups, но с минимальными зависимостями и поддержкой девяти архитектур.

Rurima: лёгкий контейнерный рантайм для систем без Docker и Podman

Rurima: контейнерный рантайм для систем, где Docker не запустится

Rurima — не замена Docker. Это инструмент для уголков системного мира, где даже Podman кажется тяжёлым. Один статический бинарник на 10–20 МБ, который не требует демона, обходится без cgroups и namespaces и поддерживает девять архитектур — от x86_64 до riscv64 и loong64. Его мишень — embedded-устройства, старые ядра, Android в Termux или любая среда, где установка Docker заканчивается ошибкой «не хватает места» или «не поддерживаются capabilities».

Но простота оборачивается напряжённостью: rurima даёт запуститься там, где другие отказываются, но не даёт полноценной изоляции. Он не предназначен для production, не обещает rootless-безопасности и не совместим с OCI-стандартом. Для production-систем, Kubernetes и rootless-окружений он не подходит; для одноразовых запусков ARM-контейнеров на маршрутизаторе или Alpine в Termux — вполне.


Как это работает

Rurima состоит из двух частей: встроенного рантайма ruri, который исполняет контейнеры, и обёртки rurima, которая скачивает образы, распаковывает rootfs, делает бэкапы и обновления. Зависимости минимальны — tar, xz, gzip, curl, jq и proot (последний нужен только для запуска без root). На Android proot порой не справляется с mount и сетевыми вызовами — об этом прямо говорят скрипты из устаревшего проекта daijin: fixup.sh для сетевых костылей и proot_start.sh для обёртывания запуска.

При старте rurima проверяет, что бинарник не запущен с suid/sgid или capabilities, и завершает работу с сообщением «this is unsafe desu QwQ». Запрещено распаковывать rootfs в /etc, /usr или /, чтобы не затереть хост-систему.


Функционал и ограничения

Одна команда — и образ на месте:
rurima pull hello-world ./test
Rurima парсит Docker-конфигурацию, скачивает образ, распаковывает rootfs в указанную директорию. Потом контейнер можно запустить:
rurima run hello-world
Встроенный рантайм ruri подхватит entrypoint, CMD, переменные окружения и рабочую директорию — ровно то, что описано в Dockerfile. Есть бэкап/рестор rootfs в tar, встроенная OTA для обновления rurima, и поддержка архитектур от i386 до s390x.

Но за пределами этого списка — ограничения. Нет OCI-совместимости, нет Control Groups для ограничения памяти и CPU, нет встроенной системы сборки контейнеров, нет интеграции с Kubernetes. Rurima не обещает полноценной изоляции — он обещает запуститься там, где Docker не запустится.


Где выигрывает, где проигрывает

Победные сценарии:

  • ARM-роутеры с OpenWrt, где места на диске хватает только на прошивку.
  • Старые серверы с ядрами ниже 4.0, где cgroups отключены или сломаны.
  • Android в Termux, когда нужен быстрый терминал для Alpine без установки Docker/Podman.
  • Embedded-платы с LoongArch или RISC-V, где бинарники для Docker недоступны.

Проигрышные сценарии:

  • Production-окружения, где нужны Control Groups для памяти и CPU.
  • Rootless-режимы с минимальными рисками — Podman делает это безопаснее.
  • Android, если контейнер требует сетевых привилегий или mount-точек, с которыми proot не справляется.

Реальный тест: Alpine в Termux на Android без root

Пользователь в Termux устанавливает зависимости: proot, curl, jq. Скачивает статический бинарник rurima для arm64. Запускает:
rurima pull alpine ./alpine-rootfs
Rurima скачивает образ, распаковывает rootfs через proot. Контейнер стартует, но интернета нет — proot не прокидывает сеть. Приходится вручную скачивать fixup.sh из архива daijin и применять его к контейнеру. После этого сеть появляется, но mount внутри контейнера работает криво: некоторые системные вызовы не эмулируются корректно.

Этот сценарий показывает главную проблему rurima: он работает, но требует ручной настройки там, где Docker/Podman делают это автоматически. Rurima — не замена, а обходной путь для систем, где стандартные инструменты не по зубам.


Что упускают в документации

Производительность без cgroups — это не просто «немного медленнее». Контейнеры могут забить всю память, если внутри запустится memhog. В статьях про Docker в LXC прямо пишут, что без Control Groups возможны проблемы со стабильностью и откликом.

Безопасность тоже хромает. Proot — это эмулятор привилегий, а не изоляция. Он не даёт тех же гарантий, что user namespace в Podman или полноценные namespaces в Docker. Rurima запрещает suid/sgid при старте, но запуск через proot всё равно оставляет лазейки для эскалации привилегий на уязвимой системе.

Документация содержит противоречия: то «не требует cgroups», то «работает через proot, который их эмулирует». Нет бенчмарков, нет security-audit, только обещание минимализма.


Для кого и когда стоит попробовать

Rurima стоит попробовать, если:

  • Ваша система не тянет Docker или Podman — места нет, ядро старое, архитектура экзотическая.
  • Вам нужен одноразовый контейнер для отладки — не для production, не для кластера.
  • Вы разрабатываете embedded-прошивку и хотите запустить тестовый контейнер прямо на устройстве.

Если нужна полноценная изоляция, rootless-безопасность или интеграция с Kubernetes — посмотрите сначала на Podman или rootless Docker. Они тяжелее, но делают то, что обещает rurima, только правильно.

Read more

Пять тысяч человек видят ИИ, которого не существует для остальных шести миллиардов

Андрей Карпати оценивает, что лишь пять тысяч человек имеют доступ к вершине возможностей языковых моделей, тогда как шесть миллиардов почти не сталкивались с ними. Разрыв в понимании ИИ растёт, и дело не в доступе, а в сложности задач, которые мы перед ним ставим.

Строительный сектор сжимается: главный риск — в «серой зоне»

Строительный сектор сжимается: главный риск — в «серой зоне»

Число строительных компаний в России сократилось на 4,3% за год. Но главная угроза — не в ликвидированных фирмах, а в десятках тысяч компаний с заблокированными счетами и высоким риском банкротства, которые могут обрушить подрядчиков.

Drex: модель, которая решает, а не говорит

Drex: модель, которая решает, а не говорит

В индустрии, где главным продуктом стал текст, появляется модель, которая отказывается от текста как такового. Drex принимает на вход факты и за один проход выдаёт распределение вероятностей по всем возможным вариантам. Никаких рассуждений вслух, никаких промежуточных выкладок — только числа.

Воронка Карпати: почему экспонента ИИ проходит мимо 99,8% человечества

Воронка Карпати: почему экспонента ИИ проходит мимо 99,8% человечества

Шесть миллиардов человек никогда не взаимодействовали с языковыми моделями. Еще один-два миллиарда хотя бы раз написали запрос в бесплатный ChatGPT. Около двадцати миллионов используют агентов в работе. И примерно пять тысяч человек имеют доступ к внутренним системам OpenAI. Андрей Карпати объясняе…