В данной статье я хочу рассказать, как я поднял домашний сервер на плате Olimex A20 Micro и превратил его в сервер MajorDoMo и не только. Статья будет из нескольких частей, так как всё охватить в одной статье не получится.
Давным давно, в далекой-далекой галлактике, я приобрел плату "A20 Olinuxino Micro 4G" от болгарской компании Olimex.
Плата была куплена в московском офисе "ТерраЭлектроника", когда я был в гостях у родственников.
На тот момент эта плата была мощной альтернативой плате Raspberry Pi 1 model B. И это была чуть-ли не плата мечты.
Плата привлекла меня гораздо большим фаршем, чем у Raspberry Pi. У нее есть SATA, она может питаться
от литиевой банки, есть VGA, LCD и прочие интерфейсы.
Бралась плата для органицации домашнего сервера и прочих экспериментов.
Сервер у меня выполняет множество ролей:
С чего начать
В качестве ОС был выбран дистрибутив Armbian Buster, как наиболее адекватно реализованный дистрибутив для данной платы.
Образ от Olimex был сырым, в нем не работала реакция на кнопку питания, ядро было очень старое и т.д.
Впрочем, у сборки Armbian для этой платы тоже вылез непиятный косяк, но о нем и о том, как я его победил, расскажу ниже.
Для реализации всего этого "безобразия" мне потребовались:
С чего я начал:
Встал вопрос о доступе к консоли. Обычно SSH сервер установлен и настроен по умолчанию,
а ethernet интерфейс настроен на получение IP адреса по DHCP. Но мне было лень обжимать кабель.
Консоль по умолчанию висит на UART0 - это отдельно распаянные четыре пина на плате. Туда и воткнулся.
Вход в консоль под логином root, пароль пустой.
Далее система запускает скрипт первоначальной настройки.
Первым делом предлагается выбор "командной строки" по умолчанию (bash или sh)
Далее следует запрос на создание пароля для root.
В самом конце, скрипт предложил создать отдельного пользователя.
Я не создавал пользователя и завершил скрипт нажатием Ctrl+C.
Перед боем систему следует сначала сконфигурировать.
Для этого автор дистрибутива заботливо написал скрипт конфигурации с блэк-джеком и менюхами.
Зашел под root и запустил скрипт:
armbian-config
В первую очередь мне необходимо было настроить языки и часовой пояс.
Настраивается это в разделе Personal
Заходим в Personal -> Timezone выбираем регион и часовой пояс.
За тем, в Personal -> Locales выбрал все кодировки русского языка и русский (UTF-8) - как язык по умолчанию.
После завершения генерации локалей, выход из меню и перезагрузка.
reboot
и тут я поймал вышеупомянутый косяк дистрибутива. Но им я займусь чуть позже, а сначала перенос системы на жесткий диск.
Переносим систему на жесткий диск
Данная плата содержит в своем составе SATA интерфейс, который сидит на шине процессора.
Это говорит о том, что он не будет делить с другими слабую шину USB, как это реализовано в Raspberry Pi всех поколений.
Из этого вытекает, что производительность будет гораздо выше, чем при работе с SD карты. У SATA раньше был баг -
баг со скоростью записи на диск. Она была сильно медленной. Проблема усугублялась еще тем, что производитель
процессора не опубликовал в даташите регистры SATA интерфейса, сославшись на "читайте спецификацию AHCI".
Баг этот устранили только в 2019м году и пропатчили ядро. Причем, баг этот устранили разработчики Armbian.
На этой же плате есть и специальный разъем для управляемого питания жесткого диска. Плюс его в том, что там есть
5 вольт даже тогда, когда плата питается от литиевой батареи. Раздеребанил старый компьютерный блок питания и
нещадно срезал с него разъем питания для SATA диска. Теперь он будет использоваться в моем сервере.
Полярность подключения есть в схеме платы, которая выложена на сайте Olimex.
Система переносится на диск достаточно просто. Для этого нужно разбить диск на разделы, отформатировать их
и запустить скрипт переноса системы. Естественно, если на диске были какие-то разделы ранее, их следует удалить.
В моем случае в качестве диска выступил родной жесткий диск с ноутбука - "WD Blue 1TB", который я заменил на SSD
и новый HDD "WD Black 1TB", так как ноутбук давно просил эти апгрейды.
Диск я разбил с помощью fdisk следующим образом:
1. /dev/sda1 - файловая система ext4 - 100ГБ. Тут размещается сама система.
2. /dev/sda2 - swap, он же "файл подкачки" на 8ГБ. Многовато конечно, но проблем с этим нет.
3. /dev/sda3 - ext4 - 23ГБ. Раздел для данных некоторых серверных служб.
4. /dev/sda4 - ext4 - 800ГБ. Её величество - файлопомойка.
Ну а далее запускается скрипт
nand-sata-install
выбирается сценарий "Boot from SD card - system on SATA" и раздел, куда перенести систему.
Я перенес на /dev/sda1
Далее, нужно подготовить SWAP и отредактировать /etc/fstab, чтобы все разделы монтировались на старте.
Начал со SWAP. Тут ничего необычного, все делается по стандартным инструкциям.
Сначала забиваем нулями все сектора SWAP раздела. В моем случае - это запись 8196к блоков по 1к каждый в раздел /dev/sda2.
dd if=/dev/zero of=/dev/sda2 bs=1024 count=8196K
За тем, создаем там swap и активируем его:
mkswap /dev/sda2
swapon /dev/sda2
За тем, нужно внести все наши разделы в fstab, но сначала нужно узнать их UUID идентификаторы.
Делаем так:
ls -laF /dev/disk/by-uuid/ | grep sda
и нам вывалится список разделов жесткого диска с их UUID.
Копируем вывод команды куда-нибудь и делаем еще кое-что:
mkdir /media/sdata
mkdir /media/data
Это две папки, куда будут присобачиваться разделы sda3 и sda4
Всё. Теперь можно редактировать /etc/fstab
nano /etc/fstab
заносим в него дополнительные записи (заменив пояснения на реальные UUID)
UUID=UUID-swap-раздела swap swap defaultfs 0 0
UUID=UUID-sda3-раздела /media/sdata ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro,x-gvfs-hide 0 1
UUID=UUID-sda4-раздела /media/data ext4 defaults,noatime,nodiratime,commit=600,errors=remount-ro,x-gvfs-hide 0 1
и сохраняем.
Исправляем баг
Теперь поговорим о баге, о котором я упоминал ранее.
Баг заключается в том, что при перезагрузке система тупо отключает плату. То есть, фактически выполняет завершение работы
вместо перезагрузки. Баг этот встречается во всех сборках Armbian для плат Olimex на процессоре A20, за исключением
платы Olimex A20 Lime 2. И заключается он в особенностях управления микросхемой питания процессора (AXP209)
При перезагрузке, U-Boot инициализирует контроллер питания снова, что приводит к отключению канала LDO3.
Баг этот обнаружили и исправили в плате Olimex Lime 2, а вот пропатчить конфиги U-Boot для всех остальных аналогичных плат - забыли.
Впрочем, автор дистрибутива Armbian уже оповещен мною о методе решения этой проблемы и возможно, баг в новых выпусках уже устранен.
Короче, чтобы решить эту проблему, нужно собрать U-Boot. Собирать его я собрался на этой же плате.
Поехали!
Для начала, устанавливается все, что нужно для сборки нового загрузчика.
apt-get install libncurses-dev python3.7 python-dev swig git
Может что-то еще нужно, я не запомнил. Если будет грязно материться в процессе сборки, то там будет видно, чего не хватает.
За тем, нужно качнуть исходники загрузчика с официального репозитория
git clone https://gitlab.denx.de/u-boot/u-boot
Чтобы далеко не искать собранный бинарник, желательно создать папку рядом с папкой с исходниками.
Я назвал её "u-boot_build".
А далее переход в папку с исходниками и запуск конфигуратора сборки:
cd u-boot
make -j2 O=../u-boot_build A20-OLinuXino_MICRO_defconfig menuconfig
В меню переходим в раздел Device drivers -> Power и жамкаем по следующим параметрам:
"axp pmic (a)ldo3 voltage rate control" ---> заходим и выбираем "0.8 mV per uS"
"axp pmic (a)ldo3 inrush quirk" - ставим "звездочку" нажатием на пробел
Затем жмем "Save", сборщик предлагает нам сохранить конфигурацию в файл ".config"
Соглашаемся нажатием на enter и выходим из меню.
Теперь запускаем сборку:
make -j2 O=../u-boot_build
U-Boot будет собираться на этой плате где-то 5-6 минут. Ждем...
После удачной сборки, в папке u-boot_build среди множества файлов появится файл с названием "u-boot-sunxi-with-spl.bin"
Его мы будем шить во флешку.
cd ~/u-boot_build
dd if=./u-boot-sunxi-with-spl.bin of=/dev/mmcblk0 bs=1024 seek=8
Всё, теперь новый загрузчик записан. Перезагружаемся и убеждаемся, что сервак корректно перезагрузился.
На этом пока всё. В следующих частях расскажу о софте и его развертывании.
Вулканешты, Молдова
На форуме: DX168B