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.orig
Copy 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.patch
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 원래의
cello.c
를 복원 :cp cello.c.orig cello.c
$ cp cello.c.orig cello.c
Copy 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.c
Copy 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