Red Hat Training

A Red Hat training course is available for Red Hat Satellite

8장. RPM

자동 설치의 일부로 관리자는 백업 및 모니터링 소프트웨어와 같은 Red Hat 이외의 벤더가 제공하는 사용자 지정 애플리케이션을 배포하는 경우가 많습니다. 이를 위해 소프트웨어를 RPM으로 패키지해야 합니다. RPM 빌드 환경은 Red Hat Enterprise Linux를 실행하는 시스템에서 설정할 수 있습니다. 빌드 시스템에는 대상 시스템에서 사용되는 패키지와 동일한 버전이 들어 있어야 함에 유의하십시오. 즉, Red Hat Enterprise Linux 5 기반 시스템의 경우 RPM을 빌드하기 위해 Red Hat Enterprise Linux 5 시스템을 사용해야 하고 Red Hat Enterprise Linux 6 RPM의 경우 Red Hat Enterprise Linux 6 시스템을 사용해야 함을 의미합니다.
최소 요건으로 빌드 시스템에 rpm-build 패키지가 설치되어 있어야 합니다. 컴파일러 및 라이브러리와 같은 추가 패키지가 필요할 수 있습니다.
프로덕션 환경의 RPM 패키지는 GPG 키로 서명해야 합니다. 이렇게 하면 사용자는 패키지의 출처와 무결성을 확인할 수 있습니다. RPM 서명에 사용되는 GPG 키 암호는 신뢰할 수 있는 관리자 그룹에만 알려주셔야 합니다.

절차 8.1. GPG 키 생성

중요

다음 명령은 GPG 키 생성을 시작하고 클라이언트 시스템에 배포하기 위해 적절한 형식으로 내보냅니다. 생성된 키는 안전하게 저장하여 백업해야 합니다.
  1. 키를 생성하기 위해 디렉토리를 만듭니다:
    mkdir -p ~/.gnupg
    
  2. 키 쌍을 생성합니다:
    gpg --gen-key
    
    키 유형, 크기, 유효 기간을 선택합니다 (기본 값을 수락하려면 enter를 누르십시오). 또한 이름, 설명, 이메일 주소를 지정해야 합니다:
    Real name: rpmbuild
    Email address: rpmbuild@example.com
    Comment: this is a comment
    You selected this USER-ID:
        "rpmbuild (this is a comment) <rpmbuild@example.com>"
    
    Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
    
    O 키를 눌러 정보를 승인하고 계속 진행합니다.
  3. 모든 키를 지문과 함께 나열합니다:
    gpg --list-keys --fingerprint
    
  4. 키를 내보내기합니다:
    gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
    
  5. RPM 데이터베이스에 키를 가져오기하여 RPM 출처와 무결성을 확인하려면 모드 대상 시스템에서 root로 gpg --import 명령을 실행합니다:
    rpm --import EXAMPLE-RPM-GPG-KEY
    
    이는 클라이언트를 설치하는 동안 자동으로 수행되므로 수동으로 실행할 필요가 없습니다.
  6. RPM이 생성되면 GPG 키로 서명하여 적절한 채널에 업로드합니다:
    rpm --resign package.rpm
    rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
  7. RPM 패키지를 확인하려면, 패키지가 들어 있는 디렉토리로 이동하여 다음 명령을 실행합니다:
    rpm –qip package.rpm
    rpm -K package.rpm

절차 8.2. RPM 빌드

  1. 패키지 작성을 위해 rpmbuild라는 권한이 없는 사용자 계정을 생성합니다. 이는 여러 명의 관리자가 빌드 환경 및 GPG 키를 공유할 수 있게 합니다.
  2. rpmbuild 사용자의 홈 디렉토리 /home/rpmbuild.rpmmacros라는 파일을 생성합니다:
    touch /home/rpmbuild/.rpmmacros
    
  3. 원하는 텍스트 편집기에서 .rpmmacros 파일을 열고 다음 줄을 추가합니다. _gpg_name은 RPM 서명에 사용된 GPG 키의 이름과 일치해야 합니다:
    %_topdir            %(echo $HOME)/rpmbuild
    %_signature         %gpg
    %_gpg_name          rpmbuild <rpmbuild@example.com>
    
    정의된 최상위 디렉토리 (위의 예에서는 /home/rpmbuild/rpmbuild) 목록은 /usr/src/redhat 아래에 있는 디렉토리 레이아웃과 동일해야 합니다.

예 8.1. RPM spec 파일

다음은 RPM spec 파일의 기본적인 예입니다. 빌드를 수행할 때 이 파일은 사용자의 .rpmmacros 파일에 정의된 대로 _topdir 아래의 SPECS 디렉토리에 배치되어 있습니다. 또한 해당 소스 파일과 패치 파일은 SOURCES 디렉토리에 배치되어 있습니다.
  Name: foo
  Summary: The foo package does foo
  Version: 1.0
  Release: 1
  License: GPL
  Group: Applications/Internet
  URL: http://www.example.org/
  Source0 : foo-1.0.tar.gz
  Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root
  Requires: pam
  BuildPrereq: coreutils
  %description
  This package performs the foo operation.
  %prep
  %setup -q
  %build
  %install
  mkdir -p %{buildroot}/%{_datadir}/%{name}
  cp -p foo.spec %{buildroot}/%{_datadir}/%{name}
  %clean
  rm -fr %{buildroot}
  %pre
  # Add user/group here if needed
  %post
  /sbin/chkconfig --add food
  %preun
  if [ $1 = 0 ]; then # package is being erased, not upgraded
      /sbin/service food stop > /dev/null 2>&1
      /sbin/chkconfig --del food
  fi
  %postun
  if [ $1 = 0 ]; then # package is being erased
      # Any needed actions here on uninstalls
  else
      # Upgrade
      /sbin/service food condrestart > /dev/null 2>&1
  fi
  %files
  %defattr(-,root,root)
  %{_datadir}/%{name}
  %changelog
  * Mon Jun 16 2003 Some One <one@example.com>
  - fixed the broken frobber (#86434)