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 키 생성을 시작하고 클라이언트 시스템에 배포하기 위해 적절한 형식으로 내보냅니다. 생성된 키는 안전하게 저장하여 백업해야 합니다.
- 키를 생성하기 위해 디렉토리를 만듭니다:
mkdir -p ~/.gnupg
- 키 쌍을 생성합니다:
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 키를 눌러 정보를 승인하고 계속 진행합니다. - 모든 키를 지문과 함께 나열합니다:
gpg --list-keys --fingerprint
- 키를 내보내기합니다:
gpg --export --armor "rpmbuild <rpmbuild@example.com>" > EXAMPLE-RPM-GPG-KEY
- RPM 데이터베이스에 키를 가져오기하여 RPM 출처와 무결성을 확인하려면 모드 대상 시스템에서 root로
gpg --import
명령을 실행합니다:rpm --import EXAMPLE-RPM-GPG-KEY
이는 클라이언트를 설치하는 동안 자동으로 수행되므로 수동으로 실행할 필요가 없습니다. - RPM이 생성되면 GPG 키로 서명하여 적절한 채널에 업로드합니다:
rpm --resign package.rpm rhnpush --server=http[s]://satellite.server/APP package.rpm --channel=custom-channel-name
- RPM 패키지를 확인하려면, 패키지가 들어 있는 디렉토리로 이동하여 다음 명령을 실행합니다:
rpm –qip package.rpm rpm -K package.rpm
절차 8.2. RPM 빌드
- 패키지 작성을 위해
rpmbuild
라는 권한이 없는 사용자 계정을 생성합니다. 이는 여러 명의 관리자가 빌드 환경 및 GPG 키를 공유할 수 있게 합니다. rpmbuild
사용자의 홈 디렉토리/home/rpmbuild
에.rpmmacros
라는 파일을 생성합니다:touch /home/rpmbuild/.rpmmacros
- 원하는 텍스트 편집기에서
.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)