Перейти к содержимому
Главная страница » BusyBox в Docker

BusyBox в Docker

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

Если вы воспринимаете команды Linux как нечто само собой разумеющееся. И вы думаете, что ls, mv, wget, gzip, unzip, sed и другие подобные команды являются частью Linux, в то время как на самом деле эти команды являются частью пакета GNU Coreutils, который предустановлен в большинстве дистрибутивов Linux.

GNU Coreutils является практически единственным поставщиком различных команд для UNIX/Linux. Почти единственным, потому что всегда есть альтернативы, и BusyBox — одна из таких альтернатив GNU Coreutils.

Что такое BusyBox?

BusyBox — это проект с открытым исходным кодом, который предоставляет упрощённую реализацию около 400 распространённых команд UNIX/Linux. Упрощённую? Да. Реализация BusyBox исключает редкие и малоиспользуемые параметры команд. Всё помещается в 1 МБ, и именно благодаря этому минималистичному образу он приобрёл популярность среди разработчиков встраиваемых систем и Интернета вещей, а также в мире облачных вычислений.

Разработчики называют BusyBox «Швейцарским армейским ножом встроенного Linux».

Не ориентируйтесь на его размер. BusyBox поддерживает sed и awk, как классические редакторы (снова урезанная версия), и содержит собственную оболочку. Он даже содержит команду инициализации, которую можно запустить как PID 1. Это означает, что BusyBox можно настроить как альтернативу Systemd, OpenRC и т. д.

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

BusyBox предоставляет вам популярные команды Linux, такие как mvmkdir, ls и т. д., но содержит только наиболее часто используемые параметры этих команд. Этот минимализм — отличительная черта BusyBox.

Проблема в том, что вы не получаете все возможности команд Linux в BusyBox?

На самом деле это зависит от ваших потребностей. Большинству людей никогда не понадобятся все параметры команды. Некоторые команды Linux имеют более 50 параметров, и я готов поспорить, что вы никогда не использовали все параметры даже одной команды Linux.

BusyBox сокращает количество редко используемых опций. Например, у команды ls есть опция G, которая удаляет название группы из длинного списка (ls -l).

Я думаю, что вам никогда не требовалась эта опция. Именно поэтому она отсутствует в реализации ls в BusyBox. Если вам действительно нужен вывод без имени группы, всё, что вам нужно сделать, — это использовать для этого команду cut или awk.

Возьмём другой пример. Это справочная страница команды mv из GNU Coreutils:

Usage: mv [OPTION]... [-T] SOURCE DEST
  or:  mv [OPTION]... SOURCE... DIRECTORY
  or:  mv [OPTION]... -t DIRECTORY SOURCE...
Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY.

Mandatory arguments to long options are mandatory for short options too.
      --backup[=CONTROL]       make a backup of each existing destination file
  -b                           like --backup but does not accept an argument
  -f, --force                  do not prompt before overwriting
  -i, --interactive            prompt before overwrite
  -n, --no-clobber             do not overwrite an existing file
If you specify more than one of -i, -f, -n, only the final one takes effect.
      --strip-trailing-slashes  remove any trailing slashes from each SOURCE
                                 argument
  -S, --suffix=SUFFIX          override the usual backup suffix
  -t, --target-directory=DIRECTORY  move all SOURCE arguments into DIRECTORY
  -T, --no-target-directory    treat DEST as a normal file
  -u, --update                 move only when the SOURCE file is newer
                                 than the destination file or when the
                                 destination file is missing
  -v, --verbose                explain what is being done
  -Z, --context                set SELinux security context of destination
                                 file to default type
      --help     display this help and exit
      --version  output version information and exit

Теперь, вот страница справки по команде mv из BusyBox:

Usage: mv [-fin] SOURCE DEST
or: mv [-fin] SOURCE... DIRECTORY

Rename SOURCE to DEST, or move SOURCE(s) to DIRECTORY

	-f	Don't prompt before overwriting
	-i	Interactive, prompt before overwrite
	-n	Don't overwrite an existing file

Видите разницу?

Как получить BusyBox?

BusyBox доступен для многих систем на базе Unix, и существует множество продуктов, использующих его. Вот некоторые из них: buildroot, OpenWrt, Zdisk, Mindi и т. д.

Он также доступен в JsLinux от Bellard.org, который используется для загрузки Linux с помощью Javascript в браузере. Можно открыть веб-страницу и использовать команды утилиты в веб-браузере.

BusyBox также доступен для Windows. Вы можете скачать BusyBox с frippery.org и использовать его на компьютере с Windows. Поместите исполняемый файл в папку с программами и запустите его следующим образом:

Существуют различные способы получить BusyBox. Если вы просто хотите попробовать BusyBox в своём текущем дистрибутиве Linux, вы можете установить его с помощью менеджера пакетов вашего дистрибутива, например Apt, DNF или Yum.

В Ubuntu вы можете использовать эту команду для установки BusyBox:

sudo apt install busybox

После этого, если вы хотите запустить версию команды BusyBox, вам нужно добавить перед ней busybox.

busybox cat sample.txt

Если команда не реализована в BusyBox, выдается сообщение об ошибке «applet not found».

abhishek@LHB:~$ busybox xyz
xyz: applet not found
В качестве альтернативы вы можете скачать образ Docker с BusyBox и запустить его в работающем контейнере.

Запуск BusyBox в Docker

Существуют также другие варианты образов, такие как: busybox:uclib uclib от Buildroot, busybox:glibc glibc от Debian и busybox:musl musl от alpine.

И так, если у вас установлен Docker, начнем. Загрузите официальный образ Docker:

docker pull busybox

Запустите контейнер из образа и войдите в оболочку BusyBox:

docker run -it --rm busybox

Каждая команда Linux, которую вы здесь запускаете, поступает из BusyBox. Вам не нужно указывать это явно.

В целом, вам не нужен BusyBox в обычной системе Linux. У вас уже есть полная версия команд Linux из GNU Coreutils. Нет необходимости устанавливать урезанную версию.

Но BusyBox используется в особых случаях, например, при настройке минимальной ОС Linux для встроенных устройств или устройств Интернета вещей. То же самое происходит, когда вы хотите уменьшить размер образа Docker.

Надеюсь, теперь вы лучше понимаете, что такое BusyBox. Если вам нужны какие-либо пояснения или у вас есть предложения, пожалуйста, напишите мне в комментариях.

Оригинал: What is BusyBox in Linux? How to Use it?

Ссылки

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

Ваш адрес email не будет опубликован. Обязательные поля помечены *