Приступаем.
Качаем и ставим:
yum install kernel-devel-2.6.22.1-41.fc7
yum install kernel-2.6.22.1-41.fc7
yum install kernel-headers-2.6.22.1-41.fc7
yun install rpm-build
Кроме того качаем и ставим:
kernel-2.6.22.1-41.fc7.src.rpm
iptables-1.3.7-2.src.rpm
При установке этих пакетов, если вы получили ошибку “error: cannot create %sourcedir /usr/src/redhat/SOURCES”, необходимо создать директорию /usr/src/redhat
При установке SRPMS возможно будет нужно разрешить зависимости, которые yum решает без проблем.
И самое главное: качаем исходники ipp2p-0.8.2.tar.gz.
Ну что же, будем собирать...
Заходим в /usr/src/redhat/SPECS и делаем:
rpmbuild -bp iptables.spec
cp /usr/src/kernels/2.6.22.1-41.fc7-i686/Module.symvers \ /usr/src/redhat/BUILD/kernel-2.6.22/linux-2.6.22.i386/Module.symvers
rpmbuild -bp kernel-2.6.spec
make /usr/src/redhat/BUILD/kernel-2.6.22/linux-2.6.22.i386/scripts/kconfig/
Идем в директорию с исходниками ipp2p и редактируем Makefile:
Вставляем
KERNEL_SRC=/usr/src/redhat/BUILD/kernel-2.6.22/linux-2.6.22.i386
перед
KERNEL_SRC ?= $(firstword $(wildcard …
и
IPTABLES_SRC=/usr/src/redhat/BUILD/iptables-1.3.7
перед
ifeq ($(IPTABLES_SRC),)
Далее накладываем такой патч:
filename: ipp2p-0.8.2-kernel-2.6.22.patch
diff -Nru ipp2p-0.8.2.orig/ipt_ipp2p.c ipp2p-0.8.2/ipt_ipp2p.c
--- ipp2p-0.8.2.orig/ipt_ipp2p.c 2006-09-27 12:52:00.000000000 +0300
+++ ipp2p-0.8.2/ipt_ipp2p.c 2007-07-11 08:00:26.000000000 +0300
@@ -2,9 +2,18 @@
#include
#endif
#include
-#include
#include
+
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21)
+# include
+# define ipt_register_match xt_register_match
+# define ipt_unregister_match xt_unregister_match
+# define ipt_match xt_match
+#else
+# include
//#include
+#endif /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,21) */
+
#include "ipt_ipp2p.h"
#include
#include
@@ -748,7 +757,11 @@
{
const struct ipt_p2p_info *info = matchinfo;
unsigned char *haystack;
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,22)
+ struct iphdr *ip = ip_hdr(skb);
+#else
struct iphdr *ip = skb->nh.iph;
+#endif
int p2p_result = 0, i = 0;
// int head_len;
int hlen = ntohs(ip->tot_len)-(ip->ihl*4); /*hlen = packet-data length*/
@@ -831,7 +844,9 @@
const struct ipt_ip *ip,
#endif
void *matchinfo,
+#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,18)
unsigned int matchsize,
+#endif
unsigned int hook_mask)
{
/* Must specify -p tcp */
@@ -843,15 +858,6 @@
}
-// TODO: find out what this structure is for (scheme taken
-// from kernel sources)
-// content seems to have a length of 8 bytes
-// (at least on my x86 machine)
-struct ipp2p_match_info {
- long int dunno_what_this_is_for;
- long int i_also_dunno_what_this_is_for;
- -};
-
static struct ipt_match ipp2p_match = {
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,0)
{ NULL, NULL },
@@ -860,17 +866,16 @@
&checkentry,
NULL,
THIS_MODULE
-#endif
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,0)) && (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17))
+#elif LINUX_VERSION_CODE < KERNEL_VERSION(2,6,17)
.name = "ipp2p",
.match = &match,
.checkentry = &checkentry,
.me = THIS_MODULE,
-#elif LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17)
+#else /* LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,17) */
.name = "ipp2p",
.match = &match,
.family = AF_INET,
- .matchsize = sizeof(struct ipp2p_match_info),
+ .matchsize = XT_ALIGN(sizeof(struct ipt_p2p_info)),
.checkentry = &checkentry,
.me = THIS_MODULE,
#endif
и вносим такие изменения в Makefile:
filename: ipp2p-0.8.2-Makefile.patch
diff -Nru ipp2p-0.8.2.orig/Makefile ipp2p-0.8.2/Makefile
--- ipp2p-0.8.2/Makefile 2006-12-09 03:17:52.000000000 +0200
+++ ipp2p-0.8.2-fix/Makefile 2006-12-09 03:10:37.000000000 +0200
@@ -64,7 +64,7 @@
libipt_ipp2p.so: libipt_ipp2p.c ipt_ipp2p.h
$(CC) $(CFLAGS) $(IPTABLES_OPTION) $(IPTABLES_INCLUDE) -fPIC -c libipt_ipp2p.c
- ld -shared -o libipt_ipp2p.so libipt_ipp2p.o
+ $(CC) -shared -o libipt_ipp2p.so libipt_ipp2p.o
Если все наложилось без ошибок значит вы все сделали правильно ;)
Далее собираем ipp2p:
make
Должно все собраться без ошибок.
Копируем libipt_ipp2p.so в /lib/iptables и ipt_ipp2p.ko в /lib/modules/2.6.22.1-41.fc7/kernel/net/ipv4/netfilter и делаем
depmod -a
Все. Поздравляю с успешно выполненой работой. :)
Материалы:
ipp2p HOWTO for Fedora Core 6
Ipp2p 0.8.2 fix for iptables 1.3.6
Комментариев нет:
Отправить комментарий