3장. RPM 패키지 소프트웨어 준비

다음 섹션에서는 RPM 패키지용 소프트웨어를 준비하는 방법을 알아봅니다.

3.1. 패치 소프트웨어

소프트웨어를 패키징할 때는 버그 수정 또는 구성 파일 변경과 같은 원래 소스 코드를 변경해야 할 수 있습니다. RPM 패키징에서는 원래 소스 코드를 그대로 두고 패치만 적용할 수 있습니다.

패치는 소스 코드 파일을 업데이트하는 텍스트입니다. 패치는 두 버전의 텍스트의 차이를 나타내기 때문에 diff 형식이 있습니다. diff 유틸리티를 사용하여 패치를 생성한 다음 patch 유틸리티를 사용하여 소스 코드에 패치를 적용할 수 있습니다.

참고

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

다음 섹션에서는 C 프로그래밍 언어로 작성된 Hello World 프로그램에 대한 패치를 만드는 방법과 이 프로그램을 패치 하는 방법을 알아봅니다.

3.1.1. cello 프로그램에 대한 패치 파일 생성

diff 유틸리티를 사용하여 원래 소스 코드에서 패치를 생성할 수 있습니다.

절차

  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 -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 명령과 함께 n ur 옵션을 사용하는 것이 좋습니다.

    • - n (--new-file)

      N 옵션은 없는 파일을 빈 파일로 처리합니다.

    • -a (--text)

      a 옵션은 모든 파일을 텍스트로 처리합니다. 결과적으로 diff 유틸리티는 바이너리로 분류된 파일을 무시하지 않습니다.

    • -u (-U NUM 또는 --unified[=NUM])

      -u 옵션은 통합 컨텍스트의 출력 NUM(기본값 3) 줄로 출력을 반환합니다. 이는 패치 파일에서 일반적으로 사용되는 컴팩트하고 쉽게 읽을 수 있는 형식입니다.

    • -r (--recursive)

      r 옵션은 diff 유틸리티에서 발견된 하위 디렉토리를 재귀적으로 비교합니다.

    그러나 이 특별한 경우에는 -u 옵션만 필요합니다.

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

    $ diff -Naur cello.c.orig cello.c > cello.patch
  5. 원본 cello.c 를 복원 :

    $ mv cello.c.orig cello.c

    RPM 패키지를 빌드할 때 RPM 패키지 관리자가 수정된 파일이 아닌 원본 파일을 사용하므로 원래 cello.c 를 유지해야 합니다. 자세한 내용은 SPEC 파일 작업을 참조하십시오.

추가 리소스

  • diff(1) 도움말 페이지

3.1.2. 셀로 프로그램 패치

패치 유틸리티를 사용하여 소프트웨어를 패치 할 수 있습니다.

사전 요구 사항

절차

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

    $ patch < cello.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
    gcc -g -o cello cello.c
  4. 빌드된 cello.c 프로그램을 실행합니다.

    $ ./cello
    Hello World from my very first patch!