Ошибка разрешения во время do_package с EXTERNALSRC + символической ссылкой на фактические источники [закрыто]Linux

Ответить
Anonymous
 Ошибка разрешения во время do_package с EXTERNALSRC + символической ссылкой на фактические источники [закрыто]

Сообщение Anonymous »

Я начну с (упрощенного) рецепта, который использую сам:

Код: Выделить всё

inherit cmake externalsrc

#Defines the default configuration to use.
#May be overwritten by other scripts as well as by command line.
#Please note that the sources to be used to actually build the appl have already been checked out.
#This folder is part of the build tree.
applPreset  ?= 'ARM-Yocto-release'
applFlavor  ?= 'V3'

DEPENDS += " \
swupdate \
zlib \
"
EXTERNALSRC          = "${TOPDIR}/applSourceDir"
EXTERNALSRC_BUILD    = "${WORKDIR}/appl/${applPreset}"
vardepsexclude      += "EXTERNALSRC EXTERNALSRC_BUILD"

FILES:${PN}         += "usr"

#Prevents the 'already-stripped' QA error for the appl.
INSANE_SKIP:${PN}   += "already-stripped"

#Replaces cmake_do_configure and performs a preset-based cmake configure.
cmake_do_configure() {
bbnote "Configuring preset ${applPreset} (${applFlavor})"
cmake --preset ${applPreset} -DBUILD_FLAVOR=${applFlavor} -DUSE_ENV_CC=TRUE -B "${B}" ${S}
}

cmake_do_compile() {
bbnote "Building ${applPreset} (${applFlavor})"
cd ${S}
cmake --build "${B}" --target clean || exit 1
cmake --build "${B}" || exit 1
}

do_install() {
cmake --install "${B}" --prefix "${D}" || exit 1
}
И вот какую ошибку мне выдает Bitbake:

Код: Выделить всё

The stack trace of python calls that resulted in this exception/failure was:
File: 'exec_func_python() autogenerated', lineno: 2, function: 
0001:
*** 0002:do_package(d)
0003:
File: '/home/user/testBuild/Bedienteil/Yocto/layers/poky/meta/classes-global/package.bbclass', lineno: 538, function: do_package
0534:    bb.build.exec_func("perform_packagecopy", d)
0535:    for f in (d.getVar('PACKAGE_PREPROCESS_FUNCS') or '').split():
0536:        bb.build.exec_func(f, d)
0537:    oe.package.process_split_and_strip_files(d)
*** 0538:    oe.package.fixup_perms(d)
0539:
0540:    ###########################################################################
0541:    # Split up PKGD into PKGDEST
0542:    ###########################################################################
File: '/home/user/testBuild/Bedienteil/Yocto/layers/poky/meta/lib/oe/package.py', lineno: 534, function: fixup_perms
0530:        origin = dvar + dir
0531:        if not (cpath.exists(origin) and cpath.isdir(origin)):
0532:            continue
0533:
*** 0534:        fix_perms(origin, fs_perms_table[dir].mode, fs_perms_table[dir].uid, fs_perms_table[dir].gid, dir)
0535:
0536:        if fs_perms_table[dir].walk == 'true':
0537:            for root, dirs, files in os.walk(origin):
0538:                for dr in dirs:
File: '/home/user/testBuild/Bedienteil/Yocto/layers/poky/meta/lib/oe/package.py', lineno: 421, function: fix_perms
0417:        # -1 is a special value that means don't change the uid/gid
0418:        # if they are BOTH -1, don't bother to lchown
0419:        if not (uid == -1 and gid == -1):
0420:            #bb.note("Fixup Perms: lchown %d:%d %s"  % (uid, gid, dir))
*** 0421:            os.lchown(path, uid, gid)
0422:
0423:    # Return a list of configuration files based on either the default
0424:    # files/fs-perms.txt or the contents of FILESYSTEM_PERMS_TABLES
0425:    # paths are resolved via BBPATH
Exception: PermissionError: [Errno 1] Operation not permitted: '/home/user/testBuild/build/ARM/yocto-release/yoctoBuild/dev/tmp/work/armv5e-poky-linux-musleabi/appl/1.0/package/usr'

Attempting to set perms of /home/user/testBuild/build/ARM/yocto-release/yoctoBuild/dev/tmp/work/armv5e-poky-linux-musleabi/appl/1.0/package/usr to mode 493, 0:0
DEBUG: Python function do_package finished
Видимо, bitbake пытается установить права устанавливаемых файлов на 0755 и уровень доступа root, что в Linux по каким-то причинам просто не разрешено.
Предположительно, существует процесс под названием «pseudo», который обходит это ограничение, однако, очевидно, здесь этот процесс не работает.
Сводная структура выглядит так:
  • Папка, содержащая CMakeLists.txt

    build

    Папка сборки Yocto
[*]Bedienteil
  • Рецепты Yocto



Поскольку Yocto, похоже, очень не нравится, когда каталог сборки является дочерней папкой исходной папки (по какой-то причине cmake прекрасно с этим справляется), я решил его «обхитрить».
CMake (который записывает файлы конфигурации и запускает Bitbake) создает символическую ссылку на корневую папку внутри папки сборки, по сути создавая бесконечную рекурсию.
Это сработало хорошо достаточно, рецепт имел «исходники для сборки», доступные в папке, расположенной в его рабочем каталоге (очень похоже на то, что делал SRC_URI), EXTERNALSRC создавал свои хэши и т. д.
Но затем появилась ошибка, указанная выше, и я понятия не имею, как ее исправить.

Подробнее здесь: https://stackoverflow.com/questions/798 ... al-sources
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Linux»