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? Поділіться враженнями в коментарях.

Авторські ІТ-курси з системного адміністрування та DevOps у навчальному центрі IT Education Center.





Залишити відповідь

Дякуємо, що поділились