Многие слышали про DIY проект Pi-KVM, позволяющий превратить ненужную малинку в IP-KVM. Не смотря на то, что разработчик проекта выпускает свое собственное железо, проект опенсурсный, но заточен только под одноплатные микрокомпьютеры Raspberry Pi 2, 3, 4 и Zero 2 W.

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

PiKVM на Orange Pi Zero 3
PiKVM на Orange Pi Zero 3

На этом вроде бы можно и закончить, если бы не одно "но" - в самой свежей версии 4.94 (на момент написания данной статьи) реализован режим эмуляции DVD-ROM, который позволяет монтировать большие ISO образы. Да и в принципе приятно когда установлен свежий софт, с исправленными глюками и багами, а не версия времен динозавров.

Попробовав установить версию 4.94 оригинальным скриптом меня ожидало фиаско. Во первых, самая свежая версия жить не может без python3.13, а скрипт на данный момент под него не заточен. А во вторых, реализация функции эмуляции DVD-ROM не такая уж и тривиальная задача, как оказалось. И даже если у вас получится поставить PiKVM, работать эмуляция не будет - автор проекта внес изменения в исходники модуля ядра (раз, два), добавив дополнительную функцию в f_mass_storage для usb_gadget.

Но так как проект опенсурсный, мы можем сделать тоже самое. Для этого нам понадобится... собрать свой собственный армбиан, применив данные патчи к ядру!

На самом деле ничего страшного в этом нет, так как среда сборки Armbian довольно продуманна, и позволяет кастомизировать готовые образы практически как угодно. Почитать про сборку собственного дистрибутива можно тут и тут. А мы же сразу приступим к действиям.

Сборка Armbian с патчами ядра.

Для сборки собственного кастомного дистрибутива понадобится Linux. Можно попробовать собрать дистрибутив и на Windows 10/11 с подсистемой WSL2 на котором запущен Armbian / Ubuntu Noble 24.04.x, но я буду использовать Armbian Build Framework на машине с установленным Ubuntu Noble 24.04.x. Можно заюзать любой Linux который умеет в Docker.

Качаем исходники Armbian Build Framework

git clone https://github.com/armbian/build
cd build

Попав в папку build, можно уже что-нибуть собрать с помощью команды

./compile.sh

Нас встретит консольный псевдографический "мастер", который поможет собрать дистрибутив в пару-тройку кликов энтером. Параметры менять нет необходимости, поэтому выбираем дефолтные значения, за исключением модели вашего одноплатного компьютера и версии Armbian OS.

Если ваш одноплатный компьютер отсутствует в списке официально поддерживаемых, загляните в меню Show CSC/WIP/EOS/TVB и попробуйте найти его там.

Тут можно найти список оборудования побольше
Тут можно найти список оборудования побольше

Я буду собирать образ под Orange Pi Zero 3, который как раз и находится в списке оборудования, поддерживаемого сообществом (CSC). Там же находятся ТВ-приставки и оборудование которое уже не продается (EOS).

Код красный. Оборудование поддерживается коммьюнити.
Код красный. Оборудование поддерживается коммьюнити.

Для работы PiKVM необходим python3.13 и janus (Janus WebRTC Server). Если первый можно найти в репозиториях Armbian Trixie и Ubuntu 25.04 Plucky Puffin, то с последним все гораздо интереснее. В Debian Trixie его нет. Его выпилили. А ставить Janus WebRTC Server из исходников что-то совсем не хочется.

Ubuntu 25.04
Ubuntu 25.04

В Ubuntu 25.04 (Plucky) пакет janus имеется, и не смотря на то что эта версия ОС поддерживается только коммьюнити (csc), выбора у нас пока нет, поэтому смело выбираем пункт с вышеназванной осью (выбирая остальные параметры по умолчанию).

Но ведь мы же еще не положили патчи ядра! - спросите вы, и будете правы. Но, во первых, лучше заранее убедиться что сборка дистрибутива под вашу модель одноплатника пройдет успешно. А во вторых, первый запуск скрипта создаст дополнительные папки, необходимые для сборки кастомного дистрибутива, одна из которых будет называться userpatches. Вот она то нам и будет нужна впоследствии.

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

KERNELPATCHDIR и все все все
KERNELPATCHDIR и все все все

Нас интересует строчка с KERNELPATCHDIR. Папка с патчами должна находиться в зависимости от архитектуры процессора и версии ядра в директории userpatches.

В принципе, на этом месте сборку дистрибутива можно прервать нажав Ctrl+C, и наконец положить волшебные патчи в нужное место.

В моем случае патчи ядра располагаются в папке archive/sunxi-6.12, а полный путь относительно директории build будет выглядеть как userpatches/kernel/archive/sunxi-6.12/ . Папку sunxi-6.12 необходимо создать руками и положить туда два патча. Если у вас установлено окружение рабочего стола, выполнить эти простые вещи для вас не составит труда. Если вы работаете с голой консолью, то находясь в папке build запустите

mkdir userpatches/kernel/archive/sunxi-6.12

cd userpatches/kernel/archive/sunxi-6.12

wget https://raw.githubusercontent.com/pikvm/packages/refs/heads/master/packages/linux-rpi-pikvm/2001-msd-dvd.patch

wget https://raw.githubusercontent.com/pikvm/packages/refs/heads/master/packages/linux-rpi-pikvm/2002-msd-inq.patch

Не забудьте поменять имя папки sunxi-6.12 на свое!

Запускаем сборку дистрибутива заново (./compile.sh) и ждем успешного завершения. Наберитесь терпения, это не быстрый процесс. Будут скачаны исходники ядра, применены патчи и собрано новое ядро, и только потом - дистрибутив Armbian.

Готовый файл образа будет лежать в папке build/output/images. Запишите образ на SD-карту размером не менее 32Гб (большой объем пригодится для хранения установочных образов ISO), вставьте ее в одноплатный компьютер и загрузите ОС.

После первого запуска обязательно отключите обновление ядра с помощью armbian-config в меню Sustem - Updates - Disable Armbian firmware upgrades.

Половина дела сделана. Осталось установить PiKVM.

Установка PiKVM 4.94 на Ubuntu 25.04

Как я уже упоминал, для работы последней версии PiKVM необходим Python 3.13 и собранный с патчами ядра дистрибутив Ubuntu Plucky. Обязательно учтите эти требования!

Работа скрипта разделена на две части - первый запуск скрипта устанавливает необходимые пакеты, собирает из исходников ustreamer и wiringpi, создает пользователей, а вторая часть (после обязательной перезагрузки) окончательно устанавливает PiKVM, и немного подрихтовывает систему для его работы.

Для начала обновим пакеты системы до актуальных версий

sudo apt update && apt upgrade

Если система предложит обновить ядро, значит вы не отключили обновления ядра в armbian-config. Обязательно выберете Disable Armbian firmware upgrades, иначе ядро с необходимыми патчами будет заменено.

Установим некоторые пакеты

sudo apt install -y git vim make python3-dev gcc xz-utils wget

Склонируем репозиторий

git clone https://github.com/kerenskiy/kvmd-armbian.git --depth 1

Перейдем в папку со скриптом и запустим его

cd kvmd-armbian

./install.sh

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

На втором этапе работы скрипта будет предложено проверить работоспособность PiKVM. Сделать это можно перейдя в браузере по ip адресу который получил микрокомпьютер, и если веб админка откроется, значит мы все сделали правильно. Смело жмем "y" и перезагружаем микрокомпьютер после завершения выполнения работы второй части скрипта.

Осталось подготовить все необходимое для работы эмулятора CD\DVD-дисковода PiKVM. Выключаем одноплатный компьютер и вытаскиваем из него SD-карточку. Её придется переразметить - уменьшить основной раздел с ОС до 4-8Гб, создать второй раздел на освободившемся пространстве и отформатировать его в файловую систему ext4. Чем и как это сделать - каждый решает сам. Можно воспользоваться Acronis Disk Director, GParted или любыми другими программами для работы с дисками. В моем случае я просто воткнул карточку в компьютер с Kubuntu и разбил ее с помощью стандартной утилиты "Управление дисками KDE".

Создание второго раздела
Создание второго раздела

Возвращаем карточку обратно в одноплатный компьютер и загружаем ОС. Для того, чтобы свежесозданный раздел появился в системе и мог использоваться PiKVM для хранения установочных образов, необходимо дописать в файле /etc/fstab точку монтирования, выполнив команду

sudo nano /etc/fstab

и поместив следующий текст в самом конце файла (на новой строке):

/dev/mmcblk0p2 /var/lib/kvmd/msd ext4 nodev,nosuid,noexec,ro,errors=remount-ro,data=journal,X-kvmd.otgmsd-root=/var/lib/kvmd/msd,X-kvmd.otgmsd-user=kvmd 0 0

Перезагружаем одноплатный компьютер чтобы изменения вступили в силу и включаем функционал MSD (Mass Storage Device) в конфиге PiKVM.

sudo nano /etc/kvmd/override.yaml

Ищем секцию msd и стираем все что с ней связано. Должно получиться как то так:

Редактирование файла override.yaml
Редактирование файла override.yaml

Еще раз перезагружаемся и проверяем работу msd - в интерфейсе PiKVM должно появиться меню Drive, с помощью которого можно загружать образы и монтировать их в хост системе.

Меню Drive
Меню Drive

На этом все. Благодарю за внимание.

PS. Замечания по работе исправленного скрипта установки PiKVM принимаются на github, буду рад вашим PR.