Соберите пакет RPM для выборочного развертывания источников

Я новичок в RPM, но я играл с ним, и мне нужно сделать что-то немного нестандартное.

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

Проблема в том, что моя установка не делает make, фактически я копирую файловую структуру текстовых файлов и файлов xml. Однако эти файлы содержат код, специфичный для среды, но, к сожалению, я должен следовать рекомендациям.

«Решение», которое я рассматривал, состоит в том, чтобы использовать несколько исходных файлов, source0 — это dev, source1 — test и source2 — production, а source3 — аварийное восстановление. Каждый источник извлекается в папку с именем среды (это желательно!)

$deploy_folder/dev_code

$deploy_folder/test_code

$deploy_folder/prd_code

Мне будет предоставлена ​​переменная среды, которая сообщает мне среду.

До сих пор я развернул все исходники, а затем удалил ненужные папки, используя условие

если [[ $env_variable == "PRD" ]] ; потом

rm -rf $buildroot/install/$deploy_folder/dev_code

rm -rf $buildroot/install/$deploy_folder/test_code

fi

* я несколько упростил приведенные выше переменные

Кажется, это работает во время сборки, однако, когда я выполняю команду rpm -i, он не развертывает весь код, а затем удаляет другие папки в конечном месте назначения.

Ясно, что я, вероятно, не использую RPM в правильном духе, так что я делаю это правильно? есть ли лучший способ, учитывая, что мои файлы по существу зависят от среды?

Как получить доступ к тому, какой код развернут в конечном пункте назначения?

Спасибо


person user1760100    schedule 19.10.2012    source источник
comment
Некоторые части того, в чем ваш подход терпит неудачу, недостаточно ясны. Вы столкнулись с обеими этими проблемами: а) rpm -i не устанавливает файлы б) не удаляет папки. Или вы просто столкнулись с а)?   -  person    schedule 20.10.2012
comment
В промежутке между тем, как вы установили конкретный rpm в экземпляр вашей операционной системы, используя rpm -i, вы можете проверить список файлов, которые устанавливает этот rpm, используя rpm -ql ‹rpm_package_name›.   -  person    schedule 20.10.2012
comment
Привет, Ракеш, спасибо, что нашли время ответить. Подумав об этом еще немного, я думаю, что ищу подтверждение того, что я могу выборочно развернуть файл rpm с помощью rpm -i. Я действительно просто хочу, чтобы он развертывал правильные файлы для каждой среды, но из одного двоичного файла rpm, который имеет несколько источников.   -  person user1760100    schedule 20.10.2012
comment
Прогресс, которого я добился, заключается в том, что когда я делаю rpmbuild -bb, он правильно выполняет этапы подготовки и установки и следует моей логике, так что в моем buildroot/install/ у меня есть только один набор файлов для этой среды, т.е. dev . Если я изменю переменную среды, она развернет другие свойства. Однако, если я делаю rpm -i ‹package›, он ведет себя не так, как я ожидал. Поскольку я не совсем понимаю обороты в минуту, я бы усомнился в том, что мне не хватает чего-то довольно фундаментального. поэтому любые советы или указатели будут с благодарностью получены.   -  person user1760100    schedule 20.10.2012


Ответы (1)


То, что вы просите, - это единый rpm для среды разработки, тестирования и производства. Во время сборки вам, очевидно, потребуется собрать все файлы. Я предполагаю, что вы все строите нормально, т.е. в разделе %build вы скопировали файлы в

$RPM_BUILD_ROOT/$deploy_folder/dev_code
$RPM_BUILD_ROOT/$deploy_folder/test_code
$RPM_BUILD_ROOT/$deploy_folder/prd_code

и после этого включил эти файлы в rpm(s), сгенерированные с использованием раздела %files.

Вы всегда можете проверить, есть ли файлы сборки rpm в правильном месте, используя:

rpm -qpl <rpm file.rpm>

Поскольку вы хотите, чтобы установка основывалась на наличии переменных среды во время установки, можно использовать %post. Это раздел, который используется после установки rpm. Если вы хотите выполнить некоторую очистку во время удаления, вы можете использовать разделы %postun (или %preun). Предполагая, что $TESTENV является переменной среды, которая имеет PRD для производства, DEV для разработки и TEST для тестирования, можно использовать следующий фрагмент в разделе %post:

if if [ "$TESTENV" = "PRD" ]; then
    rm -rf $deploy_folder/dev_code
    rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "DEV" ]; then
    rm -rf $deploy_folder/prd_code
    rm -rf $deploy_folder/test_code
fi
if [ "$TESTENV" = "TEST" ]; then
    rm -rf $deploy_folder/dev_code
    rm -rf $deploy_folder/prd_code
fi

Создание одного rpm для PRD, TEST, DEV не рекомендуется, но если вам это нужно, ваш подход кажется хорошим.

%pre, %post, %preun, %postun — это разделы, которые используются во время установки и могут проверять переменную среды во время установки. Очевидно, вы не можете сделать это во время сборки, поэтому вы должны использовать эти разделы. Если вам нужно их избегать, вы можете отказаться от идеи единого оборота для всего производства, разработки и тестирования. Уменьшение одного оборота в минуту - лучшая идея. Один файл спецификаций может создать три разных пакета rpm для prod, test и devel, а также для sybpackages. Другой способ — сгенерировать отдельные rpm-пакеты для всех трех продуктов, а также тестировать и разрабатывать из одной спецификации (которая не делает различий между разными средами и не имеет 3 копий одинаковых файлов в rpm-пакетах.

person Community    schedule 20.10.2012
comment
Еще раз спасибо, Ракеш, вы очень помогли. Я должен сказать, что двоичные файлы моего кода развертываются в другом пакете rpm в прямом пакете и развертывании, эти файлы являются специфичными для среды файлами конфигурации/файлами свойств, которые используются для доступа ресурсы и т. д. Я надеялся сделать это так, как вы упомянули, однако, похоже, есть условие, что мы не можем использовать %pre или %post для создания, изменения или удаления файлов. Есть ли способ сделать это в самой установке? - person user1760100; 20.10.2012
comment
@ user1760100 Я обновил ответ. В качестве решения вы хотите отказаться от идеи установки одного rpm-файла для prod, test и devel. Или вам придется использовать разделы %pre() %post(), потому что именно они используются во время установки. - person ; 20.10.2012
comment
@user1760100 user1760100 не забудьте принять мой ответ как ответ на ваш вопрос. В случае, если вы приняли это :) - person ; 22.10.2012