본문으로 바로가기

메이븐(MAVEN) RPM 플러그인으로 RPM 생성하기

category JAVA 2018. 9. 7. 15:23
반응형

메이븐(MAVEN) RPM 플러그인으로 RPM 생성하기


최근 수행한 프로젝트에서 스프링부트로 만든 어플리케이션의 최종 빌드 모습은 다음과 같았다.

  • myapp.war
  • myapp-run.sh
  • conf/application.properties
myapp을 yum으로 설치해야 한다는 요구사항이 생겨서 위 파일들을 rpm 파일로 만들어야 할 일이 생겼다. 다행히 메이븐의 rpm-maven-plugin 플러그인을 사용하면 쉽게 rpm 파일을 만들 수 있다.

* 참고로, rpm-maven-plugin은 rpmbuild를 사용하므로 rpmbuild를 먼저 설치해야 rpm-maven-plugin이 올바르게 동작한다.

rpm-maven-plugin 설정 예제


다음은 rpm-maven-plugin의 설정 예제이다.


<build>

    <plugins>

        <plugin>

            <groupId>org.codehaus.mojo</groupId>

            <artifactId>rpm-maven-plugin</artifactId>

            <version>2.0.1</version>

            <executions>

                <execution>

                    <phase>none</phase>

                    <goals>

                        <goal>rpm</goal>

                    </goals>

                </execution>

            </executions>

            <configuration>

                <copyright>2016, MyCompany</copyright>

                <group>Development</group>

                <description>Maven Recipe: RPM Package.</description>

                <version>${project.version}</version>

                <release>0</release>

                <autoRequires>false</autoRequires>

                <preinstallScriptlet>

                    <scriptFile>src/main/package/rpm/preinstall.sh</scriptFile>

                    <fileEncoding>utf-8</fileEncoding>

                </preinstallScriptlet>

                <defaultDirmode>755</defaultDirmode>

                <defaultFilemode>644</defaultFilemode>

                <defaultUsername>root</defaultUsername>

                <defaultGroupname>root</defaultGroupname>

                <mappings>

                    <mapping>

                        <directory>/usr/local/myapp</directory>

                        <sources>

                            <source>

                                <location>${project.basedir}/target/myapp-${project.version}.war</location>

                            </source>

                        </sources>

                    </mapping>

                    <mapping>

                        <directory>/usr/local/myapp</directory>

                        <filemode>755</filemode>

                        <sources>

                            <source>

                                <location>${project.basedir}/bin/myapp-run.sh</location>

                            </source>

                        </sources>

                    </mapping>

                    <mapping>

                        <directory>/usr/local/myapp/conf</directory>

                        <sources>

                            <source>

                                <location>${project.basedir}/conf</location>

                            </source>

                        </sources>

                    </mapping>

                </mappings>

            </configuration>

        </plugin>

    </plugins>

</build>


<mapping>에서 각 요소는 다음을 의미한다.

  • <directory> : 파일 복사 위치. RPM 설치 과정에서 생성한다.
  • <filemode> : 파일의 권한 모드
  • <sources> : 해당 복사 위치에 넣을 대상
예를 들어, /usr/local/myapp 폴더가 존재하지 않으면 이 폴더를 생성하고, myapp-버전.war 파일을 이 폴더에 복사한다. 또한, 같은 위치에 myapp-run.sh 파일을 755 모드로 복사한다. 별도로 모드를 지정하지 않은 경우 <defaultDirmode>와 <defaultFilemode>에서 지정한 모드를 사용한다. 비슷하게 소유 계정과 그룹을 지정하지 지정하지 않으면 <defaultUsername>와 <defaultGroupname>에서 지정한 계정과 그룹을 사용한다.

설치 전에 필요한 계정을 생성하거나 기존에 이미 설치된 파일의 경로를 변경하는 등의 작업이 필요할 경우 <preinstallScriptlet>을 이용해서 해당 작업을 실행할 스크립트를 지정한다.

메이븐 명령어

이제 RPM 생성을 위한 메이븐 명령어를 실행할 차례다. "rpm:rpm" 골을 이용해서 메이븐을 실행하면 된다.

mvn clean package rpm:rpm

RPM 파일은 target/rpm/myapp/RPMS/noarch/myapp-버전-0.noarch.rpm 경로에 생긴다.


반응형