RPM 패키지 제작 Spec 파일 상세 설명

7707 단어 rpmspec
이 글 을 보 는 사람들 은 기본적으로 "노사 가 YUM 의 설 치 를 사용 하고 싶 지 않다! 버 전이 너무 낮은 것 이 아니 라 파일 분포 가 너무 야 하 다" 는 생각 을 가지 고 있다. 이때 우 리 는 스스로 패 키 지 를 주문 해 야 한다. 우 리 는 일부 소스 패 키 지 를 우리 의 수요 에 따라 rpm 패 키 지 를 만 들 것 이다. 그 중의 Spec 파일 은 RPM 패 키 지 를 만 드 는 핵심 이다.다음은 NGINX 를 만 드 는 RPM 으로 제작 방법 을 소개 한다.다음 작업 은 CentOS 7.4 64 비트 시스템 에서 진행 합 니 다 (7 에 있 는 파일 을 6 에 담 지 마 십시오). 
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}

 메모: 이 새 폴 더 들 은 모두 대문자 로 요구 해 야 합 니 다!모두 대문자!모두 대문자!  다음은 디 렉 터 리 에 대응 하 는 저장 파일 에 대한 설명 입 니 다.
  • BUILD: 원본 압축 을 풀 고 놓 은 디 렉 터 리
  • RPMS: 제작 완료 후 rpm 패키지 저장 디 렉 터 리
  • SOURCES: 원본 파일, 프로필, 패 치 파일 등 을 저장 하 는 디 렉 터 리 [상용]
  • SPECS: spec 파일 을 저장 하고 rpm 가방 을 만 드 는 파일 로 서 nginx. spec... [상용]
  • SRPMS: src 형식의 rpm 패키지 디 렉 터 리
  • BuiltRoot: 가상 설치 디 렉 터 리, 즉 전체 설치 과정 에서 이 디 렉 터 리 에 임시로 설치 하여 이 디 렉 터 리 를 루트 로 사용 하기 때문에 이 디 렉 터 리 에 있 는 파일 이 야 말로 진정한 디 렉 터 리 파일 입 니 다.최종 적 으로 Spec 파일 의 마지막 청소 단계 가 있 습 니 다. 이 디 렉 터 리 의 내용 은 삭 제 됩 니 다
  •  Spec 파일 의 매크로 정의:
    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

    좋은 웹페이지 즐겨찾기