По сути это процесс сборки Linux с описанием некоторых проблем с которыми можно столкнуться при использовании ARMBIAN. Ну и самое главное, из-за чего это понадобилось, это возможность каскадного монтирования файловой системы. Правда используется не AUFS, а Overlay2 поскольку в последних версиях Linux Kernell он уже встроен и не придется накладывать патч.

1. Скачиваем последнюю версию ArmBian, от версии к версии она может меняться поэтому инструкция на момент 2.09.2022г.

2. Запускаем /bin/bash compile.sh

3. Предлагается на выбор 2 варианта сборки:

  • U-boot and kernel packages - только загрузчик и ядро, файловую систему потом придутся самому собирать.

  • Full OS images for flashing - полноценная ОС, со всеми потрохами.

Нас интересует последний пункт.

4. Тут на выбор уже 3 инструкции:

  • Do not change the kernel configuration - Не изменять кофиг ядра. Т.е. использовать его как он есть. Это удобно если нужно только пере собрать уже ОС уже с раннее настроенным ядром.

  • Show a kernel configuration menu before compilation - Открыть настройки ядра перед сборкой.

  • Use precompiled packages from Armbian repository - Использовать раннее собранную конфигурацию.

До ядра еще не добрались поэтому используем первый пункт, необходимо проверить наличие нашей платы в списке.

5. Появляется длинный список плат с их кратким описанием, в котором к сожалению нету нашей Olinuxino A13.

6. Т.к. Olinuxino A13 отсутствует в списке, ищем конфиг платы по адресу config/board/.. olinux-som-a13.csc и меняем расширение на .conf. После повторяем все со 2 пункта и убеждаемся что плата появилась в списке.

Выбираем плату и идем дальше.

П.с. в 2 пункте будет ругань что конфиг изменен, просто пропускаем нажимая Enter.

7. И так, далее.

В следующем окне предложено выбрать базовую систему:

  • bullseye Debian 11 Bullseye - ось на основе дебиана.

  • jammy Ubuntu jammy 22.04 LTS - ось на основе убунты.

Мы будем делать серверный вариант, поэтому тут особой разницы что выбирать нету. Весь софт хорошо ставится и там и там. Основное отличие между ними кроме названия в менеджере окон. В Debian это KDE на основе QT, Ubuntu это GNOME на основе GTK.

Мне больше нравиться GTK поэтому и выбираем последний вариант.

8. Следующее окно:

Choose image type.

Нужно выбрать тип собираемого на образа.

  • Standard image with console interface - стандартный образ ОС.

  • Minimal image with console interface - минимальный образ, содержит минимально необходимый софт. Все остальное можно до установить по необходимости.

Тут выбираем минимальный образ. Это только пробная сборка, в дальнейшем его будем править.

9. На этом этапе, Armbian доустонавливает систему сборки и собирает образ. Короче ждем окончания ...

После пары часов ожидания, если не было серьезных сбоев, папка с ArmBian разрастется с пары сотен магабайт до пары десятков гигабайт. Размеры объясняются docker-ом который используется в ArmBian для сборки, там размещена среда сборки.

Готовый образ будет лежать по адресу ...output/images/ и если ваша плата была в списке и вас устраивает дефолтная конфигурация, то на этом можно и закончить.

Но в моем случае это будет база для кастомного сервера IoT устройств, поэтому и предъявляемые требования к нему следующие:

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

б) отказоустойчивость файловой системы - файловая система не должна умирать при резком отключении питания, поэтому буду использовать каскадно монтируемую ФС. Возьму Overley_2 поскольку она встроена в ядро в последних версиях kernell.

в) ускорить загрузку - уберем лишние телодвижения при загрузке ОС от ArmBian.

10. Корректировка системы сборки ArmBian.

Сборка ОС в Armbian происходит по запуску команды “debootstrap”, в старых версиях достаточно было поправить устанавливаемые пакеты по адресу:

lib/configuration.sh

Там есть несколько переменных где и прописывались пакеты:

PACKAGE_LIST_ADDITIONAL

PACKAGE_LIST

PACKAGE_LIST_DESKTOP

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

Начнем настраивать по взрослому:

10.1 Настройка файла конфигурации.

По адресу userpatches/config-example.conf найдете файл где можно выставить более широкие настройки нежели дает меню. Подробнее о них можно найти тут https://docs.armbian.com/Developer-Guide_Build-Options/, итак опишем самые основные:

  • PROGRESS_LOG_TO_FIL=”yes” - процесс сборки дублируется в отдельный файл. Полезная штука, всегда можно посмотреть возникшие ошибки или то что было установлено.

  • BOARD = "olinux-som-a13" - название платы из пункта 6.

  • RELEASE="jammy" - версия ОС. На текущий момент Ubuntu 22.04.

  • BUILD_MINIMAL="yes" - собрать минимальный набор пакетов.

  • BUILD_DESKTOP="no" - не собирать оконный менеджер.

  • AUFS="yes" - добавить в сборку поддержку каскадно монтируемой файловой системы.

  • KERNEL_ONLY="no" - сборка только ядра.

  • KERNEL_CONFIGURE="no" - пропустить конфигурирование ядра.

Если все настроили правильно, то при сборке не будет меню с запросом на конфигурацию. На этом этапе можно попробовать собрать и убедиться что ничего не сломали.

10.2 Конфигурирование пакетов в debootstrap.

По умолчанию даже при сборке минимальной версии, в наличии остается довольно много лишних пакетов. Их можно убрать, отредактировав список в debootstrap (команда через которую собирается файловая система ОС).

Принимать решение о освобождении дополнительного места можно после окончательной сборки. На этот случай придется залезть по адресу ../config/cli/jammy/main/ где (jammy - название дистрибутива) где отредактировав файлы:

  • packages

  • packages.additional

  • а также файлы в папках

Позволит избавится от лишних пакетов в сборке.

Так же есть возможность добавить дополнительные пакеты, для этого по адресу ../userpatches/ нужно создать файл "lib.config" с перечнем необходимых пакетов:

PACKAGE_LIST_ADDITIONAL="$PACKAGE_LIST_ADDITIONAL mc ffmpeg libsndfile1 libgsm1 libportaudio2 overlayroot alsa-base alsa-tools alsa-utils alsamixergui"

У меня тут некоторые библиотеки для работы со звуком и библиотека boost, т.к. я планирую разрабатывать на С++.

Если что то поменяли не лишне будет сделать сборку для проверки, что ни чего не сломали.

10.3 Уборка лишнего из загрузки ОС.

Чтоб убрать лишнее, восстанавливаем образ на заранее подготовленную SD карту с которой будем дальше грузиться.

При первом старте идет запрос на замену логина и пароля с дефолтных:

  • default login - root

  • default pass - 1234

Нам подойдут и эти поэтому чтоб исключить смену авторизации удаляем файлы по адресу:

  • /etc/profile.d/armbian-check-first-login.sh

  • /etc/profile.d/armbian-check-first-login-reboot.sh

При каждом старте ArmBian делает обновление, это вредная процедура и мне она лишняя поэтому удаляем все что этого касается:

  • /etc/cron.d/armbian-truncate-logs

  • /etc/cron.d/armbian-update

  • /etc/cron.d/sysstat

  • /etc/update-mot.d/41-armbian-config

  • /etc/update-mot.d/40-armbian-updates

  • /etc/cron.daily/apt-compat

Готовый образ представляет собой законченную файловую систему и плюс 200 Мб. Но во время первой загрузки образ растягивается на все свободное место в памяти. Это не очень удобно, т.к. будем делить память на область readonly и rewritable. Короче удаляем файл что портит жизнь:

/usr/lib/systemd/system/armbian-resize-filesystem.service

10.4 Настройка AUFS.

У встраиваемых устройств есть одна существенная проблема, они подвержены периодическим отключением питания. Это плохо сказывается на целостности файловой системы, рано или поздно она падает.

Выход из этой ситуации в использовании “каскадной файловой системы”, в последних версиях ядра есть встроенная поддержка “overlay fs”.

Overlay fs будем разворачивать в оперативное памяти. По умолчанию она забирает половину оперативной памяти под файловую систему и “read only” для места своего старта.

Команда для запуска:

echo 'overlayroot="tmpfs"' >> /etc/overlayroot.conf

Команда для выхода:

overlayroot-chroot

11. Проверка и запуск.

Запускаем плату с SD карты:

  • Подключаемся к SOB “uart 1” по умолчанию скорость 115200 и наблюдаем порядок загрузки.

  • Запуск Htop показывает общие параметры системы:

  • Запуск “mc” покажет занимаемую память файловой системы:

В этом образе из 1138MIB свободно 176MIB.

  • После старта “overlay” в “mc” видно что размер файловой системы сжался до половины оперативной памяти (230MIB):

p.s. Тут конечно не все проблемы с которыми можно столкнуться, а наиболее частые.

Комментарии (3)


  1. ivankudryavtsev
    30.11.2022 10:02

    Статья полезная, но оформлена так себе.


  1. Tirael78
    30.11.2022 13:35
    +2

    Без обид, но вы хотя бы минимально орфографию проверили, перед тем, как выкладывать.

    недолжна

    ьелодвижения


  1. plsoft
    02.12.2022 14:04

    Статья полезная, для меня прям вовремя появилась. И лучше такая с огрехами, чем совсем ее не будет.