2.4. 패치 소프트웨어
이 섹션에서는 소프트웨어를 패치하는 방법을 설명합니다.
RPM 패키징에서는 원래 소스 코드를 수정하는 대신 해당 코드를 보관하고 패치를 사용합니다.
패치는 다른 소스 코드를 업데이트하는 소스 코드입니다. 두 버전의 텍스트 간에 다른 것을 나타내기 때문에 diff 로 포맷됩니다. diff 는 diff 유틸리티를 사용하여 생성된 다음 patch 유틸리티를 사용하여 소스 코드에 적용됩니다.
소프트웨어 개발자는 종종 git 과 같은 버전 제어 시스템을 사용하여 코드 기반을 관리합니다. 이러한 도구는 diffs 또는 패치 소프트웨어를 만드는 자체 방법을 제공합니다.
다음 예제에서는 diff 를 사용하여 원래 소스 코드에서 패치를 생성하는 방법과 패치를 사용하여 패치 를 적용하는 방법을 보여줍니다. 패치는 RPM을 생성할 때 이후 섹션에서 사용됩니다. 3.2절. “SPEC 파일 작업” 을 참조하십시오.
이 절차에서는 cello.c 의 원래 소스 코드에서 패치를 생성하는 방법을 설명합니다.
절차
원본 소스 코드를 유지합니다.
cp -p cello.c cello.c.orig
$ cp -p cello.c cello.c.origCopy to Clipboard Copied! Toggle word wrap Toggle overflow -p옵션은 모드, 소유권 및 타임스탬프를 유지하는 데 사용됩니다.필요에 따라
cello.c를 수정합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow diff유틸리티를 사용하여 패치를 생성합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 로 시작하는 행은 원래 소스 코드에서 제거되고
+로 시작하는 행으로 교체됩니다.diff명령과 함께Naur옵션을 사용하는 것이 대부분의 일반적인 사용 사례에 적합하므로 사용하는 것이 좋습니다. 그러나 이 경우-u옵션만 필요합니다. 특정 옵션은 다음을 보장합니다.-
-n(또는--new-file) - 빈 파일이 있는 것처럼 파일을 처리합니다. -
-a(또는--text) - 모든 파일을 텍스트로 처리합니다. 결과적으로 바이너리로 분류되는파일은무시되지 않습니다. -
-u(또는-U NUM또는--unified[=NUM]) - 출력 NUM(기본값 3) 통합 컨텍스트 라인으로 출력을 반환합니다. 이는 패치를 변경된 소스 트리에 적용할 때 유사할 수 있는 쉽게 읽을 수 있는 형식입니다. -r(또는--recursive) - 발견된 하위 디렉토리를 다시 비교합니다.diff유틸리티에 대한 일반적인 인수에 대한 자세한 내용은diff매뉴얼 페이지를 참조하십시오.
-
패치를 파일에 저장합니다.
diff -Naur cello.c.orig cello.c > cello-output-first-patch.patch
$ diff -Naur cello.c.orig cello.c > cello-output-first-patch.patchCopy to Clipboard Copied! Toggle word wrap Toggle overflow 원래의
cello.c를 복원 :cp cello.c.orig cello.c
$ cp cello.c.orig cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow RPM이 빌드되면 수정된 파일이 아니라 원본 파일이 사용되므로 원래
cello.c를 유지해야 합니다. 자세한 내용은 3.2절. “SPEC 파일 작업”의 내용을 참조하십시오.
다음 절차에서는 cello-output-first-patch.patch 를 사용하여 cello.c 패치를 패치하고 패치된 프로그램을 빌드한 다음 실행하는 방법을 보여줍니다.
패치 파일을
patch명령으로 리디렉션합니다.patch < cello-output-first-patch.patch
$ patch < cello-output-first-patch.patch patching file cello.cCopy to Clipboard Copied! Toggle word wrap Toggle overflow cello.c의 콘텐츠가 이제 패치를 반영하는지 확인합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow 패치된
cello.c를 빌드하고 실행합니다.Copy to Clipboard Copied! Toggle word wrap Toggle overflow