OVH Cloud OVH Cloud

logrotate : stat of @ failed (No such file or directory)

12 réponses
Avatar
Laurent Hugé
Bonjour,

Après quelques semaines passée à passer ma machine en
LinuxFromScratch, je suis dans la phase de finition de configuration.
Essayant d'installer logrotate, je me retrouve face à une erreur que
je n'arrive pas à cerner :
- j'ai installé logrotate 3.3 (en mode débugage avec un fichier de
configuration logrotate.conf uniquement composé de /var/log
messages), j'obtiens ceci :
reading config file /etc/logrotate.conf
reading config info for /messages
Handling 1 logs
rotating pattern: /var/log/messages 104857600 bytes (5 rotations)
empty log files are not rotated old logs are removed
errors displayed on stderr
rotating file @
stat of @ failed: No such file or directory
log does not need rotating

- j'ai compilé logrotate 3.5.9, mais lors du make test, j'arrive à :
(cd test; ./test)
/usr/src/apps/système/logrotate-3.5.9/test
error: test-config.1:1 unexpected text
stat of pW@h\@ failed: No such file or directory
... (de multiple fois, pour chaque fichier de test en fait).

Ce qui m'inquiète, c'est que logrotate semble lire correctement le
fichier de configuration (il trouve bien /var/log/messages), mais
lorsqu'il tente d'y accéder, il génère une erreur ("rotating file
@").

J'ai inspecté le contenu de logrotate.c, mais tout semble correct.
L'erreur n'est relatée nulle part (ni sur Google, que je cherche ou
non selon logrotate, ni sur le bug report de Debian).
De plus, j'avais déjà installé logrotate sur mon autre machine
(LinuxFromScratch aussi) et je n'ai jamais eu une telle erreur.

En faisant passer logrotate via strace, je m'aperçois qu'il cherche à
accéder à une configuration (?) de popt. Dans le doute, j'ai
réinstallé popt, mais cela n'a rien changé (d'ailleurs, aucun de ces
fichiers n'est installé avec popt, ni n'est disponible dans les
sources).
Il vient aussi lire le fichier /usr/share/zoneinfo/Europe/Paris, mais
là, je ne vois pas pourquoi.
Dans quelle direction faut-il que je cherche ?
Par pitié, ne me dite pas que c'est la glibc qui plante :-( Je ne
verrais pas pourquoi elle ne plante que maintenant alors que j'ai
installé de nombreuses choses sans problème (du style KDE ou GNOME !)

Pour info, voici la sortie de strace logrotate -d /etc
logrotate.conf :
execve("/usr/sbin/logrotate", ["logrotate", "-d", "/etc
logrotate.conf"], [/* 34 vars */]) = 0
brk(0) = 0x8050c6c
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or
directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=72315, ...}) = 0
old_mmap(NULL, 72315, PROT_READ, MAP_PRIVATE, 3, 0) = 0x40016000
close(3) = 0
open("/usr/lib/libpopt.so.0", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\200\23"...,
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=32098, ...}) = 0
old_mmap(NULL, 29744, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40028000
mprotect(0x4002f000, 1072, PROT_NONE) = 0
old_mmap(0x4002f000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x6000) = 0x4002f000
close(3) = 0
open("/lib/libc.so.6", O_RDONLY) = 3
read(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\340Y\1"...,
1024) = 1024
fstat64(3, {st_mode=S_IFREG|0755, st_size=1430673, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40030000
old_mmap(NULL, 1242308, PROT_READ|PROT_EXEC, MAP_PRIVATE, 3, 0) =
0x40031000
mprotect(0x4015a000, 25796, PROT_NONE) = 0
old_mmap(0x4015a000, 16384, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED, 3, 0x128000) = 0x4015a000
old_mmap(0x4015e000, 9412, PROT_READ|PROT_WRITE, MAP_PRIVATE
MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x4015e000
close(3) = 0
munmap(0x40016000, 72315) = 0
brk(0) = 0x8050c6c
brk(0x8051c6c) = 0x8051c6c
brk(0) = 0x8051c6c
brk(0x8052000) = 0x8052000
open("/etc/popt", O_RDONLY) = -1 ENOENT (No such file or
udirectory)
getuid32() = 0
geteuid32() = 0
open("/root/.popt", O_RDONLY) = -1 ENOENT (No such file or
directory)
stat64("/etc/logrotate.conf", {st_mode=S_IFREG|0600,
st_size=108, ...}) = 0
open("/etc/logrotate.conf", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0600, st_size=108, ...}) = 0
lseek(3, 0, SEEK_END) = 108
lseek(3, 0, SEEK_SET) = 0
read(3, "compress\nnotifempty\n\n/var/log/me"..., 108) = 108
close(3) = 0
write(2, "reading config file /etc/logrota"..., 40) = 40
lstat64("@", 0xbffff120) = -1 ENOENT (No such file or
directory)
write(2, "reading config info for /var/log"..., 42) = 42
open("/var/lib/logrotate.status", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=29, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "logrotate state -- version 1\n", 4096) = 29
read(3, "", 4096) = 0
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "Handling 1 logs\n", 16) = 16
write(2, "rotating pattern: /var/log/messa"..., 36) = 36
write(2, "104857600 bytes ", 16) = 16
write(2, "(5 rotations)\n", 14) = 14
write(2, "empty log files are not rotated ", 32) = 32
write(2, "old logs are removed\n", 21) = 21
write(2, "errors displayed on stderr\n", 27) = 27
time(NULL) = 1081453962
open("/usr/share/zoneinfo/Europe/Paris", O_RDONLY) = 3
fstat64(3, {st_mode=S_IFREG|0644, st_size=1082, ...}) = 0
old_mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS,
-1, 0) = 0x40016000
read(3, "TZif\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\f\0\0\0\f\0"...,
4096) = 1082
close(3) = 0
munmap(0x40016000, 4096) = 0
write(2, "rotating file \234\2\3@\4\n", 20) = 20
stat64("@", 0xbffff380) = -1 ENOENT (No such file or
directory)
write(2, "stat of \234\2\3@\4 failed: No such fi"..., 48) = 48
write(2, "log does not need rotating\n", 27) = 27
exit_group(1) = ?
--
Laurent Hugé (pour m'écrire, ôter PasDeSpam de l'adresse de courriel)
GPG fingerprint = 3AFF A106 39D9 DB2C 885D 41C3 76DC 2C3F 01BE 5D4A

2 réponses

1 2
Avatar
g.patel
On Tue, 13 Apr 2004 21:09:11 +0200, Laurent =?ISO-8859-15?Q?Hugé? wrote:

Bien. Comme je l'ai détaillé dans l'autre fil, je n'ai pas progressé
malgré un passage à logrotate 3.6.8 !
Quel autre voie peut-il y avoir ?


j'essayerais de modifier le code pour comprendre ce
qui se passe et à quel endroit ça coince
(méthode de programmeur...)

dans config.c, il doit se trouver quelque chose comme ça :
newlog->files[newlog->numFiles] globResult.gl_pathv[i];
newlog->numFiles++;
il faudrait mettre entre ces deux lignes :
message(MESS_DEBUG, "file %d : %sn", newlog->numFiles,
globResult.gl_pathv[i]);
recompiler, essayer, voir ce qu'affiche le message ajouté.

Autrement, on peut se lancer avec gdb, mais c'est assez
particulier à utiliser. Et il faut que gdb marche évidemment.

Gérard Patel

Avatar
no_spam
On Tue, 13 Apr 2004 21:06:49 +0200, Laurent Hugé wrote:


J'ai la version 2...
J'ai essayé ton fichier de conf sur ma machine, ça marche nickel.
Oui. En fait, je l'ai simplement copié de mon autre PC, puis voyant

que cela ne marchait pas, j'ai supprimé toutes les entrées après la
première. Dans il n'y avait pas de raison que cela ne fonctionne pas
(sauf influence vaudou ;-)


Le vaudou et l'informatique sont proches mais font assez mauvais
ménage :-)

En regardant l'infâme code qui parse les options, je ne vois
que deux solutions:
- le pointeur sur le nom de fichier se fait écraser.
le seul moyen fiable de vérifier ça, c'est d'utiliser valgrind:
valgrind --leak-check=yes logrotate...
Le nombre d'erreurs trouvées est très souvent remarquable !
- glob renvoie des conneries. Dans ce cas, c'est la libc qui
est buggée, mais il doit être assez simple de faire un programme
de test qui vérifie celà. Et ça me semble assez peu crédible...


1 2