View previous topic :: View next topic |
Author |
Message |
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Sun Dec 31, 2017 5:14 pm Post subject: Zuwenig Speicher für consolefont? |
|
|
Hallo Zusammen,
beim Starten von consolefont, bekomme ich folgende Fehlermeldung:
Code: | consolefont | * Setting console font [default8x16] ... [ ok ]
consolefont |getfont: KDFONTOP: Auf dem Gerät ist kein Speicherplatz mehr verfügbar |
Das kann aber aber eigentlich gar nicht sein, denn Speicher ist genug frei:
Code: | server01 ~ # free -h
gesamt benutzt frei gemns. Puffer/Cache verfügbar
Speicher: 15G 5,8G 4,0G 42M 5,5G 9,3G
Swap: 19G 0B 19G
server01 ~ # |
Code: | server01 ~ # df -h
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
/dev/sda3 91G 60G 27G 70% /
devtmpfs 10M 0 10M 0% /dev
tmpfs 1,6G 3,8M 1,6G 1% /run
cgroup_root 10M 0 10M 0% /sys/fs/cgroup
shm 7,7G 8,0K 7,7G 1% /dev/shm
cachedir 4,0M 4,0K 4,0M 1% /lib64/splash/cache
/dev/sda1 124M 32M 87M 27% /boot
/dev/sdc1 26T 6,5T 18T 27% /mnt/storage
none 7,7G 0 7,7G 0% /run/user/0
server01 ~ # |
Hat Jemand eine Idee, wo ich da mit dem Suchen anfangen könnte? |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Mon Jan 01, 2018 10:25 pm Post subject: |
|
|
Hallo 3PO,
das klingt sehr merkwürdig!
Ich habe mir den Quellcode von "sys-apps/kbd" angeschaut. Der Fehler passiert vermutlich in der Datei "src/kdfontop.c" ab Zeile 60:
Code: | i = ioctl(fd, KDFONTOP, &cfo);
[...]
if (errno != ENOSYS && errno != EINVAL) {
perror("getfont: KDFONTOP");
return -1;
} |
Ich würde mich da mal reinhängen und mir vor dem Aufruf von ioctl() ausgeben lassen, auf welche Datei (welches Device) die Funktion ioctl() ausgeführt wird. Vermutlich bekommt man das auch mit strace raus.
Viele Grüße
Mike |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Tue Jan 02, 2018 4:37 pm Post subject: |
|
|
Ehrlich gesagt, verstehe ich nicht so richtig, was Du mir damit sagen willst? |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Tue Jan 02, 2018 5:05 pm Post subject: |
|
|
Quote: | Ehrlich gesagt, verstehe ich nicht so richtig, was Du mir damit sagen willst? |
Du hattest von einem Fehler berichtet und gefragt, was es sein könnte. Da Google keine brauchbaren Antworten liefert und auch noch niemand geantwortet hat, scheint es etwas "merkwürdiges" zu sein.
Also, ich würde in den Source-Code schauen und versuchen herauszufinden, was passiert. Die Datei und Zeile des Source Codes habe ich Dir genannt; offenbar passiert der Fehler bei einem ioctl() Aufruf. Die nächste Frage ist, auf welches Device dieser ioctl-Aufruf stattfindet und welche Parameter übergeben werden. Das kann man entweder mit strace herausfinden, oder in dem man im Source-Code ein paar printf()-Anweisungen vor den ioctl-Aufruf schreibt. Sobald man weiß, welche Parameter bei dem ioctl-Aufruf übergeben werden, dürfte auch klar sein, wer für das Problem verantwortlich ist und was den Fehler auslöst...
So würde ich es machen - aber es gibt bestimmt auch andere Methoden. Jedenfalls glaube ich nicht, dass Du zu wenig Speicher hast. Irgendetwas funktioniert nicht - und statt einer aussagekräftigen Fehlermeldung gibt es dann die "kein Speicherplatz mehr"-Meldung. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Tue Jan 02, 2018 5:36 pm Post subject: |
|
|
Da ich leider kein C spreche, fällt das modifizieren des Codes erst mal aus.
Ich habe bei dem o.g. PC kein Keyboard angeschlossen und habe auch bisher nicht feststellen können, dass etwas nicht funktionieren würde. Mir ist halt beim Sichten des rc Los aufgefallen, dass consolefont wegen angeblichen Speichermangel nörgelt.
Seltsam ist auch, dass es noch 2 weiteren Servern auftritt und bei 3 anderen wiederum nicht. |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Tue Jan 02, 2018 9:40 pm Post subject: |
|
|
OK, probieren wir es ganz anders. Wenn Du als "root" folgende Anweisung ausführst:
Code: | /etc/init.d/consolefont restart |
Bekommst Du die Fehlermeldung dann auch? Oder erscheint die Fehlermeldung nur, wenn consolefont beim Starten des Systems ausgeführt wird? |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Tue Jan 02, 2018 10:01 pm Post subject: |
|
|
Die Meldung kommt auch beim Restart. |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Wed Jan 03, 2018 12:06 am Post subject: |
|
|
Der Fehler ist also reproduzierbar - das ist schon mal gut!
Das Script "/etc/init.d/consolefont" ruft verschiedene Programme auf. Kannst Du herausfinden, bei welcher Anweisung der Fehler ausgegeben wird?
Ich vermute, dass es bei einem der "setfont"-Aufrufe passiert. Du könntest also in dem Script "/etc/init.d/consolefont" vor die beiden "setfont"-Aufrufe echo-Anweisungen schreiben, um die genauen Parameter herauszufinden:
Code: | Zeile 55:
if ! setfont $consolefont $param -C $ttydev$x >/dev/null; then
wird zu:
echo "setfont $consolefont $param -C $ttydev$x"
if ! setfont $consolefont $param -C $ttydev$x >/dev/null; then
Zeile 66:
setfont -O "$RC_LIBEXECDIR"/console/font
wird zu
echo "setfont -O $RC_LIBEXECDIR/console/font"
setfont -O "$RC_LIBEXECDIR"/console/font
|
Wenn Du dann "/etc/init.d/consolefont restart" aufrufst, wird eine Reihe von Anweisungen ausgegeben, ungefähr folgendermaßen:
Code: | setfont default8x16 -C /dev/tty1
setfont default8x16 -C /dev/tty2
...
setfont default8x16 -C /dev/tty11
setfont default8x16 -C /dev/tty12
setfont -O /lib64/rc/console/font |
Wenn Du die bei Dir ausgegebenen Anweisungen nun von Hand ausführst: Bei welcher Anweisung wird der Fehler ausgegeben? |
|
Back to top |
|
|
l3u Advocate
Joined: 26 Jan 2005 Posts: 2540 Location: Konradsreuth (Germany)
|
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Wed Jan 03, 2018 6:29 pm Post subject: |
|
|
Ich habe mal ein "set -x" eingebaut:
--> https://paste.pound-python.org/show/hk9bKKy5rHe5jLHqSOlW/
Wenn ich das richtig interpretiere, passiert der Fehler an dieser Stelle:
Code: | ....
consolefont |+ mkdir -p /lib64/rc/console
consolefont |+ setfont -O /lib64/rc/console/font
consolefont |getfont: KDFONTOP: Auf dem Gerät ist kein Speicherplatz mehr verfügbar
consolefont |+ return 0
.... |
|
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Wed Jan 03, 2018 7:32 pm Post subject: |
|
|
OK, dann prüfe bitte noch einmal, dass der Fehler auftritt, wenn Du "setfont -O /lib64/rc/console/font" ausführst. Wenn das so ist, führe danach bitte folgende Anweisung aus:
Code: | strace -o /tmp/trace.txt -f setfont -O /lib64/rc/console/font |
Bitte poste die Datei /tmp/trace.txt über https://paste.pound-python.org. Dann werden wir vermutlich sehen, wo der Fehler herkommt. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Wed Jan 03, 2018 8:08 pm Post subject: |
|
|
Die spannenden Zeilen in dem Trace sind:
Quote: | open("/dev/tty0", O_RDWR) = 3
ioctl(3, TCGETS, {B38400 opost isig icanon echo ...}) = 0
ioctl(3, KDGKBTYPE, 0x7ffd32d45f87) = 0
ioctl(3, KDGETMODE, 0x7ffd32d46014) = 0
[...]
ioctl(3, KDFONTOP, 0x7ffd32d35ee0) = -1 ENOSPC (No space left on device) |
Bevor wir weitersuchen, zuerst noch zwei Fragen: Welche Version vom Linux-Kernel (uname -r -m) und welche Version von sys-apps/kbd hast Du installiert? Falls es eine ältere Version von sys-apps/kbd ist: Tritt der Fehler auch mit Version 2.0.4 auf? |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Wed Jan 03, 2018 8:12 pm Post subject: |
|
|
Code: | server01 ~ # uname -a
Linux server01 4.14.10-gentoo-r1 #1 SMP PREEMPT Sun Dec 31 14:43:56 CET 2017 x86_64 Intel(R) Core(TM) i7-3770K CPU @ 3.50GHz GenuineIntel GNU/Linux
server01 ~ # |
Code: | server01 ~ # eix sys-apps/kbd
[I] sys-apps/kbd
Verfügbare Versionen: 1.15.5-r1 2.0.3 ~2.0.4 **9999 {nls pam test}
Installierte Versionen: 2.0.3(00:03:10 02.01.2018)(nls pam -test)
Startseite: http://kbd-project.org/
Beschreibung: Keyboard and console utilities
server01 ~ # |
Version 2.0.4 habe ich noch nicht getestet. |
|
Back to top |
|
|
mike155 Advocate
Joined: 17 Sep 2010 Posts: 4438 Location: Frankfurt, Germany
|
Posted: Wed Jan 03, 2018 8:54 pm Post subject: |
|
|
Sieht eigentlich alles gut aus! Ich habe auch Kernel 4.14 und kbd 2.0.3 und bei mir tritt der Fehler nicht auf.
Wenn ein Wechsel auf kbd 2.0.4 das Problem nicht behebt, würde ich auf Linux Kernel ".config" tippen. Hast Du die Kernel Config selbst angepasst? Fehlt vielleicht ein Häkchen bei den Device Drivers (Character Devices oder Video)? Vielleicht kannst Du die Kernel Config zwischen den Servern, bei denen der Fehler auftritt und bei denen der Fehler nicht auftritt miteinander vergleichen?
PS: Falls jemand weitersuchen möchte: soweit ich sehe, tritt der Fehler in der Funktion con_font_get() in der Datei /usr/src/linux/drivers/tty/vt/vt.c auf. Leider wird ENOSPC an mehreren Stellen zurückgegeben - ohne weiteres Debuging ist deshalb nicht klar, weshalb ENOSPC zurückgegeben wird. |
|
Back to top |
|
|
3PO Veteran
Joined: 26 Nov 2006 Posts: 1110 Location: Schwabenländle
|
Posted: Wed Jan 03, 2018 9:07 pm Post subject: |
|
|
2.0.4 behebt den Fehler nicht.
Was mir aber aufgefallen ist, ist dass bei den Servern, bei denen es nicht funktioniert, eine Datei "fonts" in "/lib64/rc/console" mit 0 Byte angelegt wird, wenn "setfont -O /lib64/rc/console/font" aufgerufen wird.
Bei den Rechnern, wo es funktioniert, wird mit "setfont -O /lib64/rc/console/font" keine Datei angelegt. |
|
Back to top |
|
|
|