Установка прошивки на Orange Pi 5 Pro

Купил некоторое время назад прекрасный девайс — Orange Pi 5 Pro. Работа с SD карты в мои планы не входила, так что сразу взял к нему NVME SSD. Получил посылку с заказом, быстро всё собрал и на радостях не обратил внимание на маленький, но важный нюанс: этот мини-пк идёт по умолчанию без SPI Flash и eMMC модуля. 🙂

В инструкции достаточно подробно всё расписано, как прошивать образ операционной системы на SD карту, на SPI Flash, на eMMC и на SD карту с дальнейшей записью операционки на NVME диск. Но, как водится, есть подводные камни.

1. Balena Etcher.

Заставить работать свежую версию (1.19.25) у меня сходу не удалось. При записи открывается сообщение с ошибкой «Error spawning child process». Но вот версия 1.18.4 работает без проблем.

2. Образы операционных систем

Я пробовал заливать на SD карту образы Debian, OpenWRT, OpenHarmony. Все они не загружаются. А посмотреть ошибку по UART я не мог, не было модуля под рукой. 🙂

В итоге заработал образ Orangepi5pro_1.0.4_ubuntu_jammy_server_linux6.1.43.img, ссылка на который была в официальной документации. После заливки его на SD карту, «апельсинка» наконец-то загрузилась. Тогда уже, в соответствии с документацией, мне удалось закинуть образ Ubuntu на NVME диск, а на флэшку записать загрузчик rkspi_loader.img. К слову, обновление Ubuntu с версии 22.04 («Jammy Jellyfish») до актуальной 24.04 («Noble Numbat») прошло без проблем.

В остальном железяка показала себя очень хорошо. В данный момент использую её в качестве видеорегистратора для записи видео с IP камер и «сердца» «умного дома» с HomeAssistant, и её ресурсов для этих целей более чем хватает.

Перенос информации с диска одного ноутбука на другой по сети

Купил тут новый ноутбук, встал вопрос переноса данных на него со старого ноутбука. Просто поменять диск смысла не было, диск хоть и SSD, но уже немного устаревший. Сначала хотел было вытащить диск из нового ноутбука, воткнуть его во внешний контейнер и скопировать данные со старого диска с помощью dd. Но, как это часто бывает, контейнер забыл в другом месте, а пользоваться новым ноутбуком уже хотелось. Поэтому сделал так.

1) Подключил оба ноутбука кабелем к коммутатору.

2) Загрузил на обоих ноутбуках с флэшек Debian Live дистрибутив.

3) Установил на обоих ноутбуках netcat:

apt install nc

4) На старом ноутбуке установил pv:

apt install pv

5) Посмотрел, какой IP адрес у нового ноутбука и запустил следующую команду:

nc -l -p 7777 | dd of=/dev/nvme0n1 obs=1M

Как можно догадаться, диск на новом ноутбуке проходит под названием /dev/nvme0n1.

6) На старом ноутбуке запустил процесс копирования содержимого диска /dev/sda на IP адрес нового ноутбука:

pv /dev/sda | nc 192.168.0.10 7777

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

После чуть более часового ожидания процесс копирования завершился.
Также на новом ноутбуке запустил gparted, чтобы проверить, весь ли раздел используется. Gparted выдал уведомление, что используется не весь раздел и предложил это исправить. Согласился и исправил эту ошибку. После перезагрузился, вытащив флэшку — вуаля, система определилась, всё заработало.

Установка и прошивка контроллера ESP32 S2 mini ESPHome

Небольшая инструкция-памятка по загрузке прошивки в контроллеры типа ESP32. Я для своих задач по созданию «умного дома», использую в частности ESP32 S2 mini и прошивку ESPHome.

Прежде всего установим необходимые пакеты:

apt install python3 python3-venv

Для того, чтобы вашему пользователю была доступна работа с последовательными портами, добавим его в группу dialout:

usermod -a -G dialout alexey

Здесь alexey — логин пользователя, как можно догадаться.

Создадим виртуальное окружение:

python -m venv venv

Для некоторых дистрибутивов это может не сработать. Например, в Kali Linux. В них нужно использовать другую команду:

virtualenv venv

И последний штрих:

source venv/bin/activate

На этом виртуальное окружение готово, переходим к самому главному. Установим в виртуальном окружении необходимые пакеты, а именно esptool и esphome:

cd venv
pip3 install esptool
pip3 install esphome

После установки подключим контроллер к компьютеру, переведём его в режим записи и проверим, что всё работает нормально с помощью очистки прошивки:

esptool.py --port /dev/ttyACM0 erase_flash

Более подробную информацию о Esphome можно получить на официальном сайте. Я лишь оставлю основные команды.

Подготовка конфигурации прошивки:

esphome wizard livingroom.yml

Проверка созданного конфига:

esphome config livingroom.yml

Компиляция и запись прошивки в контроллер:

esphome run livingroom.yml

Если эта тема интересна, могу поделиться более детальной инструкцией и конфигами, которые использую для чтения данных с датчиков, управления реле и другими устройствами. Пишите в комментарии, если да. 🙂

Соединяем две локальные сети через VPS с помощью VPN Wireguard

Задача была следующей: соединить между собой две сети, не имеющие «белого» IP-адреса. Одна сеть выходит в интернет через роутер Mikrotik, вторая сеть выходит через Zyxel Speedster. В качестве связующего звена было решено использовать VPS с установленным Wireguard VPN.

Получилась такая схема:

LAN0 (192.168.0.0/24) -> Mikrotik -> Internet -> VPS <- Internet <- Zyxel <- LAN1 (192.168.2.0/24)

1. Настраиваем Wireguard на VPS

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

root@vpn-vps:~# cat /etc/wireguard/wg0.conf
[Interface]
Address = 10.36.36.1/24,fd42:24:24::1/64
ListenPort = 54073
PrivateKey = (hidden)
PostUp = iptables -A FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; ip6tables -A FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;
PostDown = iptables -D FORWARD -i eth0 -o wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; ip6tables -D FORWARD -i wg0 -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;

### Client router-mikrotik
[Peer]
PublicKey = <...skipped...>
PresharedKey = <...skipped...>
AllowedIPs = 10.36.36.2,192.168.0.0/24,fd42:24:24::2/128

### Client router-zyxel
[Peer]
PublicKey = <...skipped...>
PresharedKey = <...skipped...>
AllowedIPs = 10.36.36.3,192.168.2.0/24,fd42:24:24::3/128

И интерфейс:

root@vpn-vps:~# wg show wg0
interface: wg0
  public key: <...skipped...>
  private key: (hidden)
  listening port: 54073

peer: <...skipped...>
  preshared key: (hidden)
  endpoint: xx.xx.xx.xx:21371
  allowed ips: 10.36.36.2/32, 192.168.0.0/24, fd42:24:24::2/128
  latest handshake: 1 minute, 6 seconds ago
  transfer: 231.14 MiB received, 11.05 GiB sent

peer: <...skipped...>
  preshared key: (hidden)
  endpoint: yy.yy.yy.yy:56043
  allowed ips: 10.36.36.3/32, 192.168.2.0/24, fd42:24:24::3/128
  latest handshake: 1 minute, 5 seconds ago
  transfer: 11.02 GiB received, 230.29 MiB sent

На что здесь нужно обратить внимание? На разрешённые подсети в параметрах allowed-ips.

Также не лишним будет проверить, что в /etc/sysctl.conf раскомментирован форвардинг пакетов:

net.ipv4.ip_forward=1

2. Настраиваем Mikrotik

В Mikrotik RouterOS Wireguard поддерживается «из коробки». Для настройки нужно зайти в раздел Wireguard, добавить новое соединение:


Далее добавляем peer:


И правило в маршруты для доступа в подсеть LAN1:


После этого роутер Microtik будет соединяться с VPN сервером, если мы захотим из сети 192.168.0.0/24 пойти на адреса сети 192.168.2.0/24

3. Настраиваем Zyxel Speedster

Добавим соединение с Wireguard


и настроим peer. В отличие от Mikrotik’а в Zyxel это делается в одном месте:


После этого настраиваем маршрутизацию:


И в настройках файрвола разрешаем доступ из сети LAN0 и VPN:


На этом настройка закончена.

Теперь из сети 192.168.0.0/24 можно заходить на устройства в сети 192.168.2.0/24, также как и наоборот. При этом в интернет из этих сетей клиенты идут через основной выход, а не через VPN.

Итого — мы имеем доступ из двух этих сетей друг к другу. С момента настройки и до написания записи прошло около месяца, надеюсь, я ничего не забыл по пути. Но, как обычно, если есть вопрос, можно его написать в комментариях. Всем спасибо. 🙂

Обновление прошивок с помощью fwupdmgr

Как и всё остальное, обновить прошивки железа в Debian Linux довольно просто. В этом нам поможет утилита fwupdmgr. Рассмотрим процесс пошагово.

Для начала, добавим в источник репозиториев новый компонент non-free-firmware. Именно в него переехали все «несвободные» прошивки:

deb http://ftp.ru.debian.org/debian/ testing main contrib non-free non-free-firmware

Затем подтянем обновления:

root@laptop:~# fwupdmgr get-updates
Devices with no available firmware updates: 
 • SSD 860 EVO M.2 500GB
 • UEFI dbx
────────────────────────────────────────────────
Devices that have been updated successfully:
 • System Firmware (1.29.4 → 1.33.3)
 • UEFI dbx (13 → 217)
Uploading firmware reports helps hardware vendors to quickly identify failing and successful updates on real devices.
Upload report now? (Requires internet connection) [Y|n]: N

А теперь накатим полученные обновления:

root@laptop:~# fwupdmgr update
Devices with no available firmware updates: 
 • SSD 860 EVO M.2 500GB
 • UEFI dbx
╔══════════════════════════════════════════════════════════════════════════════╗
║ Upgrade System Firmware from 1.33.3 to 1.34.3?                               ║
╠══════════════════════════════════════════════════════════════════════════════╣
║ Some new functionality has also been added:                                  ║
║                                                                              ║
║ Firmware updates to address security vulnerabilities including.              ║
║                                                                              ║
║ Latitude E5470 must remain plugged into a power source for the duration of   ║
║ the update to avoid damage.                                                  ║
╚══════════════════════════════════════════════════════════════════════════════╝
Perform operation? [Y|n]: Y
Waiting…                 [***************************************]
Successfully installed firmware
Do not turn off your computer or remove the AC adapter while the update is in progress.
╔══════════════════════════════════════════════════════════════════════════════╗
║ Upgrade TPM 1.2 from 5.81.0.0 to 5.81.2.1?                                   ║
╠══════════════════════════════════════════════════════════════════════════════╣
║ Initial release                                                              ║
║                                                                              ║
║ TPM 1.2 and all connected devices may not be usable while updating.          ║
╚══════════════════════════════════════════════════════════════════════════════╝
Perform operation? [Y|n]: Y
Updating TPM 1.2…        [ -                                     ]
Waiting…                 [***************************************]
Successfully installed firmware
Do not turn off your computer or remove the AC adapter while the update is in progress.
An update requires a reboot to complete. Restart now? [y|N]: N

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

После перезагрузки процесс обновления продолжится:

Обновление прошивки с помощью fwupmgr

И на этом всё. 🙂