rpm-maven-plugin автоматически устанавливает необходимые пакеты

Я использую rpm-maven-plugin для создания RPM установки/обновления для моего приложения, которое будет установлено в CentOS 7.

Для новой установки требуются некоторые пакеты, однако rpm-maven-plugin игнорирует настройки в файле rpm.spec (поэтому «Requires:» не будет работать), и невозможно выполнить yum или rpm из сценариев RPM.

Есть ли конфигурация для плагина, которая указывает RPM установить необходимые пакеты (в данном случае PostgresDB и sshpass)?

Если нет, то какой лучший вариант? Попросите клиента вручную установить требования перед установкой RPM или создать сценарий оболочки, который выполняет полную настройку?

Вот соответствующая часть pom.xml:

            <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>rpm-maven-plugin</artifactId>
                    <version>${rpm-maven-plugin.version}</version>
                    <inherited>false</inherited>
                    <executions>
                        <execution>
                            <inherited>false</inherited>
                            <phase>install</phase>
                            <goals>
                                <goal>rpm</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <license>Commercial</license>
                        <group>Networking/Admin</group>
                        <name>name</name>
                        <packager>packager</packager>
                        <prefix>$prefix</prefix>
                        <version>${project.version}</version>
                        <release>release</release>
                        <needarch>x86_64</needarch>
                        <mappings>
                        ...
                        </mappings>
                        <requires>
                            <require>postgresql &gt;= ${rpm.postgresql.version}</require>
                            <require>java-1.8.0-openjdk</require>
                            <require>sshpass</require>
                        </requires>
                        <postinstallScriptlet>
                            <script>
                                cd /opt/%{name}
                                if [ "$1" = 1 ] ; then
                                    if [ -e ./install.sh ]; then
                                        sh ./install.sh;
                                    fi
                                fi
                                if [ "$1" = 2 ] ; then
                                    sh ./upgrade.sh
                                fi
                            </script>
                        </postinstallScriptlet>
                    </configuration>
                </plugin>
            </plugins>
        </build>

person burgi    schedule 25.06.2019    source источник


Ответы (1)


Сегодня столкнулся с этой проблемой. Найдено решение, которое не очень хорошо документировано. В основном нужно передать список требований в виде LinkedHashSet.

Согласно документации maven-rpm-plugin для требуется

требует:

Список требований для этого пакета.

Тип: java.util.LinkedHashSet

Требуется: Нет

так изменить

                    <requires>
                        <require>postgresql &gt;= ${rpm.postgresql.version} </require>
                        <require>java-1.8.0-openjdk</require>
                        <require>sshpass</require>
                    </requires>

to

                    <requires>
                        <LinkedHashSet>postgresql &gt;= ${rpm.postgresql.version},java-1.8.0-openjdk,sshpass</LinkedHashSet>
                    </requires>

Предполагая, что ${rpm.postgresql.version}=123, окончательная спецификация будет иметь следующую строку:

Requires: postgresql >= 123,java-1.8.0-openjdk,sshpass
person suh    schedule 16.12.2019