Ошибка транзакции Yocto Initramfs при добавлении пакета cryptsetup
Я использую Yocto Warrior в Ubuntu 18.04 LTS и на уровне метатегры ( https://github.com/madisongh/meta-tegra) для создания корневой файловой системы для моего NVIDIA Jetson Nano.
Я хочу зашифровать определенный раздел на моей SD-карте, поэтому мне нужен пакет cryptsetup, который доступен на уровне openembedded. Я уже добавил его в свой образ, и полученная корневая файловая система установила его.
Проблема в том, что мне нужно добавить его в мои initramfs, чтобы автоматически расшифровать мой зашифрованный том при загрузке.
Я получаю сообщение об ошибке:
Transaction Summary
================================================================================
Install 50 Packages
Total size: 13 M
Installed size: 52 M
Downloading Packages:
Running transaction check
Transaction check succeeded.
Running transaction test
Error: Transaction check error:
file /proc conflicts between attempted installs of tegra-minimal-init-1.0-r0.aarch64 and base-files-3.0.14-r89.jetson_nano
file /sys conflicts between attempted installs of tegra-minimal-init-1.0-r0.aarch64 and base-files-3.0.14-r89.jetson_nano
Error Summary
-------------
Я добавляю cryptsetup в свой файл bbappend для рецепта initramfs следующим образом (показан весь файл bbappend):
PACKAGE_INSTALL_append = " e2fsprogs-e2fsck e2fsprogs-mke2fs e2fsprogs-tune2fs e2fsprogs-badblocks"
PACKAGE_INSTALL_append = " i2c-tools"
PACKAGE_INSTALL_append = " openssl"
PACKAGE_INSTALL_append = " cryptsetup"
Если я закомментирую строку cryptsetup, задача initramfs завершится нормально.
Вот исходный файл рецептов для initramfs от meta-tegra:
DESCRIPTION = "Minimal initramfs image for Tegra platforms"
LICENSE = "MIT"
TEGRA_INITRD_INSTALL ??= ""
INITRD_FSTYPES ??= "${INITRAMFS_FSTYPES}"
PACKAGE_INSTALL = "\
tegra-firmware-xusb \
tegra-minimal-init \
${TEGRA_INITRD_INSTALL} \
"
IMAGE_FEATURES = ""
IMAGE_LINGUAS = ""
COPY_LIC_MANIFEST = "0"
COPY_LIC_DIRS = "0"
COMPATIBLE_MACHINE = "(tegra)"
KERNELDEPMODDEPEND = ""
IMAGE_ROOTFS_SIZE = "8192"
#IMAGE_ROOTFS_SIZE = "16384"
inherit core-image
IMAGE_FSTYPES = "${INITRD_FSTYPES}"
Как я могу успешно добавить cryptsetup в рецепт initramfs? Спасибо.
1 ответ
У меня было такое же точное сообщение об ошибке, за исключением того, что оно было вызвано другим рецептом (не cryptsetup, а некоторым индивидуальным рецептом).
Проблема в том, что оба рецепта (tegra-minimal-init_1.0.bb) и base-files_3.0.14.bb пытаются создать каталоги '/sys и'/proc', но с разными разрешениями (один с 0755, другой с 0555).
Решением было просто удалить создание каталога в tegra-minimal-init_1.0.bb:
[eliranl@somehost]$ git diff
diff --git a/meta-tegra/recipes-core/initrdscripts/tegra-minimal-init_1.0.bb b/meta-tegra/recipes-core/initrdscripts/tegra-minimal-init_1.0.bb
index ac16ff1..e7021bb 100644
--- a/meta-tegra/recipes-core/initrdscripts/tegra-minimal-init_1.0.bb
+++ b/meta-tegra/recipes-core/initrdscripts/tegra-minimal-init_1.0.bb
@@ -12,7 +12,7 @@ S = "${WORKDIR}"
do_install() {
install -m 0755 ${WORKDIR}/init-boot.sh ${D}/init
- install -d ${D}/proc ${D}/sys ${D}/dev ${D}/tmp ${D}/mnt ${D}/run ${D}/usr
+ install -d ${D}/dev ${D}/tmp ${D}/mnt ${D}/run ${D}/usr
mknod -m 622 ${D}/dev/console c 5 1
install -d ${D}${sysconfdir}
if [ -e ${WORKDIR}/platform-preboot-cboot.sh ]; then
В качестве альтернативы вы можете перейти на 'dunfell', поскольку он был там исправлен, изменив tegra-minimal-init_1.0.bb на создание '/ proc' и '/sys' с теми же разрешениями, что и в базовых файлах, или просто скопируйте это часть из конкретного коммита:
- install -d ${D}/proc ${D}/sys ${D}/dev ${D}/tmp ${D}/mnt ${D}/run ${D}/usr
+ install -m 0555 -d ${D}/proc ${D}/sys
+ install -m 0755 -d ${D}/dev ${D}/mnt ${D}/run ${D}/usr
+ install -m 1777 -d ${D}/tmp