Too many levels of symbolic links

harnis Messages postés 70 Statut Membre -  
harnis Messages postés 70 Statut Membre -
Salut, j'essaye de mettre en place un script de limitation de l'utilisation de la bande passante basé sur Iptables.

Une fois le script crée, j'ai crée un lien symbolique vers /etc/init.d/

Et quand j'esaye de le lancer :
# /etc/init.d/tc.sh start
j'ai un message d'erreur :
bash : too many levels of symbolic links....

J'ai cherché sur google mais franchement je nage... si qlq'un à une idée ou une piste pour m'aider ce serait super.

Merci à tous.
A voir également:

19 réponses

jipicy Messages postés 41342 Statut Modérateur 4 896
 
Salut,

J'ai essayé de voir si le lien tournait en boucle alors j'ai tapé la commande suivante :

ls -l /etc/init.d/tc.sh
lrwxrwxrwx 1 root root 5 fév 23 08:16 /etc/init.d/tc.sh -> tc.sh

Ton lien, il pointe sur lui même là !!! Alors que si j'ai bien tout suivi, il devrait pointer vers "/sbin/tc.sh, non ?
lrwxrwxrwx 1 root root 5 fév 23 08:16 /etc/init.d/tc.sh -> /sbin/tc.sh
1
mamiemando Messages postés 34228 Date d'inscription   Statut Modérateur Dernière intervention   7 897
 
Tu dois avoir un lien symbolique x qui pointe sur y qui lui même tape sur x, d'où une boucle et cette erreur. Pour plus d'infos tape :
man ln

Bonne chance
0
harnis Messages postés 70 Statut Membre 2
 
je m'en sors pas.

Voici la procédure que j'ai trouvé sur internet :

Créez un fichier tc.sh et copiez-collez ceci :
Citation:
#!/bin/bash
#
# Tous les débits sont en Kbits, donc pour récuperer des kilo-octets(Ko), divisez ce chiffre par 8
#
TC=/sbin/tc
DNLD=40Kbit # Limite de download
DWEIGHT=4Kbit # coefficient de DOWNLOAD (Weight Factor) ~ 1/10 of DOWNLOAD Limit
UPLD=25KBit # Limite d'upload Limit
UWEIGHT=2Kbit # Coefficient d'UPLOAD (Weight Factor)

tc_start() {

$TC qdisc add dev eth1 root handle 11: cbq bandwidth 100Mbit avpkt 1000 mpu 64
$TC class add dev eth1 parent 11:0 classid 11:1 cbq rate $DNLD weight $DWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth1 parent 11:0 protocol ip handle 4 fw flowid 11:1

$TC qdisc add dev eth0 root handle 10: cbq bandwidth 10Mbit avpkt 1000 mpu 64
$TC class add dev eth0 parent 10:0 classid 10:1 cbq rate $UPLD weight $UWEIGHT allot 1514 prio 1 avpkt 1000 bounded
$TC filter add dev eth0 parent 10:0 protocol ip handle 3 fw flowid 10:1

}

tc_stop() {

$TC qdisc del dev eth1 root
$TC qdisc del dev eth0 root

}

tc_restart() {

tc_stop
sleep 1
tc_start

}

tc_show() {

echo ""
echo "eth1:"
$TC qdisc show dev eth1
$TC class show dev eth1
$TC filter show dev eth1
echo ""

echo "eth0:"
$TC qdisc show dev eth0
$TC class show dev eth0
$TC filter show dev eth0
echo ""

}

case "$1" in

start)

echo -n "Starting bandwidth shaping: "
tc_start
echo "done"
;;

stop)

echo -n "Stopping bandwidth shaping: "
tc_stop
echo "done"
;;

restart)

echo -n "Restarting bandwidth shaping: "
tc_restart
echo "done"
;;

show)

tc_show
;;

*)

echo "Usage: /etc/init.d/tc.sh {start|stop|restart|show}"
;;

esac

exit 0


Créez un lien pour pouvoir lancer ce script comme un service :
Citation:

chmod 700 tc.sh <--- pour le rendre exécutable
ln -s tc.sh /etc/init.d/tc.sh


Ensuite saisissez l'adresse ip du PC que vous souhaitez brider dans une règle iptables :
Citation:

iptables -t mangle -A FORWARD -s ! 192.168.1.0/24 -d 192.168.1.55 -j MARK --set-mark 4
iptables -t mangle -A FORWARD -s 192.168.1.55 -j MARK --set-mark 3


Ici je bride le poste ayant pour IP 192.168.1.55 qui va downloader à 4 koctets/s et up à 2.
Pour que ça marche n'oubliez pas de lancer tc.sh
Citation:
/etc/init.d/tc.sh start


Voilà.
hé bé ça marche po !
Quand je lance la commande :
#/etc/init.d/tc.sh start
j'ai le message d'erreur...
0
mamiemando Messages postés 34228 Date d'inscription   Statut Modérateur Dernière intervention   7 897
 
Je pense que le problème vient plus du lien que du script. Ne crée pas de lien et met directement ton script dans /etc/init.d

Bonne chance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
harnis Messages postés 70 Statut Membre 2
 
J'ai essayé déjà il me dit
cannot execute binary file...
0
mamiemando Messages postés 34228 Date d'inscription   Statut Modérateur Dernière intervention   7 897
 
Ah oui mais c'est le script shell qu'il faut mettre dans /etc/init.d ! Et ce script fait appel au binaire. J'ai l'impression que tu as mis tc dans /etc/init.d alors qu'il fallait le laisser dans /sbin.
0
harnis Messages postés 70 Statut Membre 2
 
Ok super merci je crois que cé ça. Je testerai ça lundi.

Merci en tout cas.
Je comprend un peu plus chaque jours le fonctionnement de la bête... (je veux dire linux en général)

A+
0
harnis Messages postés 70 Statut Membre 2
 
J'ai essayé de voir si le lien tournait en boucle alors j'ai tapé la commande suivante :

ls -l /etc/init.d/tc.sh
lrwxrwxrwx 1 root root 5 fév 23 08:16 /etc/init.d/tc.sh -> tc.sh


J'ai essayé plusieur solution, notamment de le lancer directement depuis le répertoire où je l'avais créer (/root/) mais quand je veux le lancer j'ai ce message d'erreur :

#cannot execute binary file

Voilà...

Merci pour votre aide
0
harnis Messages postés 70 Statut Membre 2
 
j'ai essayé et voilà :
j'ai crée le lien symolique
ln -s /sbin/tc.sh /etc/init.d/tc.sh
j'ai regardé qu'il pointait bien, ce qui à l'air d'être le cas.
[root@serveur sbin]# ls -l /etc/init.d/tc.sh
lrwxrwxrwx 1 root root 11 fév 23 09:19 /etc/init.d/tc.sh -> /sbin/tc.sh*
J'ai essayé de le lancer et voila...
[root@serveur sbin]# /etc/init.d/tc.sh start
-bash: /etc/init.d/tc.sh: cannot execute binary file
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Euh...! Juste un truc.
Dans ton script la 1ère variable à être initialisée est :
TC=/sbin/tc
Est-ce que ce serait pas mieux :
TC=/sbin/tc.sh
;-))
0
harnis Messages postés 70 Statut Membre 2
 
j'ai modifié le fichier /sbin/tc.sh et remplacé la 1ère variable :

TC=/sbin/tc.sh

Ensuite
j'ai essayé de le démarrer :

/etc/init.d/tc.sh start
-bash: /etc/init.d/tc.sh: cannot execute binary file
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
:-[ désolé, mais je connaissais pas la commande "tc". Je cite le "man" :Donc tu peux remettre ta variable à :
TC=/sbin/tc

Autre chose, la commande existe bien sur ton système ?
0
harnis Messages postés 70 Statut Membre 2
 
#urpmi tcsh
Tout est déjà installé

Je vais péter un plomb. Cela parait tout simple et je galère grave. Franchement je pige pas. J'ai du oulbié un truc évident qlq part mais je sais pas où ?
0
jipicy Messages postés 41342 Statut Modérateur 4 896
 
Nan ! Ca n'a rien à voir avec "tcsh" qui est un shell.
Là on parle de la commande "tc" (man tc) :
DESCRIPTION
       Tc  is  used  to configure Traffic Control in the Linux kernel. Traffic
       Control consists of the following:

       SHAPING
              When traffic is shaped, its rate of transmission is  under  con-
              trol.  Shaping may be more than lowering the available bandwidth
              - it is also used to smooth out bursts  in  traffic  for  better
              network behaviour. Shaping occurs on egress.

       SCHEDULING
              By  scheduling  the  transmission  of  packets it is possible to
              improve interactivity for traffic  that  needs  it  while  still
              guaranteeing  bandwidth  to  bulk  transfers. Reordering is also
              called prioritizing, and happens only on egress.

       POLICING
              Where shaping deals with transmission of traffic, policing  per-
              tains to traffic arriving. Policing thus occurs on ingress.

       DROPPING
              Traffic exceeding a set bandwidth may also be dropped forthwith,
              both on i

       Processing of traffic is controlled by three kinds of objects:  qdiscs,
       classes and filters.
Les deux sont totalement différents :
[jp@MDK tmpfs]$ whereis tc
tc: /sbin/tc /usr/share/man/man8/tc.8.bz2

[jp@MDK tmpfs]$ whereis tcsh
tcsh: /bin/tcsh /usr/share/man/man1/tcsh.1.bz2

[jp@MDK tmpfs]$
;-))
0
harnis Messages postés 70 Statut Membre 2
 
oui je sais... je me suis planté dans ce que j'ai écrit.
J'ai bien la commade TC sur mon système je viens de vérifier.

A mon avis le problème ne vient pas de là.
C'est le :
#cannot execute binary file
qui me pose un soucis car si je ne peux pas exécuter de fichier binaire je ne vois pas comment mon ordi fonctionne lol...


Merci en tout cas de ton aide.
0
harnis Messages postés 70 Statut Membre 2
 
Ou alors ça vient de mon shell bash... je sais pas... je sais plus...
0
mamiemando Messages postés 34228 Date d'inscription   Statut Modérateur Dernière intervention   7 897
 
C'est peut être un binaire qui ne correspond pas à ton architecture de machine. Comment as-tu installé ce fameux tc ? Quelle version as-tu pris ? Que te donne la commande :
uname -a

Bonne chance
0
harnis Messages postés 70 Statut Membre 2
 
Bon j'ai trouvé la solution avec cbq

Il faut en 1er l'installer.

Ensuite créer un fichier dans /etc/sysconfig/cbq/
vous pouvez le nommer comme vous voulez

et i mettre ça dedans
DEVICE=eth1,100Mbit,1Mbit
RATE=13Kbit
WEIGHT=10Kbit
PRIO=5
RULE=(ip de la machine qu'on veut limiter)

ensuite dans le répertoire ou vous avez le fichier du programme exécutable par exmple cbq.init-v0.7.3*

Vous le lancer :
# cbq-init-v0.7.3 start

Alors là la machine va downloader à 13k et uploader à 10.

Voilà

j'ai testé et ça marche
0
harnis Messages postés 70 Statut Membre 2
 
#uname -a
Linux serveur 2.4.22-10mdk #1 Thu Sep 18 12:30:58 CEST 2003 i686unknown unknown GNU/Linux

Le paquet tc s'est installé par défaut.

Si vous connaissez une autre solution pour limiter le download sur une machine précise je suis preneur parce que là franchement je ne vois pas pkoi ça marche pas.

Merci
-1