在我的RPi 3上执行apt-get upgrade时,会显示很多输出,如下所示:我的问题是:这是什么?

什么是“转移”?被引用的所有这些文件(作为一个组)实际上是做什么的?什么是“ rpikernelhack”?我想我不是唯一对此感到好奇的人,所以我希望这是一个适当的问题!

评论

当然不是唯一一个好奇的人-我也想知道。

我也是。我进行apt-get升级时,他们花了很长时间。

可能没有您想像的那么令人兴奋-我认为这里的“ hack”是在软件包管理系统上,而不是内核上。 debian.org/doc/debian-policy/ap-pkg-diversions.html

这是preinst部分的一个示例:dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img。 @goldilocks的链接清楚地说明了--package。

@qbicdesign我认为这取决于您对“ hack”一词的理解。一种常见的用法是指可能不是一种理想或适当的解决方案,但至少在紧要关头或花费很少的努力才能奏效的事物,因此有人只是明确指出了这一点(该文章开头的内容是不是解决任何问题的方法,但是常见的主题是“不当” =“以某种非预期的方式使用某些东西” =“不一定是错误的,甚至是聪明的”。

#1 楼

“ rpikernelhack”是一个虚假的程序包名称和一个目录名称,它用作hack的一部分(从某种意义上说是肮脏但权宜的解决方案)来解决Raspberry Pi基金会决定使/ boot为fat32分区这一事实dpkg与fat32的配合不佳。我是最初提出这个主意的人,尽管后来被其他人改进了。更新fat32分区上的现有文件将会失败(iirc会尝试通过创建硬链接来备份旧文件,而fat32不支持硬链接)。

当人们(包括我) )开始尝试制作Pi内核和固件的deb软件包,他们遇到了这个问题,一个软件包会最初安装,但是尝试升级它会失败,哎呀。

我的解决方法是(ab)使用dpkg中的“转移”功能。此功能旨在允许文件被转移,以便可以用本地修改的版本或另一个软件包中的版本替换它们,但是我能够从维护者脚本中使用它,使得dpkg可以在Linux分区,然后将文件移到最后的最终位置。

转换要求您指定“包名称”或“本地”。如果指定软件包名称,则转移将影响除指定软件包以外的所有软件包所拥有的文件(此处的目的是允许软件包转移另一个软件包所拥有的文件,然后安装其自己的版本)。我还需要一个目录来将文件转移到。

使用要安装的内核软件包的名称将使黑客无效。使用“本地”也似乎是错误的,因为应该将其保留给本地系统管理员使用。因此,我需要一个假包装名称,该名称不太可能与任何内容冲突。我想出了“ rpikernelhack”,我也使用了相同的字符串作为目录名。

评论


非常感谢您的回答。它对设计和命名决策非常有见地。互联网对我来说是一个神奇的地方,能够得到实际上正在研究此特定作品的那个人的回应。

– MD-7
19 Mar 20 '19在15:51

只是更新我的RPi,并想知道这个奇怪的日志,感谢最终的澄清。

–schlump
19年6月15日在19:12

使dpkg与FAT32配合使用会更加干净。这是我建议的MR:salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs

–user1202136
19-10-5在17:54

精致单词的奇妙用法,就像一场噩梦。他们为什么选择FAT32?

–詹姆斯
5月28日13:22

@James我不太确定,但我想使该分区更广泛地兼容。您可以通过访问启动分区来执行很多设置(例如启用ssh,添加WiFi网络和常规配置设置等)。如果是Linux分区,则Windows用户将很难进行此操作。由于Raspberry Pi打算用作教育工具,因此这可能是制作启动分区FAT32的驱动因素。

– NathanielJS
7月20日15:01

#2 楼

它只是为Linux内核创建了Raspberry Pi特定修补程序集的开发人员提供的目录名称。在2016内核中,此更新到2017内核,无需担心。要进行此内核更新,您需要使用FAT来解决由该错误引起的依赖性问题(根据手册页,sudo apt install -f的含义是: --fix-broken
修复;尝试更正依赖项已损坏的系统。...