LINUX.ORG.RU

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

 , ,


0

1

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

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

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

★★★★★

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

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

Заливанием прошивки на sd-карточку? :)

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

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

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

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

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

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

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

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

A tool to get the latest bleeding-edge firmware and kernel for your Raspberry Pi.

А это точно – оно?

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

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

О, Michael меня в references включил, лол

UVV ★★★★★
()
Ответ на: комментарий от 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)
Ответ на: комментарий от YAR

Ух, годнотаааа. Не могу дождаться рабочего дня чтоб попробовать!

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

Из любопытства: выглядит будто ты такое на десктопах применяешь ( ну, там, пляски с грубом, все такое ) это ты как используешь?

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

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

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

В первом же предложении расшифровка - на ригах. Майнинг-ригах :).

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

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

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

Наврал я тебе: ниче ему от питания не становится

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

Вы пытаетесь изобрести андроид А/В?

А почему именно андроид а б, а на просто а б? Больше никто так не делает?

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

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

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

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

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

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

обычно для / просто mtd перезаписывается, /etc монтируется в отдельный раздел

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

У меня, фактически, образ лежит на /home-разделе. Т.е., всего их на диске 3 - /boot, / и /home.

YAR ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.