LINUX.ORG.RU

Подскажите технологию/способ обновлять линукс из файла-прошивки?

 , ,


0

1

Поясню: хочу на одноплатник заливать прошивку, содержащую всю необходимую систему и иметь возможность софтварно, из под этой же запущенной системы, обновлять прошивку (из файла и/или по сети).

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

Вопрос: нет ли какого общеизвестного решения этой явно не в первый раз возникшей хотелки или колхозить руками?

★★★★★

A/B boot ты изобрёл. Тут бы теперь сказать, какой у тебя загрузчик или хотя бы вообще речь о роутере, телефоне, ноуте или чем. А то радости тебе с того, что в каком-нибудь uboot он есть, если ты его не юзаешь?

t184256 ★★★★★
()
Ответ на: комментарий от t184256

A/B boot ты изобрёл

Эх, опять кто-то реализовал мою гениальную идею до меня! :)

Тут бы теперь сказать, какой у тебя загрузчик

u-boot, да. (пардон, тупанул не указав в ОПе)

в каком-нибудь uboot он есть

так-так-так-так-таааак… где он там ест? так и называется, а/б бут?

pihter ★★★★★
() автор топика
Ответ на: комментарий от t184256

Но ты погугли

https://bootlin.com/pub/conferences/2022/elce/opdenacker-implementing-A-B-system-updates-with-u-boot/opdenacker-implementing-A-B-system-updates-with-u-boot.pdf

Ну это руками, неужели ж нет ниче высокоуровневого для ленивых?

pihter ★★★★★
() автор топика
Ответ на: комментарий от UVV

когда ты настроишь это всё индивидуально под каждую платформу.

Да выглядит-то довольно платформонезависимо (в моих розовых фантазиях)

Всего-то и надо иметь способ сообщить загрузчику с какого раздела грузиться и иметь возможность писать-читать соседний раздел (это и так везде есть, вполне себе кроссплатформенно), ну то есть, где здесь чего низкоуровневого?

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

Ну для начала загрузчику полезно бы знать откуда загружаться, nand/nor/(e)mmc, потом уже думать о разделах. А потом с чего бы это должен быть «соседний» раздел? Может для моего устройства удобнее иметь раздел 3 и 5 для схемы A/B?

UVV ★★★★★
()
Ответ на: комментарий от UVV

Ну для начала загрузчику полезно бы знать откуда загружаться, nand/nor/(e)mmc, потом уже думать о разделах.

Ну, у меня уже есть прошивка от производителя. Там уже есть раздел с подлодкой, раздел рутфс и после него – свободное место, достаточное, чтоб втолкать еще один рутфс. А еще я за пять минут начитался, что если в загрузочном разделе создать файл uEnv.txt, то убут будет брать параметры из него.

Настало время что-нибудь окирпичить!

pihter ★★★★★
() автор топика
Ответ на: комментарий от UVV

с чего бы это должен быть «соседний» раздел? Может для моего устройства удобнее иметь раздел 3 и 5 для схемы A/B?

соседний – в широком смысле. Физически, разумеется – хоть вообще на другом устройстве

pihter ★★★★★
() автор топика

Я себе так делал: https://rain.linuxoid.in/2019/03/13/кастомные-скрипты-в-initrd-для-обновления-с/

В более новой версии еще пункт добавил кроме обновления system-раздела и системы целиком - ее дамп (который можно потом использовать на других системах для полного обновления).

YAR ★★★★★
()
Последнее исправление: YAR (всего исправлений: 1)
Ответ на: комментарий от YAR

ОООой. Держите меня: я перевлюбился в линукс. Твое решение еще круче моих фантазий!

Поясни: сие выполняется на этапе, когда ядро уже загружено, а rootfs еще не смонтирован, так? Тогда откуда там zcat-ы и подобное – они в образе ядра что-ли? (какой-то интерпретатор шелла же еще нужен) как это работает, откуда он, например, модуль ext4 подгружает?

pihter ★★★★★
() автор топика
Ответ на: комментарий от pihter

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

$ cat /etc/initramfs-tools/scripts/local-top/sysupgrade.sh | spst
http://sprunge.us/A5yWcr

YAR ★★★★★
()
Последнее исправление: YAR (всего исправлений: 1)
Ответ на: комментарий от bo4ok

Если это не перезапись диска целиком (когда образ вычитывается в память, а потом пишется с нее на диск со всеми разделами) - то и ладно. Можно перезагрузиться и запустить процесс заново.

YAR ★★★★★
()
Ответ на: комментарий от YAR

Значить, докладываю: попробовал по твоей схеме на одноплатник и я просто в восторге. Я, правда, не совсем как у тебя сделал, а завёл отдельный раздел, куда кладу образ для зашития и в initramfs скрипте монтирую, проверяю наличие специального файла команды и шью.

Нет нужды загрузчик трогать.

На днях доведу до ума и, если буду хорошим мальчиком, тоже напишу статью для следующих поколений

Огромное спасибо за идею и пример

pihter ★★★★★
() автор топика