저작권 안내: 저작권자표시 Yes 상업적이용 No 컨텐츠변경 No

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'maven-rpm-plugin'에 해당되는 글 1건

  1. 2016.02.16 메이븐 RPM 플러그인으로 rpm 만들기 (2)

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

  • 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 경로에 생긴다.


Posted by 최범균 madvirus

댓글을 달아 주세요

  1. 김범준 2016.08.14 14:08 신고  댓글주소  수정/삭제  댓글쓰기

    안녕하세요, 맨날 도움만 받다가.. 어떻게 더 도움을 받을까 해서 글을 남깁니다.
    저 역시 rpm 으로 릴리즈를 진행하는데, 맥 (혹은 윈도우) 상의 이클립스에서만 문제가 있어서요..
    맥의 터미널이나 윈도우의 시그윈 상에서는 mvn install 로 문제 없이 빌드가 됩니다.
    맥/윈도우 상의 이클립스에서 Run As -> Maven Install 로 빌드하면 다음과 같은 에러가 발생합니다.

    [ERROR] Failed to execute goal org.codehaus.mojo:rpm-maven-plugin:2.1.4:rpm (generate-rpm) on project xxx: Unable to query for default vendor from RPM: Error while executing process. Cannot run program "rpm": error=2, No such file or directory -> [Help 1]

    (편의상 프로젝트 네임은 숨겼습니다..)

    맥에서의 rpm 은 brew install 로 설치했고, 윈도우는 시그윈에 바이너리가 포함되어 있습니다.
    환경변수 문제가 아닐까 하여 여러 시도를 다 해보았으나.. 해결되지 않네요.

    혹시 알고 계신 것이 있다면 말씀해 주실 수 있을까요?
    미리 감사드립니다.

    • 최범균 madvirus 2016.08.18 08:10 신고  댓글주소  수정/삭제

      rpm이 실행 경로에 있어야 하니까, 이클립스에서 인식할 수 있게 시스템패스에 넣어주셔야 합니다. 터미널은 bash_profile과 같은 곳에서 설정해주지만, 거기에 설정한 환경 변수는 이클립스에 적용되지 않는 걸로 알고 있습니다.

      전 쉘 외에 다른 프로그램에서 사용해야 하는 환경변수는 http://cooldevlife.blogspot.kr/2014/01/os-x.html 이 글 보고 설정했습니다.

      더 좋은 방법은 아직 잘 모릅니다.