Comment lancer un script à la fin de la séquence de démarrage ? - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 15-07-2007 à 17:48:52
généralement, si le démarrage est de type SysV, c'est rc.local qui est éxécuté en dernier. le mettre à la fin de ce fichier devrait faire ce que tu cherches.
Marsh Posté le 15-07-2007 à 18:15:45
Bon..après investigation ce n'est pas le timing qui pose problème, en fait quand le système lance le script j'ai des erreurs (could'nt find /lib/iptables...) tandis que si je le lance en root tout fonctionne !! Que faut il faire !?
Marsh Posté le 15-07-2007 à 18:17:30
sans les erreurs exactes et le contenu du script, il est difficile de te répondre.
Marsh Posté le 15-07-2007 à 18:23:09
Je sens que je vais paraitre idiot mais je n'arrive pas à retrouver les erreurs affichés dans les logs :s
Marsh Posté le 15-07-2007 à 18:38:35
Pardon je veux dire que je n'arrive pas à retrouver les erreurs qui one été affichées sur l'écran...
Marsh Posté le 15-07-2007 à 19:02:57
Parce qu'il faudrait rediriger les erreurs dans un fichier spécial ?
Parce qu'il faudrait utiliser les trucs prévus pour le logging dans les scripts d'init.
Regarde les autres scripts.
Ou affiche nous ton script pour voir les erreurs.
Marsh Posté le 15-07-2007 à 19:26:44
[EDIT] Problème d'encodage de fichier résolu
Je vais tacher de trouver un moyen de vous faire parvenir les erreurs.
Marsh Posté le 15-07-2007 à 19:38:15
Voici les erreurs que j'arrive à voir sur l'écran:
Code :
|
Et il y en a une floppée comme ça, je me demande si ce n'est pas un problème de chargement de modules, mais il me semble qu'ils sont compilés en dur dans le noyau....enfin toujours est il que après m'être loggé ça fonctionne bien !
Marsh Posté le 16-07-2007 à 09:42:10
redvivi a écrit : Voici les erreurs que j'arrive à voir sur l'écran:
|
mets aussi la ligne de commande pour voir...
Marsh Posté le 16-07-2007 à 09:50:15
Voici le script entier:
Code :
|
Marsh Posté le 16-07-2007 à 10:01:42
redvivi a écrit :
|
Si layer 7 est compilé en dur, je pense qu'il faut pas préciser à iptables de charger le module...
Marsh Posté le 16-07-2007 à 10:43:24
ReplyMarsh Posté le 16-07-2007 à 10:57:53
redvivi a écrit : Mais dans ce cas pourquoi celà fonctionne-t-il après le login ? |
bonne question, tu es sur que les messages d'erreurs ne sont pas dans /var/log/messages ?
Marsh Posté le 16-07-2007 à 11:13:25
Non, j'ai déjà regardé...pour moi je pense que c'est un problème de permissions, il y a un moyen pour exécuter ce script en tant que root ? Ou alors créer un autologin au niveau de la machine et qui lance le script ensuite ?
Marsh Posté le 16-07-2007 à 11:23:19
je suis pas sur à 100% mais je pense qu'il est lancé en root au démarrage...
edit: t'as essayé en retirant les -m layer7 ?
Marsh Posté le 16-07-2007 à 11:33:49
non, je ne suis pas sur place actuellement, mais pour moi ce n'est pas un problème de module vu que la syntaxe du script fonctionne après login, à ce que je sache il n'y a pas de déchargement de module, en plus il est compilé en dur.... Mais je pense que le script est lancé en tant que sys mais pas root.
Marsh Posté le 16-07-2007 à 21:18:02
pour etre sur de qui tu es au démarrage rajoutes ca au debut du script
echo `id`> /tmp/whoami
et rebootes
Marsh Posté le 16-07-2007 à 21:20:54
sinon /lib/iptables/libipt_kay.so, personne connait... t'es sûr ?
Marsh Posté le 16-07-2007 à 21:50:07
non j'ai du mal recopier l'erreur, mais c'est ça fait la même chose avec toutes les libs.
Marsh Posté le 17-07-2007 à 10:17:13
l0ky a écrit : pour etre sur de qui tu es au démarrage rajoutes ca au debut du script |
Marsh Posté le 19-07-2007 à 13:51:44
redvivi a écrit : Voici les erreurs que j'arrive à voir sur l'écran:
|
J'ai l'impression que iptables essaye de charger la bibliothèque libipt_kay.so pour utiliser le module layer7 (-m layer7).
Vérifie si la bibliothèque n'est pas située à un autre endroit avec par exemple un
find / -name "libipt_kay*" |
Marsh Posté le 20-07-2007 à 22:24:42
Non la librairie est bien dans /lib/iptables/....j'ai regardé le truc du whoami, et le script est bien lancé en ROOT
Marsh Posté le 20-07-2007 à 22:31:51
J'ai l'erreur exacte:
Code :
|
C'est ce type d'erreur là que j'ai, maintenant je ne vois que la fin des erreurs, si ça se trouve la toute première erreur donne la solution mais comme les logs n'indiquent rien, à moins de rediriger l'erreur standard (comment on fait ?) je vois mal comment faire.
Marsh Posté le 21-07-2007 à 10:29:10
redvivi a écrit : J'ai l'erreur exacte:
|
Pour les logs, met ça au début de ton script :
exec 2> /tmp/err.log |
L'option -m indique à iptables qu'il doit utiliser le module layer7, il essaye donc de charger la librairie /lib/iptables/lipipt_layer7.so
Vu ton erreur, soit il ne trouve pas le fichier soit il n'arrive pas à le charger.
Rajoute ceci en début et en fin de ton script :
ls -l /lib/iptables/lipipt_layer7.so >> /tmp/verif.log 2>&1 |
Vérifie si layer7 est un module :
find /lib/modules/`uname -r` -name "*layer7*" |
Si c'est un module, il devrait apparaître dans le résultat du lsmod.
Marsh Posté le 21-07-2007 à 10:52:24
Je voudrais tout d'abord vous remercier pour vos réponses, voici ce que contient le fichier verif.log (j'ai enlevé les lignes non significatives:
Code :
|
Code :
|
Voici err.log:
Code :
|
La commande
Code :
|
ne trouve rien, ni le lsmod pour le fichier concerné, mais ça me semble logique puisque j'ai tout compilé en dur pour tout ce qui concerne iptables.
Marsh Posté le 21-07-2007 à 11:07:17
A priori, vu le résultat du ls, la lib n'est pas dans /lib/iptables.
Il faut touver où elle se trouve puis faire un lien dans /lib/iptables.
Marsh Posté le 21-07-2007 à 11:53:54
ton iptables ne supporte donc pas le match layer 7...
Le plus simple étant de récupérer les sources d'iptables le patcher si nécessaire avec et le recompiler
Marsh Posté le 21-07-2007 à 11:58:50
Si il le supporte...je te rappelle que tout fonctionne apres le login
Marsh Posté le 21-07-2007 à 12:03:01
si c'est l'iptables standard de debian, je ne penses pas :
[ root@mano ~ ] Try `iptables -h' or 'iptables --help' for more information. [ root@mano ~ ] Try `iptables -h' or 'iptables --help' for more information. [ root@mano ~ ] Usage: iptables -[AD] chain rule-specification [options] Commands: [ root@mano ~ ] |
Ce type de commande iptables -m 'match' --help te permet d'avoir l'aide associé à cette commande. si iptables retourne ce genre d'erreur c'est que ne supportes pas ce match.
Donc si ca mache apres le login c'est que ce n'est pas le meme iptables.
Ton PATH en root apres le login peut etre différent du PATH dans ton script au démarrage...
Peux tu faire "iptables -m layer7 --help" apres le login et faire which iptables dans ce cas ?
Pour ajouter ce nouveau match il faut le module kernel et que iptables soit compiler avec le support.
Marsh Posté le 21-07-2007 à 12:14:37
Pour résumer et reprendre depuis le début :
1. A partir d'un shell root, tu n'as aucune erreur en exécutant ce script et iptables -L -v -n te rends exactement les règles que tu as installé ?
2. As tu recompilé iptables à un moment donné ?
3. As tu recompilé le kernel à un moment donné ?
4. Peux tu faire un which iptables dans un shell root pour vérifier où il se trouve
5. peux tu faire un iptables -m layer7 --help pour vérifier que ton iptables en shell root supporte ce match ?
Marsh Posté le 21-07-2007 à 12:49:27
1. Oui
2. Oui
3. Oui
4. ceci me donne
Code :
|
5. Voici ce que me donne la commande:
Code :
|
J'ai une information interessante: effectivement les librairies étaient dans /usr/local et pas dans /lib/modules, j'ai fait des liens et maintenant il trouve les librairies MAIS:
- Quand je le lance avec rc.local, voici ce que j'ai dans err.log:
Code :
|
- Quand je le lance en root, aucune erreur dans err.log
Marsh Posté le 21-07-2007 à 13:37:04
Dans ton script remplace iptables par /usr/local/sbin/iptables
Marsh Posté le 21-07-2007 à 14:49:34
redvivi a écrit : 4. ceci me donne
|
Donc vraissemblablement quand tu es en root ta variable $PATH contient /usr/local/sbin et au boot, ta variable PATH ne le contient pas... De ce fait en root (login) le iptables vient de /usr/local/sbin et pas au boot.
Marsh Posté le 21-07-2007 à 16:24:10
ReplyMarsh Posté le 21-07-2007 à 16:32:11
redvivi a écrit : Est-ce prudent de remplacer l'iptables de bin par celui de usr/local/bin ? |
ce qui serait plus prudent, c'est de n'avoir qu'un iptables d'installé... Maintenant, si celui qui marche est dans sbin, faut prendre celui là...
Marsh Posté le 15-07-2007 à 17:46:36
Bonjour à tous !
J'ai un problème, j'ai un script qui nécessite d'être lancé en toute fin de séquence de démarrage de la machue (juste avant le prompt du login), j'ai essayé de bidouiller les priorités avec les liens dans /etc/rcX.d mais ça ne fonctionne pas, j'aurais voulu savoir si lil y avait un moyen de retarder l'éxécution du script (en mettant un compte à rebours intégré au code en lui meme peut etre ) ?
Merci d'avance !
RedVivi