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.