Bonjour !
Afin d’étendre iptables, je voulais mettre en œuvre une nouvelle extension, et pour ce la j’ai codé 3 programmes en C ! le header.h,libipt_extension.c et ipt_extension.c. Je travaille sur un noyau de linux 2.6.31-14 (qui existe sur ubuntu 9.10) et la version d’iptables disponible est 1.4.4 ! J’ai téléchargé 1.4.0 car cette version la contient le fichier makefile pour que je puisse ajouter ma nouvelle extension ! j’ai sui les procédures de Rusty Russell et Nicola Boulianne mais en fin j’ai pas pu compiler le libipt_extension.c et ipt_extension.c (mais ca marche avec le header.h), j’ai cru que cela est a cause de gcc (car il m’indique des erreurs enfaite sont des fonctions prédéfinis pour étendre iptables comme parse,init et les fonctions help,print, save …etc) alors j’ai upgrade le gcc et finalement les mêmes erreurs apparaissent ! Et dans ce cas la je crois que je dois compiler le noyau 2.6.31-14 avec iptables 1.4.0rc1 entièrement avec les nouveaux modules (y compris la nouvelle extension), j’ai téléchargé le patch-o-matic mais je n’ai aucune idée si je suis sur la bonne voie pour réaliser mon travaille et si oui comment faire pour compiler noyau+iptables (des versions que je les dispose) et si non comment faire ??? Je vous remercie
Oula, c’est du lourd, ça fait trop longtemps que je n’ai pas bidouillé avec patchomatic pour te répondre, donc je vais laisser d’autres le faire à ma place.
Par contre, es tu sûr que ta question n’aurait pas plutot sa place dans la section programmation, ou elle aurait moins de chance de se retrouver envoyée en deuxiême page des limbes du forum par les demandes de dépannage de carte graphique ou autres ?
Je peux basculer le fil là bas si tu veux.
Faudrait déjà commencer par nous dire précisément quelles sont les erreurs en question (faire un copier/coller des premières lignes d’erreur, par exemple).
Sans ça on va avoir du mal à comprendre d’où vient le souci.
J’avais dit la section “programmation”, pas “trucs et astuces”.
j’ai donc supprimé ton post là bas, et je bascule ce fil dans la section programmation.
sinon, syam a raison: ça serait bien un peu de précisions.
par exemple, outre les erreurs, as tu vèrifié que bien les bons headers noyau, build-essentials, ce genre de trucs.
had been removed !
C’est bizarre ton histoire, notament parceque pour faire les choses proprement, normalement, 99 fois sur 100, tu n’as pas à appeler gcc toi même. Sois tu fais un makefile pour préciser les chemins de recherche des include et les diverses options de compil, soit tu configure ce qu’il faut pour utiliser un outil de compil de modules types module-assistant ou make-kpkg si ce sont des modifs de noyau.
Là, il faudrait que tu sois trés détaillé pour qu’on puisse comprendre ce que tu essayes de faire en génèrant ce .o, en précisant ce que tu as pris comme sources iptables et quelles sont les fichiers que tu essayes de compiler: des sources à toi, un tarball ?
Sinon, je ne sais pas ce que tu essayes de faire, là, mais tu as essayé de faire plutot un make libipt_shape.o ?
Tes erreurs sont provoquées par des fichiers manquants ou introuvables.
Pour iptables.h / module.h / skbuff.h / spinlock.h / interrupt.h : ils font partie des headers du noyau.
Pour ipt_shape.h je ne sais pas (je n’ai pas ça chez moi), mais c’est tout de même assez étrange que tu aies libipt_shape.c et ipt_shape.c sans le header correspondant.
Bref, il semble te manquer les headers du noyau et/ou tu as des problèmes de chemin d’inclusion. Commence par chercher de ce côté là…
Et au lieu de t’enquiquiner avec patch-o-matic, vois si tu ne peux pas installer des paquets source plutôt.
Pour savoir si tu as un header donné sur ta machine :
Entre temps je viens de voir le message de mattotop, il a entièrement raison (je n’avais même pas fait gaffe aux commandes gcc ).
oui ! je voudrai avoir en sorte libipt_shape.so ! puisque c’est une extension (target)
alors installes déjà les outils essentiels (build-essentials et les headers) et essayes un make libipt_shape.so plutot que de faire toi même la compil à la main étape par étape sans savoir ce qu’il faut passer comme argument à gcc.
Il existe toutes les librairie meme ipt_shape.h (que je l’ai codé et compilé ) dans le répertoire usr/src/linux-headers-2.6.31-14/include/linux ! pour tester j’ai copie ipt_shape.c dans le meme répertoire et j’ai recompilé apres avoir modifie le header mais les memes erreurs apparaissent.
Lorsque j’ai executé la commande :
make libipt_shape.so
il apparais le msg
make:***No rule to make target ‘libipt_shape.so’. stop.
j’en sais pas quoi faire ?
Puisque tu as codé toi même le module, il te faut un makefile cohérent. Tu as dû prendre exemple sur un module ipt existant pour coder ton truc, non ?Si oui, regardes le makefile (ou Makefile) qui va avec, et adapte le à ton propre projet. Il doit y avoir des flags de compil qui ne s’inventent pas et que tu trouveras dedans.
Oui biensur ! j’ai sui toutes les procedures comme il est indiquer dans ce lien ibiblio.org/pub/linux/docs/l … e367.shtml
la seule diff qu’il a ajouté un match ipaddr (par contre vouderai realisé un target shape)
mais il n’a pas citer la phase compilation ???
Si, tout est expliqué dans la 3ème partie.
Il faut recompiler iptables et le kernel. Es-tu sûr de savoir dans quoi tu t’embarques ?
Oui ! mais Nicolas n’as pas expliquer comment il a compilé ses nouveaux modules ipt_addr.c,libipt_addr.c et ipt_addr.h! je crois que je dois recompiler iptables (avec la nouvelle librairie libipt_shape.c qui se trouve dans usr/src/iptables-1.4.0rc1/extensions) sinon ya pas autre sol !? et pour ipt_shape.c qui se trouve dans usr/src/linux-headers-2.6.31-14/net/ipv4/netfilter j’en sais pas ???
Si, il l’a expliqué : il faut modifier les makefile concernés comme il l’indique, et recompiler.
Pour la compilation proprement dite, si pour iptables ça n’est pas standard (make / make install) alors ça devrait être indiqué dans la doc d’iptables (fichier INSTALL à la racine des sources d’iptables). Pour le kernel, il y a des tutos partout sur internet et notamment sur ce forum.
Vous avez une idée de comment peut on changé la version d’iptables de 1.4.4 a la version d’iptabls 1.4.0 apres avoir télécharger iptables-1.4.0 et le mettre dans usr/src avec son patch ?