ies4linux를 사용중에 ie6의 불안정함과 여러가지 자잘한 불편함으로 인해 고생하던 중 채널 지인의 도움으로 패치를 진행하게 되었다.

kernel32.patch인데 이 패치의 효과는 다음과 같다고 한다.

  • 우분투에서 IE 사용시 CPU점유율이 100%로 치솟는 문제 해결
  • wineserver의 메모리 누수 해결
  • IE 종료 후에도 계속 프로세스에 잔류하는 문제 해결

이번 작업을 통해 개인적으로 패키지에 패치를 적용하여 패키지를 다시 빌드하는 방법을 새로이 알게 되었다.

그럼 패치를 적용해 보자.

1. 패치다운로드
 : 원래 링크가 어딘지 모르겠다.

2. 패키지 다운로드
 : 일반유저로 apt-get source를 실행한다

$ cd tmp
$ apt-get source wine
$ ls
wine-1.0.1                   wine_1.0.1-0ubuntu6.dsc
wine_1.0.1-0ubuntu6.diff.gz  wine_1.0.1.orig.tar.gz
3. 패키지 빌드에 필요한 패키지 설치
$ sudo apt-get build-dep wine
$ sudo apt-get install fakeroot fakeroot-ng
4. 패치
다운받은 kernel32.patch 파일을 wine-1.0.1 디렉토리로 복사한 뒤 아래와 같이 진행한다
$ patch -p1 < kernel32.patch
patching file dlls/kernel32/sync.c
Reversed (or previously applied) patch detected!  Assume -R? [n]  y 를 입력
5. 패키지 빌드(생성)
$ fakeroot debian/rules binary
컴파일 과정이 마치고 나면 현재 디렉토리의 상위 디레토리에 빌드한 패키지가 생성된다.

6. wine 재설치
$ sudo dpkg -i wine_1.0.1-0ubuntu6_i386.deb

참고 patch 에서 -pNum 옵션
 출처 : http://coffeenix.net/board_print.php?bd_code=110


-pNUM 옵션은 패치 파일에 명시되어 있는 '패치할 파일의 위치'를
제대로 찾아주게 하기위한, 'path에서 제거할 prefix의 개수'정도
의 의미를 지닌다고 할 수 있습니다. --strip=NUM 과 같습니다.

예를 들어, 패치 파일에 '패치할 파일의 위치(이름)'가
/home/dcpark/idst/src/test.c 와 같이 적혀 있을 경우...
-p0 는 '하나도 수정하지 않은' 전 path가 포함된 것을,
-p1 은 '첫번째 슬래쉬가 빠진' home/dcpark/idst/src/test.c를,
-p4 는 '내번째 슬래쉬 앞까지 빠진' src/test.c를
'패치할 파일의 이름'으로 인식하게 합니다.
-p 옵션을 주지않는 다면, test.c 만 파일이름으로
간주하고 패치를 시도합니다.

보통의 경우, 소스 디렉토리 전체를 백업해두고
(cp -rf /home/dcpark/package /home/dcpark/package.orig)
소스(예: /home/dcpark/package/src/test.c)를 수정해서
패치파일을 만들기때문에
(diff -uNr package.orig package > patch.diff)...
패치할 소스 패키지의 루트디렉토리에서
-p1 을 사용하여 패치를 하는 것입니다.
(cd /home/dcpark/package/ && pach -p1 < where/patch.diff)