Как запустить сценарий оболочки из rpm в процессе сборки? - PullRequest
0 голосов
/ 28 мая 2020

По сути, я хочу, чтобы мой процесс сборки делал это:

  1. Запустить сценарий оболочки, который удаляет данные из файлов CSV и объединяет их в один CSV.
  2. Результирующий вывод csv из этого сценария затем упаковывается в rpm.
  3. При запуске rpm -install файл csv (а не сценарий) помещается в укажите c местоположение на целевой машине.

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

Я попытался запустить сценарий из каталога исходных текстов

Я немного не понимаю, как должен работать ожидаемый поток rpm. При тестировании я собираю и устанавливаю на одном компьютере, но на практике он будет на двух машинах.

Когда я запускаю приведенный ниже код, помещает ли он копию моих исходных файлов в .rpm файл? Мне интересно, почему это не работает. (говорит, что процесс. sh не существует)

Name:       Test
Version:    1
Release:    1
Summary:    Test
License:    FIXME


%description
this is a test build

%prep
echo "BUILDROOT = $RPM_BUILD_ROOT"
mkdir -p -m777 $RPM_BUILD_ROOT/usr/local/bin/
cp /home/myuser/foo/util/* $RPM_BUILD_ROOT/usr/local/bin
cd $RPM_BUILD_ROOT/usr/local/bin/
./process.sh hosts.csv processed.csv
exit

%files
%attr(0777, root, root) /foo/processed.csv

1 Ответ

2 голосов
/ 28 мая 2020

Вам необходимо:

  • Настроить дерево сборки для вашего пользователя, например, запустить rpmdev-setuptree
  • Поместить исходные файлы в SOURCES в дереве сборки
  • Объявите несколько тегов Source. Это очень важно для правильной сборки. Потому что именно так вы ссылаетесь на файлы, составляющие вашу сборку, во время сборки.

Например,

Source0: process.sh
Source1: util.tar.gz

util.tar.gz может быть архивом для всех многочисленных CSV файлов (я предполагаю, что их слишком много, поэтому было бы невозможно создать отдельную запись Source для каждого из них.

Тогда:

  • в %prep раздел, который вы должны извлечь %{SOURCE1}.
  • в разделе %build, вы можете объединить их в один файл
  • в разделе %install вы должны установить объединенный файл
%prep
cp -p %{SOURCE0} .
tar zxvf %{SOURCE1}

# ...

%install
%{__mkdir} -p $RPM_BUILD_ROOT%{_datadir}/%{name}
%{__install} -m 644 -p processed.csv \
    $RPM_BUILD_ROOT%{_datadir}/%{name}/

%files
%{_datadir}/%{name}/processed.csv

PS Я знаю, что для новичка это показалось бы немного ненужной задачей, чтобы скопировать что-то в каталог SOURCES, когда оно у вас уже есть в другом месте, но это путь к go по-прежнему.

...