Как правильно хранить конфигурацию BitBake в git?

When a process has an effective or real uid being root and tries to access a file...

Для доступа к файловой системе важен только эффективный UID, а не настоящий UID. Процесс, имеющий привилегированный UID, может перетасовать реальный и эффективный UID, чтобы временно отказаться от привилегий.

# perl -MEnglish -e '$EUID = 65534; system "id"; system "cat /etc/shadow"'
uid=0(root) gid=0(root) euid=65534(nobody) groups=0(root)
cat: /etc/shadow: Permission denied

Но кроме этого, вы правы, наличие привилегий позволяет получать доступ к файлам независимо от битов разрешения. (Помимо того факта, что выполнение файла не работает, если в нем не установлен хотя бы один xбит, но на самом деле это не более чем удобство. Если у вас есть привилегии, вы обычно можете просто скопировать файл и запустить его или сначала изменить разрешения.)

См., например,. заключительная часть справочной страницы Linux path_resolution(7)(«Обход проверок разрешений :суперпользователь и возможности» )или текст в POSIX(«4.5 Разрешения на доступ к файлам» ).

Как и в последних подсказках, и в первых утверждениях, фактическая проверка на привилегированность может быть не только UID. В Linux это на самом деле возможностьCAP_DAC_OVERRIDE(или CAP_DAC_READ_SEARCHв меньшей степени ). Я не знаю деталей других систем.

1
28.12.2020, 18:51
1 ответ

Вот то, что я считаю наиболее эффективным:

  • Создайте новый пустой репозиторий git, например. my-yoctoна диске со свободным пространством не менее 50 ГБ.
  • Добавить poky в качестве подмодуля git из my-yocto.
git submodule add git://git.yoctoproject.org/poky.git
  • Из my-yoctoroot запустите:
source poky/oe-init-build-env.

Обратите внимание на "." в этой команде; инициализация среды сборки в my-yoctoвместо pokyпредотвращает накопление GB временных файлов Yocto в poky.

  • Сценарий создаст каталог confв my-yoctoс некоторыми файлами в нем; git -добавьте conf/local.confи conf/bblayers.confв свой репозиторий.
  • По умолчанию yocto устанавливает bblayers.confс использованием абсолютных путей, что означает, что репозиторий, настроенный Алисой, не будет работать на машине Боба. Исправьте это, изменив bblayers.confс помощью переменной Yocto ${TOPDIR}:
  • .
(...)
BBLAYERS ?= " \
  ${TOPDIR}/poky/meta \
  ${TOPDIR}/poky/meta-poky \
  ${TOPDIR}/poky/meta-yocto-bsp \
(...)
  • Измените local.confна поддерживаемую платформу, напримерMACHINE=beaglebone-yocto

  • Из my-yoctoзапустите bitbake core-image-minimal. Убедитесь, что ваш компьютер хорошо -проветривается, и отправляйтесь на прогулку.

Если это работает, вы можете создать остальную часть своей конфигурации, добавив мета -openembedded и т. д. в качестве подмодулей. Я рекомендую, чтобы любые пользовательские слои отличались от репозиториев git из my-yocto, чтобы my-yoctoсодержал только детали подмодуля git и конфигурацию bitbake.

Чтобы выполнить обновление перед сборкой, запустите:

git pull
git submodule update --remote --recursive

Другим пользователям потребуется запустить git submodule initодин раз после клонирования my-yocto.

Две другие рекомендации:

Во-первых, если вы выполняете сборку для более чем одной машины, создайте файл local.conf для каждой машины и создайте символическую ссылку из local.conf на файл конфигурации -конкретной машины. Это позволяет отслеживать несколько машин в my-yocto.

Во-вторых, создайте временный каталог для каждой ветки yocto (, например. tmp-zeus, tmp-dunfell, tmp-gatesgarth), а затем создайте символическую ссылку из tmpна любую ветку, которую вы создаете. (Не добавляйте их в git.)Yocto накапливает огромное количество данных в каталоге tmpи требует очистки tmpпри переключении веток. Это нормально, если вы переходите на более новую версию, но если вы переключаетесь между ветками туда и обратно, потеря всех этих кэшированных данных будет обломом.

3
18.03.2021, 22:40

Теги

Похожие вопросы