RSS구독하기:SUBSCRIBE TO RSS FEED
즐겨찾기추가:ADD FAVORITE
글쓰기:POST
관리자:ADMINISTRATOR
출처 블로그 > Human Packet
원본 http://blog.naver.com/jabusunin/20012727557
많은 개발자들은 자신들이 개발하는 프로그램 소스의 버전을 유지하기 위해, 원소스 외에 패치파일을 준비한다. 일반적으로 패치파일은 diff를 사용해서 작성하고, 해당 패치파일을 적용할 때는 patch 명령어를 사용해 패치적용을 완료한다.
필자는 처음에 커널 공부를 할 때, 패치파일 사용으로 어려움을 겪은적이 있다. 실제 버전업된 커널 소스 파일 전체를 받는게 나은지, 아님, 하나의 커널 소스 파일을 받고, 패치 파일만 받는게 낳은지 잠시나마 고민했던 적도 있다.
따라서, diff 와 patch 파일은 커널에만 관련있는 내용은 아니나, 커널 패치와 유용히 사용될 수 있는 명령어이므로, 아래에서 살펴보고자 합니다.
기본 개념 및 사용법은 아래의 설명을 따라하기 식으로 해보면, 이해할 수 있을겁니다.

  • Diff 사용법

    1. 두개의 빈 파일을 생성합니다.
    [css@css ~]$ touch aaa bbb
    [css@css ~]$ ls
    aaa bbb


    2. aaa에 아래의 라인을 추가합니다. (vi 사용법은 애플리케이션 소개란을 참고하세요. ^^)

    [css@css ~]$ vi aaa

    This is first line // 라인을 추가합니다.



    3. aaa 를 bbb로 복사하고, 새로운 라인을 추가합니다.
    [css@css ~]$ cp aaa bbb
    [css@css ~]$ vi bbb
    This is a first line
    This is a second line // 라인 추가


    4. aaa와 bbb의 변경 부분을 패치파일로 만듭니다. 그리고, 변경되는 부분이 패치파일에 어떻게 저장되나 확인합니다.
    [css@css ~]$ diff -urN aaa bbb > mydiff.patch
    [css@css ~]# cat mydiff.patch
    --- aaa 2005-03-07 20:23:22.566188880 +0900
    +++ bbb 2005-03-07 20:23:32.986604736 +0900
    @@ -1 +1,2 @@
    this is a first line
    +this is a second line


    5. bbb를 지우고, 패치파일의 내용을 aaa에 적용시킵니다.
    [css@css ~]$ rm -f bbb
    [css@css ~]$ patch -p 0 < mydiff.patch
    patching file aaa


    6. aaa에 패치파일의 내용이 적용되었나 확인합니다.
    [css@css ~]$ cat aaa
    this is a first line
    this is a second line // 라인이 추가되었음


    위의 예제에서는 diff와 patch 명령어의 사용과 개념을 이해하기 위해 간략히 설명했지만,
    실제 소스의 크기가 상당한 경우, 원소스(aaa)를 가지고, 패치파일만 가지고 작업합니다.

    그럼, diff와 patch의 기본 개념 및 사용법을 이해했으니, 커널과 관련되어 알아보도록 하지요..


  • 커널 패치파일 만들기
    일반적으로 커널에 자신만의 변경 내용을 담고자 하고, 그 패치를 제공하고자 하면, 아래의 방법 대로 하시면 됩니다.

    1. 바닐라 커널 소스를 준비한다. (kernel.org 에서 다운로드

    2. 커널 소스의 복사본을 준비하고, 해당 소스에 변경을 가한다.
    [root@css kernels]# cp -a linux-2.6.9 linux-2.6.9-my
    Linux-2.6.9-1 디렉토리내 원하는 부분 소스 수정


    3. 소스 수정이 끝나면, 패치파일을 작성한다.
    [root@css kernels]# diff -urN linux-2.6.9 linux-2.6.9-my > mykernel.patch
    [root@css kernels]# gzip -9 mykernel.patch(보통 커널의 경우, 패치파일도 사이즈가 크므로, 압축을 합니다.)
    [root@css kernels]# ls
    linux-2.6.9 linux-2.6.9-my mykernel.patch

    gzip으로 압축하면, mykernel.patch는 mykernel.patch.gz으로 파일명이 변경됩니다.

    4. 원소스에 패치 적용을 한다.

    [root@css kernels]# pwd
    /usr/src/
    [root@css kernels]# ls
    linux-2.6.9 linux-2.6.9-my mykernel.patch
    [root@css kernels]# patch ?p 0 < mykernel.patch (패치 파일이 압축되지 않은 경우)
    [root@css kernels]# gzip ?cd mykernel.patch.gz| patch ?p0 (패치 파일이 압축된 경우. 압축을 풀고 패치 적용)


    커널과 관련해, diff/patch 명령어를 알아보았습니다. 위의 명령어 설명은 기본적인 내용만 다루었습니다.

    실제 리눅스에서 자주 언급되는 커널이 어떠한 것이 있는지, 자세한 명령어 활용은 어떻게 되는지는 다음에 다시 글을 올리겠습니다.

  • 2006/09/08 14:10 2006/09/08 14:10
    이 글에는 트랙백을 보낼 수 없습니다
    웅쓰:웅자의 상상플러스
    웅자의 상상플러스
    전체 (379)
    게임 (5)
    영화 (2)
    기타 (23)
    맛집 (5)
    영어 (2)
    대수학 (3)
    형태소 (5)
    Hacking (9)
    Linux (112)
    HTML (48)
    Application_developing (48)
    Web_developing (102)
    Window (11)
    «   2024/12   »
    1 2 3 4 5 6 7
    8 9 10 11 12 13 14
    15 16 17 18 19 20 21
    22 23 24 25 26 27 28
    29 30 31        
    1. 2016/01 (1)
    2. 2015/12 (3)
    3. 2015/10 (3)
    4. 2015/03 (2)
    5. 2015/01 (4)