julianxhokaxhiu/cyanogenmod-ota

此软件包已被废弃,不再维护。作者建议使用 lineage-ota 软件包。

LineageOS OTA 更新器系统应用的简单 OTA REST 服务器

资助软件包维护!
julianxhokaxhiu

安装: 458

依赖: 0

建议者: 0

安全: 0

星标: 208

关注者: 24

分支: 132

开放问题: 0

类型:项目

2.9.0 2020-07-20 09:01 UTC

This package is auto-updated.

Last update: 2024-01-28 15:38:39 UTC


README

LineageOS OTA 更新器系统应用的简单 OTA REST 服务器

支持

有问题?不确定在哪里创建?请参阅 CONTRIBUTING

内容

要求

  • 启用 Apache mod_rewrite
  • PHP >= 8.2
  • PHP ZIP 扩展
  • Composer (如果通过 CLI 安装)

如何使用

Composer

$ cd /var/www/html # Default Apache WWW directory, feel free to choose your own
$ composer create-project julianxhokaxhiu/lineage-ota LineageOTA

然后最后访问 https:///LineageOTA 查看REST服务器运行情况。请注意,这只是为了快速测试,当您计划在生产环境中使用这种设置(您的用户)时,请确保也提供 HTTPS 支持。

如果您得到的内容不是位于 builds 目录中的文件列表,这意味着您的环境中存在问题。在创建问题报告之前,请仔细检查。

Docker

$ docker run \
    --restart=always \
    -d \
    -p 80:80 \
    -v "/home/user/builds:/var/www/html/builds/full" \
    julianxhokaxhiu/lineageota

然后最后访问 https:/// 查看REST服务器运行情况。

根URL(用于在 /api 端点生成 ROM URL)可以使用 LINEAGEOTA_BASE_PATH 变量设置。

本地托管

  • 完整构建应该上传到 builds/full 目录。
  • 增量构建应该上传到 builds/delta 目录。

仅适用于 LineageOS 15.x 及更高版本

如果您愿意在 LineageOS 15.x(或更高版本)的 ROM 构建上使用此项目,您可能会注意到,在 ZIP 文件中已删除名为 build.prop 的文件,而是将其集成在 system.new.dat 文件中,这是一个基本 ext4 图像(您可以在以下位置了解更多信息: https://aosp.org.cn/devices/tech/ota/block )。

为了从现在开始使用此服务器,您可以将构建目录(您的ROM正在其中构建)内的build.prop文件复制到ZIP文件所在的同一目录中,并将其命名为ZIP文件名加上.prop扩展名。

例如,您可以自由检查以下结构

$ cd builds/full
$ tree
.
├── lineage-15.0-20171030-NIGHTLY-gts210vewifi.zip # the full ROM zip file
└── lineage-15.0-20171030-NIGHTLY-gts210vewifi.zip.prop # the ROM build.prop file

如果没有找到build.prop文件会发生什么

即使没有提供build.prop文件,服务器也能通过API提供ZIP文件,因为它可以从其他地方获取相关信息(始终与该ZIP文件相关)。尽管如此,由于这是一种试验性的方法,它可能是不正确的,因此请不要过度依赖它。

我不确定这能帮助多少,但这是在您无法提供任何原因的build.prop文件时的极端后备方案。相反,请始终考虑找到获取prop文件的方法,以便提供适当的API响应。

GitHub托管

如果您想在GitHub上托管您的ROM,您可以将仓库名称放入github.json文件中,如下面的示例所示

[
  {
    "name": "ADeadTrousers/android_device_Unihertz_Atom_XL_EEA",
    "name": "ADeadTrousers/android_device_Unihertz_Atom_XL_TEE"
  }
]

每行应指向一个设备的一个仓库,并且具有附带的文件的GitHub发布。每个发布至少应包含以下文件

  • build.prop
  • OTA发布ZIP
  • .md5sum列表

md5sum文件包含OTA ZIP以及您在发布中包含的任何其他文件的哈希值列表。md5sum的每一行应具有以下格式

HASHVALUE	FILENAME

文件名不应包含任何目录信息。

您还可以包括一个HTML格式的变更日志文件。请注意,任何包含在发布文件列表中的HTML文件都将作为变更日志包含在内。

禁用本地/GitHub托管

如果未使用配置文件(位于根目录中,称为lineageota.json),则可以禁用本地和GitHub托管功能。

[
        {
                "DisableLocalBuilds": false,
                "DisableGithubBuilds": false,
        }
]

将任一项设置为true将禁用相关的托管选项。

限制GitHub发布

由于GitHub,您可能会有很多更新器实际上不需要知道的多得多的发布,因此配置文件中有两个选项让您控制返回的发布数量

[
    {
        "MaxGithubReleasesPerRepo": 0,
        "OldestGithubRelease": "",
    }
]

MaxGithubReleaesPerRepo将限制每个仓库使用的发布数量。将此设置为0或将它从配置文件中省略将使用每个仓库中所有可用的发布。

OldestGithubRelease将排除任何发布日期早于给定日期的发布。此字符串值可以为空(表示所有发布),或任何strtotime()兼容的字符串,如"2021-01-01"或"60 days ago"。

缓存

本地构建和基于GitHub的构建都可以进行缓存以减少磁盘和网络流量。默认情况下,本地缓存被禁用,GitHub缓存被启用。

默认缓存超时设置为一天(86400秒)。

您可以通过根目录中的配置文件更改此设置,该配置文件称为lineageota.json

[
        {
                "EnableLocalCache": false,
                "EnableGithubCache": true,
                "LocalCacheTimeout": 86400,
                "GithubCacheTimeout": 86400
        }
]

这需要Web服务器对根目录具有写入权限。如果您想强制刷新发布,只需删除相应的cache.json文件。

Web Root 模板

在版本 2.9 及之前,如果用户访问了 OTA 服务器的 Web 根目录,他们会被重定向到构建文件夹。随着 Github 主机的引入,这不再是特别有用的目标,因为他们可能看不到本地托管的构建,或者如果本地托管已被禁用且本地构建文件夹未清理,则可能看到错误的构建。

2.9 版本之后的发布现在使用一个简单的模板系统来展示构建列表。

默认包含四个模板(ota-list-simple、ota-list-tables、ota-list-columns、ota-list-javascript),但您可以在“views”文件夹中创建自己的模板以匹配您的品牌。

模板有以下几个配置设置

        "OTAListTemplate": "ota-list-tables",
        "BrandName": "",
        "LocalHomeURL": "",
        "GithubHomeURL": "",
        "DeviceNames": {
            "kebab": "8T",
            "lemonade": "9"
        },
        "DeviceVendors": {
            "kebab": "Oneplus",
            "lemonade": "Oneplus"
        }
  • OTAListTemplate:要使用的模板名称,不要包含文件扩展名。
  • BrandName:您的 ROM 名称,如果为空,则使用 OTA 文件名中的品牌名称。
  • LocalHomeURL:本地构建的首页 URL,在模板文件中使用。如果为空,将使用 https://otaserver/builds URL。
  • GithubHomeURL:Github 构建的首页 URL,在模板文件中使用。如果为空,则使用任何定义的 Github 仓库的组织 URL。
  • DeviceNames:设备代码名称与其正确名称之间的映射数组。值:array( codename => title, ... )
  • DeviceVendors:设备代码名称与其供应商名称之间的映射数组。值:array( codename => vendor, ... )

包含的模板

  • ota-list-simple:一个包含简单标题和文件名列表的页面,不提供其他详细信息或链接。
  • ota-list-table:一个包含一系列表格的页面,每个设备一个表格,按日期顺序列出该设备的所有构建。包括跳转列表以查找设备、链接到本地/Github 页面、日期、版本、md5sum 等。

使用 Twig 作为模板语言,有关更多详细信息,请参阅他们的 文档

以下变量可用于模板

  • builds:可用构建的数组,每个条目都是一个包含以下内容的数组;incremental、api_level、url、timestamp、md5sum、changes、channel、filename、romtype、datetime、version、id、size
  • sortedBuilds:按设备名称排序的构建数组(数组键是设备名称,每个值与构建数组中的值相同)
  • parsedFilenames:已解析到以下标记的文件名数组;type、version、date、channel、code、model、signed
  • deviceNames:设备名称数组,每个键是代码名称,值是设备名称(例如 array( "kebab" => "8T")
  • vendorNames:设备名称数组,每个键是代码名称,值是供应商名称(例如 array( "kebab" => "Oneplus")
  • devicesByVendor:按供应商分类的二维设备数组(例如 array( "Oneplus" => array( "kebab", "lemonade"))
  • branding:更新的品牌信息数组,包含;name、GithubURL、LocalURL
  • formatedFileSizes:每个发布文件的友好文件大小数组,以文件名(从构建数组中)为键,值是字符串,如“1.1 GB”

REST 服务器单元测试

您可以使用这个用 NodeJS 制作的简单脚本,地址为 https://github.com/julianxhokaxhiu/LineageOTAUnitTest。包含说明。

ROM 集成

为了将此 REST 服务器集成到您的 ROM 中,您有两种可能性:您可以使用 build.prop(强烈建议),或者您可以直接修补 android_packages_apps_CMUpdater 包(不建议)。

在集成之前,请确保您的 OTA 服务器从公共 URL 响应。此外,请确保您知道您的路径。

例如,如果您的URL是 http://my.ota.uri/LineageOTA,那么您的API URL将是 http://my.ota.uri/LineageOTA/api

Build.prop

CyanogenMod / LineageOS ( <= 14.x )

为了将此集成到基于CyanogenMod的ROM中,您需要在您的build.prop文件中添加cm.updater.uri属性(针对CyanogenModLineage)。请参阅此示例

# ...
cm.updater.uri=http://my.ota.uri/api/v1/{device}/{type}/{incr}
# ...

截至e930cf7:在运行时替换可选占位符:{device} - 设备名称 {type} - 构建类型 {incr} - 增量版本

LineageOS ( >= 15.x)

为了将此集成到基于LineageOS的ROM中,您需要在您的build.prop文件中添加lineage.updater.uri属性。请参阅此示例

# ...
lineage.updater.uri=https://my.ota.uri/api/v1/{device}/{type}/{incr}
# ...

请务必始终提供基于HTTPS的uri,否则更新器将拒绝连接到您的服务器!这是由于Android(至少10+)的新版本包含的安全策略造成的,任何想要使用非安全连接的应用都必须在编译期间明确启用此功能。LineageOS更新器不支持此功能。

https://review.lineageos.org/#/c/191274/合并以来,属性cm.updater.uri已重命名为lineage.updater.uri。请确保更新您的条目。

截至5252d60:在运行时替换可选占位符:{device} - 设备名称 {type} - 构建类型 {incr} - 增量版本

android_packages_apps_CMUpdater

为了将此集成到基于CyanogenModLineageOS的ROM中,您可以在包内修补相关行。

尽管这可行(并且位置可能会从版本更改为版本),但我个人不建议使用这种做法,因为它始终需要通过清单覆盖它,或者维护从官方仓库到您分支的提交。

使用build.prop提供了一种简单且流畅的集成方式,这甚至可以在仅通过本地OTA REST服务器更新的情况下用于完全使用官方仓库的本地构建。例如,通过使用docker-lineage-cicd项目。

变更日志

v?.?.?

  • 添加了针对Web根的模板系统(感谢@toolstack)
  • 添加了配置选项以限制GitHub发布版本的数量/年龄(感谢@toolstack)
  • 修复了GitHub只返回前100个发布版本的问题(感谢@toolstack)
  • 修复了处理包含多个zip文件的GitHub发布版本的问题(感谢@toolstack)
  • 添加了配置选项以禁用构建类型(感谢@toolstack)
  • 添加了配置文件以支持缓存(感谢@toolstack)
  • 添加了本地缓存支持(感谢@toolstack)
  • 修复了重复构建检索(感谢@toolstack)
  • 添加了Github缓存支持(感谢@toolstack)
  • 将Github作为一个源仓库(感谢@ADeadTrousers)
  • 从环境变量接受LINEAGEOTA_BASE_PATH以设置根URL(感谢@CyberShadow)
  • 从build.prop ro.lineage.releasetype读取频道(感谢@tduboys)
  • 修复从备用位置加载prop文件(感谢@bananer)
  • 支持在名称提取中具有下划线的设备名称(感谢@bylaws)
  • 修复在rom名称中查找数字(感谢@erfanoabdi)
  • 修复加载prop文件

v2.9.0

  • 添加PHP 7.4兼容性:在isValid()中防止空数组访问(感谢@McNutnut)
  • 更新正则表达式模式以匹配更多rom,而不仅仅是CM/LineageOS(感谢@toolstack)
  • 使用Forwarded HTTP扩展来确定协议和主机(感谢@TpmKranz)
  • 添加检测HTTP_X_FORWARDED_*头(感谢@ionphractal)

v2.8.0

  • 如果可用,则使用md5sum文件(感谢@jplitza)
  • 如果shell_exec被禁用,则提前终止commandExists(感谢@timschumi)
  • 更新文档以匹配新的uri格式(感谢@twouters)
  • 向JSON添加大小字段(感谢@syphyr)

v2.7.0

v2.6.0

  • 添加对LineageOS非官方构建可能从中获得的新的文件名的支持(例如lineage-14.1-20171024_123000-nightly-hammerhead-signed.zip)(感谢@brianjmurrell)

v2.5.0

v2.4.0

  • 添加对LineageOS中新的id字段的支持(见#32)
  • 在README中提及运行此软件需要PHP ZIP扩展(见#27)

v2.3.1

  • 修复“修复时间戳值。现在它继承自ROM”的问题。读取此值的顺序是在OTA服务器意识到build.prop的内容之前。(感谢@syphyr)

v2.3.0

  • 添加对使用版本字段的最新的LineageOS ROM的支持(见#29)
  • 修复时间戳值。现在它继承自ROM(见#30)

v2.2.0

  • 如果存在,则尊重ro.build.ota.url(感谢@ontherunvaro)
  • 添加对完整构建的递归子目录的支持(感谢@corna)
  • 修复更改日志URL生成(感谢@corna)
  • 添加对HTTPS OTA URL的支持(感谢@corna)
  • 修复README.md中的教程URL(感谢@visi0nary)

v2.1.1

  • 将遗留更新器通道支持扩展到任何 Lineage ROM < 14.1

v2.1.0

  • 在 API 请求中添加对 LineageOS 非官方关键字的支持
  • 放弃 memcached,改用 APCu。无需配置,直接使用即可 :)

v2.0.9

v2.0.8

  • 添加对 LineageOS CMUpdater 的支持(这不应该破坏当前 CM ROM 的支持,如果确实如此,请创建一个问题!)

v2.0.7

  • 将整个项目名称从 CyanogenMod 更改为 LineageOS
  • 添加对 LineageOS 的支持(并继续支持当前的 CyanogenMod ROM,直到它们过渡到 LineageOS)

v2.0.6

  • 仅循环 .ZIP 文件!在之前,甚至 .TXT 文件也被“解析”,这浪费了一些内存。避免这种情况,并使 REST 服务器更友好 :)
  • HTML 更新日志!如果您现在创建一个与您的 ZIP 文件相邻的更新日志文件,并以 HTML 扩展名结尾(例如 lineage-14.0-20161230-NIGHTLY-hammerhead.html),则这将优于 .TXT 版本!否则,将回退到经典的 TXT 扩展名(例如 lineage-14.0-20161230-NIGHTLY-hammerhead.txt

v2.0.5

  • 修复 SNAPSHOT 构建的解析问题

v2.0.4

  • 修复同一目录中 TXT 和 ZIP 文件的问题
  • 自动检测 basePath 的 URL(实际上没有必要再次触摸它)
  • 现在正确返回 Delta 构建数组

v2.0.3

  • 支持 Memcached
  • 支持非官方构建(它们将被设置为通道 = NIGHTLY)
  • 修复 Delta 构建路径
  • 修复内部崩溃,当 /builds/ 完整路径中存在 *.txt 文件时

v2.0.2

  • 修复一些破坏性更改,这将无法使 REST 服务器正确工作。

v2.0.1

  • 排除隐藏文件和由操作系统自动生成的文件(例如 .somethingThumbs.db)。

v2.0

  • 重构整个代码。
  • 现在所有内容都符合 PSR4 规范。
  • 引入 composer.json 以简化项目的安装。

许可协议

LICENSE

祝您玩得开心 :)