- PVSM.RU - https://www.pvsm.ru -
Сегодня мы расскажем об успешно реализованном проекте для крупного немецкого производителя телекоммуникационного оборудования (хабы, роутеры, сетевые серверы и пр.)
Embedded Debian [1] не предоставляет готовой к использованию среды для сборки произвольных образов системы. Чтобы ее подготовить, требуется использовать стандартный дистрибутив Debian, обладать навыками системного администрирования, подобрать и настроить набор утилит, написав при этом ряд shell скриптов для автоматизации процедуры кросс-компиляции пакетов. Проделав всю ручную работу, вы получите консольный инструмент, пользоваться которым может исключительно технический персонал с определенным уровнем навыков работы с ОС Linux, а это не удобно, встает вопрос по организации многопользовательского доступа к этой среде и ограничению прав, а также постоянной поддержки среды в актуальном состоянии.
Выбор производителя телекоммуникационного оборудования пал на дистрибутив Embedded Debian благодаря большому количеству пакетов входящих в состав ОС, позволяющих решать самые разнообразные задачи, и обилию поддерживаемых платформ.
Перед разработчиками EDISON [2] была поставлена задача разработать веб-сервис с интуитивно понятным веб-интерфейсом в виде мастера, позволяющего подготовить произвольный образ системы на базе Embedded Debian на целевую платформу в несколько шагов, который также решает ряд смежных задач.
Дополнительным пожеланием была возможность включения в систему пакетов, разработанных производителем оборудования непосредственно для выпускаемых устройств.
Реализация и технологии.
Linux плотно обосновалась в сегменте серверного и клиентского телекоммуникационного оборудования, ведь данная ОС в коробке предоставляет все самое необходимое ПО для обеспечения работы и взаимодействия узлов сети, предоставляет различные сервисы над всевозможными сетевыми протоколами, а кроме того, система бесплатна.
Программная часть разных устройств во многом схожа, различие же составляет компоновка необходимых библиотек ОС, а также уникальное программное обеспечение от производителя, основной целью которого является предоставление пользовательского интерфейса для управления устройством, а также выражение корпоративного стиля.
Несмотря на обилие готовых к использованию библиотек, уникального решения нет, все производители предлагают один и тот же продукт, но в разной обертке, на выпуск которой тратится внушительное количество человеко-часов архитекторов, программистов, системных администраторов и дизайнеров.
Рынок ИТ предлагает продукт для решения данной проблемы в виде облачного сервиса SUSE Studio [6], который предоставляет возможность за считанные минуты собрать произвольный образ системы на базе дистрибутива Open Suse [7], в том числе и для Embedded устройств.
Но статья не об этом продукте, а о процессе создания аналогичного сервиса, автоматизирующего процесс сборки образов Debian [8] для встраиваемых и стационарных устройств на базе дистрибутива Embedded Debian [1] версии 1.0, для внутренних нужд одного из клиентов EDISON [9], занимающегося производством телекоммуникационного оборудования на базе архитектуры ARM, i386, amd6, PowerPC.
Embedded Debian [1] (Emdebian) версии 1.0 базируется на ОС Debian [8] 5.0 «Lenny» и включает дистрибутивы Grip, Crush.
Emdebian Grip представляет собой облегченную версию Debian для встраиваемых и стационарных устройств. Дистрибутив не содержит функциональных изменений и обеспечивает высочайший уровень функциональной совместимости с Debian. Включает поддержку для создания пользовательских пакетов на Emdebian, а также возможность смешивать и сочетать пакеты Emdebian и Debian с минимальными усилиями. Дистрибутив поддерживает архитектуры i386 [10], amd64 [11], PowerPC [12], ARM и ARMEL [13], MIPS и MIPSEL [14]. Типичный образ системы на основе Emdebian Grip представляют собой ОС Debian для встраиваемых и стационарных устройств, c корневой файловой системой на основе coreutils [15] и набором пакетов для поддержки графического интерфейса Gnome [16] или KDE [17].
Emdebian Crush [18] ориентирован на машины, которые не могут собирать пакеты для себя. В дистрибутиве нет поддержки компиляторов и инструментов сборки. Ряд пакетов дистрибутива сильно модифицирован. Дистрибутив поддерживает только архитектуру ARM [19]. Типичный образ системы на основе Emdebian Crush представляют собой ОС Debian для встраиваемых устройств c корневой файловой системой на основе Busybox [20] и набором пакетов для поддержки графического интерфейса G Palmtop [21] для устройств PDA. Минимальный размер образа системы без графического интерфейса занимает около 24 MB. В отличие от дистрибутива Grip, сборка, установка и техническое обслуживание системы на основе дистрибутива Crush требует много ручной работы и детального знания Debian.
Дистрибутивы Grip и Crush также имеют по три ветки: stable, testing и unstable, которые соответственно включают стабильные, тестируемые и не стабильные версии пакетов.
Производитель только собирался переходить на ОС Debian, при выпуске новой линейки оборудования, поэтому у нас не оказалось каких-либо наработок от производителя по сборке образов Debian на основе дистрибутива Embedded Debian, все пришлось делать с чистого листа. В рамках пилотной версии сервиса, было решено ограничиться поддержкой архитектуры ARM и i386.
В первую очередь, необходимо было подготовить среду для кросс компиляции пакетов дистрибутива Embedded Debian и сборки готовых к использованию образов Debian на встраиваемых и стационарных устройствах, а также спроектировать и согласовать на ранней стадии процедуру интеграции ключевых процессов по сборке образов в разрабатываемый веб-сервис. В итоге был спроектирован набор shell скриптов, которые входят в ядро системы.
Скрипт в зависимости от наименования дистрибутива создает зеркало официального дистрибутива Embedded Debian на локальной машине.
Сигнатура:
mirror [distr_name]
где:
Использование:
mirror crush
Вывод:
crush mirroring process start
Date: 20091201-15:00:00
Process pid: 9850
Process finished
Скрипт в зависимости от заданной архитектуры и наименования дистрибутива осуществляет сборку пакетов зеркала дистрибутива Embedded Debian. По завершению процедуры сборки пакетов запускается скрипт создания репозитория на основе успешно собранных пакетов.
Сигнатура:
auto_build [distr_name] [arch_name]
где:
Использование:
auto_build crush arm
Вывод:
The auto building process of packages started
Architecture: arm
Date: 20091201-15:00:00
Process pid: 9850
Start to create a local repository
The making repository process started
Distr version: crush
Date: 20091201-15:00:00
Process pid: 9850
The process finished
The auto_build process finished
Сигнатура:
make_repository [distr_name] [arch_name]
где:
Использование:
make_repository crush arm
Вывод:
The making repository process started
Distr version: crush
Date: 20091201-15:00:00
Process pid: 9850
The process finished
Скрипт в зависимости от заданной архитектуры, наименования и версии дистрибутива возвращает список доступных пакетов.
Сигнатура:
get_packages [distr_name] [distr_version] [arch_name]
где:
Использование:
get_packages crush stable arm
Вывод:
Package: acl
Version: 2.2.47-2em1
Description: Access control list utilities
This package contains the getfacl and setfacl utilities needed for
manipulating access control lists.
Package: apt
Version: 0.7.20.2em1
Description: Advanced front-end for dpkg
This is Debian's next generation front-end for the dpkg package manager.
It provides the apt-get utility and APT dselect method that provides a
simpler, safer way to install and upgrade packages.
…
Скрипт возвращает список зависимостей по заданному списку пакетов, дистрибутиву и архитектуре.
Сигнатура:
get_depends [distr_name] [distr_version] [arch_name]
где
Ввиду того что образ может включать более тысячи пакетов, по которым нужно определить все зависимости, передачу списка пакетов в скрипт и чтение результатов решено было реализовать через стандартный ввод/вывод. Окончание ввода определяется скриптом по двойному переводу каретки.
Использование:
get_depends crush stable arm
Ввод списка пакетов:
Package: acl
Version: 2.2.47-2em1
Package: apt
Version: 0.7.20.2em1
Вывод:
Package: libacl1
Version: 2.2.47-2em1
Description: Access control list shared library
This package contains the libacl.so dynamic library containing
the POSIX 1003.1e draft standard 17 functions for manipulating
access control lists.
Package: libc6
Version: 2.7-18em1
Description: GNU C Library: Shared libraries
Contains the standard libraries that are used by nearly all programs on
the system. This package includes shared versions of the standard C library
and the standard math library, as well as many others.
…
Скрипт в зависимости от заданной архитектуры, наименования и версии дистрибутива возвращает список пакетов и статус их сборки.
Сигнатура:
get_sources [distr_name] [distr_version] [arch_name]
где
Использование:
get_sources crush stable arm
Вывод:
Package: acl
Version: 2.2.47-2em1
Status: success
Package: apt
Version: 0.7.20.2em1
Status: error
Package: libc6
Version: 2.7-18em1
Status: unknown
Скрипт в зависимости от заданного набора пакетов, наименования и версии дистрибутива, архитектуры, создает файл образа Debian готового к использованию на целевой архитектуре. В результате работы скрипта образ Debian доступен во временном каталоге /tmp.
Сигнатура:
image_create [distr_name] [distr_version] [arch_name] [name_of_image]
где:
Ввиду того, что образ может включать более тысячи пакетов, передачу списка пакетов в скрипт и чтение результатов решено было реализовать через стандартный ввод/вывод. Окончание ввода определяется скриптом по двойному переводу каретки.
Использование:
image_create crush stable arm debian_on_arm.iso
Ввод списка пакетов:
Package: acl
Version: 2.2.47-2em1
Package: apt
Version: 0.7.20.2em1
…
Вывод:
Creating new image: debian_on_arm
Architecture: arm
Date: 20091201-15:00:00
Process pid: 9850
Image type: iso
В процессе подготовки окружения и реализации описанных скриптов ядра, мы сразу столкнулись с проблемой, связанной с недостаточно подробной документацией на официальном сайте дистрибутива, которая также содержит ряд упущений в доступных гайдах, что, в свою очередь, в ряде случаев способствовало затруднению продвижения к конечному результату. Очередная проблема была связана с отсутствием готового для загрузки img образа дистрибутива Emdebian Crush, данный образ пришлось подготовить вручную.
В конечном счете, рабочий образец окружения, позволяющий собрать образ Debian на архитектуры i386 и ARM, был получен. Для создания зеркала (локальной копии) дистрибутива Embedded Debian использована утилита debmirror, входящая в состав Debian Lenny. Для создания временного окружения для кросс-компиляции пакетов на целевые платформы, использовались утилиты debootstrap, pbuilder, chroot. Для создания репозитория собранных пакетов использовалась утилита reprepro.
Кросс-компиляция пакетов локальной копии дистрибутива осуществляется по расписанию в ночное время. По ее результатам генерируется статистика по успешно собранным и не собранным пакетам, результаты которой можно получить по запросу, вызвав скрипт get_sources.sh, а также формируется локальный репозиторий собранных пакетов, использование которого способствует ускорению сборки произвольного образа, так как все необходимые пакеты репозитория уже собраны для всех необходимых архитектур, и процедуру сборки не требуется запускать в рантайме в процессе сборки образов.
Для сборки образов Debian были подготовлены шаблоны img и iso образов Debian для архитектуры ARM и i386 с минимальным количеством предустановленных пакетов. В процессе создания образа Debain по заданным параметрам во временную папку копируется шаблон образа, затем образ монтируется, и с помощью утилит chroot и apt-get в образ включатся собранные пакеты из локального репозитория, после чего полученный образ готов к использованию на целевой архитектуре. Вся процедура по сборке img либо iso образа занимает от нескольких секунд до нескольких минут в зависимости от количества включаемых пакетов.
Разработка веб-сервиса велась параллельно процессу подготовки окружения для сборки образов Debian благодаря заранее продуманной структуре скриптов ядра. В процессе разработки веб-сервиса скрипты для получения списка пакетов, зависимостей, статистики сборки пакетов и сборки образа, были выполнены в виде заглушек, возвращающих фейковые данные согласно спроектированному формату. Как только был получен рабочий образец окружения, позволяющий собрать образ Debian, все вызовы фейковых скриптов были заменены рабочими, в результате процесс интеграции процедуры сборки образов в веб-сервис прошел мгновенно.
Разработанный веб-сервис предоставляет интуитивно понятный веб-интерфейс в виде мастера, позволяющий создать произвольный образ Debian всего в четыре шага, не обладая при этом техническими знаниями в данной области.
Веб-сервис не хранит созданные образы на диске постоянно, вместо этого все настройки созданных образов хранятся в базе данных, используя их, можно в любое время собрать аналогичный образ. Данный подход дает возможность делиться образом с произвольным количеством пользователей, клонировать существующие образы и делать на их основе другие конфигурации, не затрачивая при этом дополнительное дисковое пространство.
Веб-сервис предоставляет наглядную статистику по сборке пакетов дистрибутива, благодаря чему можно проанализировать возникшие проблемы при сборке определенных пакетов и устранить их.
Кроме типовых img образов Debian также реализована поддержка Live CD образов, благодаря которым можно протестировать определенную сборку Debian на целевом устройстве без необходимости установки ОС во внутреннюю память устройства, загрузившись с флэш-карты.
Заказчик предоставил образцы устройств на базе архитектуры ARM и i386, для тестирования собираемых образов Debian. Собираемые для архитектуры i386 образы тестировались на стационарных машинах разработчиков. В итоге, подготовленные сервисом образы Debian успешно запустились на предоставленном заказчиком оборудовании.
Автор: Edison
Источник [22]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/116678
Ссылки в тексте:
[1] Embedded Debian: http://www.emdebian.org/
[2] EDISON: http://www.edsd.ru/ru/proekty/vstroennoe_po
[3] img: https://en.wikipedia.org/wiki/IMG_(file_format)
[4] iso: https://ru.wikipedia.org/wiki/ISO-%D0%BE%D0%B1%D1%80%D0%B0%D0%B7
[5] Live CD: https://ru.wikipedia.org/wiki/Live_CD
[6] SUSE Studio: https://susestudio.com/
[7] Open Suse: https://www.opensuse.org/
[8] Debian: https://www.debian.org/
[9] EDISON: http://www.edsd.ru/
[10] i386: https://ru.wikipedia.org/wiki/80386
[11] amd64: https://ru.wikipedia.org/wiki/X86-64
[12] PowerPC: https://ru.wikipedia.org/wiki/PowerPC
[13] ARM и ARMEL: https://ru.wikipedia.org/wiki/ARM_(%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)
[14] MIPS и MIPSEL: https://ru.wikipedia.org/wiki/MIPS_(%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0)
[15] coreutils: https://ru.wikipedia.org/wiki/GNU_Coreutils
[16] Gnome: https://ru.wikipedia.org/wiki/GNOME
[17] KDE: https://ru.wikipedia.org/wiki/KDE
[18] Emdebian Crush: http://www.emdebian.org/crush/
[19] ARM: https://ru.wikipedia.org/wiki/ARM_(архитектура)
[20] Busybox: https://ru.wikipedia.org/wiki/BusyBox
[21] G Palmtop: https://ru.wikipedia.org/wiki/GPE_Palmtop_Environment
[22] Источник: https://habrahabr.ru/post/280550/
Нажмите здесь для печати.