Рейтинг:1

Преобразование пакетов RPM для debian завершается ошибкой "из-за метасимволов оболочки"

флаг in

Я пытаюсь преобразовать пакеты RPM «MegaRAID Storage Manager» в пакеты debian dep. Для этого я использую пакет пришельцев, как описано здесь:

https://hosting-tutorials.co.uk/tutorials/linux/installing-megaraid-storage-manager-on-debian

Это пакет, который я пытаюсь преобразовать: https://docs.broadcom.com/docs-and-downloads/17.05.06.00_MSM_Linux-x64.zip

Пакет «lib-utils2_1.00-12_all» отлично конвертируется в .deb, а «MegaRAID_Storage_Manager-17.05.06-00.noarch.rpm» — нет:

# пришелец --скрипты *.rpm
Создан lib-utils2_1.00-12_all.deb

Ошибка сборки пакета. Вот журнал:
двоичный файл dh
   dh_update_autotools_config
   dh_autoreconf
   штамп создания debian/debhelper-build-stamp
   dh_testroot
   dh_prep
   debian/rules override_dh_auto_install
make[1]: Вход в каталог '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
mkdir -p debian/megaraid-storage-manager
# Скопируйте файлы пакетов.
найти . -maxdepth 1 -mindepth 1 -not -name debian -print0 | \
        sed -e s#'./'##g | \
        xargs -0 -r -i cp -a ./{} debian/megaraid-storage-manager/{}
make[1]: Выход из каталога '/root/MSM/disk/MegaRAID_Storage_Manager-17.05.06'
   dh_installdocs
   dh_installchangelogs
   dh_perl
   dh_usrlocal
dh_usrlocal: ошибка: не удается сгенерировать правильный сценарий оболочки для /usr/local/MegaRAID Storage Manager из-за метасимволов оболочки
make: *** [debian/rules:7:binary] Ошибка 25

не знаю как исправить ошибку «Не удается сгенерировать правильный сценарий оболочки для /usr/local/MegaRAID Storage Manager из-за метасимволов оболочки» и будем признательны за любую помощь.

Хосты, которые я пробовал, — это Debian 10 и Debian 11, все с архитектурой amd64 и работающие под управлением оболочки «bash». Я также пробовал оболочку "sh".

Рейтинг:2
флаг cl
A.B

TL;DR: пробелы и другие метасимволы не поддерживаются для каталогов, которые попадут в /USR/местный.

/usr/local/Диспетчер хранилища MegaRAID содержит пробелы. Очевидно, что этот пакет не следует передовой практике в мире *nix (во всем виноваты LSI/Broadcom).

Вместо этого вы можете конвертировать инопланетян в tar или извлекать напрямую, используя rpm2cpio, выясните, как используются сценарии установки, и узнайте, как их повторно использовать, при желании посмотрите, возможно ли переименовать каталог с пробелами, если любая ссылка на него также может быть легко заменена, и создайте непосредственно двоичный пакет, используя dpkg-deb -b который не будет затронут такой проблемой, но создаст пакет, который не соответствует политике Debian.

пояснения ниже...


Политика Debian требует, чтобы ничего не устанавливалось пакетом в /USR/местный кроме некоторых каталогов косвенным методом:

9.1.2. Программы для конкретных сайтов

Согласно предписанию FHS, пакеты не должны размещать какие-либо файлы в /USR/местный, либо поместив их в архив файловой системы распаковал дпкг или манипулируя ими в своих сценариях поддержки.

Однако, пакет может создавать пустые каталоги ниже /USR/местный так чтобы системный администратор знал, где размещать файлы. Это не каталоги в /USR/местный, но дети каталоги в /USR/местный. Эти каталоги (/usr/местный/*/каталог/) должны быть удалены при удалении пакета, если они пусты.

Обратите внимание, что это относится только к каталогам ниже /USR/местный, нет в /USR/местный.

[...]

Таким образом, этот пакет все равно не может быть совместим, например, файл /usr/local/Диспетчер хранилища MegaRAID/startmonitorhelp.sh не соответствует: это файл упакован где-то в /USR/местный.

инопланетянин использует dh_usrlocal build helper для автоматического преобразования (все еще совместимых) каталогов для добавления в сценарии сопровождающего (например, в Debian преинст, постинста и т.д. скрипты, которые заархивированы отдельно в .deb ар архив и будет храниться в /var/lib/dpkg/информация/ позже), который затем выполнит несколько мкдир команды при установке:

dh_usrlocal это программа debhelper, которую можно использовать для сборки пакеты, которые предоставят подкаталог в /USR/местный когда установлен.

Он находит подкаталоги usr/местный в каталоге сборки пакета, и удаляет их, заменяя фрагментами скрипта сопровождающего (пока не используется) для создания каталогов во время установки и удалить их при удалении пакета в соответствии с Политика Дебиана. Эти фрагменты вставляются в скрипты сопровождающего. к dh_installdeb.

Содержание /usr/bin/dh_usrlocal Perl-скрипт включает в себя:

          # Обнаружение некоторых очевидных случаев «это не закончится
          # well". Мы полагаемся на то, что "while read dir ... ; делать"
          # может обрабатывать для корректности.
          if ($fn =~ m{[\s!'"\$()*#;<>?@\[\]\`|]}) {
                  error("Невозможно сгенерировать корректный сценарий оболочки для $fn из-за метасимволов оболочки");
          }

что означает, что любой пробел в PCRE является частью запрещенных метасимволов и вызывает ошибку при разборе /usr/local/Диспетчер хранилища MegaRAID.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.