centos5 geoip patch하기
centos 5 용 geoip 패치 방법 및 커널 커스텀 rpm
간략버젼입니다.
참조에 있는 URL 들을 보시면 됩니다. 단지 기억하기 위한 한글버젼입니다.
참조:http://irdeal.tistory.com/5 CentOS 커널 rpm 빌드하기
위의 글의 원본이자 업데이트 본은 http://wiki.centos.org/HowTos/Custom_Kernel 입니다.
참조:http://www.debian-administration.org/articles/518 Country-based packet filtering with iptables
1. yum groupinstall "Development Tools"
2. yum install kernel-devel
3. yum install rpm-build rpm-libs
이정도로 개발툴은 대충 끝납니다.
커널소스rpm 이 깔렸는지 확인합니다.
/usr/src/redhat/SPECS 디렉에 가서 다음과 같이 실행합니다.
rpmbuild -bp --target=`uname -m` kernel.spec
그러면 /usr/src/redhat/BUILD 디렉토리에 커널소스가 풀리고 패치가 적용됩니다.
커널을 rpm 으로 만들기 위해서 일단 기존의 디렉토리들을 백업해둡니다. ( 패치 파일로 만들기 위해 )
그럼 이제 geoip 를 위해서 소스를 받아봅니다.
커널을 위한 p-o-m 패치와 iptables 를 새로 컴파일 해야합니다.
http://ftp.netfilter.org/pub/patch-o-matic-ng/snapshot/ 여기서 p-o-m 을 받습니다.
http://ftp.netfilter.org/pub/iptables/ 여기서 iptables를 받습니다.
적절한 디렉토리에 둘다 소스를 풉니다.
p-o-m 을 먼저 깝니다. 디렉토리에 진입후에
KERNEL_DIR=<> \
IPTABLES_DIR=<> \
./runme --download
를 해줍니다. ( 이부분이 현재 바뀐 부분입니다. )
그러면 geoip등의 패치를 웹에서 받아서 패치 해줍니다.
( download 하지 않을 경우엔 geoip는 패치 안됩니다. )
위와같이 하고 --download 대신에 geoip 를 넣어서 geoip 를 패치해줍니다.
rpm용 커널의 설정파일을 복사합니다.
cd /usr/src/redhat/BUILD/kernel-버젼/linux-버젼
cp /usr/src/redhat/SOURCES/kernel-버젼-아키텍쳐.config .config
커널을 설정합니다.
make menuconfig
위의 부분에서 geoip 만 모듈로 해주었습니다.
패치파일을 만듭니다. diff 사용법은 검색하면 많이 나옵니다.
그리고 .config 파일의 제일 윗 부분에 다음과 같이 적습니다.
# i386 <-- 64비트가 아닌경우
# x86_64 <-- 64비트인 경우만
그리고 아까의 rpm 설정을 반대로 소스에 복사해줍니다.
cp /usr/src/redhat/BUILD/kernel-버젼/linux-버젼/.config /usr/src/redhat/SOURCES/kernel-버젼-아키텍쳐.config
spec 파일을 수정해줍니다.
/usr/src/redhat/SPECS/kernel.spec 파일을 수정해줍니다.
커널 버젼등의 수정은 알아서 하실것이고.
패치파일을 잘 등록합니다. -__-;;; ( 너무 무책임한가.. )
단 이때 spec에서 #define buildxen 0 로 해줍니다.
xen에는 p-o-m 이든 뭔가 안맞는거 같은데.. 필요가 없어서 고려 않해봤습니다.
rpmbuild -ba --target=`uname -m` kernel.spec
으로 빌드하면 됩니다.
댓글
추천 한방 & 위로
추천 한방 & 위로 올리기;
kernel 을 굳이 빌드할
kernel 을 굳이 빌드할 필요는 없습니다. kernel-devel package 만 있으면 geoip kernel module 만 빌드하면 되죠. 아래 스크립트는 제가 회사에서 사용하는 것입니다. 즉 커널 업데이트 후에 리부팅시에 알아서 모듈 반영이 되죠 :-)
bigmem kernel 을 사용한다면, kernel-devel 을 yum 으로 설치 하는 부분만 잘 맞춰 주시면 사용하는데 별 무리는 없을 겁니다.
아 빼먹은 것이
아 빼먹은 것이 있군요. 위의 script 를 사용하려면 /usr/share/iptables/geoip/ 디렉토리를 생성 하신 후에,
cd /usr/share/iptables/geoip
tar xvfpz geoip-src.tar.gz
과 같이 진행해 주시면, 위의 script 까지 설치가 됩니다. 그리고 yum 을 사용할 수 있는 환경이라면, 그냥 /usr/share/iptables/geoip/geoip-check 를 실행하면 현재 커널의 geoip module 을 생성해 줍니다. rc script 에 걸어 놓으면 커널 업데이트 후 부팅시에 자동으로 geoip module 을 생성해 올려 주겠죠. ^^;
아래 첨부파일의 커널 패치는 RHEL5 에서는 안될 겁니다. RHEL5 에서는 패치를 새로 만들어야 합니다. (2.6.16 이상의 netfilter 변경 사항이 반영이 안되어 있거든요. RHEL4/CentOS4 용입니다.)
마지막에 spec 파일 수정이랑 패치를 어떻게 해야하나요?
centos5 에서 geoip해보려고 열심히 따라 하고있는데, 이거랑 원문봐도 spec파일수정과 패치파일등록을 잘 모르겠네요^^;
보통 패치할때 patch -p1 < 패치파일 .. 아닌가요?
spec 에서 #define buildxen 0 으로만 수정한상태인데 이다음에 어떻게 해야할까요? 괜찮으시다면 답변 부탁드립니다^^;
--
spec 파일을 수정해줍니다.
/usr/src/redhat/SPECS/kernel.spec 파일을 수정해줍니다.
커널 버젼등의 수정은 알아서 하실것이고.
패치파일을 잘 등록합니다. -__-;;; ( 너무 무책임한가.. )
단 이때 spec에서 #define buildxen 0 로 해줍니다.
xen에는 p-o-m 이든 뭔가 안맞는거 같은데.. 필요가 없어서 고려 않해봤습니다.
rpmbuild -ba --target=`uname -m` kernel.spec
으로 빌드하면 됩니다.
커널 빌드 안하고,
커널 빌드 안하고, GeoIP 모듈만 빌들 할 수 있도록 하는 문서를 만들어 보았습니다.
RHEL/CentOS 4,5 에서 가능하도록 정리해 놓았으니 참고하시기 바랍니다.
http://my.oops.org/117
ip_tables: geoip match:
ip_tables: geoip match: invalid size 0 != 96
위와 같은 메시지가 나올때는 geoip 커널 모듈 파일이 실행 권한이 없을 경우 나타 납니다.
chmod 744 ipt_geoip.ko
RHEL 4,5 버전은 위 글에서 받아서 하시면 되고
Fedora Core 8 버전은
ipt_geoip.c 패치를 해줘야 합니다.
댓글 달기