Сборка образов прошивки: различия между версиями
N.maslov (обсуждение | вклад) м (Форматирование консольных вставок) |
|||
(не показано 17 промежуточных версий 5 участников) | |||
Строка 2: | Строка 2: | ||
= Подготовка = | = Подготовка = | ||
Актуально '''до''' ядра 4.22 включительно. Раздел в процессе правки. | |||
== Установка Docker и подготовка хост-системы == | == Установка Docker и подготовка хост-системы == | ||
Перый шаг — это установка [https://docs.docker.com/ Docker]. | Перый шаг — это установка [https://docs.docker.com/ Docker]. | ||
Строка 33: | Строка 33: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
== Выкачивание образа | == Выкачивание образа == | ||
Запускаем: | Запускаем: | ||
<syntaxhighlight lang="console"> | <syntaxhighlight lang="console"> | ||
$ ./wbdev root exit | $ ./wbdev root exit | ||
</syntaxhighlight> | </syntaxhighlight> | ||
<blockquote>'''Важно:''' Образ займет ~5.5 Гб на <code>/var</code></blockquote> | |||
=Cборка образа= | =Cборка образа= | ||
Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]]. | Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]]. | ||
==Автоматическая сборка== | ==Автоматическая сборка== | ||
Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную <code>BOARD=6x</code>, от 6.7 и выше - <code>BOARD=67</code>. | Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную <code>BOARD=6x</code>, от 6.7 и выше - <code>BOARD=67</code>. | ||
Релиз, на основе которого будет собран образ, задаётся в переменной <code>WB_RELEASE</code>. | Релиз, на основе которого будет собран образ, задаётся в переменной <code>WB_RELEASE</code>. | ||
Строка 52: | Строка 50: | ||
'''Обратите внимание''': если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС | '''Обратите внимание''': если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС | ||
(отмечены комментарием в скрипте): | (отмечены комментарием в скрипте): | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
$ BOARD= | $ BOARD=67; WB_RELEASE=stable; cat << EOFcommand > tmp.sh | ||
#!/bin/bash | #!/bin/bash | ||
apt-get update | apt-get update | ||
apt-get install -y kpartx zip device-tree-compiler u-boot-tools libfdt1 binutils | apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils | ||
mount -t devtmpfs none /dev | mount -t devtmpfs none /dev | ||
export ROOTFS=./output/rootfs_wb${BOARD} | export ROOTFS=./output/rootfs_wb${BOARD} | ||
Строка 74: | Строка 63: | ||
echo "Create new clean rootfs" | echo "Create new clean rootfs" | ||
rm -rf \$ROOTFS | rm -rf \$ROOTFS | ||
WB_RELEASE=${WB_RELEASE} | WB_RELEASE=${WB_RELEASE} /root/rootfs/create_rootfs.sh ${BOARD} | ||
echo "Create .fit image" | echo "Create .fit image" | ||
Строка 81: | Строка 69: | ||
echo "fix permissions" | echo "fix permissions" | ||
chown ${UID} -R ./output/images/ | chown ${UID} -R ./output/images/ | ||
rm tmp.sh | |||
EOFcommand | EOFcommand | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Запускаем скрипт в контейнере: | Запускаем скрипт в контейнере: | ||
Строка 120: | Строка 102: | ||
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS). | Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS). | ||
<syntaxhighlight lang="bash"> | <syntaxhighlight lang="bash"> | ||
export ROOTFS=./output/ | export ROOTFS=./output/rootfs_wb6x | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Скрипт для подготовки корневой файловой системы находится в директории <code> | Скрипт для подготовки корневой файловой системы находится в директории <code>/root/rootfs</code>. | ||
Синтаксис запуска скрипта <code>create_rootfs.sh</code>: | Синтаксис запуска скрипта <code>create_rootfs.sh</code>: | ||
Строка 133: | Строка 115: | ||
Здесь: | Здесь: | ||
* ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения: | * ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения: | ||
** 6x — для Wiren Board 6-6.6 | ** 6x — для Wiren Board 6-6.6 | ||
** 5 — для Wiren Board 5 | ** 5 — для Wiren Board 5 | ||
Строка 150: | Строка 130: | ||
Зададим расположение ФС, уже существующей или вновь создаваемой: | Зададим расположение ФС, уже существующей или вновь создаваемой: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
export ROOTFS=./output/rootfs_wb6x | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board | Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 5.5: | ||
< | <pre> | ||
$ cd rootfs | |||
$ ROOTFS=./rootfs/rootfs_55 ./create_rootfs.sh 55 | |||
</ | </pre> | ||
Если не используем уже существующую, то создаем: | Если не используем уже существующую, то создаем: | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
export ROOTFS=./output/rootfs_wb6x | |||
/root/rootfs/create_rootfs.sh 6x | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Строка 174: | Строка 153: | ||
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. | Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. | ||
В скрипт передаются ''только адреса'' репозиториев. Например: | В скрипт передаются ''только адреса'' репозиториев. Например: | ||
< | <pre> | ||
$ ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/ | |||
</ | </pre> | ||
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования: | Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования: | ||
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key | * В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key | ||
* Имя используемого дистрибутива — testing | * Имя используемого дистрибутива — testing | ||
* Используемый компонент — main | * Используемый компонент — main | ||
То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как | То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как | ||
Строка 204: | Строка 170: | ||
deb http://localhost:8086/ testing main | deb http://localhost:8086/ testing main | ||
</pre> | </pre> | ||
=== Работа внутри корневой ФС === | === Работа внутри корневой ФС === | ||
Строка 210: | Строка 175: | ||
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot. | Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot. | ||
Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее: | Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее: | ||
<syntaxhighlight lang="bash"> | |||
<syntaxhighlight lang=" | ./output/rootfs_wb6x/chroot_this.sh | ||
</syntaxhighlight> | </syntaxhighlight> | ||
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof | и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
apt update && apt install lsof -y | |||
</syntaxhighlight> | </syntaxhighlight> | ||
<blockquote>''Не забывайте '''выйти''' из chroot</blockquote> | <blockquote>''Не забывайте '''выйти''' из chroot</blockquote> | ||
<syntaxhighlight lang=" | <syntaxhighlight lang="bash"> | ||
exit | |||
</syntaxhighlight> | </syntaxhighlight> | ||
TODO: раздел в процессе редактирования | |||
== Сборка образа для загрузки на контроллер == | == Сборка образа для загрузки на контроллер == | ||
''TODO: раздел требует дополнения'' | |||
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС. | Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС. | ||
<blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote> | <blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote> | ||
Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS: | Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS: | ||
<syntaxhighlight lang="bash"> | |||
<syntaxhighlight lang=" | ./image/create_images.sh 6x | ||
chmod a+rw -R ./output/images/ | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime> | Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb6x.fit</code>. | ||
== См. также == | == См. также == |
Версия 21:59, 30 сентября 2021
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.
Подготовка
Актуально до ядра 4.22 включительно. Раздел в процессе правки.
Установка Docker и подготовка хост-системы
Перый шаг — это установка Docker.
Инструкции по установке:
На хост-системе нужно установить также пакет qemu-user-static
:
$ sudo apt install -y qemu binfmt-support qemu-user-static
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
$ sudo usermod -aG docker ${USER}
После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились.
Скачивание инструментария для сборки образа
Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория.
$ mkdir ~/wirenboard-wbdev
$ cd ~/wirenboard-wbdev
$ git clone https://github.com/wirenboard/wirenboard
$ cd wirenboard
Выкачивание образа
Запускаем:
$ ./wbdev root exit
Важно: Образ займет ~5.5 Гб на
/var
Cборка образа
Про идеологию разделов контроллера можно прочитать на странице Обновление прошивки, информация для разработчиков.
Автоматическая сборка
Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную BOARD=6x
, от 6.7 и выше - BOARD=67
.
Релиз, на основе которого будет собран образ, задаётся в переменной WB_RELEASE
.
Обратите внимание: если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС (отмечены комментарием в скрипте):
$ BOARD=67; WB_RELEASE=stable; cat << EOFcommand > tmp.sh
#!/bin/bash
apt-get update
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils
mount -t devtmpfs none /dev
export ROOTFS=./output/rootfs_wb${BOARD}
# нужно удалить эти 3 строки, если rootfs уже была создана ранее и изменена,
# иначе она будет удалена и создана заново!
echo "Create new clean rootfs"
rm -rf \$ROOTFS
WB_RELEASE=${WB_RELEASE} /root/rootfs/create_rootfs.sh ${BOARD}
echo "Create .fit image"
./image/create_images.sh ${BOARD}
echo "fix permissions"
chown ${UID} -R ./output/images/
rm tmp.sh
EOFcommand
Запускаем скрипт в контейнере:
$ ./wbdev root bash ./tmp.sh
Важно: Изменения внутри контейнера не сохранятся
После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wbXX
(XX соответствует значению BOARD
)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM
Ручная сборка
По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
Запуск контейнера
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard
следующую команду:
~/wirenboard-wbdev/wirenboard$ ./wbdev root
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
# apt-get update && \
apt-get install -y kpartx zip device-tree-compiler u-boot-tools=2016.11+dfsg1-4 libfdt1 binutils && \
mount -t devtmpfs none /dev
Подготовка rootfs
Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
export ROOTFS=./output/rootfs_wb6x
Скрипт для подготовки корневой файловой системы находится в директории /root/rootfs
.
Синтаксис запуска скрипта create_rootfs.sh
:
$ ./create_rootfs.sh <board_ver> [<list of additional repos>]
Здесь:
- board_ver — версия контроллера, для которого готовится образ. Допустимые значения:
- 6x — для Wiren Board 6-6.6
- 5 — для Wiren Board 5
- 55 — для Wiren Board 5.5
- 4 — для Wiren Board 4
- 32 — для WB Smart Home (3.2)
- 28
- NETMON
- MKA3
- CQC10
- MKA31
- AC-E1
- list of additional repos — адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр.
- путь к корневой ФС из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически.
Зададим расположение ФС, уже существующей или вновь создаваемой:
export ROOTFS=./output/rootfs_wb6x
Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории rootfs/rootfs
для Wiren Board 5.5:
$ cd rootfs $ ROOTFS=./rootfs/rootfs_55 ./create_rootfs.sh 55
Если не используем уже существующую, то создаем:
export ROOTFS=./output/rootfs_wb6x
/root/rootfs/create_rootfs.sh 6x
Если нет ошибок — можно переходить к следующему этапу.
Дополнительные репозитории
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
В скрипт передаются только адреса репозиториев. Например:
$ ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
Формат репозиториев соответствует тому, который создаётся с помощью утилиты wbrepo. К дополнительному репозиторию предъявляются требования:
- В корне на сервере репозитория должен храниться публичный GPG-ключ в файле
/repo.gpg.key
. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key - Имя используемого дистрибутива — testing
- Используемый компонент — main
То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list
он будет представлен как
deb http://localhost:8086/ testing main
Работа внутри корневой ФС
Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
Если уже создана ФС в каталоге ./output/rootfs_wb6x
то делаем chroot в нее:
./output/rootfs_wb6x/chroot_this.sh
и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
apt update && apt install lsof -y
Не забывайте выйти из chroot
exit
TODO: раздел в процессе редактирования
Сборка образа для загрузки на контроллер
TODO: раздел требует дополнения
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.
Не забывайте установить путь у ФС в переменную ROOTFS
Пример: собираем образ прошивки для Wiren Board 6x, корневая ФС находится по пути $ROOTFS:
./image/create_images.sh 6x
chmod a+rw -R ./output/images/
Готовый образ будет лежать по пути output/image/<current_datetime>/<current_datetime>_webupd_wb6x.fit
.