busybox
Объединяет крошечные версии многих распространённых утилит UNIX в один небольшой двоичный файл (1-2 Мбайт). Он заменяет большинство утилит, которые обычно находятся в GNU Coreutils, GNU Findutils и т.д.
- Версия: 1.36.1
- Домашняя страница: https://www.busybox.net
- Время сборки: 0.3 ОВС
Настройка
Процесс настройки пакета
busyboxсхож с процессом настройки ядра Linux. Параметры сборки записываются в файл.config. Можно сконфигурировать сборку в псевдографическом режиме (make menuconfig), а можно использовать стандартный конфиг (make defconfig). Вы можете сохранить файл.configдля того, чтобы в будущем (в случае пересборки этой версии BusyBox или в случае сборки новой версии этого пакета) не конфигурировать пакет вновь.
Убедитесь, что дерево исходного кода BusyBox чистое и не содержит лишних файлов:
make mrproper
Далее требуется настроить пакет BusyBox, выбрав те опции, которые вам нужны, и убрать то, что вам не требуется. В зависимости от числа выбранных опций зависит в том числе и размер вашей системы, однако BusyBox — вещь довольно минималистичная, и на размер системы влияет больше ядро Linux, его модули и файлы Device Tree.
make ARCH=arm64 menuconfig
Процесс настройки
В разделах Archival Utilities, Coreutils, Console Utilities, Debian Utilities, klibc-utils, Editors и т.д. выберите сборку программ и утилит в зависимости от того, в каких сценариях должна использоваться ваша система LFA, а также в зависимости от её конечного размера. Конечно, на её размер куда больше будут влиять ядро и файлы, необходимые для загрузки системы, но инструкции по уменьшению размера, к примеру, ядра Linux, ищите сами на просторах интернета.
Система инициализации
Поскольку чуть позже мы установим в LFA загрузочные скрипты, нам требуется система инициализации, которая эти скрипты будет исполнять. Для этого компилируйте BusyBox с поддержкой init, halt, poweroff, reboot. Кроме того, вам нужны программы getty и login.
Init Utilities --->
<*> halt [CONFIG_HALT]
<*> poweroff [CONFIG_POWEROFF]
<*> reboot [CONFIG_REBOOT]
<*> init [CONFIG_INIT]
Login/Password Management Utilities --->
<*> getty [CONFIG_GETTY]
<*> login [CONFIG_LOGIN]
mdev
В данном руководстве рекомендуется использовать mdev для динамического управления устройствами в директории /dev. Включите следующие опции:
Linux System Utilities --->
<*> mdev [CONFIG_MDEV]
<*> Support /etc/mdev.conf [CONFIG_FEATURE_MDEV_CONF]
<*> Support loading of firmware [CONFIG_FEATURE_MDEV_LOAD_FIRMWARE]
<*> Support daemon mode [CONFIG_FEATURE_MDEV_DAEMON]
Отключение опций
После конфигурирования вам нужно отлючить ряд возможностей, с которыми мы не смогли бы корректно собрать этот пакет.
Во-первых, отключите сборку ifplugd и inetd, поскольку их сборка вместе с musl имеет проблемы:
sed -i 's/\(CONFIG_\)\(.*\)\(INETD\)\(.*\)=y/# \1\2\3\4 is not set/g' .config
sed -i 's/\(CONFIG_IFPLUGD\)=y/# \1 is not set/' .config
Отключите использование utmp/wtmp, поскольку musl их не поддерживает:
sed -i 's/\(CONFIG_FEATURE_WTMP\)=y/# \1 is not set/' .config
sed -i 's/\(CONFIG_FEATURE_UTMP\)=y/# \1 is not set/' .config
Отключите использование ipsvd для TCP и UDP, поскольку у него есть проблемы сборки вместе с musl (аналогично inetd):
sed -i 's/\(CONFIG_UDPSVD\)=y/# \1 is not set/' .config
sed -i 's/\(CONFIG_TCPSVD\)=y/# \1 is not set/' .config
Сборка компонента tc на ядрах Linux >= 6.8 вызывает ошибку. Отключите сборку tc если он вам не нужен:
sed -i 's/\(CONFIG_TC\)=y/# \1 is not set/' .config
Если вам нужен tc
Если вам нужен tc
- Примените патч;
- Обсуждение на lists.busybox.net;
Сборка BusyBox с поддержкой PAM (Pluggable Authentication Modules) не требуется, поскольку PAM'a в LFA нет. Убедитесь, что собираете BusyBox без PAM:
sed -i 's/\(CONFIG_PAM\)=y/# \1 is not set/' .config
Обычно в системах подобных LFA не требуются пакетные менеджеры типа того же dpkg. К тому же, в BusyBox предоставляется достаточно «обрезанная» версия dpkg с некоторыми ограничениями. Да и подобных LFS руководствах (в том числе и в LFA) не рекомендуется использовать подобные пакетные менеджеры во избежание проблем и поломок системы. Если вам не нужен dpkg, отключите его сборку, чем освободите около 73 Кб памяти:
sed -i 's/\(CONFIG_DPKG\)=y/# \1 is not set/' .config
sed -i 's/\(CONFIG_DPKG_DEB\)=y/# \1 is not set/' .config
Тоже самое сделайте и с версией пакетного менеджера rpm:
sed -i 's/\(CONFIG_RPM\)=y/# \1 is not set/' .config
sed -i 's/\(CONFIG_RPM2CPIO\)=y/# \1 is not set/' .config
Сборка
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT-
Установка
Установите пакет:
make ARCH=arm64 CROSS_COMPILE=$LFA_TGT- \
CONFIG_PREFIX=$LFA_SYS install
Заметьте, что BusyBox содержит множество программ, но все они объединены в один файл. Однако для удобства (чтобы, например, вводить не
busybox mv file1 file2, а простоmv file1 file2как в обычных системах) в каталогах$LFA_SYS/binи$LFA_SYS/sbinсоздаются ссылки наbusyboxс именами программ, которые содержит этот пакет.
Если вы собираетесь собирать ядро с помощью модулей, вам нужно убедиться, что depmod.pl доступен для выполнения на вашем хосте:
cp -v examples/depmod.pl $LFA/tools/bin
chmod -v 755 $LFA/tools/bin/depmod.pl
Содержимое пакета
Содержимое пакета
- Установленные программы:
[,[[,arch,ascii,ash,awk,base32,base64,basename,bc,bunzip2,busyboxи другие1
Описание компонентов
- Программы:
busybox— реализация стандартных UNIX утилит.- все остальные — ссылки на
busybox.
Набор установленного ПО зависит от того, какие настройки вы указывали при конфигурировании пакета.