3장. RPM 패키지 소프트웨어 준비
RPM을 사용하여 패키징할 소프트웨어를 준비하려면 먼저 소프트웨어를 패치하고 LICENSE 파일을 만들고 tarball로 보관하면 됩니다.
3.1. 패치 소프트웨어
소프트웨어를 패키징할 때는 버그 수정 또는 구성 파일 변경과 같은 원래 소스 코드를 변경해야 할 수 있습니다. RPM 패키징에서는 원래 소스 코드를 그대로 두고 패치를 적용할 수 있습니다.
패치는 소스 코드 파일을 업데이트하는 텍스트입니다. 패치는 두 버전의 텍스트의 차이를 나타내기 때문에 diff 형식이 있습니다. diff
유틸리티를 사용하여 패치를 생성한 다음 patch 유틸리티를 사용하여 소스 코드에 패치를 적용할 수 있습니다.
소프트웨어 개발자는 종종 Git 과 같은 버전 제어 시스템을 사용하여 코드 기반을 관리합니다. 이러한 도구는 diffs 또는 Patch 소프트웨어를 만드는 자체 방법을 제공합니다.
3.1.1. 샘플 C 프로그램에 대한 패치 파일 생성
diff
유틸리티를 사용하여 원래 소스 코드에서 패치를 생성할 수 있습니다. 예를 들어 C (cello.c
)로 작성된 Hello world
프로그램을 패치하려면 다음 단계를 완료합니다.
사전 요구 사항
시스템에
diff
유틸리티를 설치했습니다.# yum install diffutils
절차
원래 소스 코드를 백업합니다.
$ 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
를 유지해야 합니다. 자세한 내용은 사양 파일 작업을 참조하십시오.
추가 리소스
-
diff(1)
도움말 페이지
3.1.2. 샘플 C 프로그램 패치
소프트웨어에 코드 패치를 적용하려면 patch
유틸리티를 사용할 수 있습니다.
사전 요구 사항
시스템에
패치
유틸리티를 설치했습니다.# yum install patch
- 원본 소스 코드에서 패치를 생성했습니다. 자세한 내용은 샘플 C 프로그램에 대한 패치 파일 생성을 참조하십시오.
절차
다음 단계는 cello.c
파일에 이전에 생성된 cello.patch
파일을 적용합니다.
패치 파일을
패치
명령으로 리디렉션합니다.$ 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!