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

스프링5 입문

JSP 2.3

JPA 입문

DDD Start

인프런 객체 지향 입문 강의

'RPM'에 해당되는 글 2건

  1. 2016.02.16 메이븐 RPM 플러그인으로 rpm 만들기 (2)
  2. 2016.01.12 kafka 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 경로에 생긴다.


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 이 글 보고 설정했습니다.

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

kafka를 yum 리포지토리에 올려 설치해야 할지 몰라 kafka를 rpm으로 만드는 과정을 정리해 본다.


먼저, rpmbuild 도구가 필요하니 없다면 yum으로 설치한다.


$ sudo yum install rpmbuild


rpm을 생성할 때 사용할 기준 디렉토리를 생성한다. 여기서는 /vagrant/rpmbuild-kafka라고 가정한다. 다른 경로를 사용해도 무방하다.


/vagrant/rpmbuild-kafka 디렉토리에 kafka 파일인 kafka_2.11-0.9.0.0.tgz를 복사한다.


다음으로 rpmbuild가 스펙으로 사용할 kafka.spec 파일을 /vagrant/rpmbuild-kafka 폴더에 작성한다. 옵션에서 %define으로 _topdir을 설정하고 있다. 이 설정을 하지 않으면 ~/rpmbuild를 기준으로 동작하는데, 여기서는 rpmbuild를 사용할 디렉토리의 rpmbuild 디렉토리를 기준으로 잡기 위해 _topdir을 설정했다.


%define _topdir %(echo $PWD)/rpmbuild


Name:           kafka_2.11

Version:        0.9.0.0

Release:        0

Summary:        A kafka package


Group:          Development

License:        Apache

URL:            http://kafka.apache.org/

Source0:        kafka_2.11-0.9.0.0.tgz

BuildRoot:      %(mktemp -ud %{_tmppath}/%{name}-%{version}-%{release}-XXXXXX)

BuildArch: noarch


BuildRequires:  /bin/rm, /bin/mkdir, /bin/cp

Requires:       /bin/bash


%description

 A kafka package


%prep

%setup -q



%build


#configure

#make %{?_smp_mflags}


%install

rm -rf $RPM_BUILD_ROOT

#make install DESTDIR=$RPM_BUILD_ROOT

mkdir -p $RPM_BUILD_ROOT/home/hadoop/servers/kafka

cp -R * $RPM_BUILD_ROOT/home/hadoop/servers/kafka


%clean

rm -rf $RPM_BUILD_ROOT


%files

%defattr(-,hadoop,hadoop,-)

#%doc


%attr(0755,hadoop,hadoop)/home/hadoop/servers/kafka


%changelog

* Wed Jan 12 2016 Kafka - 0.9.0.0

- Initial RPM


매번 명령어를 입력하면 귀찮으니, 명령을 실행할 build.sh을 /vagrant/rpmbuild-kafka에 작성한다.


rm -rf rpmbuild

mkdir rpmbuild

pushd rpmbuild

mkdir BUILD RPMS SOURCES SPECS SRPMS

popd


cp kafka_2.11-0.9.0.0.tgz rpmbuild/SOURCES/

cp kafka.spec rpmbuild/SPECS/


rpmbuild -ba rpmbuild/SPECS/kafka.spec


이제 build.sh 파일을 실행한다. 그러면 rpmbuild/RPMS/noarch/kafka_2.11-0.9.0.0-0.noarch.rpm 파일이 생성된 것을 확인할 수 있다.


Posted by 최범균 madvirus
TAG RPM

댓글을 달아 주세요