커피향이 나는 *NIX
커피닉스
시스템/네트웍/보안을 다루는 곳
*
HanIRC의 #coffeenix 방
[
장비 및 회선 후원
]
> Forum <
IT 일정
N
e
w
!
자동화 프로젝트
HOME
>
시스템 관리 / 서버운영
>
패키지 관리 / 패치 / rpm
도움말
검색 :
사이트
WHOIS
웹서버 종류
patch -p0 와 patch -p1 차이 & patch 사용 (글 동쪽하늘)
작성일 : 2003/10/29 19:15
글쓴이 : 좋은진호 (
http://coffeenix.net/
)
조회수 : 18401
[
이전화면
/
수정
] 비밀번호 :
패치(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 ~~~
줄을 보면 알 수 있습니다.
커피닉스 카페 최근 글
[11/06]
World News Digest:
[06/16]
[질문]SAN 스위치 브로드케이드 dcx8510-4 장비관련입니다.
[04/22]
Re: 영화속에 컴퓨터 이야기 ~스워드피쉬(2001)
[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 확인하기
N
e
w
! 최근에 등록한 페이지
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일~