Научная статья на тему 'Утилита BusyBox: универсальный инструмент управления встраиваемыми Linux-системами'

Утилита BusyBox: универсальный инструмент управления встраиваемыми Linux-системами Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
390
80
i Надоели баннеры? Вы всегда можете отключить рекламу.

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Бражук Андрей

Как известно, значительная часть разработчиков встраиваемых систем (по некоторым данным, около половины) активно использует GNU/Linux. Однако, в отличие от маршрутизаторов SOHO-класса или сетевых хранилищ (NAS), различные популярные гаджеты обладают, как правило, весьма ограниченным набором вычислительных ресурсов и памяти, поэтому не все средства «полновесного» дистрибутива Linux пригодны для использования в их системном программном обеспечении. Разработчикам приходится искать альтернативы, и одной из них является консольная OpenSource-утилита BusyBox, которая используется для реализации интерфейса командной строки в системном ПО встраиваемых систем на основе открытого ядра Linux.

i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Утилита BusyBox: универсальный инструмент управления встраиваемыми Linux-системами»

утилита BusyBox:

универсальный инструмент управления встраиваемыми Linux-системами

Андрей Бражук

andrew.brazhuk@gmail.com

как известно, значительная часть разработчиков встраиваемых систем (по некоторым данным, около половины) активно использует GNU/Linux. Однако, в отличие от маршрутизаторов SOHO-класса или сетевых хранилищ (NAS), различные популярные гаджеты обладают, как правило, весьма ограниченным набором вычислительных ресурсов и памяти, поэтому не все средства «полновесного» дистрибутива Linux пригодны для использования в их системном программном обеспечении. разработчикам приходится искать альтернативы, и одной из них является консольная OpenSource-утилита BusyBox, которая используется для реализации интерфейса командной строки в системном ПО встраиваемых систем на основе открытого ядра Linux.

Введение

Ядро Linux является одним из примеров успешной реализации концепции свободно распространяемого программного обеспечения (ПО с открытым исходным кодом, OpenSource). В настоящее время многочисленные вариации (дистрибутивы) операционной системы (ОС) на основе Linux успешно применяются на Intel-совместимых компьютерах в качестве программной платформы серверов. Дистрибутивы Linux «отвоевали» небольшой процент рынка программного обеспечения для персональных и портативных компьютеров (ноутбуков, нетбуков), предназначенных для конечного пользователя. Однако настоящие перспективы ОС Linux открывает развитие отрасли встраиваемых и мобильных систем, в массовом сегменте проявляющееся в повсеместной «гаджетизации». Современные компьютерные системы специализированного назначения базируются, в основном, на различных аппаратных платформах, не совместимых с Intel. В данной сфере, ввиду недостатка системного ПО, гибкие и бесплатные решения на основе свободного программного обеспечения (СПО) предоставляют хорошую альтернативу коммерческим вариантам.

Проект BusyBox [1] призван заменить одним исполняемым файлом традиционный для Unix-подобных систем «тяжеловесный» набор консольных команд и утилит проекта GNU [2], а также других OpenSource-прог-рамм. Во многих «прошивках» (firmware) встраиваемых систем BusyBox является

основным средством командной строки, а также альтернативой веб-интерфейсу и другим методам администрирования.

Особенности проекта

Начало проекту BusyBox было положено в средине 90-х гг. прошлого века Брюсом Перенсом (Bruce Perens), одним из лидеров движения СПО [3]. Первоначально утилита использовалась в загрузочных дискетах с ОС Linux. Применение BusyBox как программного инструмента встраиваемых систем началось в 1998 г. с проекта легковесного маршрутизатора на основе Linux (Linux Router Project, LRP). На момент написания статьи текущая версия продукта — 1.19.4, датируемая 4 февраля 2012 г., а основным его разработчиком является Денис Власенко (Denys Vlasenko). Распространяется программа в рамках свободной лицензии GNU GPL2.

Утилита BusyBox оптимизирована с учетом ограниченных ресурсов среды выполнения. Модульная структура позволяет добавлять или удалять команды и опции на этапе компиляции, что позволяет «кастомизиро-вать» встроенную систему по собственному вкусу. Разумеется, BusyBox предоставляет меньше функциональности, чем полновесные GNU-аналоги, реализуя лишь самые распространенные опции и поведение традиционного окружения Unix. Однако приведенный на странице помощи [4] список встроенных в исполняемый файл утилиты команд (в терминологии BusyBox — аппле-тов) весьма внушителен.

В Linux релизы BusyBox совместимы с библиотеками uClibc (начиная с версии 0.9.27) [5] и glibc (начиная с версии 2.2) [6]. Стандартная библиотека языка С glibs (GNU C Library) обеспечивает системные вызовы и основные функции программирования UNIX-приложений. Проект uClibc — легковесная альтернатива glibc, предназначенная для встраиваемых систем (используется в BusyBox по умолчанию).

Утилита BusyBox ориентирована на Linux, однако большая часть кода является независимой от платформы, что, в принципе, позволяет «портировать» программу в другие UNIX-подобные ОС [7]. С ядром Linux версии 2.6.х апплеты BusyBox могут быть «собраны» для любой аппаратной архитектуры, которую поддерживает компилятор gcc.

Настройка, компиляция и установка

Для пользователей операционной системы Linux не составит большого труда познакомиться на практике с возможностями рассматриваемого продукта. Обычно BusyBox присутствует в репозиториях программного обеспечения «полновесных» дистрибутивов и часто включается в состав ПО, устанавливаемого по умолчанию. Если утилиты нет в системе, ее можно установить средствами пакетного менеджера. Например, для Fedora или CentOS можно использовать следующую команду:

# yum install busybox

# make menuconfig

Для установки BusyBox из исходных кодов необходимо скачать с сайта проекта [1] архив с последней версией программы и распаковать его. На первом этапе следует в установочном каталоге запустить интерактивное меню настройки параметров компиляции (рис. 1), после завершения которой будет создан файл конфигурации (.соп/г^):

Существует также несколько предопределенных сценариев запуска меню. Например, базовая конфигурация со всеми отключенными опциями, позволяющая добавить то, что необходимо (make allnoconfig). Или конфигурация, реализующая обратный подход: по умолчанию включено все — требуется закомментировать лишние пункты (make defconfig).

На втором этапе непосредственно для компиляции нужно выполнить команду make:

Существуют различные варианты установки и использования программы. Можно непосредственно вызывать апплеты, указывая их первым аргументом исполняемого файла ЬшуЬох, например;

Полноценная инсталляция программы подразумевает создание символьных или «жестких» ссылок на файл busybox, имена которых совпадают с именами доступных ап-плетов (рис. 2). При этом требуется, чтобы все файлы размещались в каталогах, указанных в переменной окружения PATH. Такой подход позволяет вызывать апплеты, указывая их имена сразу после приглашения командной строки:

Структура каталогов, в которые инсталлируется BusyBox и ссылки, типична для Linux (/bin, /sbin, /usr/bin, /usr/sbin). Префикс установки определяется параметром CONFIG_ PREFIX конфигурационного файла .config. Для использования символьных ссылок нужно исполнить команду make с пара-

rootedokeo$:*VbMsybox-l ^.«/.install/bin* is -1 I head -10 total 740

lrwxr«xri»x l root root ^ наг г 13:16 addgrouo -> busybox

Iruixruxrux 1 root root 7 наг 2 13:16 adcfuser -> busybox

irwxruxriix l root root 7 наг 2 13:16 ash ■> busybox

iruixruxrux l root root 7 наг 2 13:16 base64 -> busybox

-rwxr-xr~x 1 root root 752952 Har 2 13:16 busybox

iruixruxrux l root root 7 наг г I3:i6 cat -> busybox

lrwxr«xr»x l root root 7 наг 2 13:16 tatv -> busybox

iruwrwxmx i root root 7 наг 2 13:16 chattr -> busybox

Irwxrwxrux 1 root root_: '-' J • ■- i - : п., : h :■;_; . ■

Рис. 2. Первые десять файлов каталога /bin инсталляции BusyBox

Рис. 1. Настройка параметров компиляции BusyBox

метром install, для «жестких» — install-liarillinks. Существует также альтернативный вариант установки ссылок с помощью бинарного файла busybox: для «жестких» ссылок нужно использовать ключ «--install», для символьных — «--install -s».

Для указания целевой аппаратной платформы и настройки кросскомпиляции предназначены параметры ARCH и CROSS_COMPILE на этапе настройки [8, 9] (то есть совместно с параметрами menuconfig, defconfig и т. п.).

Еще одна важная опция coNFIG_sTATIc файла .config определяет способ подключения стандартных функций: статический (весь необходимый код размещается в исполняемом файле) и динамический (библиотечные функции располагаются в отдельных файлах). В первом случае не требуется установки дополнительных библиотек, во втором случае бинарный файл имеет более компактный размер.

Использование BusyBox

Получить список всех апплетов, включенных в данную сборку BusyBox, можно с помощью ключа «--list»:

# busybox --list

Встроенная справка вызывается ключом «--help»:

# busybox --help

Как упоминалось выше, апплеты имеют ограниченный набор параметров по сравнению с «полновесными» аналогами. Для получения помощи по аргументам конкретного апплета следует указать его имя вместе с «--help» (рис. 3).

Основу консольной среды BusyBox составляет командный интерпретатор (shell) ash (Almquist shell), в частности, используемый по умолчанию большинством BSD-систем. Присутствует и альтернативный вариант — интерпретатор hush (hyper utility shell).

Вторым важным компонентом любой UNIX-подобной системы является так называемый пакет базовых утилит GNU (Core Utilities), включающий средства работы с файлами, текстом и программы, расширяющие возможности интерпретатора. В BusyBox реализованы аналоги многих базовых утилит: для работы с файлами и каталогами (cp, mkdir, mv, rm, rmdir, touch, mkfifo, mknod, sync, pwd и т. д.), текстовыми файлами (cat, cut, split, sort, tail, head, uniq, wc и т. д.), символьными и «жесткими» ссылками (ls, ln), управления

n«t«n4tty ! * t tosybo* HI ■HeTp

Н.11/Ш1К vi. 15. J HUbunrn la.li.J'lubunluil nullinaU Binary

Uugt: df (-Fkriioil [*B 5II£J E RlKYSTEH ... ]

Print filisyitim uiwj' itatlitlca

Opt L en Ь:

-f F45IX output remit

-k lB]4<tytE blnckj (default)

-m IN-byte blocki

■h Ifcaki rcjtfiDLi (c,B. IK г^ЗП 2SI

-A iiiopj all

-l Inadu

В SHE BiKitiitt

Рис. 3. Справка по аргументам команды df в BusyBox

# make

# busybox ls -l

# ls -l

правами (chgrp, chmod, chown), переменными окружения (env, printenv), просмотра свободного места на диске (du) и т. д.

Работа с архивами и сжатие данных обеспечивается в BusyBox аналогами отдельных GNU-утилит: cpio, tar, gzip. Для управления задачами по расписанию используется реализация подсистемы cron; для управления процессами — ps, kill, nice; модулями ядра — lsmod, insmod, rmmod; для управления дисками и файловыми системами — fdisk, mkfs, mount и т. д.

Среди возможностей BusyBox следует отметить разностороннюю поддержку сети, что существенно упрощает управление сетевым оборудованием, в основе системного ПО которого лежит ядро Linux. В утилиту включены аналоги традиционных команд управления сетевой подсистемой и ее мониторинга: arp, ifconfig, route, ifup, ifdown, netstat, ping, traceroute; команда ip из пакета iproute для расширенной настройки сети; команда vconfig для управления виртуальными локальными сетями. Существуют также простые реализации клиентов и серверов основных сетевых и прикладных служб, таких как DNS (dnsd), FTP (ftpd), Веб (httpd), Telnet (telnetd), TFTP (tftpd), DHCP (udhcpd) и т. д.

Заключение

В целом, количество апплетов BusyBox давно перевалило за три сотни. Использование программы позволяет получить многофунк-

циональное легковесное Linux-окружение с минимальными требованиями к системным ресурсам.

Следует также отметить, что конкурентов у рассматриваемой утилиты не так уж и много, и их функциональные возможности существенно меньше. Именно эти факторы и являются причиной популярности BusyBox как одного из ключевых компонентов системного ПО на основе ядра Linux для встраиваемых систем. ■

Литература

1. BusyBox: The Swiss Army Knife of Embedded Linux. http://busybox.net/about.html

2. Операционная система GNU. http://www.gnu. org/

3. BusyBox. From Wikipedia, the free encyclopedia / http://en.wikipedia.org/wiki/BusyBox

4. BusyBox Man Page. http://busybox.net/downloads/ BusyBox.html

5. uClibc Home Page. http://uclibc.org/

6. GLIBC, the GNU C Library. http://www.gnu.org/ software/libc/

7. FreeBSD port of busybox 1.11.1. 2008. http:// info.iet.unipi.it/~luigi/FreeBsD/busybox-port-20080819.tgz

8. Compile BusyBox On Android OS. 2011. http:// mobisocial.stanford.edu/news/2011/02/compile-busybox-on-android-os/

9. Busybox for ARM on QEMU. 2010. http://balau82. wordpress.com/2010/03/27/busybox-for-arm-on-qemu/

i Надоели баннеры? Вы всегда можете отключить рекламу.