875de818
Forked from 龙装大树守卫 / proj235-tree_OTA
23 commits behind the upstream repository.

tree_OTA

介绍

  • tree_OTA项目是基于ostree项目实现的OpenKylin的OTA升级软件
  • ostree负责版本控制与远程传输,传输的内容为系统完整的快照。
  • 用户可以通过本项目拉取远程仓库的快照的所有版本,可以选择任意版本部署。
  • 若新版本操作系统有问题则会自动回到上一个正常运行的版本。

功能

  • 简化用户更新操作,只需点击几个按钮。

  • 从服务器拉取更新(目前服务器地址暂时在本地),再手动确认将更新内容部署到系统上

  • 若版本更新后的操作系统有问题,会自动回滚到上一个正常的操作系统的状态。

安装指南

系统要求

  • 操作系统:OpenKylin1.0
  • Python版本:3.6及以上

安装步骤

1.首先需要安装依赖项目:

ostree

项目地址: https://github.com/ostreedev/ostree 或者手动下载:

更新包列表

sudo apt-get update

下载

sudo apt install ostree

验证:

ostree --version
python3

一般OpenKylin自带python3 ,如果没有可以参照:https://cloud.tencent.com/developer/article/2091285

2.克隆本仓库到本地:

git clone https://gitlab.eduxiji.net/T202410701992664/project2210132-233635.git

这样就安装好了!已经帮你构建好了,不需要再次构建。

3.运行说明

在build-ostree_OTA中点击ostree_OTA,或者直接运行项目根目录下的start.sh

chmod +x start.sh
./start.sh

演示视频:

项目介绍

本项目旨在实现OpenKylin系统的OTA升级,由以下几个部分实现。

1.ostree

本项目通过ostree本身的特性实现远程传输、版本控制、更新包校验和。
地址:https://ostreedev.github.io/ostree/introduction/

2. 快照文件

本项目通过传输、部署由timeshift产生的系统快照文件实现升级。远程仓库管理员可以通过项目的service文件夹里面的脚本来上传自己的操作系统快照文件,或者直接对快照文件进行修改,然后手动上传。
这是创建快照的指令(在service文件夹目录里面输入):

python3 authorize.py
./create_snapshot.sh
./cp.sh
./delete_s.sh

然后这样就可以提交到远程仓库里面了

./commit 版本 描述

这个脚本自动将填写的版本号与描述与上传的操作系统快照提交到远程仓库。

3.远程仓库

ostree自身支持HTTP传输协议,只需要有一个web服务器将其托管到网路上即可让其他客户端的用户访问并拉取。
由于本项目作者们没有可用的服务器,因此此远程仓库只能推送到本地网路127.0.0.1处。(之前在阿里云上配置过一个远程的仓库,但是免费服务器储存空间只允许我们传输txt文件,不过也算是传输成功了)
具体实现的方法是通过apache2将远程仓库推送至127.0.0.1,然后客户端在用户初始化仓库位置的时候会通过脚本自动链接到这个远程仓库。再由用户点击客户端的拉取仓库按钮即可以拉取远程仓库的内容

4.客户端

本项目为了方便用户进行升级以及检视仓库选择任意版本更新,我们采用Qt来构建了一些简单的界面。并使用QT直接调用拉取远程仓库、更新脚本的后端代码。

5.

项目优缺点:

优点:

  • 原子化更新,OSTree确保更新要么完全应用,要么不应用。这意味着系统更新过程中不会出现中间状态,大大降低了更新过程中系统损坏的风险。
  • 保留用户原有数据,可以在快照文件中制定需要保留的文件。
  • 高效的数据传输:OSTree使用类似于Git的数据管理方式,它只传输差异部分,而不是整个文件系统,这样可以显著减少OTA更新的数据量。
  • 由于OSTree的版本控制机制,可以确保在不同的设备上部署的软件版本是完全一致的。
  • 灵活性:OSTree支持客户端自定义更新策略,比如可以选择在什么时间进行更新,以及在更新前进行哪些检查。
  • 管理远程仓库方便

缺点:

  • 用户在初次使用软件初始化需要拉取一个完整的操作系统树,需要时间长。且在部署新的操作系统中需要先签出快照文件,需要的时间很长。
  • 管理员上传更新包需要时间也较长,因为上传的是一个完整的操作系统树。