Red Hat Training
A Red Hat training course is available for RHEL 8
3장. RPM 패키지 소프트웨어 준비
다음 섹션에서는 RPM 패키지용 소프트웨어를 준비하는 방법을 알아봅니다.
- 소프트웨어를 패치 하는 방법을 알아보십시오.
-
LICENSE
파일을 만듭니다. - tarball에 소스 코드를 배치하는 방법을 알아보십시오.
3.1. 패치 소프트웨어
소프트웨어를 패키징할 때는 버그 수정 또는 구성 파일 변경과 같은 원래 소스 코드를 변경해야 할 수 있습니다. RPM 패키징에서는 원래 소스 코드를 그대로 두고 패치만 적용할 수 있습니다.
패치는 소스 코드 파일을 업데이트하는 텍스트입니다. 패치는 두 버전의 텍스트의 차이를 나타내기 때문에 diff 형식이 있습니다. diff
유틸리티를 사용하여 패치를 생성한 다음 patch
유틸리티를 사용하여 소스 코드에 패치를 적용할 수 있습니다.
소프트웨어 개발자는 종종 Git 과 같은 버전 제어 시스템을 사용하여 코드 기반을 관리합니다. 이러한 도구는 diffs 또는 Patch 소프트웨어를 만드는 자체 방법을 제공합니다.
다음 섹션에서는 C 프로그래밍 언어로 작성된 Hello World
프로그램에 대한 패치를 만드는 방법과 이 프로그램을 패치 하는 방법을 알아봅니다.
3.1.1. cello
프로그램에 대한 패치 파일 생성
diff
유틸리티를 사용하여 원래 소스 코드에서 패치를 생성할 수 있습니다.
절차
원본 소스 코드를 유지합니다.
$ cp -p cello.c cello.c.orig
p
옵션은 모드, 소유권 및 타임스탬프를 유지합니다.필요에 따라
cello.c
를 수정합니다.#include <stdio.h> int main(void) { printf("Hello World from my very first patch!\n"); return 0; }
패치를 생성합니다.
$ 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
명령과 함께 nur
옵션을 사용하는 것이 좋습니다.-
n (--new-file
)N
옵션은 없는 파일을 빈 파일로 처리합니다.-a
(--text
)a
옵션은 모든 파일을 텍스트로 처리합니다. 결과적으로diff
유틸리티는 바이너리로 분류된 파일을 무시하지 않습니다.-u
(-U NUM
또는--unified[=NUM]
)-u
옵션은 통합 컨텍스트의 출력 NUM(기본값 3) 줄로 출력을 반환합니다. 이는 패치 파일에서 일반적으로 사용되는 컴팩트하고 쉽게 읽을 수 있는 형식입니다.-r
(--recursive
)r
옵션은diff
유틸리티에서 발견된 하위 디렉토리를 재귀적으로 비교합니다.
그러나 이 특별한 경우에는
-u
옵션만 필요합니다.패치를 파일에 저장합니다.
$ diff -Naur cello.c.orig cello.c > cello.patch
원본
cello.c
를 복원 :$ mv cello.c.orig cello.c
RPM 패키지를 빌드할 때 RPM 패키지 관리자가 수정된 파일이 아닌 원본 파일을 사용하므로 원래
cello.c
를 유지해야 합니다. 자세한 내용은 SPEC 파일 작업을 참조하십시오.
추가 리소스
-
diff(1)
도움말 페이지
3.1.2. 셀로 프로그램
패치
패치 유틸리티를 사용하여 소프트웨어를 패치
할 수 있습니다.
사전 요구 사항
- 원래 소스 코드의 패치 가 생성되었습니다.
절차
패치 파일을
패치
명령으로 리디렉션합니다.$ patch < cello.patch patching file cello.c
cello.c
의 내용이 이제 원하는 변경 사항을 반영하는지 확인합니다.$ cat cello.c #include<stdio.h> int main(void){ printf("Hello World from my very first patch!\n"); return 1; }
패치된
cello.c
프로그램을 빌드합니다.$ make gcc -g -o cello cello.c
빌드된
cello.c
프로그램을 실행합니다.$ ./cello Hello World from my very first patch!