rpikernelhackとは何ですか?


96

やったときapt-get upgrade、私のRPI 3に、出力の行数は、次のように表示します:

Adding 'diversion of /boot/bcm2708-rpi-b-plus.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b-plus.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-cm.dtb to /usr/share/rpikernelhack/bcm2708-rpi-cm.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2709-rpi-2-b.dtb to /usr/share/rpikernelhack/bcm2709-rpi-2-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2710-rpi-3-b.dtb to /usr/share/rpikernelhack/bcm2710-rpi-3-b.dtb by rpikernelhack'
Adding 'diversion of /boot/kernel.img to /usr/share/rpikernelhack/kernel.img by rpikernelhack'
Adding 'diversion of /boot/kernel7.img to /usr/share/rpikernelhack/kernel7.img by rpikernelhack'
Adding 'diversion of /boot/COPYING.linux to /usr/share/rpikernelhack/COPYING.linux by rpikernelhack'
...
...
...

私はLinuxカーネルの機能についてあまり教育を受けていませんが、これはRPiに特有のものです。

私の質問は、これは何ですか?

「転換」とは何ですか?参照されているこれらすべてのファイル(グループとして)は実際に何をしますか?「rpikernelhack」とは何ですか?

私は少しグーグルをしましたが、面白いものを簡単に見つけることができませんでした。これに興味があるのは私だけではないので、これが適切な質問であることを願っています!


3
確かに好奇心not盛な人だけではありません-私も知りたいです。
ジョアン

私も。私がやっているとき、彼らはかなり長い時間がかかりましたapt-get upgrade
コングチョンホー

2
おそらくあなたが思うほどエキサイティングではありません-ここでの「ハック」はカーネルではなくパッケージ管理システムにあると思います。 debian.org/doc/debian-policy/ap-pkg-diversions.html
goldilocks

このpreinst部分のサンプルを次に示しますdpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img。@goldilocksのリンクは--package明確に説明しています。
PNDA

2
@qbicdesign 「ハック」という言葉の理解にかかっていると思います。ありふれた用途の1つは、おそらく問題に対する理想的または適切な解決策ではないが、少なくともピンチまたは最小限の労力で機能する何かを参照することであるため、誰かが明示的にそれを示しているだけです(その記事の冒頭の「何の解決策でもありませんが、共通のテーマは「不適切」=「意図しない方法で何かを使用する」=「必ずしも間違っているわけではなく、おそらく賢い」です。
goldilocks

回答:


69

「rpikernelhack」は偽のパッケージ名であり、Raspberry Pi財団がfat32パーティションを作成/ブートすることを決定したという事実を回避するために、ハッキングの一部として使用されるディレクトリ名です(問題に対する汚いが適切な解決策の意味で)また、dpkgはfat32ではうまくいきません。最初にこのアイデアを思いついたのは私でしたが、後で他の人によって洗練されました。

dpkgは新しいファイルをfat32パーティションにインストールします(途中でいくつかの警告が表示されます)が、fat32パーティション上の既存のファイルを更新しようとすると失敗します(iircはハードリンクを作成して古いファイルのバックアップを作成しようとします) fat32はハードリンクをサポートしていません)。

私を含む人々がこの問題に遭遇したPiカーネルとファームウェアのdebパッケージを作成しようとすると、パッケージは最初にインストールされましたが、アップグレードしようとしても失敗しました。

私の回避策は、dpkgの「転換」機能を(ab)使用することでした。この機能は、ローカルで変更されたバージョンまたは別のパッケージのバージョンでファイルを置き換えることができるようにファイルを流用できるようにすることを目的としていましたが、dpkgがインストールタスクを実行するようにメンテナースクリプトから使用することができましたLinuxパーティションを作成し、最後にファイルを最終的な場所に移動します。

宛先変更では、「パッケージ名」または「ローカル」を指定する必要があります。パッケージ名を指定すると、迂回は指定したパッケージを除くすべてのパッケージが所有するファイルに影響します(ここでの目的は、パッケージが別のパッケージが所有するファイルを迂回させ、独自のバージョンをインストールすることです)。また、ファイルを転送するディレクトリも必要でした。

インストールされているカーネルパッケージの名前を使用すると、ハックは無効になります。「ローカル」の使用も間違っているように思われます。これは、ローカルsysadminが使用するために予約されているためです。だから、私は何かと競合する可能性が低い偽のパッケージ名が必要でした。「rpikernelhack」を思いつき、ディレクトリ名にも同じ文字列を使用しました。


4
この回答ありがとうございます。設計と命名の決定に関して非常に洞察力がありました。インターネットは、問題のこの特定の部分に実際に取り組んだ男から応答を得ることができた魔法の場所です。
MD-7

RPiを更新するだけで、この奇妙なログについて疑問に思いました。最終的な説明のおかげです。
19:12の

dpkgをFAT32でうまく動作させるのは簡単ではないでしょうか。私が提案するMRは次のとおり
guest

43

これは、LinuxカーネルにRaspberry Pi固有のパッチセットを作成した開発者が指定したディレクトリ名です。

FAT2016年カーネルに存在するファイルシステム破損の問題を修正するためのRaspbian開発者による修正であり、2017年カーネルへの更新であり、心配する必要はありません。このカーネルを更新sudo apt install -fするには、バグによって引き起こされる依存関係の問題を修正するために使用する必要があります(-fこのコンテキストでは、manページによるとapt-get(8)

-f、-fix-broken
修正; 破損した依存関係が存在するシステムを修正しようとします。...


0

FWIW、これはrpi3b +実行ストレッチで2019-02-28に更新アップグレードを行ったときに再び発生しました。182行の迂回... rpikernalhack ...ここにサンプルがあります:

Preparing to unpack .../17-raspberrypi-kernel_1.20190215-1_armhf.deb ...
Adding 'diversion of /boot/bcm2708-rpi-0-w.dtb to /usr/share/rpikernelhack/bcm2708-rpi-0-w.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b-plus.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b-plus.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-b.dtb to /usr/share/rpikernelhack/bcm2708-rpi-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2708-rpi-cm.dtb to /usr/share/rpikernelhack/bcm2708-rpi-cm.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2709-rpi-2-b.dtb to /usr/share/rpikernelhack/bcm2709-rpi-2-b.dtb by rpikernelhack'
Adding 'diversion of /boot/bcm2710-rpi-3-b-plus.dtb to /usr/share/rpikernelhack/bcm2710-rpi-3-b-plus.dtb by rpikernelhack'

...
...

それが役立つ場合は、1時間前にアップデートアップグレードを実行し、(2)ハッシュ合計の不一致を生成しました。おそらく、リポジトリが更新されたのとまったく同じでしたか?リブートし、1時間待って、2回目のアップデートアップグレードを行い、ハッシュサムの不一致はありませんでした。これは、182行の迂回... rpikernalhackを取得したときでもあります。

結果のバージョン:

pi@___:~ $ uname -a
Linux ISS 4.14.79-v7+ #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux
pi@___:~ $

もちろん、「アップグレードの更新」と言うときは...

sudo apt-get update
sudo apt-get upgrade

私はこれを回答として不器用に投稿しましたが、その長さのために、選択した回答を豊かにし、この種のことは前年からの「修正」ではないことを示しています。


1
古いカーネルでアップグレードが終了する理由がわかりません。現在のカーネルは4.14.98-v7 +です。
インゴ

数分前にアップデートアップグレードを実行し、再起動しました。現在のカーネルは次のとおりです:Linux ISS 4.14.98-v7 +#1200 SMP Tue Feb 12 20:27:48 GMT 2019 armv7l GNU / Linuxリポジトリの更新時に最初の更新を行っていました(ハッシュの合計が一致しませんか?)。そして、2番目の更新では、4.14.98-v7 +がまだ利用できなかったか、またはカーネルが更新される前に更新するファイルがまだありましたか?私は知らない。あなたは?それを指摘するためのTY。
always_learning

いいえ、私には考えがありません。リポジトリが更新されたばかりで、一貫性のない状態になっている可能性があります とにかく...
Ingo

私は将来この可能性を認識しなければなりません。
always_learning
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.