rpikernelhack은 무엇입니까?


96

apt-get upgrade내 RPi 3에서 on을 수행하면 많은 출력 줄이 다음과 같이 나타납니다.

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'
...
...
...

나는 리눅스 커널 기능에 대해 잘 교육받지 못했고 이것은 RPi에 매우 구체적으로 보입니다.

내 질문은 :이게 다 뭐야?

'전환'이란 무엇입니까? 참조되는 모든 파일 (그룹)은 실제로 무엇을합니까? 'rpikernelhack'이란 무엇입니까?

나는 약간의 인터넷 검색을했고 재미있는 것을 쉽게 찾을 수 없었습니다. 나는 이것에 대해 궁금한 유일한 사람이 아니라고 생각하므로 이것이 적절한 질문이기를 바랍니다!


3
확실히 궁금한 유일한 사람은 아닙니다. 저도 알고 싶습니다.
joan

나도. 내가 할 때 그들은 꽤 오랜 시간이 걸렸습니다 apt-get upgrade.
Kong Chun Ho

2
아마 당신이 생각하는 것만 큼 흥미롭지는 않을 것입니다. 여기서 "핵"은 커널이 아닌 패키지 관리 시스템에 있다고 생각합니다. 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명확하게 설명되어 있습니다.
PNDA

2
@qbicdesign "hack" 이라는 단어에 대한 이해에 달려 있다고 생각합니다 . 일반적으로 사용되는 문제 중 하나는 문제에 대한 이상적이거나 적절한 해결책은 아니지만 최소한 한 번의 노력으로 또는 최소한의 노력으로 작동하는 무언가를 언급하는 것입니다. 어떤 해결책도 없지만, 일반적인 주제는 "부적절하다"= "의도하지 않은 방식으로 무언가를 사용하는 것"= "반드시 틀린 것은 아니며 영리한 것"입니다.
goldilocks

답변:


67

"rpikernelhack"은 Raspberry Pi 재단이 / boot를 fat32 파티션으로 만들기로 결정했다는 사실을 해결하기 위해 가짜 패키지 이름 및 해킹의 일부로 사용되는 디렉토리 이름입니다 (문제에 대한 더럽지 만 편리한 해결책이라는 의미에서). dpkg는 fat32와 잘 어울리지 않습니다. 나는 다른 사람들에 의해 나중에 다듬어졌지만 처음에 아이디어를 생각 해낸 사람이었습니다.

dpkg는 fat32 파티션에 새 파일을 설치하지만 (경고에 따라 경고가 표시됨) fat32 파티션의 기존 파일을 업데이트하려고하면 실패합니다 (iirc 하드 링크를 만들어 이전 파일의 백업을 시도합니다) fat32는 하드 링크를 지원하지 않습니다).

저를 포함한 사람들이 Pi 커널과 펌웨어의 deb 패키지를 만들려고 시도했을 때, 그들은이 문제에 부딪 쳤습니다. 패키지는 처음에는 설치되었지만 업그레이드를 시도하면 실패했습니다.

내 해결 방법은 dpkg의 "전환"기능을 사용하는 것입니다. 이 기능은 파일을 우회하여 다른 패키지의 로컬로 수정 된 버전이나 버전으로 대체 할 수 있도록했지만 dpkg가 설치 작업을 수행하는 방식으로 관리자 스크립트에서 파일을 사용할 수있었습니다. Linux 파티션을 만든 다음 마지막에 파일을 최종 위치로 옮깁니다.

전환하려면 "패키지 이름"또는 "로컬"을 지정해야합니다. 패키지 이름을 지정하면 전환은 지정한 것을 제외한 모든 패키지가 소유 한 파일에 영향을 미칩니다 (여기서는 패키지가 다른 패키지가 소유 한 파일을 전환 한 다음 자체 버전을 설치하도록하는 것입니다). 또한 파일을 전환 할 디렉토리가 필요했습니다.

설치중인 커널 패키지 이름을 사용하면 해킹이 효과가 없게됩니다. "local"을 사용하는 것도 로컬 시스템 관리자가 사용하도록 예약되어 있기 때문에 잘못된 것 같습니다. 그래서 나는 어떤 것과도 충돌하지 않을 가짜 패키지 이름이 필요했습니다. 나는 "rpikernelhack"을 생각 해냈고 디렉토리 이름에도 같은 문자열을 사용했습니다.


4
이 답변에 감사드립니다. 디자인과 이름 결정에 대한 통찰력이있었습니다. 인터넷은 제가이 특정 부분을 실제로 작업 한 사람으로부터 응답을받을 수있는 마법의 장소입니다.
MD-7

내 RPi를 업데이트하고 궁극적 인 설명 덕분에이 이상한 로그에 대해 궁금했습니다.
schlump

dpkg를 FAT32로 멋지게 플레이하는 것이 더 깨끗하지 않습니까? 다음은 제가 제안하는 MR입니다. salsa.debian.org/cklein-guest/dpkg/merge_requests/1/diffs
user1202136

43

Linux 커널에 대한 Raspberry Pi 관련 패치 세트를 만든 개발자가 제공 한 디렉토리 이름 일뿐입니다.

Raspbian 개발자 FAT는 2016 커널에 존재 하는 파일 시스템 손상 문제 를 해결하기위한 픽스이며 , 이는 2017 커널로 업데이트되며 걱정할 필요가 없습니다. 이 커널 업데이트를 수행하려면 sudo apt install -f버그로 인한 종속성 문제를 해결하는 데 사용해야 합니다 ( -f이 컨텍스트에서는 man 페이지에 따라 다음을 의미 함) apt-get(8).

-f, --fix-broken
Fix; 종속성이 손상된 시스템을 수정하십시오. ...

)


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) 해시 합계 불일치가 발생했습니다. 아마도 리포지토리가 업데이트되고 있었을까요? 나는 재부팅하고 한 시간을 기다렸다가 두 번째 업데이트 업그레이드를 수행했으며 해시 합계 불일치가 없었으며 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 + 입니다.
Ingo

몇 분 전에 업데이트 업그레이드를 수행하고 재부팅했습니다. 커널은 이제 다음과 같습니다 .Linux ISS 4.14.98-v7 + # 1200 SMP 화요일 2 월 12 일 20:27:48 GMT 2019 armv7l GNU / Linux이 게시물에 언급 된 것 외에는 이에 대한 설명이 없습니다. 리포지토리 업데이트 당시 첫 번째 업데이트를 수행했기 때문에 해시 합계가 일치하지 않습니까? 그리고 두 번째 업데이트는 아직 4.14.98-v7 +를 사용할 수 없거나, 커널을 업데이트하기 전에 업데이트 할 파일이 더 있습니까? 나도 몰라. 당신 은요? 그것을 지적하는 TY.
always_learning

아니요, 아이디어가 없습니다. 저장소가 방금 업데이트되어 일관성이없는 상태입니까? 어쨌든 ...
잉고

앞으로이 가능성을 알고있을 것입니다.
always_learning
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.