草庐IT

linux - 为嵌入式 Linux 设备实现更新/升级系统

coder 2023-04-29 原文

我有一个在嵌入式 Linux 设备上运行的应用程序,并且不时地对软件进行更改,有时还会对根文件系统甚至已安装的内核进行更改。

在当前的更新系统中,旧应用程序目录的内容被简单地删除,新文件被复制到上面。对根文件系统进行更改后,新文件将作为更新的一部分交付,并简单地复制旧文件。

现在,目前的方法存在几个问题,我正在寻找改善这种情况的方法:

  • 用于创建文件系统镜像的目标的根文件系统没有版本控制(我认为我们甚至没有原始的 rootfs)。
  • 手动选择进入更新的 rootfs 文件(而不是 diff)
  • 更新不断增加,变成了一个皮塔饼。现在更新/升级之间存在分歧,升级包含较大的 rootfs 更改。
  • 我的印象是,更新中的一致性检查如果实现的话是相当脆弱的。

要求是:

  • 应用更新包不宜过大,且在修改过的情况下还必须能够更改根文件系统。
  • 升级可以更大,并且只包含进入根文件系统的内容(如新库、内核等)。更新可能需要安装升级。
    升级是否可以包含整个根文件系统,只需在目标的闪存驱动器上执行 dd 吗?
  • 应尽可能自动创建更新/升级包。

我绝对需要一些方法来对根文件系统进行版本控制。这必须以某种方式完成,我可以从中计算出某种 diff 来更新目标设备的 rootfs。

我已经研究过 Subversion,因为我们将 Subversion 用于我们的源代码,但它不适用于 Linux 根文件系统(文件权限、特殊文件等)。

我现在已经创建了一些 shell 脚本,它们可以为我提供类似于 svn diff 的东西,但我真的很想知道是否已经存在一个可行且经过测试的解决方案。

使用这样的 diff 我猜升级会变成一个包含基于已知根文件系统状态的增量更新的包。

您对此有何想法和想法?您将如何实现这样的系统?我更喜欢可以在短时间内实现的简单解决方案。

最佳答案

我相信您对问题的看法是错误的 - 任何非原子更新(例如 dd 文件系统镜像,替换目录中的文件)都会被设计破坏 - 如果在更新过程中断电系统是一 block 砖,对于嵌入式系统,电源可能会在升级过程中断电。

我写了一篇关于如何在嵌入式 Linux 系统上正确进行升级/更新的白皮书 [1]。它在 OLS 上展出。你可以在这里找到论文:https://www.kernel.org/doc/ols/2005/ols2005v1-pages-21-36.pdf

[1] 本-优素福,吉拉德。 “构建与墨菲兼容的嵌入式 Linux 系统。” Linux 研讨会。 2005.

关于linux - 为嵌入式 Linux 设备实现更新/升级系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6937592/

有关linux - 为嵌入式 Linux 设备实现更新/升级系统的更多相关文章

  1. ruby-on-rails - 如何验证 update_all 是否实际在 Rails 中更新 - 2

    给定这段代码defcreate@upgrades=User.update_all(["role=?","upgraded"],:id=>params[:upgrade])redirect_toadmin_upgrades_path,:notice=>"Successfullyupgradeduser."end我如何在该操作中实际验证它们是否已保存或未重定向到适当的页面和消息? 最佳答案 在Rails3中,update_all不返回任何有意义的信息,除了已更新的记录数(这可能取决于您的DBMS是否返回该信息)。http://ar.ru

  2. ruby - 通过 rvm 升级 ruby​​gems 的问题 - 2

    尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub

  3. ruby-on-rails - 项目升级后 Pow 不会更改 ruby​​ 版本 - 2

    我在我的Rails项目中使用Pow和powifygem。现在我尝试升级我的ruby​​版本(从1.9.3到2.0.0,我使用RVM)当我切换ruby​​版本、安装所有gem依赖项时,我通过运行railss并访问localhost:3000确保该应用程序正常运行以前,我通过使用pow访问http://my_app.dev来浏览我的应用程序。升级后,由于错误Bundler::RubyVersionMismatch:YourRubyversionis1.9.3,butyourGemfilespecified2.0.0,此url不起作用我尝试过的:重新创建pow应用程序重启pow服务器更新战俘

  4. ruby - 如何在 Lion 上安装 Xcode 4.6,需要用 RVM 升级 ruby - 2

    我实际上是在尝试使用RVM在我的OSX10.7.5上更新ruby,并在输入以下命令后:rvminstallruby我得到了以下回复:Searchingforbinaryrubies,thismighttakesometime.Checkingrequirementsforosx.Installingrequirementsforosx.Updatingsystem.......Errorrunning'requirements_osx_brew_update_systemruby-2.0.0-p247',pleaseread/Users/username/.rvm/log/138121

  5. ruby-on-rails - 使用 rails 4 设计而不更新用户 - 2

    我将应用程序升级到Rails4,一切正常。我可以登录并转到我的编辑页面。也更新了观点。使用标准View时,用户会更新。但是当我添加例如字段:name时,它​​不会在表单中更新。使用devise3.1.1和gem'protected_attributes'我需要在设备或数据库上运行某种更新命令吗?我也搜索过这个地方,找到了许多不同的解决方案,但没有一个会更新我的用户字段。我没有添加任何自定义字段。 最佳答案 如果您想允许额外的参数,您可以在ApplicationController中使用beforefilter,因为Rails4将参数

  6. ruby - 如何根据特征实现 FactoryGirl 的条件行为 - 2

    我有一个用户工厂。我希望默认情况下确认用户。但是鉴于unconfirmed特征,我不希望它们被确认。虽然我有一个基于实现细节而不是抽象的工作实现,但我想知道如何正确地做到这一点。factory:userdoafter(:create)do|user,evaluator|#unwantedimplementationdetailshereunlessFactoryGirl.factories[:user].defined_traits.map(&:name).include?(:unconfirmed)user.confirm!endendtrait:unconfirmeddoenden

  7. ruby - 在不使用 RVM 的情况下在 Mac 上卸载和升级 Ruby - 2

    我最近决定从我的系统中卸载RVM。在thispage提出的一些论点说服我:实际上,我的决定是,我根本不想担心Ruby的多个版本。我只想使用1.9.2-p290版本而不用担心其他任何事情。但是,当我在我的Mac上运行ruby--version时,它告诉我我的版本是1.8.7。我四处寻找如何简单地从我的Mac上卸载这个Ruby,但奇怪的是我没有找到任何东西。似乎唯一想卸载Ruby的人运行linux,而使用Mac的每个人都推荐RVM。如何从我的Mac上卸载Ruby1.8.7?我想升级到1.9.2-p290版本,并且我希望我的系统上只有一个版本。 最佳答案

  8. 电脑0x0000001A蓝屏错误怎么U盘重装系统教学 - 2

      电脑0x0000001A蓝屏错误怎么U盘重装系统教学分享。有用户电脑开机之后遇到了系统蓝屏的情况。系统蓝屏问题很多时候都是系统bug,只有通过重装系统来进行解决。那么蓝屏问题如何通过U盘重装新系统来解决呢?来看看以下的详细操作方法教学吧。  准备工作:  1、U盘一个(尽量使用8G以上的U盘)。  2、一台正常联网可使用的电脑。  3、ghost或ISO系统镜像文件(Win10系统下载_Win10专业版_windows10正式版下载-系统之家)。  4、在本页面下载U盘启动盘制作工具:系统之家U盘启动工具。  U盘启动盘制作步骤:  注意:制作期间,U盘会被格式化,因此U盘中的重要文件请注

  9. 华为OD机试用Python实现 -【明明的随机数】 2023Q1A - 2

    华为OD机试题本篇题目:明明的随机数题目输入描述输出描述:示例1输入输出说明代码编写思路最近更新的博客华为od2023|什么是华为od,od薪资待遇,od机试题清单华为OD机试真题大全,用Python解华为机试题|机试宝典【华为OD机试】全流程解析+经验分享,题型分享,防作弊指南华为o

  10. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

随机推荐