Могу ли я создать символические ссылки из рецепта Yocto для файла, который еще не существует - PullRequest
2 голосов
/ 18 июня 2019

Я использую Yocto Pyro и пытаюсь создать рецепт, который создает символическую ссылку на область, которая будет установлена ​​во время выполнения. Мы монтируем наше вторичное хранилище в / var / local в fstab. Я хотел бы сохранить настройки сети там, так как rootFS стирается при обновлении прошивки наших устройств.

Это рецепт, над которым я работаю.

DESCRIPTION = "Create links to the persistent storage area for the network files."
PRIORITY = "optional"
LICENSE = "CLOSED"

FILES_${PN} += "/etc /etc/systemd/network"

S = "${WORKDIR}"

do_install() {
    ln -frs /var/local/network/hostname ${D}/hostname
    ln -frs /var/local/network/eth0.network ${D}/etc/systemd/network/eth0.network
#   ln -frs /var/local/network/sysctl.conf ${D}/etc/sysctl.conf
#   ln -frs /var/local/network/iptables-config ${D}/etc/sysconfig/iptables-config
}

Ошибка, которую я получаю, заключается в том, что не удается создать символическую ссылку.

| ln: failed to create symbolic link '/home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/armv7ahf-neon-poky-linux-gnueabi/network-links/1.0-r0/image/etc/systemd/network/eth0.network': No such file or directory
| WARNING: exit code 1 from a shell command.
| ERROR: Function failed: do_install (log file is located at /home/gen-ccm-root/workdir/tools/poky/build-dev/tmp/work/armv7ahf-neon-poky-linux-gnueabi/network-links/1.0-r0/temp/log.do_install.118559)
ERROR: Task (/home/gen-ccm-root/workdir/tools/poky/meta-markem-imaje-private-bsp/recipes-core/network-links/network-links_1.0.bb:do_install) failed with exit code '1'
NOTE: Tasks Summary: Attempted 2805 tasks of which 2796 didn't need to be rerun and 1 failed.

Summary: 1 task failed:
  /home/gen-ccm-root/workdir/tools/poky/meta-markem-imaje-private-bsp/recipes-core/network-links/network-links_1.0.bb:do_install

Есть ли способ сделать ссылки? Или мне нужно использовать другой подход: читать файлы при загрузке и копировать их или что-то в этом роде? Я верю, что команда безопасности в конечном итоге захочет сделать корневую файловую систему доступной только для чтения, поэтому ссылки предпочтительнее, чем модификация RootFS при запуске.

Ответы [ 2 ]

0 голосов
/ 19 июня 2019

Что мы делаем, это создаем функцию postinstall в файле .inc в нашей папке с изображениями.

ROOTFS_POSTPROCESS_COMMAND += " symlinkfunction "

symlinkfunction() {
ln -s /path/on/target "${IMAGE_ROOTFS}/path/in/rootfs"
}

Используйте файл .inc в любом файле изображения, который создает вашу цель, и он обновит целевую корневую файловую систему новой символической ссылкой.

0 голосов
/ 19 июня 2019

Возможно, вы захотите сделать это путем расширения рецепта базовых файлов с помощью bbappend

базовых файлов _%. Bbappend

do_install_append() {

...

}
...