리눅스에서 patch 파일을 만드는 방법입니다.

– 사용법

diff -uN [원본파일] [수정파일] > [저장 될 패치 파일]

필자는 vsftpd 2.3.0 버전에서 한글이 로그에서 물음표(?)로 표시되는 것과 SSL을 사용할수 있도록 패치 해보았습니다.

[root@yongbok ~]# cd /usr/local/src/vsftpd-2.3.0
[root@yongbok ~]# diff -uN builddefs.h builddefs_patch.h > vsftpd-hangul-log.patch
[root@yongbok ~]# diff -uN logging.c logging_patch.c >> vsftpd-hangul-log.patch
[root@yongbok ~]# diff -uN postlogin.c postlogin_patch.c >> vsftpd-hangul-log.patch
[root@yongbok ~]# cat vsftpd-hangul-log.patch

— builddefs.h    2010-08-06 09:50:31.000000000 +0900
+++ builddefs_patch.h    2010-08-26 23:45:41.000000000 +0900
@@ -3,7 +3,7 @@
 
 #undef VSF_BUILD_TCPWRAPPERS
 #define VSF_BUILD_PAM
-#undef VSF_BUILD_SSL
+#define VSF_BUILD_SSL
 
 #endif /* VSF_BUILDDEFS_H */
 
— logging.c    2009-10-19 12:24:23.000000000 +0900
+++ logging_patch.c    2010-08-26 23:46:10.000000000 +0900
@@ -159,7 +159,7 @@
       return;
     }
   }
–  str_replace_unprintable(p_str, ‘?’);
+  /* str_replace_unprintable(p_str, ‘?’); */
   str_append_char(p_str, ‘\n’);
   /* Ignore write failure; maybe the disk filled etc. */
   (void) str_write_loop(p_str, fd);
— postlogin.c    2010-03-26 13:01:06.000000000 +0900
+++ postlogin_patch.c    2010-08-26 23:47:05.000000000 +0900
@@ -129,7 +129,7 @@
         str_append_str(&proctitle_str, &p_sess->ftp_arg_str);
       }
       /* Suggestion from Solar */
–      str_replace_unprintable(&proctitle_str, ‘?’);
+      /* str_replace_unprintable(&proctitle_str, ‘?’); */
       vsf_sysutil_setproctitle_str(&proctitle_str);
       str_free(&proctitle_str);
     }

– patch 방법

[root@yongbok ~]# cd /usr/local/src/vsftpd-2.3.0
[root@yongbok ~]# patch -p0 < vsftpd-hangul-log.patch

Hmm…  Looks like a unified diff to me…
The text leading up to this was:
————————–
|— builddefs.h        2010-08-06 09:50:31.000000000 +0900
|+++ builddefs_patch.h  2010-08-26 23:45:41.000000000 +0900
————————–
Patching file builddefs.h using Plan A…
Hunk #1 succeeded at 3.
Hmm…  The next patch looks like a unified diff to me…
The text leading up to this was:
————————–
|— logging.c  2009-10-19 12:24:23.000000000 +0900
|+++ logging_patch.c    2010-08-26 23:46:10.000000000 +0900
————————–
Patching file logging.c using Plan A…
Hunk #1 succeeded at 159.
Hmm…  The next patch looks like a unified diff to me…
The text leading up to this was:
————————–
|— postlogin.c        2010-03-26 13:01:06.000000000 +0900
|+++ postlogin_patch.c  2010-08-26 23:47:05.000000000 +0900
————————–
Patching file postlogin.c using Plan A…
Hunk #1 succeeded at 129.
done