Problème serveur de jeux CS:S & debian etch 32 bits

Bizarre pour les fichiers TRACE, tu as un fichier par processus, celui qui a fait un segfault doit avoir à la fin marqué segfault…

Sinon, le assume ne fonctionne pas vu que les librairies tls sont utilisés. Le TLS (Thread Local Storage) est une nouvelle gestion des données des threads et pose parfois problème, des segfaults. Mon idée est de forcer le serveur à ne pas les utiliser:

Une méthode brutale MAIS osée peut être de temporairement renommer /lib/tls,
Regarde ci dessous:

bling:/tmp# mv /lib/tls /lib/tos bling:/tmp# ldd hlds_i686 linux-gate.so.1 => (0xffffe000) libdl.so.2 => /lib/libdl.so.2 (0xf7f9e000) libpthread.so.0 => /lib/libpthread.so.0 (0xf7f4c000) libm.so.6 => /lib/libm.so.6 (0xf7f27000) libc.so.6 => /lib/libc.so.6 (0xf7e0c000) /lib/ld-linux.so.2 (0xf7fad000) bling:/tmp# mv /lib/tos /lib/tls bling:/tmp# ldd hlds_i686 linux-gate.so.1 => (0xffffe000) libdl.so.2 => /lib/tls/libdl.so.2 (0xf7f47000) libpthread.so.0 => /lib/tls/libpthread.so.0 (0xf7f35000) libm.so.6 => /lib/tls/libm.so.6 (0xf7f0f000) libc.so.6 => /lib/tls/libc.so.6 (0xf7ddd000) /lib/ld-linux.so.2 (0xf7f56000)

Tu vois la différence… Tu peux essayer mais les librairies tls ne seront plus visibles du système. Ça peut au moins de permettre de voir si le pbm est là.

Sinon, tu peux forcer le chargement de toutes les librairies concernées par le LD_PRELOAD. Ainsi, dans mon exemple, je fais dans le répertoire contenant les exécutables:

J’obtiens des erreurs qui m’indiffèrent et ceci:

/lib/tls/libc.so.6 /lib/tls/libdl.so.2 /lib/tls/libm.so.6 /lib/tls/libpthread.so.0
Je fais bling:/tmp# ls -l /lib/libc.so.6 lrwxrwxrwx 1 root root 13 2008-04-05 15:34 /lib/libc.so.6 -> libc-2.3.6.so bling:/tmp# ls -l /lib/libdl.so.2 lrwxrwxrwx 1 root root 14 2008-04-05 15:34 /lib/libdl.so.2 -> libdl-2.3.6.so bling:/tmp# ls -l /lib/libm.so.6 lrwxrwxrwx 1 root root 13 2008-04-05 15:34 /lib/libm.so.6 -> libm-2.3.6.so bling:/tmp# ls -l /lib/libpthread.so.0 lrwxrwxrwx 1 root root 18 2008-04-05 15:34 /lib/libpthread.so.0 -> libpthread-0.10.so
J’ai donc les 4 librairies à charger en préambule, je fais donc

Essaye, théoriquement si ça plante, tu ne devrais pas avoir de message avec des /lib/tls/…

Par contre, le fait de forcer l’utilisation de ces librairies peut avoir des conséquences que j’ignore mais en général ça règle le pbm.

ok

après :

cd /home/serveur/serveurmulti/steam

[quote]:/home/serveur/serveurmulti/steam# ldd srcds_i686
linux-gate.so.1 => (0xffffe000)
libm.so.6 => /lib/libm.so.6 (0xb7fa8000)
libdl.so.2 => /lib/libdl.so.2 (0xb7fa4000)
libc.so.6 => /lib/libc.so.6 (0xb7e88000)
/lib/ld-linux.so.2 (0xb7fd2000)

[/quote]

j’ai fait ceci :
cd /home/serveur/serveurmulti/steam

[quote]ldd * | grep “=>” 2> /dev/null | awk ‘{print $3}’ | grep “/lib/” | sort -u
[/quote]
qui donne :

[quote]/lib/libc.so.6
/lib/libdl.so.2
/lib/libm.so.6
/lib/libpthread.so.0[/quote]

cd /tmp

[quote]ks355916:/tmp# ls -l /lib/libc.so.6
lrwxrwxrwx 1 root root 13 2008-07-19 12:16 /lib/libc.so.6 -> libc-2.3.6.so
ks355916:/tmp# ls -l /lib/libdl.so.2
lrwxrwxrwx 1 root root 14 2008-07-19 12:16 /lib/libdl.so.2 -> libdl-2.3.6.so
ks355916:/tmp# ls -l /lib/libm.so.6
lrwxrwxrwx 1 root root 13 2008-07-19 12:16 /lib/libm.so.6 -> libm-2.3.6.so
ks355916:/tmp# ls -l /lib/libpthread.so.0
lrwxrwxrwx 1 root root 18 2008-07-19 12:16 /lib/libpthread.so.0 -> libpthread-0.10.so[/quote]

Bon donc tu peux essayer avec «mv /lib/tls /lib/tos», tu fais tourner le serveur normalement. Si il ne plante pas, c’est que c’est un bien un pbm de librairies TLS comme je le soupconne. La solution la meilleure consistera à lancer le serveur avec le LD_PRELOAD comme je te l’ai indiqué.

Je lance :

Voici l’erreur :

[quote]Updating server using Steam.
Checking bootstrapper version …
Updating Installation
Checking/Installing ‘Counter-Strike Source Shared Content’ version 68

Checking/Installing ‘Base Source Shared Models’ version 4

Checking/Installing ‘Base Source Shared Sounds’ version 4

Checking/Installing ‘Base Source Shared Materials’ version 8

Checking/Installing ‘Source Dedicated Server Linux’ version 93

HLDS installation up to date
./srcds_run: line 344: 25515 Complété $HL_CMD

warning: Can’t read pathname for load map: Erreur d’entrée/sortie.
Error while mapping shared library sections:
/lib/tls/i686/cmov/libm-2.3.6.so: Aucun fichier ou répertoire de ce type.
Error while mapping shared library sections:
/lib/tls/i686/cmov/libdl.so.2: Aucun fichier ou répertoire de ce type.
Error while mapping shared library sections:
/lib/tls/i686/cmov/libpthread.so.0: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libm-2.3.6.so: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libdl.so.2: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libpthread.so.0: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libm-2.3.6.so: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libdl.so.2: Aucun fichier ou répertoire de ce type.
Error while reading shared library symbols:
/lib/tls/i686/cmov/libpthread.so.0: Aucun fichier ou répertoire de ce type.
Previous frame inner to this frame (corrupt stack?)[/quote]

Scrogneugneu, attends, je charge le truc b [edit:C’est long!]

mais le problème que tu suppose viendrais de quoi ?

Une mauvaise installation de debian ?

Une mauvaise installation de gcc et gdb ?

Non, une inadaptation du binaire à la libc6.
Bon:

e$ ldd srcds_i686 linux-gate.so.1 => (0xffffe000) libm.so.6 => /lib/tls/libm.so.6 (0xf7f86000) libdl.so.2 => /lib/tls/libdl.so.2 (0xf7f82000) libc.so.6 => /lib/tls/libc.so.6 (0xf7e4f000) /lib/ld-linux.so.2 (0xf7fb6000) francois@bling:/tmp/gre$ export LD_PRELOAD="/lib/libc-2.3.6.so /lib/libdl-2.3.6.so /lib/libm-2.3.6.so /lib/libpthread-0.10.so" francois@bling:/tmp/gre$ ldd srcds_i686 /lib/libc-2.3.6.so (0xf7e29000) /lib/libdl-2.3.6.so (0xf7e25000) /lib/libm-2.3.6.so (0xf7e01000) /lib/libpthread-0.10.so (0xf7dae000) /lib/ld-linux.so.2 (0xf7f46000) linux-gate.so.1 => (0xffffe000) francois@bling:/tmp/gre$
Bien! Je lance le truc, apparemment le serveur se lance bien. Pas de souci. Fais donc un export LD_PRELOAD polutôt que de l’écrire avant la commande. Les sous processus en hériteront aussi.

Mais si ça se trouve, je me plante sur les raisons de ce crash. Comme on n’a pas les sources, c’est dur de voir.

donc :

[quote][cd /tmp
serveur@ks355916:/tmp$ mkdir gre
serveur@ks355916:/tmp$ cd /tmp/gre
serveur@ks355916:/tmp/gre$ export LD_PRELOAD="/lib/libc-2.3.6.so /lib/libdl-2.3.6.so /lib/libm-2.3.6.so /lib/libpthread-0.10.so"
serveur@ks355916:/tmp/gre$ ldd srcds_i686
ldd: ./srcds_i686: Aucun fichier ou répertoire de ce type
[/quote]

Une inadaptation ? alors que chez d’autre, ça fonctionne avec la même configuration debian ?!!

excuse moi mais j’ai du mal à y croire

:smiley:

Non, /tmp/gre, c’est là où MOI j’ai mis le serveur pour tester, toi en gros tu fais
dans ton screen (tu lances screen sans argument puis tu tapes entrée puis

$ export LD_PRELOAD="/lib/libc-2.3.6.so /lib/libdl-2.3.6.so /lib/libm-2.3.6.so /lib/libpthread-0.10.so" $ ./srcds_run -game cstrike +ip 87.98.140.23 +maxplayers 24 +map de_dust -port 27030 -tickrate 66 +fps_max 0 -autoupdate -debug | tee srcds.log 2>&1
et tu attends
Rq:
tu sors de screen par Ctrl-A suivi de D

Tu rerentres dedans par
$ screen -r

puis :

et :

Correct ?

Oui

ok par contre avec ta ligne de commande, le srcds.log reste vide… donc je n’aurais aucune informations…

mais je te le répète, je connais des personnes ayant une debian sous ovh et ils n’ont pas ce problème…

Non, lors que tu terminera la commande, tu récupèreras les logs dans le fichier (c’est le rôle de tee). Essaye de voir ce qui fait la différence entre les autres serveurs et le tien, notamment

  • binaires utilisés
  • ce que sort «ldd *» sur ces serveurs
  • type de cpu

cpu > le même vu que c’est la même offre.

concernant gcc et gdb, il avais la même chose que moi en faisant gcc -v et gdb -v…

Je demanderais le résultat d’un ldd…

N’a toujours pas crashé?

à l’instant mais le fichier srcds.log est vide…

le debug.log :

[quote]CRASH: lundi 21 juillet 2008, 15:36:03 (UTC+0200)
Start Line: ./srcds_i686 -game cstrike +ip 87.98.140.23 +maxplayers 24 +map de_dust -port 27030 -tickrate 66 +fps_max 0 -autoupdate -debug
Using host libthread_db library “/lib/libthread_db.so.1”.
Core was generated by `./srcds_i686 -game cstrike +ip 87.98.140.23 +maxplayers 24 +map de_dust -port 2’.
Program terminated with signal 11, Segmentation fault.
#0 0xb7dd7546 in ?? ()
#0 0xb7dd7546 in ?? ()
#1 0xb7f7bff4 in ?? () from /lib/ld-linux.so.2
#2 0x080595e8 in ?? ()
#3 0xb7dd3000 in ?? ()
#4 0xbffc05b0 in ?? ()
#5 0xb7dd7378 in ?? ()
#6 0xbffc05b8 in ?? ()
#7 0xb7dd6f28 in ?? ()
#8 0xbffc05e8 in ?? ()
#9 0xb7f717f5 in _dl_rtld_di_serinfo () from /lib/ld-linux.so.2
No symbol table info available.
From To Syms Read Shared Object Library
0xb7e5e1f0 0xb7f3dc5f Yes /lib/libc-2.3.6.so
No /lib/tls/i686/cmov/libm-2.3.6.so
No /lib/tls/i686/cmov/libdl.so.2
0xb7f66790 0xb7f772cf Yes /lib/ld-linux.so.2
No /lib/tls/i686/cmov/libpthread.so.0
0xb7e0e910 0xb7e17ff0 Yes bin/vstdlib_i486.so
0xb7dab190 0xb7dc67c0 Yes bin/tier0_i486.so
Stack level 0, frame at 0xbffc05a0:
eip = 0xb7dd7546; saved eip 0xb7f7bff4
called by frame at 0xbffc05a4
Arglist at 0xbffc0598, args:
Locals at 0xbffc0598, Previous frame’s sp is 0xbffc05a0
Saved registers:
eip at 0xbffc059c
End of Source crash report
----------------------------------------------[/quote]

et en testant sur Ubuntu Desktop ? vu que c’est à peu près pareil… non ?

Souhaite tu un accès au serveur peut être fran ?

Tu es sur de ta RAM? Parce que là je commence vraiment à être à cours d’idée.
Eventuellement lance une grosse compilation pour voir si elle arrive à terme. Mis part exploiter les fichiers core, je ne vois pas comment progresser…

re,

voici ce que la hotline à fait :

[quote]Voila un exemple sur votre serveur:

ks355916:/tmp# /usr/bin/gcc-3.4 -g test.c -o test
ks355916:/tmp# gdb ./test
GNU gdb 6.4.90-debian
Copyright © 2006 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public
License, and you are
welcome to change it and/or distribute copies of it under
certain conditions.
Type “show copying” to see the conditions.
There is absolutely no warranty for GDB. Type “show
warranty” for details.
This GDB was configured as “i486-linux-gnu”…Using host
libthread_db library
"/lib/tls/i686/cmov/libthread_db.so.1".

(gdb) run
Starting program: /tmp/test

Program received signal SIGSEGV, Segmentation fault.
0x08048344 in lance_erreur_segmentation () at test.c:4
4 int test=*pointeur_dangereux;
(gdb) bt
#0 0x08048344 in lance_erreur_segmentation () at test.c:4
#1 0x0804836c in main (argc=1, argv=0xbfba5154) at
test.c:9

Je viens de compiler un test:

cd /tmp
nano test
je mets dedans :
void lance_erreur_segmentation()
{
int *pointeur_dangereux=(int *) 100;
int test=*pointeur_dangereux;
}

int main(int argc, char ** argv)
{
lance_erreur_segmentation();
return 0;
}
Et je sauvegarde.
int *pointeur_dangereux=(int *) 100; <= ici est dit qu’il
doit accèder a l’adresse 100.
C’est une partie qui peut pas apartenir a un programm
normal.

On compile:
/usr/bin/gcc-3.4 -g test.c -o test

on lance le debugger:
gdb ./test

(gdb) va alors demarrer puis suffit de faire: run
et la on voit:

0x0804836c in main (argc=1, argv=0xbfba5154)

segfault.
Voila ce qui est exactement cette erreur.
Maintenant si votre RAM serait cassé: dans le dmesg vous
verrez plein de problèmes:
named, apache, bind, rtm.
Il y a rien SAUF toujours ce srcds.[/quote]

Voici le log memtest :
eric.beaujard1.club.fr/test_kimsufi_recuse.zip

sauf si en prend en compte que les fichiers core ne sont plus créés… mais j’ai des sauvegardes…

J’avais éditer le message ci-dessus mais tu a poster avant que j’envoie donc je te redonne ce que j’avais dit :
et en testant sur Ubuntu Desktop ? vu que c’est à peu près pareil… non ?

Souhaite tu un accès au serveur peut être fran ?

edit : alors je ne sais pas si j’ai juste mais bon…

donc sous putty, je tape gdb pour avoir la console puis :
(gdb) core core.11847

[quote]Failed to read a valid object file image from memory.
Core was generated by `./srcds_i686 -game cstrike +ip 87.98.140.23 +maxplayers 24 +map de_dust -port 2’.
Program terminated with signal 11, Segmentation fault.
#0 0xb6933b4f in ?? ()[/quote]

Le core n’est pas crée à cause des manips sur les librairies. Remet /lib/tos à /lib/tls et ne fait plus le export LD_PRELOAD et ça redeviendra comme avant.
Par contre, l’exploitation d’un fichier core n’est pas simple, ça nécessite gdb et comme tu n’as pas les sources, ça risque d’ere compliqué.
L’argument donné est correct.

Sinon, j’ai regardé sur internet, ça a l’air d’être un problmème fréquent mais pas vu de solution sauf une envisagée: bouter avec l’option acpi=off donné au noyau, mais là je ne sais pas ce que ça vaut, le gars avait l’air optimiste…
http://forum.kimsufi.com/showthread.php?t=4280&page=2 par exemple

mv /lib/tos /lib/tls ?

[quote]Par contre, l’exploitation d’un fichier core n’est pas simple, ça nécessite gdb et comme tu n’as pas les sources, ça risque d’ere compliqué.
L’argument donné est correct.[/quote]

et toi, tu sais faire et aurai tu le temps si jamais ?

[quote]Sinon, j’ai regardé sur internet, ça a l’air d’être un problmème fréquent mais pas vu de solution sauf une envisagée: bouter avec l’option acpi=off donné au noyau, mais là je ne sais pas ce que ça vaut, le gars avait l’air optimiste…
forum.kimsufi.com/showthread.php?t=4280&page=2 par exemple[/quote]

ce gars c’est moi justement ^^

Sinon comment désactiver l’option acpi stp ?

dans lilo.conf par exemple ? :

[quote]
prompt
timeout=50
default=linux
boot=/dev/sda
map=/boot/map
install=/boot/boot.b
lba32
append=""
#serial=0,9600n8
acpi=off
apm=power_off
image=/boot/bzImage-2.6.24.5-xxxx-grs-ipv4-32
label=linux
read-only
root=/dev/sda1

[/quote] :question: