meta-resin, meta是Yocto层的集合,用于构建resinOS图像

分享于 

16分钟阅读

GitHub

  繁體 雙語
meta-resin is a Yocto layer used to build resin.io operating system images
  • 源代码名称:meta-resin
  • 源代码网址:http://www.github.com/resin-os/meta-resin
  • meta-resin源代码文档
  • meta-resin源代码下载
  • Git URL:
    git://www.github.com/resin-os/meta-resin.git
    Git Clone代码到本地:
    git clone http://www.github.com/resin-os/meta-resin
    Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/resin-os/meta-resin
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
    
    Resin.io-层

    描述

    这个存储库为各种设备构建 Resin.io。

    层结构

    • meta-resin-common: 包含所有支持平台的通用配方的层。
    • meta-resin-*: 包含yocto版本特定菜谱的层。
    • 其他文件:自述文件,复制等。

    依赖项

    版本控制

    meta-resin 版本保存在 DISTRO_VERSION 变量中。 在 resin-<board> 存储库的root 中,resin-<board> 版本保存在名为版本的文件中,并将它的作为变量 HOSTOS_VERSION。

    • meta-resin的版本是以 3个数字分隔的数字。 修补程序号可以有 beta 标签。 比如 1.2.3,1.2.3 -beta1,2.0.0 -beta1.
    • resin-<board>的版本是通过附加到 meta-resin 版本的rev 标签构建的。 这将有一个董事会修订的语义,它适应特定的meta-resin 版本的目标板。 例如,元树脂 1.2.3可以在最终版本的末尾通过 3个板,最终版本为 1.2.3 +rev3。
    • 基于特定 meta-resin 发布 X.Y. Z的第一个 resin-board 版本将是 X.Y. Z+rev1. 示例:基于 meta-resin 1.2.3的第一个 resin-board 版本将为 1.2.3 +rev1.
    • resin-board 中更新 meta-resin 版本时,修订版将重置为 1. 示例:1.2.3 +rev4将更新为 1.2.4 +rev1.
    • 注意,最终版本的操作系统不是基于semver规范的,因此需要以定制方式处理这样一个版本的解析。
    • e.g meta-resin 版本 1.2.3可以有 resin-<board> 版本 1.2.3 +rev X
    • e.g meta-resin 版本 2.0.0 -beta0可以有 resin-<board> 版本 2.0.0 -beta0+rev X

    我们将主机操作系统版本定义为 resin-<board> 版本,并将这里版本用作 HOSTOS_VERSION。

    插件生成标志

    在使用meta树脂支持之前,可以从构建目录中在 conf/local。conf中更改几个标志。 local.conf的编辑将在源代码完成后完成。 有关此类生成标志的说明,请参见 below。

    插件开发映像

    将DEVELOPMENT_IMAGE变量注入到DISTRO_FEATURES中。 如果 DEVELOPMENT_IMAGE =" 1",则添加'开发映像'发行版功能。 基于这里,菜谱可以决定需要哪些开发特定的变更。 默认情况下 DEVELOPMENT_IMAGE =" 0",它对应于正常的( 非开发) 生成( 开发映像将不会附加到 DISTRO_FEATURE )。 如果用户想要创建创建开发映像(。使用串行控制台例如)的构建,DEVELOPMENT_IMAGE =" 1"需要添加到 local.conf.

    要使它的简短:

    • 如果DEVELOPMENT_IMAGE不在你的local.conf 中,或者它不是" 1": 将生成非开发映像( 默认行为)
    • 如果DEVELOPMENT_IMAGE定义为 local.conf,它的值为" 1": 将生成开发映像

    基于的主机操作系统更新包的生成

    要生成更新树脂主机操作系统包,请编辑生成添加的local.conf:

    RESINHUP ="是"

    配置自定义网络管理器

    默认情况下,树脂在主机操作系统上使用网络管理器提供连接。 如果要更改和使用其他提供程序,请使用NETWORK_MANAGER_PACKAGES列出你的软件包。 你可以将这里变量添加到 local.conf. 下面是一个示例:

    NETWORK_MANAGER_PACKAGES ="mynetworkmanager mynetworkmanager客户端"

    定制飞溅

    我们将所有初始映像配置为在启动。关机或者重启时生成一个树脂 logo。 但是我们鼓励任何用户去用他们自己的logo 替换这个。 你所需要做的就是替换你将在第一个图片中找到的( 引导分区)/树脂标志。 注意:目前,stands期望将图像命名为 resin-logo.png。

    构建风格并选择要在数据分区中插入的图像

    我们目前区分两种类型的构建:

    • 通过包括与树脂基础设施通信所需的所有软件位来连接到树脂的构建
    • 不可以连接到树脂的构建,仅用于测试支持的板上的Docker 和它的他resinOS功能

    这些类型的switch 是基于构建变量 RESIN_CONNECTABLE 完成的,默认情况下,该是当前设置的( =1 )。

    RESIN_CONNECTABLE =" 1"[default ]

    在这种情况下,docker-resin-supervisor-disk将被用作docker磁盘提供程序。 将设备连接到树脂所需的所有服务都将安装在(。systemd服务,VPN配置 等等 ) 中。 默认情况下,启用与树脂通信的systemd服务是启用的。 这里默认行为可以使用 RESIN_CONNECTABLE_ENABLE_SERVICES 生成变量进行自定义。

    另外,默认情况下,Docker 树脂监视器映像将预先加载到数据分区中。 可以使用 target_repository/target_tag构建变量修改这里行为。 这使得创建一个构建不需要主管映像或者创建一个主管服务,但是一个自定义图像。 target_repository/target_tag在下面是 decribed。

    示例:具有启用服务和服务 Docker 映像预加载- 没有对构建进行预加载- 这意味着所有变量的默认值都是默认值。

    示例:具有禁用的可以连接映像和 supervisor Docker 映像预加载- 添加/设置 RESIN_CONNECTABLE_ENABLE_SERVICES ="0" 到生成的local.conf

    示例:禁用具有禁用服务且未加载 Docker 映像的可以连接映像- 添加/设置 RESIN_CONNECTABLE_ENABLE_SERVICES ="0"TARGET_REPOSITORY =""TARGET_TAG ="" 到构建的local.conf

    示例:具有禁用服务和自定义 Docker 映像预加载的可以连接映像- 添加/设置 RESIN_CONNECTABLE_ENABLE_SERVICES ="0" , TARGET_REPOSITORY ="mycustomimage"TARGET_TAG ="1.0" 到构建的local.conf

    可以连接映像将有一个管理安装在目标 resin-connectable 上的树脂服务的工具。 运行 resin-connectable -h 以获得更多信息,查看帮助消息。

    RESIN_CONNECTABLE ="0"

    在这种情况下,docker-custom-disk将被用作docker磁盘提供程序。 负责与树脂基础设施通信的所有服务和软件bits都不会安装。 在这种情况下 RESIN_CONNECTABLE_ENABLE_SERVICES 对构建没有任何影响,因为它只适用于可以连接的构建。

    如果没有任何其他配置,构建将保留数据分区,没有预先加载的。 此外,还可以使用其他两个变量来插入特定的DockerHub映像:

    • TARGET_REPOSITORY - 要注入的图像 NAME
    • TARGET_TAG - 要插入的图像标记。 如果未定义,则默认为 latest。 否则将使用指定值。

    你还可以使用以下变量从自定义 private 注册表加载特定的Docker 映像:

    • PRIVATE_REGISTRY - 要登录的private 注册表
    • PRIVATE_REGISTRY_USER - 用于登录到 private 注册表的用户 NAME
    • PRIVATE_REGISTRY_PASSWORD - 登录 private 注册表时使用的用户密码

    示例:在没有预加载 Docker 映像的情况下具有不可连接的映像- 添加/设置 RESIN_CONNECTABLE="0" 到生成的local.conf

    示例:在 ubuntu:latest Docker 映像预加载的映像中有不可连接的映像- 添加/设置 RESIN_CONNECTABLE ="0"TARGET_REPOSITORY ="ubuntu" 到生成的local.conf

    例如:在 Docker 中有一个不可连接的图像:15: 10镜像预加载- 添加/设置 RESIN_CONNECTABLE ="0"TARGET_REPOSITORY ="ubuntu"TARGET_TAG ="15.04" 到构建 local.conf

    提示:如果Modifing中任何一个都没有问题,将会重新激活生成数据分区,但是在工作构建( 来自scatch的不是) 中,用户需要使用类似于issuing的命令 cleansstate bitbake docker-custom-disk -c cleansstate ; bitbake docker-resin-supervisor-disk -c cleansstate 如果在工作生成中更改 RESIN_CONNECTABLE,则将导致生成错误类似于:

    错误:recipe docker-custom-disk试图在这些文件已经存在时将文件安装到共享区域中。 这些文件及其清单位置包括: manifest-beaglebone-docker-resin-supervisor-disk.populate_sysroot 中匹配的???/build/tmp/sysroots/beaglebone/sysroot-providers/docker-disk 请验证哪个配方应该提供 上面 文件。 这个构建已经停止在这个场景中继续,如果现在没有,可以能在未来的( 我们已经看到几个月后构建失败了) 中。 如果系统知道如何自动恢复它,可能会有几种不同的情况,并且我们不知道这一点。 它可能是你拥有虚拟/内核( 比如 )的提供者。 从 linux for o linux-yocto-dev ),在这种情况下,你需要执行这两个菜单的干净任务并解决这个错误。 可能是你将DISTRO_FEATURES从systemd更改为 udev,反之亦然。 如果你在现有的构建目录中切换 DISTRO_FEATURES,那么清理这些配方是不可能的,你应该真正清除它,然后再重新生成它。 可能是检测到 ov erlapping文件are在这种情况下,将它们添加到SSTATE_DUPWHITELIST可能是正确的解决方案。 它也可能是你的构建包含两种不同的冲突版本( 比如。 蓝色z 和bluez以及正确的解决方案是解决冲突。 如果有疑问,请在邮件列表上询问,共享错误和列表 上面。 错误:如果 上面 消息太多,则建议更简单的版本来清除tmp并重新生成( 重用sstate很好)。 这可能会在大多数( 但并非全部) 案例中修复。

    Docker 存储驱动程序

    默认情况下构建系统将设置 Docker 所需的所有位,以便能够使用 aufs 存储驱动程序。 可以通过在 local.conf. 中定义 BALENA_STORAGE 来更改它,它支持 aufsoverlay2

    设备支持

    无线适配器

    我们目前测试并为以下WiFi适配器提供显式支持:

    • 基于bcm43143的适配器
      • 示例:官方 RPI WiFi适配器链接

    向github发送send请求目标这个插件存储库。

    请参考:Yocto贡献指南,并尝试使用提交日志格式,如下所述。 例如:

    
    test.bb: I added a test
    
    
    
    [Issue #01]
    
    
    
    I'm going to explain here what my commit does in a way that history
    
    
    would be useful.
    
    
    
    Signed-off-by: Joe Developer <joe.developer@example.com>
    
    
    
    

    为了跟踪在特定版本中更改的内容,我们利用了一个变更日志文件。 我们曾经手工处理这个文件,在每次请求请求时添加条目。 为了避免推出多个时的赛车问题,我们开始使用versionist来生成每个版本的更改日志。 这里工具使用提交日志中的两个页脚: Change-typeChangelog-entry。每个关联都需要至少一个提交,这将指定这两个提交日志页脚的。 这样,当处理新版本时,将根据 Change-type 计算下一个版本,并将根据 Changelog-entry 文件中的条目生成条目。

    在每个公共事件中,每个公关都包含一个特定的任务( 问题,Bug,功能 等等 ),它将包含提交日志中的Change-typeChangelog-entry。 通常,但不是必需的,这个提交是分支中最后一个。

    Change-type 是强制性的,因为元树脂遵循 semver,可以采用以下值之一: 修补程序,minor或者 major。Changelog-entry 默认为主题行。

    如何修复各种生成错误

    • 主管失败,日志类似于:
    
    Step 3 : RUN chmod 700/entry.sh
    
    
    ---> Running in 445fe69866f9
    
    
    operation not supported
    
    
    
    

    这可能是由于 Docker Bug,如果你更新内核并不重新引导,Docker 会被混淆。 修复就是重启你的系统。 更多信息:http://stackoverflow.com/questions/29546388/getting-an-operation-not-supported-error-when-trying-to-run-something-while-bu

    config.json

    可以通过在引导分区的config.json 文件中设置以下键来配置resinOS的行为。 这里配置文件也由管理员使用。

    主机名

    这里设备的配置主机名,否则使用 UUID。

    persistentLogging

    布尔值。启用或者禁用这里设备上的持久日志记录。

    国家

    字符串。设备运行所在的国家/地区。 这是用WiFi调节域设置的。

    ntpServers

    字符串用于时间同步的NTP服务器的空格分隔列表。 默认为 resinio.pool. ntp.org 服务器。

    dnsServers

    字符串。用于 NAME 解析的首选DNS服务器的空格分隔列表。 返回DHCP提供的服务器和 Google DNS。

    Yocto版本支持

    支持以下Yocto版本:

    • Morty ( 2 2 )
    • 测试
    • Krogoth ( 2 1 )
    • 测试
    • Jethro ( 2 0 )
    • 测试
    • Fido ( 1 8 )
    • 未测试的