Raspberry Pi 4. Рациональное использование SSD диска корпуса Argon One M2. Менеджер загрузки OS

  Обычный сценарий использования нескольких OS на Raspberry Pi предполагает что вы инсталируете необходимые OS на отдельные SD-карты, и при необходимости вставляете и загружаетесь с нужной. При этом для удобной и оперативной замены карт необходимо чтобы доступ к разъему microSD был свободный.
  Конструкция корпуса Argon One M2 затрудняет оперативный доступ к SD-карте, чтобы сменить карту необходимо рассоединять две половины корпуса (4 винта). В то же время корпус поддерживает диск SSD SATA M2 в качестве накопителя, на нем можно разместить несколько по разному настроенных версий Linux для разных задач.

  Емкость моего SSD диска 128 Gb, если примериться к Windows так и хочется сказать 'всего', но в Linux, особенно без GUI это не так. Консольной версии при настройке на определенную задачу обычно хватает 8-16 Gb дискового пространства. А т.к. я брал Rpi4 для экспериментов, посчитал что логичнее разбить SSD диск 128 Gb на независимые подразделы, с которых можно будет загружать различные предварительно настроенные версии Linux с помощью менеджера загрузки. Для ARM микрокомпьютера Raspberry Pi наиболее известные диспетчеры загрузки — это BerryBoot (появился первым) и NOOBS, у NOOBS в свою очередь есть два форка, PINN и мультизагрузчик WDLabs PiDrive. Версии загрузчиков делятся на 'Full' (включают в дистрибутив часть OS, адаптированных к загрузчику) и 'Lite' (предустановленых OS не включают, инсталляция ведется из сети). Т.е. диспетчеры включают не только загрузчики, но и установщики операционных систем.
  Устанавливаются загрузчики одинаково, готовится инсталяционный диск, который впоследствии станет и загрузочным. На диске создается основной раздел FAT32, 8Gb достаточно. Файлы диспетчера загрузки (поставляются в ZIP архиве) переносятся в корень диска. При прямом копировании из-под Windows возможны неочевидные ошибки, лучше для переноса открывать ZIP архив специализированными установщиками. Для Windows это 'Raspberry Pi Imager' или 'balenaEtcher'. При первой загрузке диспетчер переразметит диск и позволит выбрать из списка какие ОS вы хотите установить. Этот список ОS автоматически создается как из локально доступных ОS (то есть из тех, что содержатся в каталоге /os на диске, 'Full'), так и из предварительно определенных удаленных репозиториев (требуется сетевое подключение, 'Lite'). Версия 'Full' включает и функциональность 'Lite', т.е. кроме локально доступных ОС при сетевом подключении доступны и удаленные репозитории.
  Для полноты изложения можно еще упомянуть скриптовые мультизагрузчики для Raspberry Pi, это Multiboot и USB-boot. Они представляют собой скрипты для Linux. Пользоваться ими несколько неудобно, на этапе начальной загрузки нельзя выбрать нужную OS, сначала загрузится выбранная в прошлый раз. И только из нее уже можно будет вызвать скрипт и указать нужную OS, которая станет доступна после перезагрузки. Т.к. не пробовал то и рассматривать не буду.

BerryBoot

  Исходники BerryBoot на GitHub. Оттуда можно зайти на сайт BerryBoot и скачать архив с уже скомпилированным мультизагрузчиком.

  

  BerryBoot представляет собой программу написанную на QT, которая грузит микро ядро Linux. Это ядро в свою очередь разворачивает выбранную OS из предварительно подготовленного образа системы. Чтобы подготовить дистрибутив OS к BerryBoot, сначала необходимо оптимизировать этот дистрибутив для файловой системы SquashFS. Уже одно это мне не понравилось, да и этот мультизагрузчик не заработал у меня так, как мне требовалось.
  Если записать загрузчик на SD-карту, он разворачивается на ней, и впоследствии позволяет установить нужную OS как на ту-же SD-карту, так и на SSD-диск. Это заявленная функциональность, и здесь вопросов нет. Я же хотел вообще отказаться от SD-карты при загрузке и развернуть мультизагрузчик на SSD-диске. К сожалению с данным загрузчиком у меня это не получилось. После переноса загрузчика на SSD-диск и запуска без SD-карты, загрузки не происходит. Происходит поиск загрузчика на SD-карте, и так до бесконечности.

NOOBS

  Исходники NOOBS на GitHub. На этой странице есть ссылка на последнюю скомпилированную версию, эта версия 'Full', включает установочные файлы для Raspberry Pi OS Full и LibreELEC.

  

  NOOBS тоже написан на QT, но в отличии от BerryBoot представляет собой средство восстановления (recovery) Linux из резервной копии. Резервная копия представляет собой два сильно сжатых (extreme) архива разделов диска BOOT и ROOT, а также несколько конфигурационных файлов JSON, и ее можно создать простым архивированием уже установленной системы.
  Это плюс, добавить нужную вам OS (если ее нет в удаленном репозитории) гораздо легче, ниже я приведу пример такого добавления. Т.к. два последующих загрузчика тоже основаны на исходных кодах NOOBS, рассмотрим его интерфейс и возможности.
  Интерфейс настройки предоставляет следующие функции:
  • Установить — устанавливает выбранные ОС на SD-карту. При изменении этого выбора удаляются все установленные ОС.
  • Изменить конфигурацию — открывает текстовый редактор, позволяющий редактировать командную строку и конфигурацию выбранной установленной ОС.
  • Онлайн-справка — Открывает браузер, в котором отображается англоязычная страница справки Raspberry Pi, позволяющая быстро получить доступ к справке и устранению неполадок (требуется подключение к сети).
  • Выход — выход из NOOBS и перезагрузка Pi.
  • Выбор языка — позволяет выбрать язык для отображения.
  • Выбор раскладки клавиатуры — позволяет выбрать используемую раскладку клавиатуры.
  • Выбор режима отображения — по умолчанию NOOBS будет выводить через HDMI с предпочтительным разрешением вашего дисплея, даже если дисплей HDMI не подключен. Если вы не видите никакого вывода на вашем дисплее HDMI или используете композитный выход, нажмите 1, 2, 3 или 4 на клавиатуре, чтобы выбрать предпочтительный режим HDMI, безопасный режим HDMI, композитный режим PAL или композитный режим NTSC соответственно.
  Все пользовательские настройки (язык, раскладка клавиатуры, режим отображения) будут сохраняться между перезагрузками, а также будут автоматически передаваться в установленные ОС. Это означает, что если вы видите интерфейс NOOBS на своем дисплее, то вы также сможете увидеть интерфейс командной строки/графический интерфейс ОС при загрузке.
  При первой загрузке (OS не установлены, скриншот выше) программа показывает список доступных OS. С левой стороны расположены чекбоксы выбора OS для инсталяции, с правой иконки расположения дистрибутива. Для дистрибутивов из удаленных репозиториев отображается разьем и штекер RJ45, для OS входящих в дистрибутив отображается иконка папки. Логотипы OS обычно находятся в папках вместе с конфигурационными файлами. На этом этапе необходимо выбрать (поставить галки) инсталлируемых OS, как только хоть один чекбокс будет отмечен, станет активна кнопка 'Install'. При последующих перезагрузках загрузочное меню мультизагрузчика отображается некоторое время (по умолчанию 10 сек, можно изменить) перед загрузкой. Если в это время нажать клавишу SHIFT это позволит войти в интерфейс настройки NOOBS.
  Здесь необходимо отметить, что NOOBS это одноразовый установщик, у него нет возможности ретроспективно добавлять другие ОС, после первичного запуска он не позволит прозрачно изменить тип и число установленных OS, т.е. доустановить нужную или удалить ненужную. Если вы попробуете так сделать, поставите или уберете галку, процесс инсталляции и переразбиения диска будет начат заново. Все OS будут переустановлены заново, все ваши внесенные изменения пропадут.
  К сожалению с NOOBS у меня также не получилось. При установке на SD-карту работает как заявлено, при установке на SSD-диск, ведет себя так-же как BerryBoot, т.е. бесконечно ищет загрузчик.

PINN

  Исходники PINN на GitHub, — альтернатива NOOBS, расширенная версия, ссылка на последнюю скомпилированную версию.

  

  Предоставляет более широкий выбор операционных систем, позволяет переустановить или заменить уже установленную OS без воздействия на другие. Вместо доустановки OS, вы можете при инсталляции установить один или несколько 'Project Spase' (до 8), это зарезервированное место, которое потом можно заменить на подходящую OS. Для предварительного конфигурирования есть 'online' конфигуратор.
  Автор предлагает еще один оригинальный способ инсталляции PINN из под Windows с помощью 'Raspberry Pi Imager', эта возможность появилась в последних версиях, для этого нужно создать ярлык на 'Imager' и скорректировать свойства ярлыка. Изменить название на более понятное, например 'Установка PINN', и изменить строку запуска на "[Path]\rpi-imager.exe" --repo raw.githubusercontent.com/procount/pinn-os/master/iu/os_list_iu_pinn.json, чтобы использовать приложение со своими собственными образами.
  Сразу скажу, опять не получилось, При первой загрузке (и последующей) PINN ведет себя полностью аналогично NOOBS, т.е. упорно желает найти загрузчик на SD-карте.

WD PiDrive Foundation Edition

  Я было загрустил, но оказывается у NOOBS кроме PINN есть еще один наследник, это загрузчик для WDLabs PiDrive. Интересна история его появления, в 2015 году в недрах фирмы Western Digital была образована компания WDLabs. В том же году ее специалистами совместно со специалистами Rasberry Pi Foundation был доработан NOOBS — стандартный менеджер загрузок для RPi, специалисты WDLabs добавили в него возможность работать с программным обеспечением через интерфейс USB. Текущей версией на тот момент была Rasberry Pi 2, а т.к. загружаться напрямую с USB сделать было нельзя, загрузка диспетчера загрузок происходила как и раньше с SD-карты, а диспетчер в свою очередь мог уже работать с накопителями через USB (забегу вперед, на RPi4 наличие загрузочной SD-карты уже не требуется). Такое улучшение сразу получило одобрительные отзывы от сообщества RPi, работа с микрокомпьютером стала похоже на десктоп, операция смены SD-карт при смене образов OS стала ненужной.
  Первые результаты обнадеживали, и 11 марта 2016 года под маркой PiDrive компанией WDLabs был выпущен в продажу WD Labs PiDrive 314GB Hard Drive — HDD объёмом 314 ГБ с интерфейсом USB3.

  

  Стоимость диска оценили в $45.81, но в связи с началом продаж и днем 'π' диск продавался за $31.42. Нестандартный обьем диска маркетологи фирмы обьяснили тем, что его выпуск приурочен к дню 'π', а также специальными мерами снижения потребностей электропитания. Также потребностями электропитания обьяснялось и применение редкого разьема USB3 microB для передачи данных и питания.

  

В комплект продажи входила SD-карта SanDisk 4Gb с менеджером загрузки.

  

Применение редкого разьема USB microB тянуло за собой и необходимость применения такого-же редкого кабеля.

  

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

  Диск от WDLabs вызвал интерес в сообществе RPi, его начали покупать и более подробно тестировать. Наряду с хвалебными отзывами появились претензии.
  • Про отсутствие редкого кабеля в комплекте с диском я уже сказал;
  • Диск рекламировался как специально разработанный для Raspberry Pi, но пользователи выяснили что он представляет собой стандартный однодисковый ноутбучный винчестер WD Caviar Blue Slim 500Gb. Cпециальная разработка сводилась к замене интерфейса SATA на USB, небольшом изменении прошивки и переклейке шильдика;
  • Диск был проверен сообществом пользователей с помощью низкоуровневых утилит для работы с HDD, после чего выяснилось что он представляет собой отбраковку производства. Пользователи обнаружили что диск имеет некоторое кол-во битых секторов и меньшая емкость (314 вместо 500) получалась после маскирования Bad-блоков;
  Потребителям (а покупали Raspberry Pi продвинутые пользователи) такое манипулирование не очень понравилось и продажи шли очень вяло. Тогда в конце 2016 года WDLabs изменила номенклатуру выпускаемых накопителей. Диск 314Gb убрали из продажи, номенклатура предлагаемых дисков стала включать HDD обьемом 200Gb, 375Gb, 1Tb и компактную USB флешку SanDisk Cruzer Fit 64 ГБ, емкость SD-карты увеличили до 64Gb. Диск 1Tb стал двухдисковым, в комплект HDD дисков стал входить кабель передачи данных и питания. Внешний вид и габариты флешки SanDisk Cruzer Fit:
  
  Кончилось дело тем, что в середине 2017 года Western Digital фирму WDLabs тихо прикрыла. Часть сотрудников уволилось, часть перешли в другие подразделения WD. История грустная, но сейчас не об этом, т.к. продукты WDLabs теперь не поддерживаютcя, дальнейшая поддержка и доработка менеджера загрузки переместилась на GitHub, там же можно скачать архив последней версии. Это 'Full' версия загрузчика, кроме возможности сетевой установки из репозитариев она включает в себя подготовленные копии дистрибутивов OS Raspbian для установки.

  Хотя в комментарии на GitHub разработчик пишет "Разархивируйте на карту microSD с форматом FAT32", я записал файлы мультизагрузчика на SSD-диск и запустил. Вот именно это я и искал, мультизагрузчик запустился и вывел список доступных для инсталяции OS. При доработке мультизагрузчика WDLabs изменила только функциональность, интерфейс NOOBS никак не изменялся и не дорабатывался, поэтому он и выглядит в точности как у NOOBS.
  Т.о. если раньше применение SD-карты для загрузчика было обязательным, RPi4 имеет возможность нативной загрузки с USB, и для него загрузочная SD-карта при применении этого менеджера загрузок больше не нужна. Пример того, как мультизагрузчик распределяет диск (установлено семь версий Linux: Kali Linux, OpenWRT и 5 версий Raspbian, 4 консольные и графическая, все 32 бит). Все программы ставились с каталога /os мультизагрузчика, в перечисленном порядке они видны и в установочном окне мультизагрузчика, и в таком-же порядке они и ставятся.
  Так показывает карту диска программа GParted из под Raspbian. На нераспределенное пространство (unallocated) не обращаем внимание, оно образуется при выравнивании по дорожкам и секторам:

  

/dev/sda1 — файлы менеджера загрузки, по умолчанию загрузчик должен находиться в первом разделе FAT или FAT32 на диске (RECOVERY, FAT32, 3,99GiB). Это копия установочных файлов, включая папку /os со всеми включенными в мультизагрузчик файлами, неизменяемая часть;
/dev/sda2 — расширенный раздел, включает все остальные разделы (115,25GiB);
/dev/sda5 — вторая изменяемая часть мультизагрузчика, (SETTING, Ext4, 32,00MiB);
/dev/sda6 — загрузочный раздел Kali Linux (BOOT, FAT32, 128MiB);
/dev/sda7 — раздел файловой системы Kali Linux (ROOT, Ext4, 24,04GiB);
/dev/sda8 — загрузочный раздел OpenWRT (BOOT, FAT16, 64MiB);
/dev/sda9 — раздел файловой системы OpenWRT (ROOT, Ext4, 13,79GiB);
/dev/sda10 — загрузочный раздел первой версии консольной Raspbiab (BOOT, FAT32, 128MiB);
/dev/sda11 — раздел файловой системы первой версии консольной Raspbiab (ROOT, Ext4, 14,99GiB);
/dev/sda12 — загрузочный раздел второй версии консольной Raspbiab (BOOT, FAT32, 128MiB);
/dev/sda13 — раздел файловой системы второй версии консольной Raspbiab (ROOT, Ext4, 14,99GiB);
/dev/sda14 — загрузочный раздел третьей версии консольной Raspbiab (BOOT, FAT32, 128MiB);
/dev/sda15 — раздел файловой системы третьей версии консольной Raspbiab (ROOT, Ext4, 14,99GiB);
/dev/sda16 — загрузочный раздел четвертой версии консольной Raspbiab (BOOT, FAT32, 128MiB);
/dev/sda17 — раздел файловой системы четвертой версии консольной Raspbiab (ROOT, Ext4, 14,99GiB);
/dev/sda18 — загрузочный раздел графической Raspbiab (BOOT, FAT32, 128MiB);
/dev/sda19 — раздел файловой системы графической Raspbiab (ROOT, Ext4, 16,60GiB);

  * Разрыв в нумерации разделов обьясняется тем, что первые четыре цифры зарезервированы для основных разделов, а нумерация логических начинается всегда с пяти.

Адаптация образа OS к мультизагрузчику NOOBS

  Кроме адаптации неподдерживаемых в данное время OS данный прием очень удобен для создания своих преднастроенных версий существующих OS. Именно исталляция программного обеспечения и настройка OS под свои задачи занимает больше всего времени, и иногда бывает очень обидно откатываться на чистую систему. Дистрибутив преднастроенной OS позволяет откатиться на него с сохранением всех необходимых программ и настроек.

  Мне потребовалось превратить RPi4 в маршрутизатор, т.е. прошить текущей прошивкой OpenWrt. При этом при настройке 'железа' под OpenWrt, в основном сетевых интерфейсов, требовался периодический доступ к RPi4 с OS Raspbian, поэтому образ OpenWrt (файл *.img) был адаптирован под образ мультизагрузчика WDLabs PiDrive (NOOBS, PINN). Короткое описание есть в руководстве к NOOBS, также может помочь этот пример адаптации на GitHub.
  Все ниже сказанное относится к установочным образам, сначала требуемый *.img образ надо развернуть на флешку програмами 'Raspberry Pi Imager' или 'balenaEtcher'. Я сначала попробовал первым, облом

  

  Размер образа не кратен размеру сектора, писать не буду. Ладно, пробуем второй, тут все нормально, ошибок нет.

  Втыкаем записанную флешку в Raspberry Pi под управлением Raspbian и запускаем SSH терминал из под Windows, копируем команды прямо из статьи. Вначале лучше проверить есть ли в системе требующиеся для адаптации пакеты.
bsdtar --version
  Если выводятся сведения о версии все нормально, пакет есть. Если ошибка 'command not found', пакет надо установить, сначала следует обновить зависимости списка пакетов репозитария.
sudo apt update
Проверяем наличие нужного пакета в репозитарии
sudo apt-cache search bsdtar
Если пакет есть, устанавливаем
sudo apt-get install bsdtar
Повторяем те-же действия с пакетом xz-utils
xz --version
sudo apt-cache search xz-utils
sudo apt-get install xz-utils
Теперь, когда мы убедились что нужные пакеты в системе есть, можно приступать к адаптации образа.
  1. Определяем какое имя система присвоила флешке.
    pi@raspberrypi:~ $ sudo fdisk -l
    
    Disk /dev/sda: 119.2 GiB, 128035676160 bytes, 250069680 sectors
    Disk model: Forty
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 33553920 bytes
    Disklabel type: dos
    Disk identifier: 0x808a56c7
    
    Device     Boot     Start       End   Sectors   Size Id Type
    /dev/sda1            2048   8367187   8365140     4G  e W95 FAT16 (LBA)
    /dev/sda2         8367188 250069679 241702492 115.3G  5 Extended
    /dev/sda5         8372224   8437757     65534    32M 83 Linux
    /dev/sda6         8437760   8699901    262142   128M  c W95 FAT32 (LBA)
    /dev/sda7         8699904  59121661  50421758    24G 83 Linux
    /dev/sda8        59121664  59252733    131070    64M  c W95 FAT32 (LBA)
    /dev/sda9        59252736  88178685  28925950  13.8G 83 Linux
    /dev/sda10       88178688  88440829    262142   128M  c W95 FAT32 (LBA)
    /dev/sda11       88440832 119881725  31440894    15G 83 Linux
    /dev/sda12      119881728 120143869    262142   128M  c W95 FAT32 (LBA)
    /dev/sda13      120143872 151584765  31440894    15G 83 Linux
    /dev/sda14      151584768 151846909    262142   128M  c W95 FAT32 (LBA)
    /dev/sda15      151846912 183287805  31440894    15G 83 Linux
    /dev/sda16      183287808 183549949    262142   128M  c W95 FAT32 (LBA)
    /dev/sda17      183549952 214990845  31440894    15G 83 Linux
    /dev/sda18      214990848 215252989    262142   128M  c W95 FAT32 (LBA)
    /dev/sda19      215252992 250069679  34816688  16.6G 83 Linux
    
    
    Disk /dev/sdb: 29.2 GiB, 31327813632 bytes, 61187136 sectors
    Disk model: Cruzer Blade
    Units: sectors of 1 * 512 = 512 bytes
    Sector size (logical/physical): 512 bytes / 512 bytes
    I/O size (minimum/optimal): 512 bytes / 512 bytes
    Disklabel type: dos
    Disk identifier: 0x5452574f
    
    Device     Boot  Start    End Sectors  Size Id Type
    /dev/sdb1  *      8192 139263  131072   64M  c W95 FAT32 (LBA)
    /dev/sdb2       147456 360447  212992  104M 83 Linux
    
    где sda это мой SSD-мультизагрузочный диск, sdb — искомая флешка. sdb1 — раздел 'BOOT', sdb2 — раздел 'ROOT'. На будущее надо запомнить размер разделов, это потребуется для конфигурационного файла NOOBS, partitions.json ("partition_size_nominal"). Если числа не целые, они округляются в большую сторону. Так примем размер раздела 'BOOT' в 64МВ, раздела 'ROOT' в 104MB.
  2. Создаем папку для монтирования и монтируем загрузочный раздел.
    sudo mkdir /mnt/usb
    sudo mount /dev/sdb1 /mnt/usb
    
  3. Переходим в корень загрузочного раздела (делаем текущим).
    cd /mnt/usb
    
  4. Создаем образ 'BOOT' раздела в одном файле.
    bsdtar --numeric-owner --format gnutar -cpf /tmp/boot.tar .
    
    * Обратите внимание, в конце этой строки после имени создаваемого архива должен быть пробел, за которым следует точка (что означает: tar все файлы из текущего каталога и ниже).
  5. После создания tar-архива запросим его несжатый размер, потребуется для partitions.json файла ("uncompressed_tarball_size").
    pi@raspberry:/mnt/usb $ ls /tmp/boot.tar -l --block-size=MB
      -rw-r--r-- 1 pi pi 17MB Dec 15 16:09 /tmp/boot.tar
    
    Запомним, размер 'BOOT' равен 17МВ.
  6. Сжимаем полученный образ, максимальное сжатие (extreme), индикация прогресса.
    xz -9 -e -v /tmp/boot.tar
    
  7. Сохраним в домашнем каталоге.
    cp /tmp/boot.tar.xz /home/pi/
    
  8. Выходим из раздела, размонтируем 'BOOT', монтируем 'ROOT', переходим в корень раздела.
    cd /
    sudo umount /mnt/usb
    sudo mount /dev/sdb2 /mnt/usb
    cd /mnt/usb
    
  9. Повторяем, создаем образ 'ROOT' раздела в одном файле, для 'ROOT' раздела нужен повышенный уровень доступа.
    sudo bsdtar --numeric-owner --format gnutar --one-file-system -cpf /tmp/root.tar .
    
      Показанная команда предназначена для установочных образов в которых нет 'лишних' каталогов. В работающей же системе при пуске пересоздаются служебные каталоги которые для установки не нужны. Чтобы их не включать в итоговый файл, в команду нужно добавить ключ <--exclude> с каталогом для исключения.
    --exclude=proc/* --exclude=sys/* --exclude=dev/pts/*
    

  10. Запросим его размер для partitions.json файла ("uncompressed_tarball_size").
    pi@raspberry:/mnt/usb $ ls /tmp/root.tar -l --block-size=MB
      -rw-r--r-- 1 root root 16MB Dec 15 16:23 /tmp/root.tar
    
    Запомним, размер 'ROOT' равен 16МВ.
  11. Сжимаем полученный образ. В зависимости от размера тарбола это может занять несколько часов.
    sudo xz -9 -e -v /tmp/root.tar
    
  12. Сохраним.
    cp /tmp/root.tar.xz /home/pi/
    
  13. Выходим из раздела, размонтируем.
    cd /
    sudo umount /mnt/usb
    
  14. Удаляем все разделы на флешке, получим предупреждение, это нормально, удаление не безопасная операция, игнорируем.
    sudo sfdisk --delete /dev/sdb
    
  15. Создаем один раздел на весь диск. Опять получим информационное сообщение, игнорируем.
    sudo parted /dev/sdb mkpart primary fat32 0% 100%
    
  16. Форматируем в FAT32 с присвоением метки, предупредит что-то о регистре символов в метке и отсутствии атрибута, игнорируем.
    sudo mkfs -t vfat -n 'Archive' -I /dev/sdb
    
  17. Монтируем флешку, делаем текущей, переносим архивы на флешку, выходим из раздела, размонтируем.
    sudo mount /dev/sdb /mnt/usb
    cd /mnt/usb
    sudo cp /home/pi/boot.tar.xz /mnt/usb
    sudo cp /home/pi/root.tar.xz /mnt/usb
    cd /
    sudo umount /mnt/usb
    
  Дальнейшие действия по адаптации я производил в Windows, перетыкиваем флешку в Desktop. Находим флешку с меткой 'Archive', сохраняем архивы. В руководстве к NOOBS советуют скачать полную 'Full' версию NOOBS и взяв за основу уже подготовленную систему из папки /OS сделать копию и изменить несколько файлов. Я использовал файлы из мультизагрузчика WDLabs PiDrive, который в папке /OS содержит семь подготовленных к инсталяции версий Raspbian. За основу я взял папку «Project Space 3» — 16GB partition, Raspbian Lite.

  Заменяем файлы архивов boot.tar.xz и root.tar.xz.

  Файл os.json содержит общую информацию об ОС, его надо адаптировать для вашей
  • «name» — название вашей пользовательской версии ОС.
  • «описание» — описание собственной версии ОС.
  Важное значение имеет параметр «supported_hex_revisions», в нем закодирован состав оборудования на плате RPi (RPi Revision Number). Посмотреть его несложно:
cat /proc/cpuinfo | grep Revision
«hex_revision» — 'это последние четыре цифры, в итоге у меня получилось так:
{
    "name": "OpenWRT",
    "version": "21.02.1",
    "kernel": "5.4",
    "release_date": "2021-10-07",
    "description": "OpenWRT for Raspberry Pi 4",
    "url": "https://openwrt.org/toh/raspberry_pi_foundation/raspberry_pi",
    "supported_hex_revisions": "1040,1041,2082,3111,3112,3114",
    "supported_models": [
                "Pi Compute Module 4",
                "Pi 4"
    ], 
    "feature_level": 0
} 
  Файл partitions.json содержит список разделов, необходимых ОС, с их соответствующим размером и типом файловой системы, их тоже надо адаптировать
  • «partition_size_nominal» — размер разделов в вашей пользовательской версии ОС.
  • «uncompressed_tarball_size» — размер архива вашей файловой системы в несжатом виде
  Размеры «partition_size_nominal» и «uncompressed_tarball_size» мы уже получили ранее при подготовке архивов разделов, укажем:
{
    "partitions": [
        {
            "filesystem_type": "FAT",
            "label": "boot",
            "mkfs_options": "-F 16",
            "partition_size_nominal": 64,
            "uncompressed_tarball_size": 17,
            "want_maximised": false
        },
        {
            "filesystem_type": "ext4",
            "label": "root",
            "mkfs_options": "-O ^huge_file",
            "partition_size_nominal": 104,
            "uncompressed_tarball_size": 16,
            "want_maximised": true
        }
    ]
} 
  После изменения json файлов, чтобы избежать синтаксических ошибок, желательно проверить их на валидность. Это можно сделать с помощью 'online' JSON отладчика JSON Formatter & Validator.
  Также можно, но не обязательно, изменить логотипы. Имя PNG логотипа для иконки меню должно быть равно полю «name» в файле os.json. Если имя в поле «name» содержит пробелы, их в имени файла можно заменить подчерками. В файле marketing.tar находятся PNG изображения, показываемые как слайд-шоу во время установки программы. Установщик выводит прогресс-бар, мне достаточно, поэтому все картинки я удалил.

  Для подготовки архива собственного дисперчера файлов был использован архив загрузчика WDLabs PiDrive (скачать). Из архива удалены следующие папки:
  • os/Data_Partition — этот раздел диска доступен для всех установленных OS и предназначен для передачи данных между ними. А т.к. у меня никак не задействована SD-карта, передавать данные можно через нее.
  • os/Project_Space_5 — просто показался лишним.
  • os/Raspios_Lite — тоже лишний, из папок Project_Space_(1-4) уже устанавливаются RaspiOS Lite.
В архив добавлены папки os/OpenWRT и os/Kali_Linux которые были подготовлены описаным выше способом из установочных образов, скачанных с сайтов разработчиков:

  К статье приложен архив с папкой уже адаптированного к мультизагрузчику образа OpenWRT.
  • 0
  • 24 декабря 2021, 20:32
  • anakost
  • 1
Файлы в топике: NOOBS_OpenWRT.zip

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

RSS свернуть / развернуть
Приложил архив с образом OpenWRT. Архив с Kali Linux слишком большой, более 2Gb, сюда не влазит.
0
А зачем OpenWRT на распи? Это ж вроде специализированная ОС для роутеров?
0
OpenWRT задумывалась как специализированная ОС для роутеров, да и сейчас так-же позиционируется. На данный момент (версия 21.02.1) ее требования к аппаратному обеспечению — 64Mb RAM 8Mb ROM (рекомендуется 128Mb RAM 16Mb ROM). Для любого RPi требования просто смешные, на RPi4 я поставил в общеобразовательных целях, поэксперементировать 'на кошках', не на работающем роутере. OpenWRT это Linux, тем более текущая версия содержит ядро Linux версии 5.4 с патчами из более свежих ядер (например, для Wi-Fi и Wireguard). На RPi4 довольно успешно скрещивают OpenWRT и 'Умный дом'.
0
Хотя WDLabs и похоронили, и сейчас можно купить почти полный аналог WDLabs PiDrive 1TB Hard Drive, это также двухдисковый ноутбучный винчестер, также с редким разьемом USB3 microB, в корпусе, кабель передачи данных и питания входит в комплект.
Это внешний диск A-Data HV620S, 1ТБ

н
0
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.