3 配置和使用 Toaster
3 启动用于本地开发的 Toaster
按照 使用 Toaster 前的准备 一章配置好 Yocto 项目, 并安装 Toaster 的系统依赖后,就可以启动 Toaster。
进入 Source Directory 的根目录,例如 poky::
$ cd poky
在该目录中加载构建环境脚本::
$ source oe-init-build-env
接下来,在 Build Directory (例如 poky/build)中启动 Toaster::
$ source toaster start
现在可以从命令行运行构建,或按照 使用 Toaster 网页界面 一节使用 Toaster 构建。
要访问 Toaster 网页界面,请打开浏览器并输入::
http://127.0.0.1:8000
3 设置其他端口
Toaster 默认在端口 8000 上启动。可以使用 WEBPORT 参数指定其他端口。
例如,以下命令将端口设为 "8400"::
$ source toaster start webport=8400
3 启动不带 Web 服务器的 Toaster
可以启动 Toaster 环境而不启动其 Web 服务器,适用于以下情况:
将命令行构建的统计数据记录到 Toaster 数据库,供之后查看。
Toaster 服务器已在运行时,记录命令行构建的统计数据。
用一个 Toaster Web 服务器实例跟踪和记录多个命令行构建, 每个构建都在各自的 "noweb" Toaster 环境中启动。
以下命令依次启动不带 Web 服务器的 Toaster 环境、执行 BitBake 操作, 然后关闭 Toaster 环境。构建完成后可以关闭环境,但关闭前应等待几分钟, 确保 BitBake 构建统计数据已经全部写入 Toaster 数据库。 如果另有 Toaster Web 服务器实例运行,可以通过它查看此命令行构建的进度, 并在结果发布后立即查看::
$ source toaster start noweb
$ bitbake target
$ source toaster stop
3 启动不带构建服务器的 Toaster
可以启动禁用 "New Projects" 功能的 Toaster 环境,适用于以下情况:
通过 Web 服务器分享构建结果,同时阻止其他人在你的主机上启动构建。
只允许将本地命令行构建记录到 Toaster 数据库。
使用以下命令启动不带构建服务器的 Toaster::
$ source toaster start nobuild webport=port
3 配置外部访问
Toaster 默认绑定回环地址,即 localhost,不允许外部主机访问。
要允许外部访问,可通过 WEBPORT 指定连接网络的地址,
具体而言就是网卡用于接入网络的 IP 地址。
也可以使用 "0.0.0.0:port",绑定计算机支持的全部 IP 地址。
以下示例绑定主机的全部 IP 地址::
$ source toaster start webport=0.0.0.0:8400
以下示例绑定主机网卡上的指定 IP 地址::
$ source toaster start webport=192.168.1.1:8400
3 克隆层的目录
Toaster 在源码目录(即 poky)内创建 _toaster_clones,
用于克隆构建所需的层。
如果希望将 Toaster 相关文件和目录放到默认位置之外的指定位置,
可以设置 TOASTER_DIR 环境变量。它优先于当前工作目录,
设置后 Toaster 会创建并使用 $TOASTER_DIR./_toaster_clones。
3 构建目录
Toaster 在源码目录(例如 poky)中创建 Build Directory,用于执行构建。
如果希望将 Toaster 相关文件和目录放到指定位置,可以设置 TOASTER_DIR。
该环境变量优先于当前工作目录,设置后 Toaster 使用 $TOASTER_DIR/build
作为 Build Directory。
3 创建 Django 超级用户
Toaster 基于 Django 框架 构建。 Django 提供管理界面,可以编辑 Toaster 的配置参数。
要访问 Django 管理界面,必须按以下步骤创建超级用户:
如果按照建议使用
pip3安装 Toaster 的系统依赖, 需要确保本地用户路径已加入PATH。可以使用以下命令追加 pip3 的本地用户路径::$ export PATH=$PATH:$HOME/.local/bin
在包含 Toaster 数据库的目录(默认为 Build Directory)中, 调用
manage.py的createsuperuser命令::$ cd poky/build $ ../bitbake/lib/toaster/manage.py createsuperuser
Django 提示输入用户名,此项必填。
Django 提示输入电子邮件地址,此项可选。
Django 提示输入密码,此项必填。
Django 提示再次输入密码进行确认。
完成后会出现以下确认消息::
Superuser created successfully.
创建超级用户后,即可通过浏览器访问 Django 管理界面。 其 URL 是 Toaster 实例 URL 后加上 "/admin"。 例如,本地运行 Toaster 时使用::
http://127.0.0.1:8000/admin
可以通过该管理界面设置 Toaster 配置参数, 例如 Build Directory、层来源、默认变量值和 BitBake 版本。
3 配置 Toaster 生产实例
生产实例可以供远程用户、多个用户,或同时供二者共享使用, 也能承受更高的 Web 服务负载。 以下各节介绍如何配置 Toaster,以便通过其网页界面运行构建。
3 要求
确保满足以下要求:
备注
必须满足 Apache、mod-wsgi 和 Mysql 的全部要求。
满足 使用 Toaster 前的准备 一章中的全部构建要求。
安装 Apache Web 服务器。
为 Apache 安装
mod-wsgi。使用 Mysql 数据库服务器。
Ubuntu 用户运行::
$ sudo apt install apache2 libapache2-mod-wsgi-py3 mysql-server python3-pip libmysqlclient-dev
Fedora 或 RedHat 用户运行::
$ sudo dnf install httpd python3-mod_wsgi python3-pip mariadb-server mariadb-devel python3-devel
openSUSE 用户运行::
$ sudo zypper install apache2 apache2-mod_wsgi-python3 python3-pip mariadb mariadb-client python3-devel
3 安装
按以下步骤安装 Toaster:
创建 toaster 用户,并将其主目录设为
/var/www/toaster::$ sudo /usr/sbin/useradd toaster -md /var/www/toaster -s /bin/false $ sudo su - toaster -s /bin/bash
将
poky的副本检出到 Web 服务器目录,这里使用/var/www/toaster::$ git clone https://git.yoctoproject.org/poky $ git checkout blacksail
使用
--user标志安装 Toaster 依赖, 将这些 Python 软件包与系统提供的软件包隔离::$ cd /var/www/toaster/ $ pip3 install --user -r ./poky/bitbake/toaster-requirements.txt $ pip3 install --user mysqlclient
备注
不强制隔离这些软件包,但建议这样做。 也可以使用操作系统的包管理器安装。
编辑
/var/www/toaster/poky/bitbake/lib/toaster/toastermain/settings.py, 按以下方式配置 Toaster:修改 DATABASES:
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'toaster_data', 'USER': 'toaster', 'PASSWORD': 'yourpasswordhere', 'HOST': 'localhost', 'PORT': '3306', } }
修改 SECRET_KEY:
SECRET_KEY = 'your_secret_key'
修改 STATIC_ROOT:
STATIC_ROOT = '/var/www/toaster/static_files/'
向前面定义的
mysql服务器添加数据库和用户::$ mysql -u root -p mysql> CREATE DATABASE toaster_data; mysql> CREATE USER 'toaster'@'localhost' identified by 'yourpasswordhere'; mysql> GRANT all on toaster_data.\* to 'toaster'@'localhost'; mysql> quit
让 Toaster 创建数据库结构和默认数据,并收集静态文件::
$ cd /var/www/toaster/poky/ $ ./bitbake/lib/toaster/manage.py migrate $ TOASTER_DIR=`pwd\` TEMPLATECONF='poky' \ ./bitbake/lib/toaster/manage.py checksettings $ ./bitbake/lib/toaster/manage.py collectstatic
上例在
poky目录中运行migrate,确保数据库结构变更正确应用, 即执行数据库迁移。下一行设置 Toaster 根目录TOASTER_DIR, 以及相对于该目录的配置文件位置TOASTER_CONF。 TEMPLATECONF 的值反映poky/.templateconf的内容, 默认应包含字符串 "poky"。配置文件的更多信息见 配置 Toaster。该行还运行
checksettings,配置 Toaster 的 Build Directory。 根目录TOASTER_DIR决定构建目录在文件系统中的位置。 上例将它设置为::/var/www/toaster/poky
因此,Toaster 的 Build Directory 为::
/var/www/toaster/poky/build
最后,Django 的
collectstatic命令将所有静态文件收集到STATIC_ROOT定义的目录,供 Apache Web 服务器提供访问。测试或使用 Toaster Django Web 服务器的 Mysql 集成。 此时可以启动普通的 Toaster Django Web 服务器,其数据库已位于 Mysql 中。 可以用它确认数据库迁移及从层索引导入数据已经完成。
按标准启动方式,启动使用 Mysql 数据库的默认 Toaster Django Web 服务器::
$ source oe-init-build-env $ source toaster start
如果 Django 已满足需要,也可以用于实际发布的系统, 等需求变化后再迁移到 Apache。
在 Apache 配置目录中添加 Toaster 的配置文件。 Ubuntu 或 Debian 的位置为::
/etc/apache2/conf-available/toaster.conf
Fedora 或 RedHat 的位置为::
/etc/httpd/conf.d/toaster.conf
openSUSE 的位置为::
/etc/apache2/conf.d/toaster.conf
可以参考以下 Toaster Apache 配置示例:
Alias /static /var/www/toaster/static_files <Directory /var/www/toaster/static_files> <IfModule mod_access_compat.c> Order allow,deny Allow from all </IfModule> <IfModule !mod_access_compat.c> Require all granted </IfModule> </Directory> <Directory /var/www/toaster/poky/bitbake/lib/toaster/toastermain> <Files "wsgi.py"> Require all granted </Files> </Directory> WSGIDaemonProcess toaster_wsgi python-path=/var/www/toaster/poky/bitbake/lib/toaster:/var/www/toaster/.local/lib/python3.4/site-packages WSGIScriptAlias / "/var/www/toaster/poky/bitbake/lib/toaster/toastermain/wsgi.py" <Location /> WSGIProcessGroup toaster_wsgi </Location>
Ubuntu 或 Debian 用户还需要启用 Apache 配置和模块::
$ sudo a2enmod wsgi $ sudo a2enconf toaster $ chmod +x bitbake/lib/toaster/toastermain/wsgi.py
最后重启 Apache,确保加载全部新配置。Ubuntu、Debian 和 openSUSE 使用::
$ sudo service apache2 restart
Fedora 和 RedHat 使用::
$ sudo service httpd restart
准备用于运行 Toaster 构建的 systemd 服务。服务配置文件示例如下:
[Unit] Description=Toaster runbuilds [Service] Type=forking User=toaster ExecStart=/usr/bin/screen -d -m -S runbuilds /var/www/toaster/poky/bitbake/lib/toaster/runbuilds-service.sh start ExecStop=/usr/bin/screen -S runbuilds -X quit WorkingDirectory=/var/www/toaster/poky [Install] WantedBy=multi-user.target
准备
runbuilds-service.sh脚本,将其放入/var/www/toaster/poky/bitbake/lib/toaster/,并设置可执行权限::#!/bin/bash #export http_proxy=http://proxy.host.com:8080 #export https_proxy=http://proxy.host.com:8080 #export GIT_PROXY_COMMAND=$HOME/bin/gitproxy cd poky/ source ./oe-init-build-env build source ../bitbake/bin/toaster $1 noweb [ "$1" == 'start' ] && /bin/bash
运行服务::
$ sudo service runbuilds start
服务运行在已分离的 screen 会话中,可以用以下命令连接该会话::
$ sudo su - toaster $ screen -rS runbuilds
先按 "Ctrl-a",再按 "d",即可再次脱离会话。
现在可以打开浏览器使用 Toaster。
3 使用 Toaster 网页界面
Toaster 网页界面支持以下操作:
浏览 OpenEmbedded 层索引 中适用于所选构建系统版本的已发布层。
导入自己的层用于构建。
在配置中添加和移除层。
设置配置变量。
选择一个或多个构建目标。
启动构建。
查看构建了哪些配方和软件包,以及最终镜像安装了哪些软件包。
浏览镜像的目录结构。
查看构建配置中全部变量的值,以及设置各值的文件。
查看错误、警告和跟踪消息,辅助调试。
查看构建过程中执行或复用的 BitBake 任务,包括使用共享状态的任务。
查看配方、软件包和任务之间的依赖关系。
查看构建耗时、任务耗时、CPU 使用率和磁盘 I/O 等性能信息。
3 Toaster 网页界面视频
以下视频介绍如何使用 Toaster 图形界面:
构建配置: 此 视频 概述并演示 Toaster 的构建配置。
构建自定义层: 此 视频 展示如何构建供 Toaster 使用的自定义层。
Toaster 首页与表格控件: 此 视频 介绍入口页面及数据操作功能, 包括搜索、排序和按不同条件过滤。
构建概览页: 此 视频 展示用于概览所选构建信息的页面。
镜像信息: 此 视频 介绍 Toaster 提供的镜像信息,包括已安装软件包和根文件系统。
配置: 此 视频 介绍 Toaster 的构建配置信息。
任务: 此 视频 展示构建系统运行任务的相关信息。
已构建的配方和软件包: 此 视频 展示相关信息。
性能数据: 此 视频 展示 Toaster 提供的构建性能数据。
3 关于本地 Yocto 项目版本的补充说明
本节仅适用于按照 启动用于本地开发的 Toaster 为本地开发配置 Toaster 的情况。
在 Toaster 中创建项目时,需要提供名称并选择 Yocto 项目版本。 其中一个版本选项叫作 "Local Yocto Project"。
选择 "Local Yocto Project" 后,Toaster 使用计算机上的本地 Yocto 项目克隆运行构建, 也就是运行 Toaster 的同一个克隆。除非手动更新该克隆,构建始终使用相同的 Git 修订。
如果选择其他版本,Toaster 每次构建都会从上游 Yocto 项目仓库 获取该版本分支的最新提交。因此,只要上游更新了所选版本, 构建使用的 Git 修订就会改变。本地开发时,你可能不希望发生这种变化, 此时 "Local Yocto Project" 可能更合适。
不过,"Local Yocto Project" 只提供 Yocto 项目自带的三个核心层, 不会提供其他兼容层:
若要构建其他层,需要通过 "Import layer" 页面手动导入 Toaster 项目。
3 存在多个版本时构建指定配方版本
有时一个层提供同一配方的多个版本。例如,openembedded-core 提供
两个 bash 版本(3.2.48 和 4.3.30-r0)及两个 which 版本(2.21 和 2.18)。
下图展示了这种情况:
OpenEmbedded 构建系统默认构建其中一个配方版本。
对于 bash,默认版本是 4.3.30-r0。
目前 Toaster 无法直接覆盖默认配方版本。若要构建 bash 3.2.48,
需要设置 PREFERRED_VERSION。
可以在项目配置区域的 "BitBake variables" 页面中,
通过 "Add variable" 表单设置,如下图所示:
要指定构建 bash 3.2.48,在 "Variable" 字段输入 "PREFERRED_VERSION_bash",
在 "Value" 字段输入 "3.2.48",然后点击 "Add variable":
点击后,PREFERRED_VERSION 设置会添加到 BitBake 变量列表底部。 此时 OpenEmbedded 构建系统将构建所需版本,而非默认版本: