Сборка образов прошивки: различия между версиями

Материал из Wiren Board
м (Орфография, типографика, стилистика.)
Строка 2: Строка 2:
<translate>
<translate>
<!--T:1-->
<!--T:1-->
Для сборки образов прошивки контроллера подготовлен специальный образ Docker. Процесс сборки можно производить внутри этого образа как в автоматическом так и в ручном режиме. Также возможно использовать скрипты для сборки без контейнера, после предварительной настройки окружения.
Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.


= Подготовка =
= Подготовка =
Актуально '''до''' ядра 4.22 включительно. Раздел в процессе правки.
Актуально '''до''' ядра 4.22 включительно. Раздел в процессе правки.
== Установка Docker и подготовка хост-системы==
== Установка Docker и подготовка хост-системы==
Перый шаг - это установка [https://docs.docker.com/ Docker]
Перый шаг это установка [https://docs.docker.com/ Docker].
В зависимости от используемого дистрибутива - устанавливается по-разному, для Debian:
В зависимости от используемого дистрибутива устанавливается по-разному, для Debian:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
Строка 16: Строка 16:
sudo apt install docker-ce -y
sudo apt install docker-ce -y
</syntaxhighlight>
</syntaxhighlight>
На хост-системе '''обязательно''' установите  
На хост-системе '''обязательно''' установите пакет qemu-user-static:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo apt install -y qemu-user-static
sudo apt install -y qemu-user-static
</syntaxhighlight>
</syntaxhighlight>


Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo
Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
sudo usermod -aG docker ${USER}
sudo usermod -aG docker ${USER}
</syntaxhighlight>
</syntaxhighlight>
<blockquote>После добавления пользователя надо '''выйти-зайти'''чтобы изменения применились</blockquote>
<blockquote>После добавления пользователя надо '''выйти-зайти''' чтобы изменения применились.</blockquote>


==Скачивание скрипта ==
==Скачивание скрипта ==
Создаем папку и скачиваем скрипт
Создаем папку и скачиваем скрипт


Более подробно - тут: [https://github.com/wirenboard/wirenboard]
Более подробно читайте — [https://github.com/wirenboard/wirenboard в репозитории на GitHub]


Полностью:
Скачать полностью репозиторий:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
mkdir ~/wirenboard-wbdev
mkdir ~/wirenboard-wbdev
Строка 40: Строка 40:
</syntaxhighlight>
</syntaxhighlight>


[hide]
Скачать только скрипт. Пока не реализовано — сейчас в образе нет create_images.sh:
Только скрипт(на будущее, сейчас в образе нет create_images.sh):
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
mkdir -p ~/wirenboard-wbdev/wirenboard
mkdir -p ~/wirenboard-wbdev/wirenboard
Строка 56: Строка 55:
./wbdev root exit
./wbdev root exit
</syntaxhighlight>
</syntaxhighlight>
<blockquote>'''Важно:''' Образ займет ~5,5 ГБ на /var </blockquote>
<blockquote>'''Важно:''' Образ займет ~5.5 Гб на /var </blockquote>


=Cборка образа=
=Cборка образа=
Строка 84: Строка 83:
</syntaxhighlight>
</syntaxhighlight>


Запускаем контейнер, при этом передаем архитектуру "цели":
Запускаем контейнер, при этом передаем архитектуру «цели»:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh
WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh
Строка 90: Строка 89:


<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
<blockquote>'''Важно:''' Изменения внутри контейнера не сохранятся </blockquote>
После завершения - "корневая" ФС остается в каталоге ./output/rootfs_wb6x и доступна для следующего использования. Можно изменять и дополнять в "ручном" режиме.
После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wb6x и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме.
Готовый для загрузки в контроллер образ - в ./output/images/YYYYMMDDHHMM
Готовый для загрузки в контроллер образ в ./output/images/YYYYMMDDHHMM


==Ручная сборка==
==Ручная сборка==
По сути - то же самое, но команды выполняются вручную, есть возможность изменить параметры.
По сути то же самое, но команды выполняются вручную, есть возможность изменить параметры.
=== Запуск контейнера ===
=== Запуск контейнера ===
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard следующую команду:
Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard следующую команду:
Строка 101: Строка 100:
WBDEV_TARGET=stretch-armhf ./wbdev root
WBDEV_TARGET=stretch-armhf ./wbdev root
</syntaxhighlight>
</syntaxhighlight>
и после запуска контейнера готовим среду, команды те же что и в "автоматическом" режиме:
и после запуска контейнера готовим среду, команды те же что и в «автоматическом» режиме:
 
 
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
apt-get update && \
apt-get update && \
Строка 112: Строка 109:


=== Подготовка rootfs ===
=== Подготовка rootfs ===
Если rootfs - уже создана ранее - то просто указываем ее расположение.
Если rootfs уже создана ранее, то просто указываем ее расположение.


Скрипт для подготовки корневой ФС находится в директории /root/rootfs.
Скрипт для подготовки корневой файловой системы находится в директории /root/rootfs.
Как использовать скрипт create_rootfs.sh:
 
Синтаксис запуска скрипта create_rootfs.sh:
<pre>
<pre>
  $ ./create_rootfs.sh <board_ver> [<list of additional repos>]
  $ ./create_rootfs.sh <board_ver> [<list of additional repos>]
Строка 121: Строка 119:


Здесь:
Здесь:
* ''board_ver'' - версия контроллера, для которого готовится образ. Допустимые значения:
* ''board_ver'' версия контроллера, для которого готовится образ. Допустимые значения:
** 6x - для Wiren Board 6-6.6
** 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
Строка 133: Строка 131:
** MKA31
** MKA31
** AC-E1
** AC-E1
* ''list of additional repos'' - адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр.
* ''list of additional repos'' адреса дополнительных репозиториев с тестовыми пакетами (см. ниже). Опциональный параметр.
* ''путь к корневой ФС'' из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически;
* ''путь к корневой ФС'' из переменной ROOTFS, имя директории, в которой будет создана корневая ФС. Директория будет создана автоматически.


Зададим расположение ФС, уже существующей или вновь создаваемой:
Зададим расположение ФС, уже существующей или вновь создаваемой:
Строка 148: Строка 146:
</pre>
</pre>


 
Если не используем уже существующую, то создаем:
Если не используем уже существующую то создаем:
<syntaxhighlight lang="bash">
<syntaxhighlight lang="bash">
/root/rootfs/create_rootfs.sh 6x
/root/rootfs/create_rootfs.sh 6x
</syntaxhighlight>
</syntaxhighlight>


Если нет ошибок - то можно переходить к слеюующему этапу.
Если нет ошибок можно переходить к следующему этапу.


=== Дополнительные репозитории === <!--T:12-->
=== Дополнительные репозитории === <!--T:12-->
Строка 170: Строка 167:


<!--T:16-->
<!--T:16-->
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. Конкретно, к дополнительному репозиторию предъявляются следующие требования:
Формат репозиториев соответствует тому, который создаётся с помощью утилиты [[Special:MyLanguage/wbrepo|wbrepo]]. К дополнительному репозиторию предъявляются требования:


<!--T:17-->
<!--T:17-->
* В корне на сервере репозитория должен храниться публичный GPG-ключ в файле /repo.gpg.key. Например, если репозиторий расположен по адресу 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


<!--T:18-->
<!--T:18-->
Строка 220: Строка 217:


<!--T:27-->
<!--T:27-->
Здесь ''tag'' - суффикс, который будет добавлен к имени файла образа.
Здесь ''tag'' суффикс, который будет добавлен к имени файла образа.


<!--T:28-->
<!--T:28-->
Готовый образ будет лежать по пути image/image/wb5/<current_datetime>/<current_datetime>_emmc_<tag>.img.
Готовый образ будет лежать по пути image/image/wb5/<current_datetime>/<current_datetime>_emmc_<tag>.img.


== См. также == <!--T:29-->
== См. также == <!--T:29-->

Версия 21:25, 14 ноября 2020

Другие языки:

Для сборки образов прошивки контроллера мы подготовили специальный образ Docker. Сборку можно производить внутри этого образа в автоматическом или ручном режиме. После предварительной настройки окружения можно использовать скрипты для сборки без контейнера.

Подготовка

Актуально до ядра 4.22 включительно. Раздел в процессе правки.

Установка Docker и подготовка хост-системы

Перый шаг — это установка Docker. В зависимости от используемого дистрибутива — устанавливается по-разному, для Debian:

sudo apt install apt-transport-https ca-certificates curl gnupg2 software-properties-common -y
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
sudo apt update
sudo apt install docker-ce -y

На хост-системе обязательно установите пакет qemu-user-static:

sudo apt install -y qemu-user-static

Не забудьте добавить пользователя в группу docker, чтобы не использовать sudo:

sudo usermod -aG docker ${USER}

После добавления пользователя надо выйти-зайти чтобы изменения применились.

Скачивание скрипта

Создаем папку и скачиваем скрипт

Более подробно читайте — в репозитории на GitHub

Скачать полностью репозиторий:

mkdir ~/wirenboard-wbdev
cd ~/wirenboard-wbdev
git clone https://github.com/wirenboard/wirenboard
cd wirenboard

Скачать только скрипт. Пока не реализовано — сейчас в образе нет create_images.sh:

mkdir -p ~/wirenboard-wbdev/wirenboard
cd ~/wirenboard-wbdev/wirenboard
mkdir ./output
wget https://raw.githubusercontent.com/wirenboard/wirenboard/master/wbdev
chmod +x wbdev

Выкачивание образа

Запускаем:

./wbdev root exit

Важно: Образ займет ~5.5 Гб на /var

Cборка образа

Автоматическая сборка

Готовим файл с командами:

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
#echo "Remove exist rootfs for re-create (if need)"
#rm -rf /rootfs/$WBDEV_TARGET
#rm -rf ./output/rootfs_wb6x
export ROOTFS=./output/rootfs_wb6x
echo "Create new clean rootfs"
rm -rf $ROOTFS
/root/rootfs/create_rootfs.sh 6x
echo "Create .fit image"
./image/create_images.sh 6x
echo "correct rights"
chmod a+rw -R ./output/images/
rm tmp.sh
EOFcommand
chmod a+x tmp.sh

Запускаем контейнер, при этом передаем архитектуру «цели»:

WBDEV_TARGET=stretch-armhf ./wbdev root ./tmp.sh

Важно: Изменения внутри контейнера не сохранятся

После завершения — «корневая» файловая система остается в каталоге ./output/rootfs_wb6x и доступна для следующего использования. Можно изменять и дополнять в «ручном» режиме. Готовый для загрузки в контроллер образ — в ./output/images/YYYYMMDDHHMM

Ручная сборка

По сути — то же самое, но команды выполняются вручную, есть возможность изменить параметры.

Запуск контейнера

Запускаем в том же каталоге ~/wirenboard-wbdev/wirenboard следующую команду:

~/wirenboard-wbdev/wirenboard
WBDEV_TARGET=stretch-armhf ./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
export ROOTFS=./output/rootfs_wb6x

Подготовка rootfs

Если rootfs уже создана ранее, то просто указываем ее расположение.

Скрипт для подготовки корневой файловой системы находится в директории /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

Если не используем уже существующую, то создаем:

/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.

TODO: раздел В процессе редактирования

Сборка образа для загрузки на контроллер

TODO: раздел требует дополнения

Скрипты для сборки образов находятся в директории images. Перед сборкой образа необходима готовая корневая ФС.

Дополнительно на хост-машине потребуются утилиты (названия приведены для Debian/Ubuntu):

  • kpartx
  • device-tree-compiler
  • u-boot-tools

Пример: собираем образ прошивки для 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.

См. также