Релиз минималистичного набора системных утилит BusyBox 1.30

Представлен релиз пакета BusyBox 1.30 с реализацией набора стандартных утилит UNIX, оформленных в виде единого исполняемого файла и оптимизированных для минимального потребления системных ресурсов при размере комплекта менее 1 Мб. Первый выпуск новой ветки 1.30 позиционируется как нестабильный, полная стабилизация будет обеспечена в версии 1.30.1, которая ожидается примерно через месяц. Код проекта распространяется под лицензией GPLv2.

Модульный характер BusyBox даёт возможность сформировать один унифицированный исполняемый файл, содержащий в себе произвольный набор реализованных в пакете утилит (каждая утилита доступна в форме символической ссылки на данный файл). Размер, состав и функциональность коллекции утилит можно варьировать в зависимости от потребностей и возможностей встраиваемой платформы, для которой осуществляется сборка. Пакет самодостаточный, при статической сборке с uclibc для создания рабочей системы поверх ядра Linux требуется лишь создать несколько файлов устройств в директории /dev и подготовить файлы конфигурации. По сравнению с прошлым выпуском 1.29 потребление оперативной памяти типовой сборкой BusyBox 1.30 увеличилось на 7393 байт (с 941070 до 948463 байт).

BusyBox является основным инструментом в борьбе с нарушением GPL в прошивках. Организации Software Freedom Conservancy (SFC) и Software Freedom Law Center (SFLC) от лица разработчиков BusyBox как через суд, так и путём заключения внесудебных соглашений неоднократно успешно воздействовала на компании, не предоставляющие доступ к исходному коду GPL-программ. В то же время автор BusyBox всячески возражает против такой защиты — считая что она ломает ему бизнес. Для производителей, которые не желают открывать исходные тексты модифицированных компонентов, в рамках проекта Toybox развивается аналог BusyBox, распространяемый под лицензией BSD (2 clause). По возможностям Toybox пока отстаёт от BusyBox.

В версии BusyBox 1.30 выделяются следующие изменения:

  • Добавлена утилита «bc» для произвольных математических вычислений. На базе нового кода «bc» переработана и существенно расширена утилита «dc» (стековые вычисления в обратной польской записи);
  • В утилиту ifupdown добавлена поддержка опции «source-directory» для размещения настроек в виде набора файлов в каталоге (например, /etc/network/interfaces.d);
  • В реализацию TLS добавлена поддержка алгоритма x25519 (RFC 7748), режима FEATURE_TLS_SHA1 и шифров ECDHE-ECDSA-AES-128-CBC-SHA, TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 и TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256.
  • В командной оболочке ash обеспечена возможность встраивания shell-скриптов в исполняемые файлы. Налажен разбор выражений »${}»;
  • В командной оболочке hush оптимизирован код для проверки наличия символов в строке, улучшена обработка выражений »${var#…}»,»${var:+…}» и »${var/…/…}», работа «set -x» приближена к bash, обеспечена установка переменной окружения IFS, добавлена возможность запуска встроенных скриптов;
  • В утилиту awk добавлена поддержка отрицательных значений параметра «NF»;
  • В утилиту cp добавлен режим »--reflink» (клонирование метаданных файла с созданием ссылки на уже имеющиеся данные без их фактического копирования);
  • Поведение fdisk приведено в соответствие с аналогичной утилитой из набора util-linux 2.31;
  • В утилиту find добавлены опции »-executable» и »-quit»;
  • В процессе инициализации init решены проблемы с перезагрузкой в контейнерах;
  • В nbd-client добавлена поддержка нового варианта протокола и реализованы опции »-b»,»-d»,»-p»,»-N»;
  • В nslookup добавлена поддержка поиска доменов (опция search в resolv.conf);
  • В ntpd добавлена поддержка верификации сообщений при помощи хэшей MD5/SHA1, параметр MIN_FREQHOLD выставлен в значение 3, включён режим FEATURE_NTP_AUTH=y, минимальное значение G.FREQHOLD_cnt повышено с 8 до 10, реализована опция »-i SEC»;
  • В утилиту uptime добавлена опция »-s» (показ даты загрузки системы);
  • В утилите free обеспечен показ доступной для использования памяти;
  • В udhcp добавлена поддержка опции 211 («reboot time»);
  • В chpasswd добавлен режим запуска в chroot;
  • В sendmail добавлена поддержка режима аутентификации «AUTH PLAIN», в дополнение к «AUTH LOGIN»;
  • Проведена чистка реализации vi от дублирующегося кода;
  • В lineedit добавлена поддержка автодополнения встроенных скриптов;
  • В libarchive добавлена функция для распаковки встроенных данных;
  • В команду busybox добавлена опция '--show SCRIPT' для отображения скриптов;
  • В утилиту dd добавлена поддержка опции 'oflag=seek_bytes';
  • В nproc добавлены опции »--all --ignore=N».

© OpenNet