Вступление

За основу для написания этой заметки я взял опыт коллег, описанный в статье «OrangePi 5 с Proxmox 8», а так же следующий материал. Следует отметить, что в архитектурах OrangePi 5 и Nanopc-T6

Hidden text

System:
Host: nanopct6 Kernel: 6.1.43-rockchip arch: aarch64 bits: 64 compiler: N/A Console: pty pts/0
Distro: Armbian GNU/Linux 12 (bookworm)
Machine:
Type: Embedded-pc System: FriendlyElec product: NanoPC T6 v: N/A serial: E17EE40953344E60
Mobo: FriendlyElec model: NanoPC T6 serial: E17EE40953344E60 UEFI: EDK II v: 0.9.1
date: 10/12/2023
CPU:
Info: quad core (2-mt/2-st) model: N/A variant-1: cortex-a55 variant-2: cortex-a76 bits: 64
type: MST AMCP arch: ARMv8 rev: 0 cache: L1: 768 KiB L2: 2.5 MiB L3: 3 MiB
Speed (MHz): avg: 2028 high: 2256 min/max: 408/1800:2256 cores: 1: 1800 2: 1800 3: 1800
4: 1800 5: 2256 6: 2256 7: 2256 8: 2256 bogomips: N/A
Features: Use -f option to see features
Graphics:
Device-1: display-subsystem driver: rockchip_drm v: N/A bus-ID: N/A
Device-2: mali-bifrost driver: mali v: N/A bus-ID: N/A
Device-3: rk3588-dw-hdmi driver: dwhdmi_rockchip v: N/A bus-ID: N/A
Device-4: rk3588-dw-hdmi driver: dwhdmi_rockchip v: N/A bus-ID: N/A
Display: server: No display server data found. Headless machine? tty: 190x49
resolution: 1920x1080
API: N/A Message: No display API data available in console. Headless machine?
Audio:
Device-1: hdmi driver: rk_hdmi_sound bus-ID: N/A
Device-2: rk3588-dw-hdmi driver: dwhdmi_rockchip bus-ID: N/A
Device-3: rk3588-dw-hdmi driver: dwhdmi_rockchip bus-ID: N/A
Device-4: hdmi driver: rk_hdmi_sound bus-ID: N/A
Device-5: hdmi driver: rk_hdmi_sound bus-ID: N/A
Device-6: hdmi driver: rk_hdmi_sound bus-ID: N/A
Device-7: simple-audio-card driver: asoc_simple_card bus-ID: N/A
API: ALSA v: k6.1.43-rockchip status: kernel-api
Network:
Device-1: Realtek RTL8125 2.5GbE driver: r8169 v: kernel port: 200000 bus-ID: 0002:21:00.0
IF: end0 state: up speed: 2500 Mbps duplex: full mac: 8e:3b:34:3a:21:e4
Device-2: Realtek RTL8822CE 802.11ac PCIe Wireless Network Adapter driver: rtw_8822ce v: N/A
port: 1000 bus-ID: 0003:31:00.0
IF: wlP3p49s0 state: down mac: 48:8f:4c:fe:3b:80
Device-3: Realtek RTL8125 2.5GbE driver: r8169 v: kernel port: 300000 bus-ID: 0004:41:00.0
IF: end0 state: up speed: 2500 Mbps duplex: full mac: 8e:3b:34:3a:21:e4
IF-ID-1: bonding_masters state: N/A speed: N/A duplex: N/A mac: N/A
IF-ID-2: end1 state: down mac: 4a:ea:ba:b1:6c:55
Bluetooth:
Device-1: Realtek Bluetooth Radio type: USB driver: btusb v: 0.8 bus-ID: 2-1:2
Report: rfkill ID: hci0 rfk-id: 0 state: down bt-service: not found rfk-block: hardware: no
software: no address: see --recommends
Drives:
Local Storage: total: 698.72 GiB used: 4.02 GiB (0.6%)
ID-1: /dev/mmcblk0 model: A3A564 size: 232.96 GiB
ID-2: /dev/nvme0n1 vendor: Netac model: NVMe SSD 500GB size: 465.76 GiB
Partition:
ID-1: / size: 448.55 GiB used: 3.87 GiB (0.9%) fs: ext4 dev: /dev/nvme0n1p2
ID-2: /boot size: 2.27 GiB used: 152.1 MiB (6.5%) fs: vfat dev: /dev/nvme0n1p1
ID-3: /var/log size: 46.8 MiB used: 5.2 MiB (11.1%) fs: ext4 dev: /dev/zram1
Swap:
ID-1: swap-1 type: partition size: 8.09 GiB used: 0 KiB (0.0%) dev: /dev/nvme0n1p3
ID-2: swap-2 type: zram size: 7.65 GiB used: 0 KiB (0.0%) dev: /dev/zram0
Sensors:
Src: /sys System Temperatures: cpu: 26.8 C mobo: N/A
Fan Speeds (RPM): N/A
Info:
Processes: 293 Uptime: 1m Memory: 15.31 GiB used: 1.31 GiB (8.6%) Init: systemd Compilers:
gcc: 12.2.0 Packages: 817 Shell: Bash v: 5.2.15 inxi: 3.3.26

действительно много общего, однако отличия тоже имеются. Мы не станем останавливаться на пошаговом разборе каждого из пунктов, описанного для OrangePi 5, они достаточно хорошо освещены коллегами по ссылке выше, а для NanoPC-T6, аналогичны. Отметим только детали, чтобы не «спотыкаться» выполняя действия по настройке. Так же хочу отметить, что не призываю отказываться от использования предустановленной на одноплатном ПК NanoPC-T6 Вендором оборудования ОС Android(в ходе его предпродажной подготовки), с целью перехода на Armbian и Proxmox-VE. Замена прошивки необходима для загрузки одноплатного ПК с любых подключаемых устройств (NVME, USB, PXE), к сожалению, "из коробки" такой функционал отсутствует. Ответственность за Ваши действия лежит исключительно на Вас. Прошивка устройства это всегда дополнительный страх и риск, но это выбор хозяина устройства. За испорченные устройства отственности не несу. Моя цель только описать свой путь, шаги которые помогали мне обходить острые углы в ходе решения проблемы. Шаги оформим в виде таблички.


Отличия в сетевых интерфейсах:

Hidden text

root@nanopct6:~# inxi -N
Network:
Device-1: Realtek RTL8125 2.5GbE driver: r8169
Device-2: Realtek RTL8822CE 802.11ac PCIe Wireless Network Adapter driver: rtw_8822ce
Device-3: Realtek RTL8125 2.5GbE driver: r8169

Иллюстрация прошивки NanoPC-T6
Иллюстрация прошивки NanoPC-T6
Иллюстрация устройства после прошивки 1.
Иллюстрация устройства после прошивки 1.
Иллюстрация устройства после прошивки 2.
Иллюстрация устройства после прошивки 2.
Иллюстрация предварительных настроек устройства
Иллюстрация предварительных настроек устройства

Виды работ:

Проводимые действия:

Подготовительные работы

 

Установка образа nanopc-t6  nanopc-t6_UEFI_Release_v0.9.1.img для загрузки с любых подключаемых устройств в режиме

Rockchip RK3588 UEFI

Установку образа во внутреннюю память устройства проводил утилитой rkdeveloptool в режиме MASK. Иллюстрации выше. По завершении процесса прошивки заходим в меню Device manager Rockchip platform configurationACPI/Device treeDevice Tree Configuration (Support DTB override & overlays) выставляем значение Enabled; ACPI Configuration (USB 2.0 Support) выставляем значение Enabled; Config Table Mode выставляем значение Both, далее жмём F10=Save Детали видны выше на скриншоте на иллюстрации предварительных настроек устройства.

После прошивки nanopc-t6 и установки Armbian (Начальным образом для установки послужил: Armbian_community_24.5.0-trunk.211_Nanopct6_bookworm_vendor_6.1.43_minimal.img.xz)

sudo -i

xzcat Armbian_community_24.5.0-trunk.211_Nanopct6_bookworm_vendor_6.1.43_minimal.img.xz >> /dev/sdX && sync

где «X» в sdX обозначает корректное наименование устройства для записи в системе.

Опытным путём установил необходимость выделения под загрузочную область места не менее 1 ГБ, у себя выделил около 2 ГБ. Этого должно хватить, даже в случае частого обновления ядра ОС. Провести изменение размера загрузочной области и подвигать разделы можно сразу после записи образа, используя ПО gparted; вносим корректировки в файл hosts:

127.0.0.1   localhost.localdomain localhost4.localdomain4 localhost localhost4

192.168.50.116 nanopct6.proxmox.local nanopct6 localhost

::1         localhost.localdomain localhost6.localdomain6 localhost localhost6

fe00::0     ip6-localnet

ff00::0     ip6-mcastprefix

ff02::1     ip6-allnodes

ff02::2     ip6-allrouters

конфигурируем сеть (устанавливаем iproute и ifupdown2) и назначаем mac-адреса адаптерам

source /etc/network/interfaces.d/*

# Network is managed by Network manager

auto lo

iface lo inet loopback

 

auto end0

#iface end0 inet6 auto

iface end0 inet static

address 192.168.50.116

netmask 255.255.255.0

geteway 192.168.50.1

#dns-nameservers 80.80.80.80 80.80.81.81

up route add -net 0.0.0.0/0 gw 192.168.50.1 end0

post-up ip link set end0 address 8e:3b:34:3a:21:e4

 

auto end1

iface end1 inet6 dhcp

iface end1 inet dhcp

post-up ip link set end1 address 4a:ea:ba:b1:6c:55

Как видно из иллюстраций, размещённых выше, вследствие прошивки, mac-адреса сетевых устройств NanoPC-T6 были утеряны. Нужно заменить их новыми значениями. Если этого не сделать, маршрутизатор не будет резервировать выданный датацентру ip-адрес, вместо этого при каждой загрузке системы будет выдавать произвольные значения. Чтобы этого избежать, я выбрал произвольные значения mac-адресов для сетевых адаптеров и задаю их через post-up; также их внёс в резервирование DHCP маршрутизатора. Рекомендую устанавливать свои значения.

Настройка репозиториев для установки необходимого набора пакетов, согласно источнику:

root@nanopct6:/opt# cat /etc/apt/sources.list.d/pveport.list

deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/kernel sid port

deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/pbs bookworm port

deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/devel bookworm port

deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/pve bookworm ceph-reef

deb [arch=arm64] https://mirrors.apqa.cn/proxmox/debian/pve bookworm port

Основные работы

 

a) Просмотр доступных в репозиториях ядер PVE:

apt-cache search pve-kernel

b) Установка оптимального:

apt install pve-kernel-6.1-rockchip pve-headers-6.1-rockchip -y 

c) Во время установки выявлено отсутствие доступных драйверов сетевых адаптеров

W: Possible missing firmware /lib/firmware/rtl_nic/rtl8168d-2.fw for module r8169  без которых сеть на установленном pve-kernel работать не будет. Перед перезагрузкой в новое ядро, выполняем установку пакетов firmware-realtek и firmware-misc-nonfree из репозиториев (у меня без проблем установились).

apt install firmware-realtek firmware-misc-nonfree -y

В качестве альтернативы можно поискать здесь.

Установку Proxmox-VE необходимо выполнять из специально собранного ядра PVE-Kernel. Если этим правилом пренебречь, натолкнёмся на проблему с запуском ряда служб, включая pve-manager.service, от которых зависит запустится proxmox-ve или нет.Поэтому, перезагружаемся и запускаем ядро PVE, предварительно сконфигурировав grub.cfg. Ниже таблицы приведены 2 выдержки из grub.cfg. Обратите внимание, что UUID нужен верный. Закомментированные строки показывают, что можно прописать разделы устройства не только по UUID. Всё на Ваше усмотрение.

Выполняем установку согласно инструкции, с корректировкой: Update your repository and system by running:

apt update && apt full-upgradeВыполнять на этапе установки не будем, иначе можем повредить загрузочную область при обновлении ядра. Чтобы избежать возможность поломки можно в процессе настройки зайти в armbian-config и в настройках безопасности запретить обновления ядра; так же можно сконфигурировать загрузчик на загрузку ядра из директории /boot, размещённой в корневом разделе диска. Тогда при обновлениях ядра будет перетираться только загрузочная область минуя /boot.

 

Конфигурация grub.cfg будет различаться, в зависимости от директории размещения ядра ОС. Ниже приведены 2 варианта размещения: после копирования в директорию /boot (когда мне не хотелось зависить от корректности выполнения обновления ядра системы) и до этой манипуляции.

root@nanopct6:/boot/boot/grub# cat ./grub.cfg
source /boot/grub/config.cfg

# Live boot
menuentry "Live system (legacy-rk35xx)" --hotkey=l {
	smbios -t 11 -s 4 --set=devicetreename
	if [ -f /live/dtb/rockchip/$devicetreename ];then
		devicetree /live/dtb/rockchip/$devicetreename
	elif [ -f /live/dtb/rockchip/$devicetreename.dtb ];then
		devicetree /live/dtb/rockchip/$devicetreename.dtb
	fi
	search --no-floppy --fs-uuid 6cce74bf-fe6f-4eba-81de-02067112ea16 --set=root --hint hd0,gpt2
        devicetree /boot/dtb/rockchip/rk3588-nanopc-t6.dtb
       	#linux /boot/vmlinuz-6.1.43-rockchip root=/dev/nvme0n1p2 ro quiet
	linux /boot/vmlinuz-6.1.43-rockchip root=UUID=6cce74bf-fe6f-4eba-81de-02067112ea16 ro rootwait rootfstype=ext4
        #linux /boot/Image root=UUID=6cce74bf-fe6f-4eba-81de-02067112ea16 ro rootwait rootfstype=ext4
	initrd /boot/initrd.img-6.1.43-rockchip
        boot
}

либо:

source /boot/grub/config.cfg

# Live boot
menuentry "Live system (legacy-rk35xx)" --hotkey=l {
	smbios -t 11 -s 4 --set=devicetreename
	if [ -f /live/dtb/rockchip/$devicetreename ];then
		devicetree /live/dtb/rockchip/$devicetreename
	elif [ -f /live/dtb/rockchip/$devicetreename.dtb ];then
		devicetree /live/dtb/rockchip/$devicetreename.dtb
	fi
	search --no-floppy --fs-uuid C0CA-BD0D --set=root --hint hd0,gpt2
        devicetree /dtb/rockchip/rk3588-nanopc-t6.dtb
       	#linux /boot/vmlinuz-6.1.43-rockchip root=/dev/nvme0n1p2 ro quiet
	linux /vmlinuz-6.1.43-rockchip root=UUID=6cce74bf-fe6f-4eba-81de-02067112ea16 ro rootwait rootfstype=ext4
        #linux /boot/Image root=UUID=6cce74bf-fe6f-4eba-81de-02067112ea16 ro rootwait rootfstype=ext4
	initrd /initrd.img-6.1.43-rockchip
        boot
}

Заключение

Одельного скомпилированного ядра pve-kernel для nanopc-t6 на просторах интернета на сегодняшний день я не обнаружил, поэтому выбор очевиден, остановился на

Hidden text

root@nanopct6:~# uname -a

Linux nanopct6 6.1.43-rockchip #1 SMP PVE Port 6.1.43-3-orangepi (2024-04-10) aarch64 GNU/Linux

Иллюcтрация сборки Proxmox-VE
Иллюcтрация сборки Proxmox-VE

Действия, обозначенные в таблице на сегодняшний день актуальны и помогли мне собрать на arm64 Proxmox-VE из портов. Надеюсь, помогут и ещё кому-то не допустить возможных ошибок и снизить трудозатраты на настройку Nanopc-T6.

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


  1. NutsUnderline
    29.05.2024 08:11
    +1

    стиль изложения сильно затрудняет понимание происходящего, даже прочитав предыдущие статьи по ссылкам. Зачем менять прошивку? Причем вообще android упомянут?


    1. Labuzhskiy Автор
      29.05.2024 08:11
      +1

      Добрый день, Коллеги!

      Внëс корректировку:

      "Так же хочу отметить, что не призываю отказываться от использования предустановленной на одноплатном ПК NanoPC-T6 Вендором оборудования ОС Android(в ходе его предпродажной подготовки), с целью перехода на Armbian и Proxmox-VE. Замена прошивки необходима для загрузки одноплатного ПК с любых подключаемых устройств (NVME, USB, PXE), к сожалению, "из коробки" такой функционал отсутствует."

      Прошу проверить.


  1. Labuzhskiy Автор
    29.05.2024 08:11

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


  1. RomanKu
    29.05.2024 08:11
    +2

    Пока тоже ничего не понял ни про uefi ни про android не понял, но тоже планирую купить сервер для proxmox.

    Пока выбор из решения на ryzen или RK3588
    Из RK3588 Как раз таки выбор между Orange 5 plus и Nano PI NanoPC-T6, но из статьи не понял чем второе лучше, чем первое или наоборот.

    Не понятно по поводу UEFI тоже у меня несколько (7-9) одноплатников и впервые вижу и слышу конфигурирование через UEFI, в большинстве случае это делается по SSH при помощи armbian-config. В общем, надо еще разбираться.

    Ну и слово "прошивка" не совсем уместно тут т.к. система грузится с внешнего по отношению к CPU накопителя, по сути, это ближе к x86 архитектуре, нежели ко всяким esp8266 и подобным


    1. Labuzhskiy Автор
      29.05.2024 08:11

      При покупке одноплатника на его внутренней памяти уже имеется предустановленная ОС Android, о её замещении и идти речь в момент установки образа UEFI. Не уместное слово "прошивка" Заменено. Спасибо. Задачу сравнения в момент написания статьи не рассматривал, поскольку решений на ryzen и на Nano PI не имею. armbian-config по прежнему доступен в Armbian после установки на внешний по отношению к CPU накопитель.


      1. RomanKu
        29.05.2024 08:11
        +1

        По поводу Nano Pi не корректно выразился, имел ввиду NanoPC T6 ваш, просто, у этого производителя есть линейка nano pi и nano pc (в чем отличие не знаю, но большинство одноплатников называются nano pi, а из nano pc только t2,t3,t4 и вот новый t6, видимо, больше оперативки)

        Еще раз перечитал оригинальную статью

        По поводу прошивки понятно, загрузка идет изначально с SPI Nor Flash, но там всего 32 МБ (ну как всего, для этого типа памяти это целых 32, микротики вон все никак от 16 МБ не уйдут), соответственно, Android туда не станет, Android установлен, видимо на emmc память, соответственно, дефолтно идет загрузка uboot из Nor flash, далее uboot грузит Android c emmc

        Далее идет отсылка к автору первой статьи.

        1. Изначально автор не осилил установку proxmox на EMMC, поэтому, установка производится на USB SSD диск, а встроенный EMMC просто игнорируется.

        2. Изначально автор не осилил настройку Uboot для загрузки системы с USB, поэтому, решил поставить сразу UEFI, что не не является плохим т.к. UEFI более функциональная система, причем, уже операционная система и могу ошибаться, но часто все равно реализовывается цепочка u-boot -> efi -> Linux Kernel, только в этом случае uefi грузится не с Nor flash, а с целевого накопителя.

        3. Автор подключил USB диск к другому компьютеру и залил туда образ системы

        4. Далее подключил внешний SSD к одноплатнику началась загрузка Nor Flash (UEFI) -> USB SSD (Proxmox)

        5. В этом случае встроенный модуль EMMC не используется, но в теории может быть примонтирован в ОС уже после раскатки Proxmox и далее уже на нем создать хранилище.

        Если говорить про Nano PC-T6, то хотелось бы получить такую схему работы:

        • 32M Nor Flash - bootloader uboot или uefi

        • 64 GB EMMC - под загрузку Proxmox

        • 1-2 TB NVME - под виртуалки


    1. Johan_Palych
      29.05.2024 08:11

      Загрузчик в NOR Flash и система на nvme m.2 ssd. Как в PC
      NanoPC-T6(Nor Flash: 32MB SPI Nor Flash, M.2 Connectors)
      https://wiki.friendlyelec.com/wiki/index.php/NanoPC-T6
      https://www.armbian.com/nanopct6/
      Orange Pi 5 (как настоящий...)
      https://habr.com/ru/articles/775488/
      Первоисточник автора статьи на хабре
      https://radix.pro/devices/orange-pi5/


    1. NutsUnderline
      29.05.2024 08:11

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

      а как загрузться линукс то там уже ssh но вовсе не обязательно armbian-config, он по сути меняет текстовые файлы с конфигурацией и команды в строке. и armbian и armbian-config можно запустить и на rайzen

      весь выбор заключается чтобы понять что работает стабильнее и нет каких ли косяков которые разработчики не захотят исправлять. arm потихоньку дорастает уровня x86

      еще есть интересные сравнения по производительности и энергопотреблению. RK3588 близок скорее к intel i3.

      если надо сделать что то простенькое, малопотребляющее и однофункциональное то arm выглядит интереснее.

      Но вот когда захочется виртуалок и всяких там, к примеру, распознований с видеокамер, home assisstant и кучу дисков в массив то x86 пока что практичнее


      1. RomanKu
        29.05.2024 08:11
        +1

        Ну тут armbian-config я упоминал больше в контексте того, что вставил флешку и через пару минут по сети зашел на одноплатник, а на поддерживаемых платформах armbian-config умеет настраивать параметры портов и железа одноплатника. Автор же приводил сфотографии подключенного монитора, т.е. немного больше шагов получается и если одноплатник где-то под потолком лежит, то повторная настройка может быть сложной, но, возможно, что конфиги UEFI потом можно и по SSH править

        По поводу того, что RK3588 ближе к I3 я не спорю, но даже i3 для не Apple Silicon уже прорыв т.е. уже можно задуматься над выбором между x86 и ARM, я бы сравнивал RK3588 с N100, а мобильные ряженки уже раза в 2 мощнее могут быть, что не может не радовать при использовании кучи виртуалок.

        У меня сейчас Home Assistant на NanoPI M4V2 и то USB отваливается, то WiFi с BT при обновлении, почитал более детально про установку proxmox и такой, ну его весь этот головняк с ARM, либо не обновлять систему потом, либо брать сразу 2 - 1 для тестового обновления, 2 для прода.

        Единственное, что RK3588 имеет NPU 6TOPs, что полезно для распознавания объектов с камер, а для x86, для этого надо как минимум RTX2060, что уже слегка выходит за рамки Мини ПК или же Google Coral на 4 TOPs воткнуть