2.4. 패치 소프트웨어


이 섹션에서는 소프트웨어를 패치하는 방법을 설명합니다.

RPM 패키징에서는 원래 소스 코드를 수정하는 대신 해당 코드를 보관하고 패치를 사용합니다.

패치는 다른 소스 코드를 업데이트하는 소스 코드입니다. 두 버전의 텍스트 간에 다른 것을 나타내기 때문에 diff 로 포맷됩니다. diffdiff 유틸리티를 사용하여 생성된 다음 patch 유틸리티를 사용하여 소스 코드에 적용됩니다.

참고

소프트웨어 개발자는 종종 git 과 같은 버전 제어 시스템을 사용하여 코드 기반을 관리합니다. 이러한 도구는 diffs 또는 패치 소프트웨어를 만드는 자체 방법을 제공합니다.

다음 예제에서는 diff 를 사용하여 원래 소스 코드에서 패치를 생성하는 방법과 패치를 사용하여 패치 를 적용하는 방법을 보여줍니다. 패치는 RPM을 생성할 때 이후 섹션에서 사용됩니다. 3.2절. “SPEC 파일 작업” 을 참조하십시오.

이 절차에서는 cello.c 의 원래 소스 코드에서 패치를 생성하는 방법을 설명합니다.

절차

  1. 원본 소스 코드를 유지합니다.

    $ cp -p cello.c cello.c.orig

    -p 옵션은 모드, 소유권 및 타임스탬프를 유지하는 데 사용됩니다.

  2. 필요에 따라 cello.c 를 수정합니다.

    #include <stdio.h>
    
    int main(void) {
        printf("Hello World from my very first patch!\n");
        return 0;
    }
  3. diff 유틸리티를 사용하여 패치를 생성합니다.

    $ diff -Naur cello.c.orig cello.c
    --- cello.c.orig        2016-05-26 17:21:30.478523360 -0500
    + cello.c     2016-05-27 14:53:20.668588245 -0500
    @@ -1,6 +1,6 @@
     #include<stdio.h>
    
     int main(void){
    -    printf("Hello World!\n");
    +    printf("Hello World from my very first patch!\n");
         return 0;
     }
    \ No newline at end of file

    로 시작하는 행은 원래 소스 코드에서 제거되고 + 로 시작하는 행으로 교체됩니다.

    diff 명령과 함께 Naur 옵션을 사용하는 것이 대부분의 일반적인 사용 사례에 적합하므로 사용하는 것이 좋습니다. 그러나 이 경우 -u 옵션만 필요합니다. 특정 옵션은 다음을 보장합니다.

    • - n(또는 --new-file) - 빈 파일이 있는 것처럼 파일을 처리합니다.
    • -a (또는 --text) - 모든 파일을 텍스트로 처리합니다. 결과적으로 바이너리로 분류되는 파일은 무시되지 않습니다.
    • -u (또는 -U NUM 또는 --unified[=NUM]) - 출력 NUM(기본값 3) 통합 컨텍스트 라인으로 출력을 반환합니다. 이는 패치를 변경된 소스 트리에 적용할 때 유사할 수 있는 쉽게 읽을 수 있는 형식입니다.
    • -r (또는 --recursive) - 발견된 하위 디렉토리를 다시 비교합니다.

      diff 유틸리티에 대한 일반적인 인수에 대한 자세한 내용은 diff 매뉴얼 페이지를 참조하십시오.

  4. 패치를 파일에 저장합니다.

    $ diff -Naur cello.c.orig cello.c > cello-output-first-patch.patch
  5. 원래의 cello.c 를 복원 :

    $ cp cello.c.orig cello.c

    RPM이 빌드되면 수정된 파일이 아니라 원본 파일이 사용되므로 원래 cello.c 를 유지해야 합니다. 자세한 내용은 3.2절. “SPEC 파일 작업”의 내용을 참조하십시오.

다음 절차에서는 cello-output-first-patch.patch 를 사용하여 cello.c 패치를 패치하고 패치된 프로그램을 빌드한 다음 실행하는 방법을 보여줍니다.

  1. 패치 파일을 patch 명령으로 리디렉션합니다.

    $ patch < cello-output-first-patch.patch
    patching file cello.c
  2. cello.c 의 콘텐츠가 이제 패치를 반영하는지 확인합니다.

    $ cat cello.c
    #include<stdio.h>
    
    int main(void){
        printf("Hello World from my very first patch!\n");
        return 1;
    }
  3. 패치된 cello.c 를 빌드하고 실행합니다.

    $ make clean
    rm cello
    
    $ make
    gcc -g -o cello cello.c
    
    $ ./cello
    Hello World from my very first patch!
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.