При выполнении 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»?
Я немного погуглил и не смог найти ничего интересного. Я полагаю, что я не единственный, кому это интересно, поэтому я надеюсь, что это правильный вопрос!
apt-get upgrade
.preinst
части:dpkg-divert --package rpikernelhack --divert /usr/share/rpikernelhack/kernel.img /boot/kernel.img
. Ссылка @goldilocks объясняет--package
ясно.Ответы:
«rpikernelhack» - это поддельное имя пакета и имя каталога, которое используется как часть хака (в смысле грязного, но целесообразного решения проблемы), чтобы обойти тот факт, что фонд Raspberry Pi решил создать / загрузить раздел fat32 и dpkg плохо ладит с fat32. Первоначально я придумал эту идею, хотя позже ее доработали другие.
dpkg установит новые файлы в раздел FAT32 (выпуская некоторые предупреждения по пути), но если он попытается обновить существующий файл в разделе FAT32, это не удастся (IIRC пытается создать резервную копию старого файла, создав жесткую ссылку и fat32 не поддерживает жесткие ссылки).
Когда люди (включая меня) начали пытаться сделать deb-пакеты с ядрами Pi и прошивками, с которыми они столкнулись, эта проблема изначально установилась, но попытка обновить ее не удалась, ой.
Мой обходной путь состоял в том, чтобы (ab) использовать функцию "diversion" в dpkg. Эта функция была предназначена для переадресации файлов, чтобы их можно было заменить либо локально измененными версиями, либо версиями из другого пакета, но я смог использовать его из сценариев сопровождающего таким образом, чтобы dpkg выполнял свои задачи установки на Раздел Linux, а затем переместите файл в его окончательное расположение в конце.
Для переадресации требуется указать «имя пакета» или «локальный». Если вы укажете имя пакета, то переадресация повлияет на файлы, принадлежащие всем пакетам, кроме указанного вами (цель здесь - позволить пакету перенаправить файл, принадлежащий другому пакету, а затем установить свои собственные версии). Мне также нужен был каталог для пересылки файлов.
Использование имени устанавливаемого пакета ядра сделало бы взлом неэффективным. Использование «local» также казалось неправильным, поскольку предполагается, что оно зарезервировано для использования локальным системным администратором. Поэтому мне нужно было поддельное имя пакета, которое вряд ли могло конфликтовать с чем-либо. Я придумал «rpikernelhack», я также использовал эту же строку для имени каталога.
источник
Это просто имя каталога, данное разработчиками, которые создали специальный набор патчей для Raspberry Pi для ядра Linux.
Разработчики Raspbian исправили
FAT
проблему с повреждением файловой системы, присутствующую в ядре 2016 года, это обновление ядра 2017 года и не о чем беспокоиться. Чтобы сделать это обновление ядра, вы должны использовать егоsudo apt install -f
для исправления проблем с зависимостями, вызванных ошибкой (-f
в этом контексте, согласно man-странице, означаетapt-get(8)
:)
источник
FWIW, это произошло снова, когда я сделал обновление обновления на 2019-02-28 на бегущем участке rpi3b +. 182 линии утечки ... rpikernalhack ... из которых вот пример:
Если это поможет, то за час до этого я сделал обновление обновления, и оно произвело (2) несоответствие хэш-суммы. Возможно, это было именно так, как хранилище обновлялось? Я перезагрузил компьютер, подождал час и выполнил второе обновление, не было несовпадений по хэш-сумме, и это также, когда я получил 182 строки утечки ... rpikernalhack.
Полученная версия:
Конечно, когда я говорю «обновить обновление», я имею в виду ...
Я написал это, как неуклюже, в качестве ответа, из-за его продолжительности, надеясь, что он обогатит выбранный ответ, показывая, что такого рода вещи не являются единовременным «исправлением» по сравнению с предыдущим годом.
источник