커피닉스, 시스템 엔지니어의 쉼터 커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
* HanIRC의 #coffeenix 방
[ 장비 및 회선 후원 ]
HOME > 시스템 관리 / 서버운영 > 패키지 관리 / 패치 / rpm 도움말
검색 : 사이트 WHOIS 웹서버 종류


  patch -p0 와 patch -p1 차이 & patch 사용 (글 동쪽하늘) 작성일 : 2003/10/29 19:15
 
  • 글쓴이 : 좋은진호 ( http://coffeenix.net/ )
  • 조회수 : 12962
          [ 이전화면 / 수정 ]   비밀번호 :     인쇄용 화면
      패치(patch) 사용에 대한 글입니다.
    모두 리눅스 사랑넷(옛 적수네)에 답변으로 올라온 글로,
    하나는 동쪽하늘님, 다른 하나는 세이님이 답변한 것입니다.

    ----------------------------------------------------------------------------
    출처 : 리눅스사랑넷, http://linux-sarang.net/board/?p=read&table=qa&no=197418

    103830번 글의 답장글: RE: patch -p0 와 patch -p1 의 차이점은?
    글쓴이: 동쪽하늘    글쓴날: 2003-08-13 11:01:05    읽은수: 114


    : 제목 그대로 입니다.
    :
    : 어떤때 -p0를 쓰고 어떤때 -p1 을 쓰는지 궁금합니다.
    : 그리고 -p? 의 숫자는 0과 1뿐인가요?
    :
    : 방금 하나를 패치해봤는데, -p1 을 썼더니
    : File to patch :
    : 라고 뜨더군요. 그래서 -p0를 썼더니 묻지 않고 잘 됩니다.
    : 커널패치할때는 -p1으로 했었던거 같은데.. 갑자기 두개의 차이가 궁금해서...


    -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)



    : 그리고 패치후에 나오는 메시지중에
    : Hunk #1 succeeded at 1 with fuzz 2
    : Hunk #2 failed at 353
    : Hunk #3 failed at 374
    : 2 out of 3 hunks failed
    :
    : 이것이 무슨 뜻인지도 좀 알려주시면 고맙겠습니다.


    Hunk는 패치파일에 기록되어 있는 '패치할 조각(덩어리)'입니다.
    보통 패치할 때, 위와 같은 메시지가 없어야 문제없이 정상적으로
    처리가 된 것이지만, fuzz(퍼지, 껴맞추기)로 시도하여 성공하는
    경우에는 위의 첫번째 메시지와 같은 것을 보여주게 됩니다.
    위의 메시지에서 '두번째와 세번째 패치 조각'은 실패를 했네요. :)

    자세한 것은 man patch 를 참고하세요.

    ----------------------------------------------------------------------------
    출처 : 리눅스사랑넷, http://linux-sarang.net/board/?p=read&table=qa&no=190326

    100602번 글의 답장글: RE: patch 라는걸 한번두 안해봤는데..이렇게 하면 되나요??^^
    글쓴이: 세이    글쓴날: 2003-02-03 12:01:44    읽은수: 152    


    : patch를 해보려고 합니다.
    : 근데 개념이 마니 햇갈리네요..역시 첨하는건 어렵고..공부의 필요성입니
    다.^^
    :
    : 일단 다음과 같은 패치를 얻었습니다.
    : 밑에 보시면 RCS file: /home/wine/wine/controls/edit.c,v라고 적혀 있습
    니다
    : 그럼...이걸 패치하기 위해선
    :
    : 1. 제 소스가../home/wine/wine에 존재해야하는 겁니까?
    -> 위치는 아무 곳이나 상관 없습니다. 소스 압축파일에 있는 내용이 그대
    로 풀려있으면 됩니다.

    : 2. 그리고 아래 패치를 하나의 파일에 저장해야하나요?
    : 아니면 index별로 따로 저장해야하나요?
    : index: controls/edit.c
    : Index: dlls/x11drv/keyboard.c
    : .
    : .
    : .
    : 이런 식으로 되어 있는 인덱스들을 edit.patch keyboard.path로 따로
    : 저장을 해서 각각 패치를 해줘야 하는 겁니까?
    :
    : 아니면 wine_xim.patch이런 식으로 하나로 저장해서 패치해줘야하는 겁니
    까?
    일반적으로 패치는 하나의 파일에 저장되어 배포됩니다. 위와 같은 경우에
    는 wine-xim.patch처럼 하나의 파일로 존재합니다. 별도로 index별로 분리
    할 필요없습니다.

    : 3. 마지막으로 패치 방법 입니다.
    :
    : p0 옵션과 p1옵션의 차이점이 무엇인가요? 찾아서 읽어 봤는데도 햇갈리네

    :
    : patch -p1 < ******.patch
    :
    : 이렇게 하면 되는 건가요?
    http://www.linux.sarang.net/paper/package에서 %patch로 찾아보시면 두번
    째 발견되는 %patch에 답이 있습니다.
    -------------------- 원문 -------------------------------------------
    역시  나우에 답이 있었다.  "없앨 슬래쉬 갯수" 라고 하는데 도데체 먼 말
    인가 예가 있으니 한번 다시 긁어와 봐야징. 흐음 도저히 긁어서 이해할 글
    이 아니다.한번 그냥 적어 봐야지 ^^; patch 파일을 보면 맨 위쯤에서 이러
    한 줄을 발견할 수 있을것이다.
       --- usr/src/foobar/foobar.c.orig    Mon Aug 11 02:10:23 1997
       +++ usr/src/foobar/foobar.c         Mon Aug 11 02:03:59 1997
       ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       패치할 파일의 위치를 나타네는데 만약  우리가 /usr/src/foobar 라는 디
    렉토리에 위치하고 있다면 patch < foobar.patch 이런식으로 아무리 해봐도
    파일을 찾을수 없다는 에러가 날것이다. 죽어라 현재 위치에서
    usr/src/foobar 란 디렉토리를 찾을테니까 말이다. 이런식으로 하면 된다.
    patch -p3 < foobar.patch  이해가 가는가? usr/src/foobar/foobar.c 라는
    파일을 찾으라는 것을 p3 을 줌으로써 슬래쉬 3개 만큼 투욱 잘라내고
    foobar.c 를 찾으라고 하는것이다.
       이것이 왜 rpm 패키징에서 자주 쓰이는가? 기본적으로 %patch 명령을  실
    행하는 위치는 BUILD 아래에 압축이 풀린 디렉토리이다.  patch 파일의 내용
    을 보면 보통 foobar/src/foobar.c 이런식으로 프로그램이 풀릴 디렉토리까
    지 포함되어 있다.
       (도데체 내가 먼 말을 하는거지? 그냥 가자.)  그래서 foobar/ 란 부분
    을  스윽 잘라서 src/foobar.c 로 만들어야 하는 일이 많을것이다.  (이전
    버젼부터 쓰던 patch 를 계속 쓰는 경우도 많고 디렉토리의 이름이 틀릴때
    도 많고 하니까)  그래서 보통 %patch -p1 명령을 주고 사용한다.  직접 해
    보면서 몸에 익히면 된다.
    ----------------------------------------------------------------------
    이 patch에서는 -p0를 사용해야 하는 것으로 보인다.
    소스가 풀려있는 디렉토리에 controls/edit.c파일이 있는데 patch에도
    controls/edit.c라고 되어 있기 때문이다.
    patch부분중에서
    --- controls/edit.c ~~~
    +++ controls/edit.c ~~~
    줄을 보면 알 수 있습니다.
      커피닉스 카페 최근 글
    [10/20] Cross Compiler 깔
    [07/14] SSL АО
    [04/26] Re: 도스화면 원격조종 여부
    [04/25] 도스화면 원격조종 여부
    [10/30] Cshell에서 난수 설정
    [10/23] 공항철도주식회사 SE 구인 件
    [01/26] Re: wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/25] wget으로 다른서버에있는 디렉토리를 가져오려고합니다.
    [01/11] 특정 안드로이드 WebView 버전에서 SSL 문제 (WebView 버그)
    [08/01] DNS forwarder (전달자) 서버를 통해서 쿼리하면 역방향을 받아오질 못합니다.
    [05/16] (주)후이즈 시스템엔지니어 (경력자) 모집
    [02/15] [AWS] Cloudfront edge 확인하기
    [01/20] Mobile Service/eCommerce 기업에서 Server / Java / PHP 개발자 구인
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Mobile 개발자를 모십니다.
    [01/11] 탄탄한 퍼블리싱 모바일기업에서 Web Front 개발자를 모십니다.
      New!   최근에 등록한 페이지
      KiCad EDA Suite project (Free/Libre/Open-Source EDA Suite) (CAD)
      오픈캐스케이드 캐드 (OpenCASCADE CAD)
      QCad for Windows --- GNU GPL (Free Software)
      The Hello World Collection
      IPMI를 활용한 리눅스 서버관리
      DNS 설정 검사
      nagiosgraph 설치 방법
      Slony-I 설치 방법 (postgresql replication tool)
      Qmail기반의 Anti spam 시스템 구축하기
      clusterssh

    [ 함께하는 사이트 ]




    운영진 : 좋은진호(truefeel), 야수(yasu), 범냉이, sCag
    2003년 8월 4일~