Подготовка Orange Pi 5 к селфхостингу

Рассказываю, как и зачем я это делаю.

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

Файлов, нужных для сохранения, у меня не сильно много, и, тем не менее, я не готов доверять их флеш-памяти, когда речь идёт про длительное хранение. Однако, SSD тоже умеют подводить, хоть и кратно реже. У меня завалялся 1 SSD на 128ГБ, который я использовал для сборки LFS (Господи, когда я уже сделаю про это видос). Второй точно такой же SSD стоит всего лишь 1к рублей.

Вместе с ним я заказал:

orpi5

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

Как итог — я хочу пользоваться одноплатником для хостинга сервисов, при этом иметь второй SSD для резервных копий.

Подготовка системы, первые шаги

  1. Установка ОС. Для начала я загрузил образ Armbian на SSD с помощью caligula (очень удобная утилита, всем советую).

  2. Подключение по UART. Далее я подключаюсь к одноплатнику по UART, чтобы видеть весь процесс загрузки, мне так удобнее.

Совет: Если вы хотите работать с одноплатниками — настоятельно рекомендую купить ST-LINK, либо, ещё предпочтительнее — USB-дебаггер от WeAct (Ozon, Яндекс.Маркет), он намного удобнее.

Чтение по COM-порту можно осуществить командой:

screen /dev/ttyACMx 1500000

(где x — номер COM-порта). Для некоторых одноплатников baudrate будет состовлять 115200.

Как найти порт? Узнать, какой COM-порт занимается при подключении ST-LINK/USB-дебаггера можно, запустив команду dmesg -w и переподключив устройство заново.

Зачем вообще нужно подключение по UART? С помощью подключения по UART можно зафиксировать различные ошибки загрузки, которые не выловить с помощью SSH.

Настроечка

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

Проблема с двумя SSD: При попытке в любом из моментов, описанных ранее, добавить второй SSD — система сходит с ума и отказывается загружаться. Я заметил, что это касается портов USB 2.0, поэтому после первоначальной настройки подключил второй SSD через переходник на Type C и попытался ребутнуться ещё раз, чтобы убедиться, что система загружается. Система действительно загружается. Пробую обновляться через armbian-upgrade и ребутаюсь ещё раз — система исправно загружается. Теперь я спокоен, а потому можно переходить к следующему шагу — автомонтированию второго SSD.

Заметка насчёт обновлений: По умолчанию Armbian очень долго загружал обновления с репозитория. Порыскав интернет, я наткнулся на блогпост, в котором рассказывалось о решении этой проблемы. Я не смог полностью воспроизвести все шаги в виду отсутствия нужных директорий и файлов, но нашёл похожие. В моём случае я отредактировал файл /etc/apt/sources.list.d/armbian.sources и добавил туда зеркало JetHome, которое нашёл в этом списке.

Преднастройка резервного диска

Сначала я думал, что мне нужно организовывать RAID-массив для резервной копии, однако, после попытки его создания, я быстро понял, что делать его на одноплатнике — достаточно глупая идея, поэтому решил ограничиться обычным копированием важных файлов в реальном времени.

  1. Установка софта. Я установил свою любимую оболочку fish, свой любимый текстовый редактор micro (я до сих пор не готов к изучению vim).
  2. Подготовка диска. С помощью blkid я посмотрел UUID диска, который нужно примонтировать. Создал директорию, куда будет монтироваться SSD.
  3. Разметка и форматирование. С помощью cfdisk создал раздел на SSD размером с весь диск и отформатировал его командой mkfs.ext4.
  4. Автомонтирование. Следующим шагом я добавил запись в /etc/fstab следующего вида:
UUID=someuuid somedirectory auto nosuid,nodev,nofail,x-gvfs-show 0 0
  1. Проверка. Делаю systemctl daemon-reload и ребутаюсь, чтобы проверить, монтируется ли диск автоматически. Теперь, после ребута, команда lsblk показывает заданную точку монтирования — всё работает, как надо.

Для начала этого хватит, так как у меня ещё даже нет блога, куда я мог бы это выложить :D (не было на момент написания этого текста)