BusyBox в Linux: что это за проект и зачем он нужен?

Сисадмины, а также пользователи UNIX/Linux-систем привыкли к работе со своей любимой командной оболочкой и к стандартным программным средствам. Но использовать их всегда и везде невозможно. На помощь придёт BusyBox — упрощенный shell с набором компактных системных средств.

Команды Linux поставляются вместе с системой при установке дистро. Некоторые из основных команд, такие как  cd, kill и echo, фактически встроены в вашу оболочку. Другие, например ls, mv и cat — часть основного пакета служебных программ. Но в мире открытого кода всегда есть альтернативы, и одна из самых интересных — BusyBox.

* BusyBox — это проект, который обеспечивает простую реализацию почти 400 распространенных команд. Этот набор UNIX-утилит командной строки имеет открытый исходный код (GPL — лицензия на свободное ПО).

Подробнее о BusyBox в Linux

BusyBox реализовывает почти 400 общих команд, в том числе ls, mv, ln, mkdir, more, ps, gzip, bzip2, tar и grep. Он также содержит версию языка программирования awk, редактор потока sed, средство проверки файловой системы fsck, пакеты менеджеров rpm и dpkg. Также у BusyBox есть оболочка (sh), которая обеспечивает лёгкий доступ ко всем этим командам. Проект содержит все основные команды, необходимые интерфейсу портативных операционных систем POSIX, чтобы выполнить общие задачи обслуживания системы.

У BusyBox есть команда init, которую можно запустить как PID 1, чтобы она служила родительским процессом для всех других системных служб. Другими словами, проект можно использовать как альтернативу systemd, OpenRC, sinit, init и другим демонам запуска.

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

Минимализм в действии

BusyBox привлекателен из-за его минимализма, который так ценит сообщество. Все его команды собраны в один двоичный файл (busybox), а его руководство занимает всего 81 страницу, но охватывает почти 400 команд.

В качестве примера, вот вывод shadow версии useradd —help:

 -b, --base-dir BASE_DIR       base directory for home

 -c, --comment COMMENT         GECOS field of the new account

 -d, --home-dir HOME_DIR       home directory of the new account

 -D, --defaults                print or change the default config

 -e, --expiredate EXPIRE_DATE  expiration date of the new account

 -f, --inactive INACTIVE       password inactivity

 -g, --gid GROUP               name or ID of the primary group

 -G, --groups GROUPS           list of supplementary groups

 -h, --help                    display this help message and exit

 -k, --skel SKEL_DIR           alternative skeleton dir

 -K, --key KEY=VALUE           override /etc/login.defs

 -l, --no-log-init             do not add the user to the lastlog

 -m, --create-home             create the user's home directory

 -M, --no-create-home          do not create the user's home directory

 -N, --no-user-group           do not create a group with the user's name

 -o, --non-unique              allow users with non-unique UIDs

 -p, --password PASSWORD       encrypted password of the new account

 -r, --system                  create a system account

 -R, --root CHROOT_DIR         directory to chroot into

 -s, --shell SHELL             login shell of the new account

 -u, --uid UID                 user ID of the new account

 -U, --user-group              create a group with the same name as a user

А вот версия той же команды для BusyBox:

 -h DIR    Home directory

 -g GECOS  GECOS field

 -s SHELL  Login shell

 -G GRP    Group

 -S            Create a system user

 -D            Don't assign a password

 -H            Don't create home directory

 -u UID    User id

 -k SKEL   Skeleton directory (/etc/skel) 

Это различие — преимущество или ограничение? Зависит от ваших предпочтений. Вы хотите иметь 20 или 10 вариантов команд? Для многих пользователей минимализм BusyBox оптимален. В целом, это хорошая минимальная среда, которую можно использовать в качестве запасного варианта или для установки более надёжных инструментов, таких как Bash, Zsh, GNU Awk и т.д.

Инсталляция BusyBox

В Linux вы можете установить BusyBox с помощью диспетчера пакетов. Например, в 

Fedora и подобных:

$ sudo dnf install busybox

На Debian и производных:

$ sudo apt install busybox

В macOS используйте MacPorts или Homebrew. В Windows используйте Chocolatey.

Вы можете установить BusyBox в качестве оболочки с помощью команды chsh —shell. Мы храним BusyBox в /lib64, но его расположение зависит от того, где он установлен в вашем дистрибутиве.

$ which busybox

/lib64/busybox/busybox

$ chsh --shell /lib64/busybox/sh

Полная замена всех распространённых команд на BusyBox немного сложнее, потому что большинство дистрибутивов привязаны к определённым пакетам для определённых команд. Технически возможно заменить базовый init на init BusyBox, но ваш менеджер пакетов может не позволить вам удалить содержимое пакета init, из опасения, что вы сделаете вашу систему не загружаемой. 

Тестируйте BusyBox

Вам не нужно менять оболочку на BusyBox, чтобы просто затестить её. Вы можете запустить приложение из текущей оболочки:

$ busybox sh

~ $

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

~ $ busybox echo $0

sh

~ $ busybox ls --help

BusyBox vX.YY.Z (2021-08-25 07:31:48 NZST) multi-call binary.

Usage: ls [-1AaCxdLHRFplinshrSXvctu] [-w WIDTH] [FILE]...

List directory contents

 -1  One column output

 -a  Include entries that start with .

 -A  Like -a, but exclude . and ..

 -x  List by lines

[...]

Для “полного” взаимодействия с BusyBox вы можете создавать символические ссылки busybox для каждой команды:

$ mkdir bbx

$ for i in $(bbx --list); do \

ln -s /path/to/busybox bbx/$i \

done

Итог

BusyBox можно использовать, в качестве: 

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

Уже пробовали BusyBox? Поделитесь впечатлениями в комментах.

Добавить комментарий

Спасибо, что поделились