Buildroot - пакет Github повторно извлекается при каждой сборке - PullRequest
0 голосов
/ 10 января 2019

В настоящее время я пытаюсь интегрировать пакет из github, который реализует MTP-респондент в пользовательском пространстве.

Я использую buildroot 2017.08.

Я создал файлы Config.in и umtprd.mk со следующим содержимым.

Я также исправляю источники, чтобы заменить значения некоторых полей в файле конфигурации, указанном в пакете.


Config.in

$ cat Config.in
config BR2_PACKAGE_UMTPRD
    bool "umtprd"
    help
      umtprd is a deamon, checking USB connection and start MTP communication.

      https://github.com/viveris/uMTP-Responder

if BR2_PACKAGE_UMTPRD
config BR2_PACKAGE_UMTPRD_TAG
    string "git version of umtprd package"
    default "master"
    help
      Must be the name of the branch/tag :
      https://github.com/viveris/uMTP-Responder

endif #BR2_PACKAGE_UMTPRD

umtprd.mk

$ cat umtprd.mk
UMTPRD_VERSION = $(BR2_PACKAGE_UMTPRD_TAG)
UMTPRD_SITE_METHOD = git
UMTPRD_SITE = https://github.com/viveris/uMTP-Responder

define UMTPRD_BUILD_CMDS
    $(MAKE) CFLAGS="-DUSE_SYSLOG" CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D)
endef

define UMTPRD_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/umtprd $(TARGET_DIR)/usr/bin
    $(INSTALL) -D -m 0755 $(@D)/conf/umtprd*.sh $(TARGET_DIR)/usr/bin
    $(INSTALL) -D -m 0755 $(@D)/conf/S98uMTPrd $(TARGET_DIR)/etc/init.d
    mkdir -p $(TARGET_DIR)/etc/umtprd
    $(INSTALL) -D -m 0644 $(@D)/conf/umtprd.conf $(TARGET_DIR)/etc/umtprd/
endef

$(eval $(generic-package))

Patch

$ cat 0001-configuration.patch 
diff -Naur a/conf/umtprd.conf b/conf/umtprd.conf
--- a/conf/umtprd.conf  2018-12-22 14:58:25.000000000 +0100
+++ b/conf/umtprd.conf  2019-01-10 10:31:06.069769073 +0100
@@ -11,8 +11,7 @@
 #storage command : Create add a storage entry point. Up to 16 entry points supported
 #Syntax : storage "PATH" "NAME"

-storage "/"      "root folder"
-storage "/home"  "home folder"
+storage "<path>" "<name>"

 # Set the USB manufacturer string

@@ -20,11 +19,11 @@

 # Set the USB Product string

-product "The Viveris Product !"
+product "<product_string>"

 # Set the USB Serial number string

-serial "01234567"
+serial "<serial>"

 # Set the USB interface string. Should be always "MTP"

Первая сборка

Когда я впервые запускаю make, пакет успешно загружен, извлечен, исправлен, собран и установлен.

$ make
>>> umtprd umtprd-0.9.7 Downloading
[...]
warning: refname 'umtprd-0.9.7' is ambiguous.
WARNING: no hash file for umtprd-umtprd-0.9.7.tar.gz
>>> umtprd umtprd-0.9.7 Extracting
[...]
>>> umtprd umtprd-0.9.7 Patching

Applying 0001-configuration.patch using patch: 
patching file conf/umtprd.conf
>>> umtprd umtprd-0.9.7 Configuring
>>> umtprd umtprd-0.9.7 Building
[...]
>>> umtprd umtprd-0.9.7 Installing to target
[...]
>>>   Finalizing target directory
[...]
>>>   Sanitizing RPATH in target tree
[...]
>>>   Copying overlay <path_to_overlay>
>>>   Executing post-build script <post_build_script>
>>>   Generating root filesystem image rootfs.tar
[...]
>>>   Executing post-image script <post_image_script>

Поздняя сборка

Однако, если я запускаю make снова, не удаляя папку, output/build/umtprd-umtprd-0.9.7 buildroot пытается извлечь и исправить источники снова.

В этом случае патч явно не работает, поэтому процесс компиляции останавливается и изображения не генерируются.

$ make
WARNING: no hash file for umtprd-umtprd-0.9.7.tar.gz
>>> umtprd umtprd-0.9.7 Extracting
[...]
>>> umtprd umtprd-0.9.7 Patching

Applying 0001-configuration.patch using patch: 
Error: duplicate filename '0001-configuration.patch'
Conflicting files are:
  already applied: <path_to_patch>/0001-configuration.patch
  to be applied  : <path_to_patch>/0001-configuration.patch
package/pkg-generic.mk:191 : la recette pour la cible « <path_to_buildroot>/output/build/umtprd-"umtprd-0.9.7"/.stamp_patched » a échouée
make: *** [<path_to_buildroot>/output/build/umtprd-"umtprd-0.9.7"/.stamp_patched] Erreur 1

У меня есть проверка внутри каталога сборки, и все файлы .stamp, кажется, там, поэтому я не понимаю, почему buildroot заново извлекает, повторно исправляет и пересобирает пакет, так как конфигурация и исходные тексты не изменились.

$ ls -la output/build/umtprd-umtprd-0.9.7/.stamp_*
-rw-r--r-- 1 <user> <user> 0 janv. 10 14:58 output/build/umtprd-umtprd-0.9.7/.stamp_built
-rw-r--r-- 1 <user> <user> 0 janv. 10 14:58 output/build/umtprd-umtprd-0.9.7/.stamp_configured
-rw-r--r-- 1 <user> <user> 0 janv. 10 15:05 output/build/umtprd-umtprd-0.9.7/.stamp_downloaded
-rw-r--r-- 1 <user> <user> 0 janv. 10 15:05 output/build/umtprd-umtprd-0.9.7/.stamp_extracted
-rw-r--r-- 1 <user> <user> 0 janv. 10 14:58 output/build/umtprd-umtprd-0.9.7/.stamp_patched
-rw-r--r-- 1 <user> <user> 0 janv. 10 14:58 output/build/umtprd-umtprd-0.9.7/.stamp_target_installed

Проблема может быть решена путем удаления папки сборки output/build/umtprd-umtprd-0.9.7, но мне не нужно было этого делать, поэтому я хотел бы понять, почему buildroot повторно извлекает и повторно исправляет исходные коды.

Что я тут не так сделал?

Ответы [ 3 ]

0 голосов
/ 14 января 2019

Я обнаружил, что при использовании архива тарбола избегайте извлечения и исправления пакета во второй раз.

Надеемся, что теги доступны в виде релизов tarball в этом хранилище github.

Вот .mk, который я использовал для достижения этого

$ cat umtprd.mk
################################################################################
#
# umtprd deamon for Davey Bickford board Base.
#
################################################################################
UMTPRD_SOURCE = $(BR2_PACKAGE_UMTPRD_TAG).tar.gz
UMTPRD_SITE = https://github.com/viveris/uMTP-Responder/archive

define UMTPRD_BUILD_CMDS
    $(MAKE) CFLAGS="-DUSE_SYSLOG" CC="$(TARGET_CC)" LD="$(TARGET_LD)" -C $(@D)
endef

define UMTPRD_INSTALL_TARGET_CMDS
    $(INSTALL) -D -m 0755 $(@D)/umtprd $(TARGET_DIR)/usr/bin
    $(INSTALL) -D -m 0755 $(@D)/conf/umtprd*.sh $(TARGET_DIR)/usr/bin
    $(INSTALL) -D -m 0755 $(@D)/conf/S98uMTPrd $(TARGET_DIR)/etc/init.d
    mkdir -p $(TARGET_DIR)/etc/umtprd
    $(INSTALL) -D -m 0644 $(@D)/conf/umtprd.conf $(TARGET_DIR)/etc/umtprd/
endef

$(eval $(generic-package))

Я думаю, что проблема в соглашениях об именах, так как следующие результаты, кажется, показывают

  • Скачивание из архива ==> РАБОТАЕТ

Имея dl/umtprd-0.9.7.tar.gz и output/build/umtprd

  • Загрузка из тега ==> НЕ РАБОТАЕТ

Имея dl/umtprd-umtprd-0.9.7.tar.gz и output/build/umtprd-umtprd-0.9.7

0 голосов
/ 15 января 2019

Вы должны изменить следующее:

UMTPRD_VERSION = $(call qstrip,$(BR2_PACKAGE_UMTPRD_TAG))

Переменная Kconfig BR2_PACKAGE_UMTPRD_TAG содержит кавычки, ее значение, например, "master" включая кавычки. Для make в кавычках нет ничего особенного. Таким образом, в цепочке зависимостей он будет искать файл штампа output/build/umtprd-"master"/.stamp_extracted. Однако, когда файл штампа создан, он проходит через оболочку, которая удаляет кавычки, поэтому фактический созданный файл - output/build/umtprd-master. Таким образом, make считает, что файл штампа еще не существует.

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

0 голосов
/ 10 января 2019

Вы, похоже, не делаете ничего плохого, но, действительно, Buildroot не должен повторно извлекать и повторно исправлять этот пакет. Таким образом, между вашими двумя вызовами "make" должно произойти что-то, что вызывает это.

Не могли бы вы предоставить полный журнал (без изменений) следующей последовательности команд:

make
ls -la output/build/umtprd-umtprd-0.9.7/.stamp_*
make

Спасибо.

...