소프트웨어 패치를 적용하는 방법은 무엇입니까?

소프트웨어 패치를 적용하는 방법은 무엇입니까?

foobar내가 좋아하는 기능을 추가하기 위해 누군가가 패치를 작성한 응용 프로그램이 있습니다 . 이 패치를 어떻게 사용하나요?

답변1

.diff패치는 명령을 사용하여 생성 되기 때문에 일반적으로 파일에 포함됩니다 diff.

패치는 소스 코드에 대한 일련의 삽입 및 삭제입니다. 따라서 패치를 사용하려면 패치를 적용한 후 소스에서 애플리케이션(예: "foobar")을 빌드해야 합니다. 따라서 단계별로:

1. 소스 코드 패키지 얻기푸바.

대부분의 Linux 배포판(패칭은 Linux에만 적용되는 것이 아님)에는 이 목적으로 사용할 수 있는 "소스 패키지"가 있지만 이러한 배포판은 이기종이므로 ​​여기서는 원시 소스 코드의 형식만 언급하겠습니다. 원본 소스는 배포판의 일부가 아니므로 찾기 어려울 수 있습니다. 시작하기 좋은 곳은 Wikipedia입니다. 여기에는 많은 인기 응용 프로그램에 대한 기사가 포함되어 있으며 기사에는 소스 다운로드가 있는 홈페이지 링크가 포함되어야 합니다. 물론 Google에서 직접 검색할 수도 있습니다. 압축 foobar.0.1.tar.bz2을 풀면 이제 foobar.0.1.

2. 패치를 추가합니다.

패치는 단일 파일인 경우도 있고 여러 파일의 모음인 경우도 있습니다. foobar.0.1및 에 복사합니다 cd foobar.0.1. 다음으로 명령을 실행해야 합니다 patch. 이는 표준 입력에서 읽으므로 입력 파일을 파이프해야 합니다 .diff. 까다로운 부분은 이 옵션에 무엇을 사용할지 파악하는 것입니다 -p(패치에 명시되지 않은 경우). 이렇게 하려면 패치 파일의 시작 부분을 살펴봐야 합니다. 예를 들어:

--- old/comm.c  2003-09-08 14:25:08.000000000 +0000
+++ new/comm.c  2006-07-07 02:39:24.000000000 +0000

이 경우 comm.c변경될 소스 파일의 이름입니다. 그러나 디렉토리가 첨부되어 있다는 점에 유의하십시오. 이들은 동일한 디렉토리("이전"과 "새")가 아니기 때문에 경로의 이 부분이 (우리의 목적에 따라) 쓰레기라는 큰 단서입니다. 스위치 -p( 참조 man patch)의 목적은 이 접두사를 제거하는 것입니다. 제거하려면 숫자, 슬래시 수( ) /및 그 사이의 모든 항목이 필요합니다. 이 경우 -p1경로를 일반 경로로 축소하는 데 사용합니다 comm.c.

실제로 동일한 디렉토리에 있다고 가정하면 comm.c설명이 올바른지 여부에 대한 또 다른 단서가 될 것입니다. 두 줄이 모두 이고 실제로 빌드 트리의 하위 디렉터리에 있는 경우 src/comm.c사용해야 합니다. comm.c전혀 사용하지 않으면 모든 슬래시가 제거됩니다. 경로가 절대 경로인 경우(예: 로 시작 ) 아마도 원하는 것일 것입니다. 이제 패치를 적용하십시오.src-p0-p/

patch -p1 < patch.diff

이제 소스가 수정되었습니다. 파일이 더 있으면 .diff같은 방식으로 적용하세요.

3. 빌드하고 설치합니다.

./configure이는 소스 코드에서 무언가를 빌드할 때 먼저 , 그 다음 make, 에서 수행하는 일반적인 프로세스입니다 make check. make install마지막 작업을 수행하기 전에 이미 설치되어 있는 경우 foobar제거하거나 덮어쓸 것인지 또는 이름 충돌을 처리하는 방법을 결정하십시오. foobar이전 버전 대신 새로운 패치 버전을 참조 하는 것이 좋습니다 .

관련 정보