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

Как Canonical внедряет AI в Ubuntu 26.10: невидимые помощники и Snap-ограничения

Как Canonical внедряет AI в Ubuntu 26.10: невидимые помощники и Snap-ограничения

Canonical анонсировала первые AI-функции для Ubuntu 26.10, которые будут работать локально через оптимизированные Snap-пакеты. Пользователи смогут отключать их, удаляя соответствующие пакеты, но столкнутся с новыми ограничениями Snap и необходимостью ручной проверки кода.

LXD и KVM: где контейнеризация выигрывает, а где проигрывает виртуализация

LXD и KVM: где контейнеризация выигрывает, а где проигрывает виртуализация

LXD запускает в 14 раз больше контейнеров и стартует в 16 раз быстрее KVM, но при росте нагрузки его преимущества тают. Контейнеры делят ядро хоста, а ВМ изолированы аппаратно — выбор зависит от архитектуры и типа задач.

Что меняется в подписках Unity в 2026 году: цены, комиссии и новые условия

Что меняется в подписках Unity в 2026 году: цены, комиссии и новые условия

Unity поднимает цены на подписки и вводит комиссию за установки, которая может начать действовать ретроактивно после обновления проекта до Unity 6. Теперь выбор движка зависит не только от бюджета, но и от того, как обновляется проект и как монетизируется игра.