суббота, 29 мая 2021 г.

TerraMaster F4-210 & Ubuntu

У меня дома опрометчиво появился новый зверек - TerraMaster F4-210, модель с 2Гб памяти за $260 на SoC Realtek1296 - arm64. И я решил его начать использовать. Использовать - это значит сделать цифровым сердцем дома - поставить dhcp/dns/tor, homeassistant, vpn и прочие радости NAS - transmission, dlna, aria2.

Но вот незадача - не получается. Там сейчас стоит OpenWrt 15.05 + кастомный linux kernel 4.4.18. Для использования моего zigbee stick cc2531 понадобился новый модуль ядра - cdc-acm. Для использования wireguard vpn нужен либо модуль ядра tun (если запускать wireguard в user space) либо собственный модуль wireguard. cdc-acm я с грехом пополам как-то собрал. Не совсем правильно - модуль грузится и отображается в lsmod со статусом  [permanent], что говорит о том, что у него не реализована функция выгрузки. tun грузиться и работать нормально не захотел. Я подозреваю, что проблема в неправильной конфигурации ядра при сборке модуля. Но правильной конфигурации у меня нет :(. Хотя исходники есть - на официальном сайте.

Все, что нашел по аппарату сложил сюда.

Сначала я попытался собрать инфу с рабочей платы:

Еще есть прошивка:
  • firmware, с помощью которого можно восстановить убитый NAS после неудачного обновления как написано на официальном форуме - через USB
  • php7-all.tar - архив PHP Web UI, идет на флешке, вставленной в USB 2.0 разъем платы.
  • Последняя прошивка - TOS_A1.0_Install_ARM4.2_4.2.12_2104281637_2104281658.ins - вся файловая система NAS


И в общем я решил попробовать накатить туда ubuntu или другой линукс.

Есть очень сильно похожая плата - Banana Pi BPI-W2 на таком же процессоре. Там есть описанная возможность установить разные линуксы, в том числе ubuntu и openWrt. На моей плате есть uart (такой же порт как в TV Box Zidoo-X9S - TX и RX можно подключить с разъема, а землю с любого места платы, поскольку uart разъем на плате - jst с шагом 2мм немного маловат для подключения трех стандартных монтажных проводов). С uart терминалом можно войти либо в SPI prompt (d/g/r> prompt, если зажать ctrl+q в uart терминале перед включением платы), либо в uboot (Realtek> prompt, если предварительно зажать Esc в uart терминале перед включением платы), либо в сам OpenWrt Linux, если ничего не нажимать.

Далее попробовал загрузить ядро. Поскольку scsi в данной сборке uboot судя по всему нет, то ядро грузил с USB поскольку перепрошивать eMMC не пока сыкотно. Ну, допустим, я знаю параметры загрузки текущего ядра OpenWrt: `rdinit=/sbin/init  mtdparts=RtkSFC:128k(factory),512k(uboot),320k(logo),1408k(afw),64k(dtb),7680k(kernel),5632k(initrd)  earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 loglevel=7 U-boot=2015.07 (Nov 27 2019 - 14:31:13)`

device-tree есть с рабочей системы - см. mtd map, mtd dump выше. Больше всего на мой взгляд похож 'NVR_18/linux-4.4.18/arch/arm64/boot/dts/realtek/rtd-1296-saola-2GB-HDMI.dts' из исходников. С некоторыми изменениями - там разные bootargs, initrd-start, end, и другие параметры. Может они как-то динамически меняются во время сборки OpenWrt.

Сделал дампы uart:

  • plain1.cap.txt - простая загрузка
  • spi.cap.txt -  вход SPI prompt (если зажать ctrl+q в uart терминале перед включением платы)
  • ubuntu4.cap.txt - безуспешная попытка загрузки другого ядра (предварительно зажать Esc в uart терминале перед включением платы для входа в uboot console - Realtek>)
  • ubuntu2-bootm.cap.txt - безуспешная попытка загрузить ядро через комманду uboot `bootm`
Что можно делать в консоле SPI prompt непонятно. На сайте Banana Pi W2 в инструкции есть несколько команд, но мне не совсем понятно, что они делают. На форуме zidoo есть некоторое описание, но неполное.

На форуме Armbian нашел похожий тред по запуску Armbian на похожем железе, запустил примерно так:

`usb start && fatload usb 0:1 $kernel_loadaddr uimage && fatload usb 0:1 $fdt_loadaddr tm_f4-210.dtb && env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 noinitrd root=/dev/sda2  rootfs=ext2 init=/bin/bash && bootr`
...
И загрузилось старое ядро - 4.4.18-g8bcbd8a-dirty :(

Попробовал загрузить ядро как написано тут - через комманду `bootm`. Получил вот такое сообщение:
Realtek> fatload usb 0:1 $kernel_loadaddr uimage
reading uimage
10630032 bytes read in 667 ms (15.2 MiB/s)
Realtek> fatload usb 0:1 $fdt_loadaddr tm_f4-221.dtb
reading tm_f4-221.dtb
65536 bytes read in 32 ms (2 MiB/s)
Realtek> env set bootargs earlycon=uart8250,mmio32,0x98007800 console=ttyS0,115200 noinitrd root=/dev/sda1 rootfs=vfat 
Realtek> bootm $kernel_loadaddr - $fdt_loadaddr
Wrong Image Format for do_booti command
ERROR: can't get kernel image!


Че делать дальше пока не знаю.



суббота, 13 февраля 2021 г.

Как я пытался начать в Raspberry Pi 4

Пишу прост чтоб не забыть. Если будет необходимость, то надеюсь хватит сил написать что-то в хабр.

Какие-то левые проблемы с Qt5, snap, wayland

Начал я ставить Raspberry Pi OS на Pi 4. И тут такое

# sudo snap install rpi-imager

# rpi-imager

This application failed to start because it could not find or load the Qt platform plugin "wayland-egl"

in "".

Available platform plugins are: eglfs, linuxfb, minimal, minimalegl, offscreen, vnc, xcb.

Reinstalling the application may fix this problem.

Aborted (core dumped) 

Ну хуе-мое - вроде как ошибка связана с установленной wayland, qt5 и сборкой snap пакета - https://forum.snapcraft.io/t/problem-launching-qt-snaps-in-wayland/7055. Обычная в этих случаях установка пакетов не помогает - это же snap. Вроде патч простой - https://github.com/pbek/QOwnNotes/pull/1012/files. Ошибка кстати существовала https://github.com/popey/imager-snap/pull/14.

Скачал сорцы, запатчил, поставил snapcraft + multipass, запускаю

Тут кароч ошибка типа не могу найти файл и имя моего файла snapcraft.yaml. Поподробнее потом напишу - надо удалить собранный уже.

Порылся в логах, вижу странные сообщения в dmesg от apparmor

[23961.893990] audit: type=1400 audit(1613217487.081:653): apparmor="DENIED" operation="open" profile="snap.multipass.multipassd" name="/etc/ssh/ssh_config" pid=13393 comm="multipassd" requested_mask="r" denied_mask="r" fsuid=0 ouid=0

Вроде профили защиты apparmor в ubuntu лежат в /etc/apparmor.d. Думаю поправлю. Но для снапов они лежат в /var/lib/snapd/apparmor/profiles. Поправил, вроде перезагрузил конфиги, ничего не меняется. Я начал смотреть snap.multipass.multipassd и сошелся пазл. Надо заметить, что проекты мои лежали раньше в /opt/projects. А профиль apparmor для snap.multipass.multipassd разрешал чтение только из home. Попробовал я, потыркался, плюнул и переместил директорию projects в свой home от греха подальше - не первый раз в конце то концов я на эти грабли с apparmor и /opt/projects наступаю. Такие дела.

Переместил. Заработало.

В общем перед добавлением статьи на хабр надо бы поподробнее разобраться с профилями apparmor, с профилями apparmor для snap и рассказать как собирать снапы локально например.


---

Пытаюсь в автомонтирование usb диска.

Почему-то в минимальной конфигурации raspberry Pi автомонтирование включено не было. Нашел usbmount, но он не работал. Начал разбираться. И тут понеслось. udev. udisks2. udevil. systemd.
В общем оно не работало потому что в репозитории лежит старая версия.
Дай думаю малой кровью поставлю udisks2 - чет не помогло. udevil, который вроде как lightweight replacement udisks почему-то потянул udisks2 и тоже автомонтирование не заработало. В итоге собрал последнюю версию usbmount из сорцов и добавил вот эту хрень (и еще добавил монтирование по UUID) чтоб можно было ссылаться на диск.
В общем в старой версии usbmount монтирование шло из скрипта напрямую, а это запрещено в новых версиях udev. Рецепт оттуда-же - использовать для монтирования сервис. Например вот так.
Еще есть совет https://holyhead.de/index.php?title=Raspberry_Pi#External_USB_drives - рекомендуют udevil и к нему самопально udev павило - например вот это. Но правило использовало сервис udevil, тот udevil, который был в комплекте с raspberri не имел сервиса. Скорее всего старая версия udevil.
Было бы неплохо разобраться как же все-таки работает и монтирует диски udisks2, и написать про это вот все, а заодно про udevadm.

Но нет худа без добра - тут https://holyhead.de/index.php?title=Raspberry_Pi написано как сделать hdd spin down, буду пробовать.

Ну вот, попробовал. Говорят для дисков, подключенных по usb не работает hdparam. Вроде как hd-idle умеет это делать. Надо запретить smart. И возможно дополнительно деактивировать собственное управление питанием диска через `hdparm -B255 </dev/XXX>` (A value of 255 will disable apm on the drive).

---

Обновление

Так блэд. Ставим ветку testing...

По какой то причине перестал ставиться RPi.GPIO. Помог совет https://forum.manjaro.org/t/pip-install-rpi-gpio-fail/25788/4:
CFLAGS="-fcommon" pip install rpi.gpio

.