소프트웨어 패치를 어떻게 적용합니까?


답변:


21

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

패치는 소스 코드에 대한 일련의 삽입 및 삭제입니다. 이러한 이유로 패치를 사용하려면 패치를 적용한 후 소스에서 응용 프로그램 (예 : "foobar")을 빌드해야합니다. 따라서 단계적으로 :

1. foobar 의 소스 패키지를 가져옵니다 .

대부분의 리눅스 배포판 (nb 패칭은 리눅스에 고유하지 않음)에는이 목적으로 사용할 수있는 "소스 패키지"가 있지만, 이기종이기 때문에 여기서는 원래 소스의 형식 만 참조 할 것입니다. 원본 소스는 배포판의 일부가 아니므로 찾기 어려울 수 있습니다. 시작하기에 좋은 곳은 wikipedia이며, 여기에는 많은 인기있는 응용 프로그램에 대한 기사가 있으며이 기사에는 소스 다운로드가있는 홈페이지 링크가 포함되어 있어야합니다. 당신도 분명히 구글 자신을 할 수 있습니다. 소스 패키지는 다음과 같이 호출됩니다 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- 사용하지 않는 것을 조심 -pALL 슬래시를 제거합니다 전혀. 경로가 절대적이면 (즉,로 시작 /) 아마도 원하는 것입니다. 이제 패치를 적용하십시오 :

patch -p1 < patch.diff

소스가 수정되었습니다. 더 많은 .diff파일 이 있으면 같은 방법으로 적용하십시오.

3. 빌드하고 설치하십시오.

이것은 당신이 소스에서 빌드 뭔가를 통해 갈 것 정상적인 과정이다 - 첫째 ./configure, 다음 make, make check, make install. 마지막 설치 작업을 수행하기 전에 이미 설치되어있는 경우 해당 설치 foobar를 제거 또는 덮어 쓸지 또는 명명 충돌을 처리 할 방법을 결정하십시오. 아마도 foobar이전 버전이 아닌 새로운 패치 버전을 참조 하고 싶을 것입니다 .

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.