LINUX.ORG.RU
решено ФорумAdmin

Хочу возможность firmware на своем девайсе

 , ,


1

2

Имеется miniPC (маленькая коробачка) с интелевским процем. Таких miniPc много и раскиданы по клиентам (вторкнута в сетку и электрон сеть. без экрана. как встроенный девайс). На коробке бежит ubuntu server и docker. В docker бежит наша аппликация которая общается с сервером постоянно. До сих пор вроде как все устраивало, но появилась задача расширить функционал.

Что хочется:

Возможность обновить систему на новую/старую версию. (аналогия firmware на разных роутерах и других девайса)

Посоветуйте пути решения этой задачи. Уверен есть уже готовых решение, но подходящего не нашлось.

Нужно:

1. Простота использование для пользователя. (подходит как в роутера. загрузил версию и через веб интерфейс обновил)

2. Надежность. Если что то пошло не так. Надо возможность вернутся на заводские настройки. (данные хранятся на диски. понимаю что технический он может посыпаться, но мы не рассматриваем этот вариант на данный момент)

Ответ на: комментарий от pasifus

Я примерно понимаю, чего ты хочешь, но не понимаю, что конкретно тебе надо обновлять. Полностью образ жёсткого диска? Докер-контейнер? Приложение внутри контейнера?

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

Запускай по PXE маленький образ, который не будет монтировать твой жёсткий диск, а будет полностью содержаться в оперативке. Этот образ будет запускать скрипт типа curl ftp://update/newimage.gz | gunzip | dd of=/dev/sda.

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

Firmware это не русское слово и не глагол.

anonymous ()

Загрузочная флешка с dd.

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

miniPC'уки находится у пользователей. Доступ к их ней сетки из вне не возможен к сожалению.

Я думал если можно сделать несколько партишенев на диске и переключатся между ними или что то в этом роде.

pasifus ()
Ответ на: комментарий от CYB3R

А вот как? Я к примеру делаю два раздела. И система бутится с него. К примеру пользователь получил обновление и оно подгружается во второй раздел (тем же dd к примеру). Как теперь заставить грузится со второго раздела? grub конфигурацию менять? или есть что-то попроще?

А если что то пошло не так и не грузится. Как все вернуть? делать restore раздел?

Так же получается grub надо в не зависимом разделе хранить. Что бы всегда был доступен даже если один из двух разделов поломался.

Мысль в ту сторону или можно попроще?

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

Сделать в grub 2 пункта — «boot» и «update». Зачем ещё и restore, если «update» сработает вместо «restore»? Как у тебя раздел поломается? Если выключить компьютер в процессе обновления?

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

Restore для всякой безопасности. Всегда удобно когда можно откатится до заводских настроек. Бывает разное при обновлении.

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

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

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

К примеру первый раздел рабочий. Пользователь нажал обновление. Обновление пишется во второй раздел. После того как все записалось меняем в grub на второй раздел и перегружаем. Теперь рабочий стал вторым разделам. Пользователь снова обновляет. Все пишется в первый раздел и в конце первый снова становится рабочим. Предположим что то пошло не так и рабочий раздел стал не пригодным (к примеру версия прошивки с багом попалась). Надо откатить на заводские настройки. Пользователь берет miniPC подключает к экрану и клавиатуре и при загрузке зажимает какую нибуть комбинацию клавиш. Появляется мену он выбирает «сбросить на заводские настройки» и все что есть на третьем разделе пишется на первый раздел и второй очищается. ну и первый выставляется как рабочий.

Такая идея была.

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

Как-то это очень сложно: писать нужно в два раздела, можно кучу всего запороть. А потом ещё для восстановления нужно загрузиться с третьего раздела, но как с него загрузиться, если раздел с грабом был затёрт? Фигня какая-то получается.

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

Ну в grub это легко делается. Особенно, если boot делать на отделньом разделе. При обновлении накатываем новую версию, а в конфиге груба пишем обе. По умолчанию грузится последняя, если что-то пошло не так - юзер может во время отсчёта выбрать предпоследнюю.

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

Два раздела. На первом grub, ядро и initramfs со скриптами для обновления, на втором твоя убунта. По умолчанию грузится второй раздел, если нужно что-то обновить/восстановить, то грузится первый. Запись в первый раздел не происходит вообще.

CYB3R ★★★★★ ()

Я случайно firmware на своем девайсе

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

Надеюсь идею я понял правильно, в смысле что бы была предыдущая рабочая копия, идея глупая. Пользователь «20» раз нажмет обновить, и да-да так и будет. А в части восстановления на заводские, подготовить бутовую флэху с которой можно будет восстановить, тогда и моника с клавой не надо.

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

Получается значит так: 1. Пользователь нажимает в веб интерфейсе на обновление. 2. Подгружается новая версия и сохраняется во втором разделе 3. Дается команда для grub грузится с первого раздела 4. При загрузки скрипт монтирует второй раздел перезаписывает загруженный файл в tmpfs и перезаписывает второй раздел с помощью dd. 5. Дается команда для grub грузится со второго раздела

Так?

pasifus ()
Ответ на: комментарий от rikimaru

А если захочу поменять дистрибутив линукса? Эта модульная система умеет это делать?

pasifus ()
Ответ на: комментарий от anc

В общем вы правы на 100% по поводу пользователя.

По поводу флешки это я думал об этом, но мне казалось что обучать пользователя как создавать загрузачную флешку из нашего iso обзора, может оказатся сложнее чем нажать F8 (к примеру) и выбрать в меню «сбросить на заводской режим». (напомню что клиенты они же пользователи разбросанны по всему миру)

Хотя сейчас думаю что вариант с флешкой будет все-таки по удобнее.

Спасибо!

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

Нет, можно гораздо проще и надёжнее:

  1. Пользователь запрашивает обновление.
  2. Меняется порядок загрузки, выполняется перезагрузка.
  3. Скачивается образ, распаковывается и записывается сразу на диск.
  4. Проверяется чексумма (если не совпала, предыдущий пункт повторяется).
  5. Снова меняется порядок загрузки, выполняется перезагрузка.
CYB3R ★★★★★ ()
Ответ на: комментарий от pasifus

По поводу флешки это я думал об этом, но мне казалось что обучать пользователя как создавать загрузачную флешку из нашего iso обзора

Флэху поставлять в комплекте. А на случай пролюбили/сломалась/etc написать инструкцию и софт для создания прикладывать в комплекте.

может оказатся сложнее чем нажать F8 (к примеру) и выбрать в меню «сбросить на заводской режим»

Совсем красиво: Можно предусмотреть оба варианта и флэху и раздел для восстановления.

напомню что клиенты они же пользователи разбросанны по всему миру

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

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

Спасибо за советы. Вопрос думаю закрыт. Дальше уже сам.

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