RPM 패키지 제작 Spec 파일 상세 설명
1.1 제스처 설치 rpm - build
yum -y install rpm-build
새 사용 자 를 만 들 고 사용자 로 전환 합 니 다.
[root]# useradd devops #
[root]# su - devops #
[devops]$ echo "%_topdir %(echo $HOME)/rpmbuild" >> ~/.rpmmacros
[devops]$ mkdir -p ~/rpmbuild/{BUILD,RPMS,SOURCES,SPECS,SRPMS}
메모: 이 새 폴 더 들 은 모두 대문자 로 요구 해 야 합 니 다!모두 대문자!모두 대문자! 다음은 디 렉 터 리 에 대응 하 는 저장 파일 에 대한 설명 입 니 다.
rpmbuild -- showrc | grep topdir \ # 작업장 목록:topdir /root/rpmbuild-14: _builddir %{_topdir}/BUILD-14: _buildrootdir %{_topdir}/BUILDROOT-14: _rpmdir %{_topdir}/RPMS-14: _sourcedir %{_topdir}/SOURCES-14: _specdir %{_topdir}/SPECS-14: _srcrpmdir %{_topdir}/SRPMS-14: _topdir /root/rpmbuild
rpmbuild -- showrc 는 밑줄 로 시작 하 는 모든 매크로 를 표시 합 니 다.
1.2 Spec 스 크 립 트 의 각 변 수 를 이해 합 니 다.
rpm 의 설정 문 서 는 비교적 이성 적 인 편 이다. 표준 형식 에 따라 정 보 를 정리 하 는 것 은 소프트웨어 기초 정보 와 설치, 마 운 트 해제 전후 에 실 행 된 스 크 립 트, 소스 패키지 의 압축 해제, 패 치, 컴 파일, 설치 경로 와 파일 참조 등 을 포함한다. 그 중에서 주의해 야 할 부분 은 가상 경로 의 위치 와 매크로 의 정의 이다. spec 스 크 립 트 는 많은 키 워드 를 포함 합 니 다. 주로:
Name: 패키지 의 이름 은 다음 변수 에서% {name} 을 사용 할 수 있 습 니 다. Summary: 패키지 의 내용 버 전: 소프트웨어 의 실제 버 전 번 호 를 참조 할 수 있 습 니 다. 예 를 들 어 1.12.1 등 뒤에% {version} 을 사용 하여 Release: 발표 시리 얼 번 호 를 참조 할 수 있 습 니 다. 예 를 들 어 1% {? dist} 은 몇 번 째 포장 을 표시 하고 뒤에% {release} 를 사용 하여 Group: 소프트웨어 그룹 을 참조 할 수 있 습 니 다.권장 사용: Applications / System License: 소프트웨어 권한 수여 방식 GPLv2Source: 소스 패 키 지 는 Source 1, Source 2 등 소스 를 여러 개 가 져 갈 수 있 으 며, 뒤에 도% {source 1},% {source 2} 로 BuildRoot 를 참조 할 수 있 습 니 다. 이것 은 설치 또는 컴 파일 할 때 사용 하 는 임시 디 렉 터 리 입 니 다. 즉, 설치 후 생 성 된 파일 디 렉 터 리 를 모 의 하 는 것 입 니 다.%topdir / BUILDROOT 뒤에 $RPM 사용 가능BUILD_ROOT 방식 참조.URL: 소프트웨어 의 URIVendor: 패키지 조직 이나 인원 Patch: 패 치 원본 코드, Patch 1, Patch 2 등 표지 여러 패 치 를 사용 할 수 있 습 니 다.% patch 0 또는% {patch 0} 은 prefix:% { prefix} 을 참조 합 니 다. 이것 은 앞으로 rpm 패 키 지 를 설치 할 때 rpm 에 패 키 지 를 설치 하 는 디 렉 터 리 의 상황 을 해결 하기 위해 서 입 니 다.이 표 지 를 정의 하고% install 스 크 립 트 를 작성 할 때 인용 해 야 rpm 설치 시 위 치 를 다시 지정 하 는 기능 을 수행 할 수 있 습 니 다. Prefix:% {sysconfdir} 이 유 는 위 와 같 지만% {prefix} 은 / usr 를 가리 키 기 때문에 다른 파일, 예 를 들 어 / etc 의 설정 파일 에 대해 서 는% {sysconfdir} 을 사용 해 야 합 니 다.표지 요구 사항: 이 rpm 패키지 가 의존 하 는 패키지 이름 은 > = 또는 < = 로 특정한 버 전 보다 크 거나 작 음 을 표시 할 수 있 습 니 다. 예 를 들 어 libxxx - devel > = 1.1.1 openssl - devel.주의: "> =" 호 양쪽 은 빈 칸 으로 구분 되 어야 하 며, 서로 다른 소프트웨어 이름 도 빈 칸 으로 구분 되 어야 합 니 다.
% description: 소프트웨어 에 대한 자세 한 설명% define: 로그 경 로 를 정의 하 는 등 미리 정 의 된 변수:logpath / var / log / weblog% prep: 예비 매개 변 수 는 보통% setup - q% build: 컴 파일 매개 변수 입 니 다.% pre: 설치 하기 전에 해 야 할 작업, 예 를 들 어: 사용자% post 만 들 기: 설치 후 해 야 할 작업: 자동 으로 시작 하 는 작업% preun: 마 운 트 해제 전에 해 야 할 작업: 작업 정지% postun: 마 운 트 해제 후 해 야 할 작업: 사용자 삭제, 업무 데이터 삭제 / 백업% clean: 지난번 컴 파일 로 생 성 된 임시 파일 을 삭제 합 니 다.위 에서 언급 한 가상 디 렉 터 리% files: 파일 속성 을 설정 합 니 다. 컴 파일 파일 파일 이 생 성 할 디 렉 터 리, 파일 및 할당 에 대응 하 는 권한% changelog: 역사 수정
1.3 제작 시작 RPM 팩
포장 해 야 할 파일 은 다음 디 렉 터 리 에 놓 여 있 습 니 다.
[devops]$ pwd
$HOME/rpmbuild/SOURCES
SPEC 파일 디 렉 터 리 작성:
[devops]$ pwd
$HOME/rpmbuild/SPEC
다음은 Nginx Spec file 의 인 스 턴 스 입 니 다.
cat nginx.spec
%define _prefix /usr/local/nginx // prefix
%define _logpath /var/log/weblog //
Name: nginx
Version: 1.12.1
Release: 1%{?dist}
Summary: The Nginx HTTP and reverse proxy server
Group: Applications/System
License: GPLv2
URL: https://nginx.org
Packager: Atlantis
Vendor: XXX-XXX
Source0: %{name}-%{version}.tar.gz //
Source1: nginx.conf //
Source2: nginx // System-V Service
Source3: nginx.logrotate //
BuildRoot: %_topdir/BUILDROOT //
Requires: libxslt-devel,openssl-devel,pcre-devel //
%description
NGINX is the heart of the modern web, powering half of the world’s busiest sites and applications. The company's comprehensive application delivery platform combines load balancing, content caching, web serving, security controls, and monitoring in one easy-to-use software package.
%prep // , Setup,
%setup -q
%build // , , , : make -j 6
./configure \
--user=nginx \
--group=nginx \
--prefix=%{_prefix} \
--http-log-path=%{_logpath}/access.log \
--error-log-path=%{_logpath}/error.log \
--pid-path=/var/run/nginx.pid \
--with-http_dav_module \
--with-http_flv_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_xslt_module \
--with-http_sub_module \
--with-http_random_index_module \
--with-http_degradation_module \
--with-http_secure_link_module \
--with-http_gzip_static_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-pcre \
--with-threads \
--with-stream \
--with-ld-opt=-Wl,-E
make %{?_smp_mflags}
%install //
rm -rf %{buildroot} //
make install DESTDIR=%{buildroot} //install
%{__install} -p -d -m 0755 %{buildroot}%{_logpath} // , ,
%{__install} -p -D -m 0644 %{SOURCE1} %{buildroot}%{_prefix}/conf/nginx.conf // SOURCE1
%{__install} -p -D -m 0755 %{SOURCE2} %{buildroot}/etc/rc.d/init.d/nginx // SOURCE2
%{__install} -p -D -m 0644 %{SOURCE3} %{buildroot}%{_prefix}/conf/nginx.logrotate // SOURCE3
%pre //
if [ $1 == 1 ]; then // 1 ;0
/usr/sbin/useradd -r nginx -s /sbin/nologin 2> /dev/null
fi
%post //
if [ $1 == 1 ]; then
echo "export PATH=/usr/local/nginx/sbin:$PATH" >> /etc/profile
source /etc/profile
cp %{_prefix}/conf/nginx.logrotate /etc/logrotate.d/nginx
fi
%preun //
if [ $1 == 0 ]; then
/etc/init.d/nginx stop 2>&1 /dev/null
/usr/sbin/userdel -r nginx 2> /dev/null
fi
%postun
if [ $1 == 0 ]; then //
rm -f /etc/logrotate.d/nginx
fi
%clean
rm -rf %{buildroot}
%files // rpm 。 %defattr (-,root,root) 。 , (mode,owner,group),- , 0644, 0755。
%defattr(-,root,root,0755)
%{_prefix}
%dir /var/log/weblog
%attr(644,root,root) %{_prefix}/conf/nginx.conf
%attr(755,root,root) /etc/rc.d/init.d/nginx
%changelog
* Fri Feb 22 2019 - 1.12.1-3
- Initial Version
- Update Installtion
- Add Logrotate Feature
- Fix Uninstall Bug With logrotate
# End Of nginx.spec
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
YUM WHATPROVIDES의 추천yum에서 특정 패키지를 검색할 때 yum search 및 yum list는 유명하지만 yum whatprovides라는 명령도 있습니다. 예를 들어 libyaml을 검색할 때 각각 이런 식으로 실행할 수 있습니다....
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.