Поиск по сайту:

Что такое BusyBox и где он используется?


BusyBox — это набор основных утилит Unix, упакованных в один двоичный файл. Это делает его идеальным для сред с ограниченными ресурсами, таких как встроенные устройства. Полный дистрибутив насчитывает почти 400 самых распространенных команд.

BusyBox имеет открытый исходный код и распространяется под лицензией GPL. Он был создан в 1995 году с намерением разместить загрузочную систему на одной дискете. Объединение команд в один двоичный файл снижает накладные расходы и позволяет совместно использовать код между, казалось бы, независимыми приложениями.

Что включает в себя BusyBox?

BusyBox предоставляет удобные повседневные команды, которые часто кажутся частью вашей оболочки. Хотя пользовательские инструменты, такие как ls и cat, распространены повсеместно, на самом деле они находятся в отдельном служебном пакете, который не зависит от вашей оболочки. Многие дистрибутивы Linux доставляют эти команды через coreutils GNU, но другие вместо этого используют BusyBox.

Проект работает путем символической ссылки знакомых имен команд в /usr/bin на двоичный файл BusyBox. Затем этот исполняемый файл вызывает функцию, соответствующую имени, переданному в качестве первого аргумента.

  • В BusyBox команда mkdir запускает /usr/bin/busybox mkdir
  • С GNU Coreutils — команда mkdir запускает /usr/bin/mkdir.

Вы можете прозрачно использовать такие команды, как mkdir, passwd, ps, tar и wget после установки BusyBox. Команды реализованы в виде «апплетов», объединенных в функционирующий дистрибутив BusyBox. Полный набор весит около 1 МБ. Апплеты являются съемными, поэтому размер двоичного файла можно уменьшить еще больше. Вы можете проверить, что доступно в вашей установке, запустив busybox без аргументов.

Поскольку BusyBox был создан для поддержки крошечных загружаемых систем, он охватывает все, что необходимо в пользовательской среде для запуска и администрирования системы POSIX. Это распространяется на минимальную реализацию init, способную работать как процесс с идентификатором 1 и поддерживать системные службы. Вы можете использовать BusyBox как облегченную альтернативу обычному демону init или systemd.

Поскольку BusyBox намеренно минимален, не каждая команда реализует все функции своего аналога GNU. Вы можете найти некоторые отсутствующие флаги или поведенческие различия в необычных ситуациях. Это один из компромиссов упрощенного характера BusyBox.

Где используется BusyBox?

BusyBox можно найти везде, где есть проблема с использованием диска. Он используется минимальными операционными системами, такими как Alpine, а также специализированными сценариями, такими как встроенные устройства и мобильные оболочки.

Велика вероятность, что устройство на основе Unix, на котором не работает обычный дистрибутив ОС, будет использовать BusyBox. Вы найдете его на своем сетевом маршрутизаторе, смарт-телевизоре, современном автомобиле и устройствах IoT. Каждый из этих параметров характеризуется необходимостью запуска основных пользовательских инструментов в среде с жесткими ограничениями ресурсов.

Доставка единого двоичного файла «все в одном» более эффективна. Это уменьшает избыточность, позволяя всем командам совместно использовать общий код без сохранения автономных библиотек на диске. Поскольку BusyBox предлагает хорошую совместимость с другими реализациями и распространяется под лицензией GPL, это обычно вариант для сред, которым требуется легкий набор утилит.

Производители встраиваемых устройств также выигрывают от модульной природы BusyBox. Продукту IoT может потребоваться всего несколько важных утилит для обеспечения его функциональности. Распространение модифицированного двоичного файла BusyBox высвобождает еще несколько КБ дискового пространства, что может привести к значительной экономии.

Как попробовать BusyBox

Вы можете установить BusyBox, не заменяя ваши текущие утилиты. Используйте диспетчер пакетов, чтобы добавить busybox, затем добавьте выбранную команду в двоичный файл busybox для запуска апплета:

busybox mkdir test

Это гарантирует, что версия команды BusyBox будет использоваться вместо версии в пути вашей оболочки по умолчанию.

Другой способ попробовать BusyBox — использовать его официальный образ Docker:

docker run -it --rm busybox

Если у вас установлен Docker, вы попадете в реализацию оболочки BusyBox. Вы можете запустить конкретную команду, добавив ее после имени изображения:

docker run -it --rm busybox mkdir demo

BusyBox также имеет эмулятор JavaScript, который позволяет вам попробовать утилиты в вашем веб-браузере.

В большинстве дистрибутивов Linux вы не можете полностью заменить coreutils на BusyBox. Команды и пакеты для конкретных дистрибутивов часто запрограммированы таким образом, чтобы утилиты coreutils были доступны. Ваш дистрибутив обычно отказывается удалять этот пакет, так как он может сделать систему неработоспособной, если удалить init.

Если вы хотите положиться на BusyBox, лучше всего начать с дистрибутива, который его использует, а затем добавить другое программное обеспечение поверх него. Добавление BusyBox вместе с coreutils, как показано выше, хорошо работает, когда вам нужно проверить, как апплет будет реагировать на определенный сценарий.

Заключение

BusyBox — это облегченная реализация пользовательских утилит UNIX, которая поставляется в виде одного двоичного файла. Вы можете комбинировать его с ядром Linux, чтобы создать работающую систему без каких-либо других зависимостей.

BusyBox оптимизирован для сред с ограниченным пространством. Это делает его идеальным для встроенных продуктов, таких как устройства IoT. Вы также можете найти BusyBox, установленный в минимальных, но в остальном универсальных дистрибутивах Linux, таких как Alpine Linux.

Независимо от того, используете ли вы BusyBox или GNU Coreutils, ваши знакомые команды, как правило, будут «просто работать» с любой реализацией. Любые возникающие проблемы обычно возникают из-за того, что BusyBox не реализует определенный редкий флаг или параметр конфигурации.