|
|
(не показаны 74 промежуточные версии 6 участников) |
Строка 1: |
Строка 1: |
| Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера. | | Для сборки образов прошивки контроллера подготовлен специальный набор скриптов. Процесс сборки образа состоит из двух этапов: |
|
| |
|
| = Подготовка =
| | # Подготовка корневой ФС (rootfs) |
| | # Сборка образа для загрузки на контроллер |
|
| |
|
| == Установка Docker и подготовка хост-системы ==
| | Скрипты находятся в репозитории [https://github.com/contactless/wirenboard wirenboard]. Далее пути будут обозначаться от директории с репозиторием. |
| Перый шаг — это установка [https://docs.docker.com/ Docker].
| |
|
| |
|
| Инструкции по установке:
| | == Подготовка rootfs == |
|
| |
|
| * [https://docs.docker.com/engine/install/ubuntu/ Ubuntu]
| | Скрипт для подготовки корневой ФС находится в директории rootfs. |
| * [https://docs.docker.com/engine/install/debian/ Debian]
| |
|
| |
|
| На '''хост-системе''' нужно установить также пакет <code>qemu-user-static</code>:
| | Как использовать скрипт create_rootfs.sh: |
| <syntaxhighlight lang="console">
| |
| $ sudo apt install -y qemu binfmt-support qemu-user-static
| |
| </syntaxhighlight>
| |
|
| |
|
| Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
| |
| <syntaxhighlight lang="console">
| |
| $ sudo usermod -aG docker ${USER}
| |
| </syntaxhighlight>
| |
|
| |
| После добавления пользователя в группу надо выйти из системы и войти снова, чтобы изменения применились.
| |
|
| |
| == Скачивание инструментария для сборки образа ==
| |
| Создаем директорию, в которой будет лежать инструментарий и файлы образа, и скачиваем скрипты из репозитория.
| |
|
| |
| <syntaxhighlight lang="console">
| |
| $ mkdir ~/wirenboard-wbdev
| |
| $ cd ~/wirenboard-wbdev
| |
| $ git clone https://github.com/wirenboard/wirenboard
| |
| $ cd wirenboard
| |
| </syntaxhighlight>
| |
|
| |
| == Выкачивание образа Docker-контейнера ==
| |
| {{note|info|Учитывайте, что образ контейнера займет ~5.5 Гб на <code>/var</code>}}
| |
| Запускаем:
| |
| <syntaxhighlight lang="console">
| |
| $ ./wbdev root exit
| |
| </syntaxhighlight>
| |
| Команда выкачает, затем запустит контейнер и завершится. Отсутствие ошибок - покажет что контейнер работает нормально.
| |
|
| |
| =Cборка образа=
| |
| Про идеологию разделов контроллера можно прочитать на странице [[WB_Firmware_Update_Details | Обновление прошивки, информация для разработчиков]].
| |
| ==Автоматическая сборка==
| |
| Готовим файл с командами. Для Wiren Board 6 версии до 6.7 задаём переменную <code>BOARD=6x</code>, от 6.7 и выше - <code>BOARD=67</code>. Для WB7 - <code>BOARD=7x</code>
| |
|
| |
| Сразу создаем каталог <code>mkdir ./output/images/</code>
| |
|
| |
| Релиз, на основе которого будет собран образ, задаётся в переменной <code>WB_RELEASE</code>.
| |
|
| |
| '''Обратите внимание''': если корневая ФС была отредактирована, нужно удалить строки в скрипте, отвечающие за удаление старой и создание новой корневой ФС
| |
| (отмечены комментарием в скрипте):
| |
|
| |
| <blockquote>'''Важно:''' кэш сохраняется по пути /home/XXX/wbdev/go/src/github.com/contactless/wirenboard/output -
| |
| эта же папка шарена между нашим хостом и докером, из неё мы и запускаем ./wbdev. Если у вас что-то сбоит на старых версиях - можно переиначить все пути на
| |
| <syntaxhighlight>/root/rootfs/ </syntaxhighlight>
| |
| но при этом будет потеряна возможность использовать кэш при сборке.
| |
|
| |
| '''дополнительно:''' DEBIAN_RELEASE= в скрипте есть смысл ставить тот который требуется в зависимости от версии board. wb6 со скриптом ниже не заработает без изменения релиза на предыдущий.
| |
| </blockquote>
| |
|
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| $ BOARD=7x; WB_RELEASE=stable; DEBIAN_RELEASE=stretch; cat << EOFcommand > tmp.sh
| |
| #!/bin/bash
| |
| apt-get update
| |
| apt-get install -y kpartx zip device-tree-compiler u-boot-tools 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} DEBIAN_RELEASE=${DEBIAN_RELEASE} rootfs/create_rootfs.sh ${BOARD}
| |
| # можно использовать /root/rootfs/create_rootfs.sh ${BOARD} но в этом случае у вас не будет использоваться кэш сокращающий время компиляции в 2 раза
| |
|
| |
| echo "Create .fit image"
| |
| ./image/create_images.sh ${BOARD}
| |
| echo "fix permissions"
| |
| chown ${UID} -R ./output/images/
| |
| #Uncomment next string for remove script
| |
| #rm tmp.sh
| |
| EOFcommand
| |
|
| |
| </syntaxhighlight>
| |
|
| |
| <blockquote>'''Важно:'''u-boot-tools=2016.11+dfsg1-4 - больше не требуется. Но если вам вдруг надо на старой wb поставить именно его -
| |
| <syntaxhighlight>wget https://cloudfront.debian.net/debian-archive/debian/pool/main/u/u-boot/u-boot-tools_2016.11+dfsg1-4_amd64.deb
| |
| dpkg -i u-boot-tools_2016.11+dfsg1-4_amd64.deb
| |
| rm u-boot-tools_2016.11+dfsg1-4_amd64.deb </syntaxhighlight></blockquote>
| |
|
| |
| Запускаем скрипт в контейнере:
| |
|
| |
| <syntaxhighlight lang="bash">
| |
| $ ./wbdev root bash ./tmp.sh
| |
| </syntaxhighlight>
| |
|
| |
| <blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
| |
|
| |
| После завершения — «корневая» файловая система остается в каталоге <code>./output/rootfs_wbXX</code> (XX соответствует значению <code>BOARD</code>)и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
| |
| Готовый для загрузки в контроллер образ — в <code>./output/images/YYYYMMDDHHMM</code>
| |
|
| |
| ==Ручная сборка==
| |
| По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.
| |
| === Запуск контейнера ===
| |
| Запускаем в том же каталоге <code>~/wirenboard-wbdev/wirenboard</code> следующую команду:
| |
| <syntaxhighlight lang="bash">
| |
| ~/wirenboard-wbdev/wirenboard$ ./wbdev root
| |
| </syntaxhighlight>
| |
| и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
| |
| <syntaxhighlight lang="console">
| |
| # 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
| |
| </syntaxhighlight>
| |
|
| |
| === Подготовка rootfs ===
| |
| Если rootfs уже создана ранее, то просто указываем ее расположение (переменная ROOTFS).
| |
| <syntaxhighlight lang="bash">
| |
| export ROOTFS=./output/rootfs_wb7x
| |
| </syntaxhighlight>
| |
|
| |
|
| |
| Скрипт для подготовки корневой файловой системы находится в директории <code>wirenboard/rootfs</code>.
| |
|
| |
| Синтаксис запуска скрипта <code>create_rootfs.sh</code>:
| |
| <pre> | | <pre> |
| $ ./create_rootfs.sh <board_ver> [<list of additional repos>] | | $ ./create_rootfs.sh <path_to_new_rootfs> <board_ver> [<list of additional repos>] |
| </pre> | | </pre> |
|
| |
|
| Здесь: | | Здесь: |
| * ''board_ver'' — версия контроллера, для которого готовится образ. Допустимые значения: | | |
| ** 7x - для Wiren Board 7 | | * ''path_to_new_rootfs'' - имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически; |
| ** 67 — для Wiren Board 6.7 и выше
| | * ''board_ver'' - версия контроллера, для которого готовится образ. Допустимые значения: |
| ** 6x — для Wiren Board 6-6.6
| | ** 5 - для Wiren Board 5 |
| ** 5 — для Wiren Board 5
| | ** 55 - для Wiren Board 5.5 |
| ** 55 — для Wiren Board 5.5 | | ** 4 - для Wiren Board 4 |
| ** 4 — для Wiren Board 4 | | ** 32 - для WB Smart Home (3.2) |
| ** 32 — для WB Smart Home (3.2) | |
| ** 28 | | ** 28 |
| ** NETMON | | ** NETMON |
Строка 146: |
Строка 30: |
| ** MKA31 | | ** MKA31 |
| ** AC-E1 | | ** AC-E1 |
| * ''list of additional repos'' — адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр. | | * ''list of additional repos'' - адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр. |
| * ''путь к корневой ФС'' из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически.
| |
|
| |
|
| Зададим расположение ФС, уже существующей или вновь создаваемой:
| | Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории rootfs/rootfs для Wiren Board 5.5: |
| <syntaxhighlight lang="console">
| |
| # export ROOTFS=./output/rootfs_wb6x
| |
| </syntaxhighlight>
| |
|
| |
|
| Пример. Собираем базовую (без доп. репозиториев) корневую ФС в директории <code>rootfs/rootfs</code> для Wiren Board 7x:
| | <pre> |
| | | $ cd rootfs |
| <syntaxhighlight lang="console"> | | $ ./create_rootfs.sh ./rootfs/ 55 |
| # cd rootfs
| | </pre> |
| # ROOTFS=./rootfs/rootfs_7x WB_RELEASE=stable DEBIAN_RELEASE=stretch ./create_rootfs.sh 7x
| |
| </syntaxhighlight>
| |
| | |
| Если не используем уже существующую, то создаем:
| |
| <syntaxhighlight lang="console">
| |
| # export ROOTFS=./output/rootfs_wb7x
| |
| # export WB_RELEASE=stable DEBIAN_RELEASE=stretch
| |
| # wirenboard/rootfs/create_rootfs.sh 7x
| |
| </syntaxhighlight> | |
| | |
| Если нет ошибок — можно переходить к следующему этапу.
| |
|
| |
|
| === Дополнительные репозитории === | | === Дополнительные репозитории === |
Строка 174: |
Строка 43: |
| Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. | | Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС. |
|
| |
|
| Добавляется при помощи wbrepo, общий мануал https://github.com/wirenboard/wirenboard/blob/master/README-wbrepo.md
| |
| В скрипт передаются ''только адреса'' репозиториев. Например: | | В скрипт передаются ''только адреса'' репозиториев. Например: |
|
| |
|
| <syntaxhighlight lang="console"> | | <pre> |
| # ./create_rootfs.sh 55 http://server1.net/ http://server2.net:8086/
| | $ ./create_rootfs.sh ./rootfs/ 55 http://server1.net/ http://server2.net:8086/ |
| </syntaxhighlight> | | </pre> |
|
| |
|
| Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования: | | Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[wbrepo]]. Конкретно, к дополнительному репозиторию предъявляются следующие требования: |
|
| |
|
| * В корне на сервере репозитория должен храниться публичный GPG-ключ в файле <code>/repo.gpg.key</code>. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key | | * В корне на сервере репозитория должен храниться публичный GPG-ключ в файле /repo.gpg.key. Например, если репозиторий расположен по адресу http://localhost:8086/, то ключ должен быть доступен по ссылке http://localhost:8086/repo.gpg.key |
| * Имя используемого дистрибутива — testing (если не менялся код в ) | | * Имя используемого дистрибутива - testing |
| * Используемый компонент — main | | * Используемый компонент - main |
|
| |
|
| При использовании wbrepo с хоста из докера можно найти их на http://172.17.0.1:8086/ - просто оставьте wbrepo serve запущенным на хосте и вызовите из докера
| | То есть, если передан адрес репозитория http://localhost:8086/, то в sources.list он будет представлен как |
| <syntaxhighlight lang="console">
| |
| # ./create_rootfs.sh 7x http://172.17.0.1:8086/
| |
| </syntaxhighlight>
| |
| При изменении имени дистрибутива - отредактировать в https://github.com/wirenboard/wirenboard/blob/master/wbrepo
| |
| <pre>
| |
| DISTRIBUTION=testing #меняем тут testing на нужное наименование дистрибутива
| |
| </pre>
| |
| Или смотрим под какой дистрибутив запустился сервер под wbrepo serve и меняем на нужный в ручном запуске
| |
| <pre>
| |
| ./rootfs/create_rootfs.sh 7x http://172.17.0.1:8086@testing:main
| |
| </pre>
| |
| То есть, если передан адрес репозитория http://localhost:8086/, то в <code>sources.list</code> он будет представлен как | |
|
| |
|
| <pre> | | <pre> |
| deb http://localhost:8086/ testing main | | deb http://localhost:8086/ testing main |
| </pre> | | </pre> |
| При проблемах - посмотрите внимательно на <code>curl -v</code> вывод адреса репозитория
| |
|
| |
|
| === Работа внутри корневой ФС === | | == Сборка образа для загрузки на контроллер == |
|
| |
|
| Для того чтобы установить какие-нибудь дополнительные пакеты в корневую систему используется chroot.
| | ''TODO: раздел требует дополнения'' |
| Если уже создана ФС в каталоге <code>./output/rootfs_wb6x</code> то делаем chroot в нее:
| |
|
| |
|
| <syntaxhighlight lang="console">
| | Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС. |
| # ./output/rootfs_wb6x/chroot_this.sh
| |
| </syntaxhighlight>
| |
|
| |
|
| и можно изменить параметры и/или добавить пакеты. Добавим, например, lsof
| | Дополнительно на хост-машине потребуются утилиты (названия приведены для Debian/Ubuntu): |
| <syntaxhighlight lang="console">
| |
| # apt update && apt install lsof -y
| |
| </syntaxhighlight>
| |
|
| |
|
| <blockquote>''Не забывайте '''выйти''' из chroot</blockquote>
| | * kpartx |
| <syntaxhighlight lang="console">
| | * device-tree-compiler |
| # exit
| |
| </syntaxhighlight>
| |
|
| |
|
| == Сборка образа для загрузки на контроллер ==
| | Пример: собираем образ прошивки для Wiren Board 5, корневая ФС находится по пути rootfs/rootfs/: |
|
| |
|
| Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима '''готовая''' корневая ФС.
| | <pre> |
| <blockquote>''Не забывайте установить путь у ФС в переменную ROOTFS</blockquote> | | $ cd image |
| | $ ./create_images_wb5.sh ../rootfs/rootfs/ <tag> |
| | </pre> |
|
| |
|
| Пример: собираем образ прошивки для Wiren Board '''6x''', корневая ФС находится по пути $ROOTFS:
| | Здесь ''tag'' - суффикс, который будет добавлен к имени файла образа. |
|
| |
|
| <syntaxhighlight lang="console">
| | Готовый образ будет лежать по пути image/image/wb5/<current_datetime>/<current_datetime>_emmc_<tag>.img. |
| # ./image/create_images.sh 6x
| |
| </syntaxhighlight>
| |
| | |
| Владельцем созданных файлов образов будет пользователь root, поэтому после создания файла может понадобиться отдельно дать доступ к нему обычным пользователям, например, так:
| |
| | |
| <syntaxhighlight lang="console">
| |
| # chown a+rw -R ./output/images/
| |
| </syntaxhighlight>
| |
| | |
| Готовый образ будет лежать по пути <code>output/image/<current_datetime>/<current_datetime>_webupd_wb<board>.fit</code>. | |
|
| |
|
| == См. также == | | == См. также == |
| | | * [[Обновление прошивки]] |
| * [[Special:MyLanguage/Обновление прошивки|Обновление прошивки]] | | * [[Wiren Board 5: Восстановление прошивки]] |
| * [[Wiren Board 5: Восстановление прошивки|Wiren Board 5: Восстановление прошивки]] | |
Для сборки образов прошивки контроллера подготовлен специальный набор скриптов. Процесс сборки образа состоит из двух этапов:
- Подготовка корневой ФС (rootfs)
- Сборка образа для загрузки на контроллер
Скрипты находятся в репозитории wirenboard. Далее пути будут обозначаться от директории с репозиторием.
Подготовка rootfs
Скрипт для подготовки корневой ФС находится в директории rootfs.
Как использовать скрипт create_rootfs.sh:
$ ./create_rootfs.sh <path_to_new_rootfs> <board_ver> [<list of additional repos>]
Здесь:
- path_to_new_rootfs - имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически;
- board_ver - версия контроллера, для которого готовится образ. Допустимые значения:
- 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/rootfs для Wiren Board 5.5:
$ cd rootfs
$ ./create_rootfs.sh ./rootfs/ 55
Дополнительные репозитории
Добавление дополнительных репозиториев необходимо, если вы хотите добавить свои версии пакетов в собираемую корневую ФС.
В скрипт передаются только адреса репозиториев. Например:
$ ./create_rootfs.sh ./rootfs/ 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
Сборка образа для загрузки на контроллер
TODO: раздел требует дополнения
Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.
Дополнительно на хост-машине потребуются утилиты (названия приведены для Debian/Ubuntu):
- kpartx
- device-tree-compiler
Пример: собираем образ прошивки для Wiren Board 5, корневая ФС находится по пути rootfs/rootfs/:
$ cd image
$ ./create_images_wb5.sh ../rootfs/rootfs/ <tag>
Здесь tag - суффикс, который будет добавлен к имени файла образа.
Готовый образ будет лежать по пути image/image/wb5/<current_datetime>/<current_datetime>_emmc_<tag>.img.
См. также