Go to content Go to menu

   Если вы пытаетесь поставить xtables_addons в вашу систему Centos, например, для подключения к iptables модуля geoip, а у вас не получается скомпилировать пакет, то здесь я опишу один из путей решения.

Сам процесс установки я описывать не буду. Их можно прочесть здесь:

http://andrey.org/iptables-geoip-centos/
http://blogs.hub21.ru/blog/sysadmins/310.html
   

   Так вот, с надеждой вы делаете ./configure && make и у вас вываливается следующая ошибка:

make  all-recursive

make[1]: Entering directory `/root/xtables-addons-1.47'

Making all in extensions

make[2]: Entering directory `/root/xtables-addons-1.47/extensions'

Xtables-addons 1.47 - Linux 2.6.32-431.5.1.el6.x86_64

if [ -n "/lib/modules/2.6.32-431.5.1.el6.x86_64/build" ]; then make -C /lib/modules/2.6.32-431.5.1.el6.x86_64/build M=/root/xtables-addons-1.47/extensions modules; fi;

make[3]: Entering directory `/usr/src/kernels/2.6.32-431.5.1.el6.x86_64'

  CC [M]  /root/xtables-addons-1.47/extensions/compat_xtables.o

/root/xtables-addons-1.47/extensions/compat_xtables.c: In function ‘xtnu_ipv6_find_hdr’:

/root/xtables-addons-1.47/extensions/compat_xtables.c:633: error: too few arguments to function ‘ipv6_find_hdr’

make[4]: *** [/root/xtables-addons-1.47/extensions/compat_xtables.o] Error 1

make[3]: *** [_module_/root/xtables-addons-1.47/extensions] Error 2

make[3]: Leaving directory `/usr/src/kernels/2.6.32-431.5.1.el6.x86_64'

make[2]: *** [modules] Error 2

make[2]: Leaving directory `/root/xtables-addons-1.47/extensions'

make[1]: *** [all-recursive] Error 1

make[1]: Leaving directory `/root/xtables-addons-1.47'

make: *** [all] Error 2

    Это значит в вашей версии ядра нет функции ipv6_find_hdr. Судя по описаниям, она была удалена начиная с версии 2.6.32-384. Решение просто:

    Открываем файл ./extensions/compat_xtables.c и удаляем строки между EXPORT_SYMBOL_GPL(HX_memmem); и MODULE_LICENSE("GPL");

Они примерно, в зависимости от версии xtables_addons, могут выглядеть так:

 

#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 3, 0) && defined(WITH_IPV6)
int xtnu_ipv6_skip_exthdr(const struct sk_buff *skb, int start,
    uint8_t *nexthdrp, __be16 *fragoffp)
{
        return ipv6_skip_exthdr(skb, start, nexthdrp);
}
EXPORT_SYMBOL_GPL(xtnu_ipv6_skip_exthdr);
#endif
#if LINUX_VERSION_CODE < KERNEL_VERSION(3, 5, 0) && defined(WITH_IPV6)
int xtnu_ipv6_find_hdr(const struct sk_buff *skb, unsigned int *offset,
    int target, unsigned short *fragoff, int *fragflg)
{
        return ipv6_find_hdr(skb, offset, target, fragoff);
}
EXPORT_SYMBOL_GPL(xtnu_ipv6_find_hdr);
#endif

 

    После того, как вы их удалили, пробуем скомпилировать опять. И, о чудо! Все завелось =) И это все даже будет работать, но только с IPv4, для iptables IPv6, увы, нет.

    Надеюсь, помог кому-либо.

Leave A Reply

Помощь по Textile