Пакет Build root generi c не устанавливается в каталог init.d - PullRequest
0 голосов
/ 28 февраля 2020

Я пытаюсь создать встроенный Linux образ для встроенной системы, над которой я работаю.
Он использует Build root, и мы пытаемся установить в него пакеты generi c.
Это работает до того момента, когда я устанавливаю скрипт в каталог / etc / init.d / на целевом образе.

Чтобы встроить свое программное обеспечение в образ, я создал следующий make-файл, который был собран Build root.
. Он предназначен для копирования файла JAR в файловую систему с некоторыми дополнительными сценариями.
Я обнаружил, что сценарии, начинающиеся с буквы S, запускаются автоматически.
См .: https://buildroot.org/downloads/manual/manual.html#_init_system

define MY_GATEWAY_INSTALL_TARGET_CMDS

  $(INSTALL) -d $(TARGET_DIR)/$(DST_FOLDER); \
  $(INSTALL) -D -m 0644 $(@D)/*.jar $(TARGET_DIR)/$(DST_FOLDER); \
  \
  $(INSTALL) -D -m 0700 /work/package/mycompany/my-gateway/artifacts/start_heimdall $(TARGET_DIR)/$(DST_FOLDER); \
  ln -snrf $(TARGET_DIR)/$(DST_FOLDER)/start_heimdall $(TARGET_DIR)/usr/bin/start_heimdall; \
  \
  $(INSTALL) -D -m 0755 /work/package/mycompany/my-gateway/artifacts/S99gateway $(TARGET_DIR)/$(DST_FOLDER); \
  $(INSTALL) -D -m 0755 /work/package/mycompany/my-gateway/artifacts/S99gateway $(TARGET_DIR)/etc/init.d/S99gateway; \
  \
  if [[ "$(BR2_HSDP_GATEWAY_INCLUDE_VERSION_FILE)" == "y" ]]; then \
      echo $(HEIMDALL_VERSION) > $(TARGET_DIR)/my_gw_version; \
  fi

endef

После создания моего изображения я обнаружил, что файл JAR и скрипт start_heimdall правильно размещены в ожидаемом каталог.
Это не относится к сценарию S99gateway , который отсутствует в каталоге /etc/init.d/.
Поэтому мое приложение не запущено.

Целевой каталог встроенного изображения выглядит следующим образом:

ls -al $(TARGET)/usr/heimdall
total 19476
drwxr-xr-x 2 rick rick     4096 feb 28 08:43 .
drwxr-xr-x 8 rick rick     4096 feb 28 08:43 ..
-rw-r--r-- 1 rick rick 19924893 feb 28 08:40 heimdall-squidlink-1.0.0-1582809178-release.jar
-rwxr-xr-x 1 rick rick      362 feb 28 08:40 S99gateway
-rwx------ 1 rick rick      230 feb 28 08:40 start_heimdall

ls -al /etc/init.d
total 68
drwxr-xr-x  2 rick rick 4096 feb 28 08:43 .
drwxr-xr-x 14 rick rick 4096 feb 28 08:43 ..
-rwxr-xr-x  1 rick rick  423 dec  4 14:50 rcK
-rwxr-xr-x  1 rick rick  408 dec  4 14:50 rcS
-rwxr-x---  1 rick rick 1295 aug 13  2014 S01logging
-rwxr-xr-x  1 rick rick  241 feb 28 08:19 S10mdev
-rwxr-x---  1 rick rick 1708 nov  4  2016 S10modules
-rwxr-x---  1 rick rick  396 mei 30  2016 S11led
-rwxr-x---  1 rick rick  968 mrt 17  2015 S12automount
-rwxr-x---  1 rick rick  397 apr 27  2015 S15hostname
-rwxr-xr-x  1 rick rick 1365 dec  4 14:50 S20urandom
-rwxr-x---  1 rick rick   48 apr 22  2015 S40network
-rwxr-xr-x  1 rick rick  936 feb 28 08:40 S49ntp
-rwxr-xr-x  1 rick rick 4066 feb 28 08:31 S50dropbear
-rwxr-xr-x  1 rick rick  435 feb 28 08:41 S50stunnel
-rwxr-xr-x  1 rick rick  462 feb 28 08:31 S80dnsmasq
-rwxr-xr-x  1 rick rick  362 feb 28 08:40 S99gateway

Последняя строка показывает, что мой скрипт успешно скопирован в нужный каталог.
Когда я запускаю sh изображение на мое встроенное устройство и S SH в него, я вижу следующее:

ls -al /usr/heimdall
total 19468
drwxr-xr-x    2 root     root           408 Feb 28  2020 .
drwxr-xr-x    8 root     root           616 Feb 28  2020 ..
-rwxr-xr-x    1 root     root           362 Feb 28  2020 S99gateway
-rw-r--r--    1 root     root      19924893 Feb 28  2020 heimdall-squidlink-1.0.0-1582809178-release.jar
-rwx------    1 root     root           230 Feb 28  2020 start_heimdall

ls -al /etc/init.d
total 56
drwxr-xr-x    2 root     root          1128 Jan 17 22:12 .
drwx--x--x   14 root     root          3088 Jan 17 22:12 ..
-rwxr-x---    1 root     root          1295 Aug 13  2014 S01logging
-rwxr-xr-x    1 root     root           241 Feb  7  2020 S10mdev
-rwxr-x---    1 root     root          1708 Nov  4  2016 S10modules
-rwxr-x---    1 root     root           396 May 30  2016 S11led
-rwxr-x---    1 root     root           968 Mar 17  2015 S12automount
-rwxr-x---    1 root     root           397 Apr 27  2015 S15hostname
-rwxrwxr-x    1 root     root          1365 Dec  4  2019 S20urandom
-rwxr-x---    1 root     root            48 Apr 22  2015 S40network
-rwxr-xr-x    1 root     root           936 Jan 17 22:12 S49ntp
-rwxr-xr-x    1 root     root          4066 Feb  7  2020 S50dropbear
-rwxr-xr-x    1 root     root           435 Feb  7  2020 S50stunnel
-rwxr-xr-x    1 root     root           462 Feb  7  2020 S80dnsmasq
-rwxrwxr-x    1 root     root           423 Dec  4  2019 rcK
-rwxrwxr-x    1 root     root           408 Dec  4  2019 rcS

В этом случае после перепрошивки сценарий S99 больше не существует.
Является ли / etc /init.d/ каталог защищен каким-то образом? Я пытаюсь понять, почему скрипта больше нет.
Важна ли правильность внутренней работы скрипта для процесса установки?

1 Ответ

0 голосов
/ 28 февраля 2020

В /etc/init.d/ нет ничего особенного. Однако мы не можем по-настоящему понять, что здесь произошло: какая у вас DST_FOLDER переменная?

Если ваш скрипт S99 находится в output/target, то он обязательно должен быть частью окончательного образа файловой системы. Вы уверены, что вы запустили make для регенерации образа файловой системы и правильно обновили его?

В общем, то, что вы написали, имеет ряд проблем:

  • Вы не т нужно; или \ в конце каждой строки
  • Сценарий инициализации лучше устанавливать в переменную _INIT_SYSV, а не в переменную _INSTALL_TARGET_CMDS, даже если это не ваша проблема
  • Проверка BR2_HSDP_GATEWAY_INCLUDE_VERSION_FILE должна быть сделано с использованием условия make, а не условия оболочки
  • Непонятно, почему вы устанавливаете каждый файл несколько раз.
...