Kernelmeldungen temporär nach xterminal umleiten

Du suchst ein Programm für einen bestimmten Zweck?
Antworten
Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Kermit24 » 09.01.2014 06:37:44

Hallo,
bei diversen Linux-SetTopBoxen, die busybox nutzen, gibt es den Befehl 'setconsole', um die Kernelmeldungen z.B. live auf eine telnet-Konsole ausgeben zu lassen. Also man verbindet sich via telnet, gibt éinmal 'setconsole' ein und bekommt die Kernel/Syslog-Meldungen in Echtzeit zu sehen.
Mit apt-file habe ich 'setconsole' nicht im debian repository gefunden. Wie kann ich mal eben die Systemmeldungen in einem gnome-terminal in Echtzeit ausgeben lassen (ohne sie natürlic von vornherein als dauerhafte Systemkonsole zu konfigurieren, sofern das möglich ist).

Benutzeravatar
towo
Beiträge: 4546
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von towo » 09.01.2014 08:02:17

tail -f /var/log/foo.log

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Kermit24 » 09.01.2014 19:41:34

towo hat geschrieben:tail -f /var/log/foo.log
So werden die Meldungen aber nur sehr indirekt ausgegeben. Denn /var/log muss weiterhin vorhanden/beschreibbar sein und syslogd muss auch noch laufen.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Cae » 09.01.2014 23:08:34

Besagtes setconsole verschraubt die /etc/inittab und wirkt reichlich veraltet. Die Version aus einem setconsole-1.0-8.noarch.rpm [1] habe ich mal auf NoPaste NoPaste-Eintrag37592 [2] gepackt, aber es sieht nicht nach dem aus, wonach du suchst.

Warum guckst du dir nicht mal diese Programme an, die du meintest? Sind das Binaries? Skripte?

Gruss Cae

[1] http://rpmfind.net/linux/rpm2html/searc ... setconsole
[2] die Lizenz davon ist unklar, in der Manpage aus dem Paket steht etwas von BSD, im Source gar nix. Wer etwas gegen die Veroffentlichung hat, moege sich bitte melden.
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Kermit24 » 11.01.2014 15:24:22

Hallo,
wie ich im ersten Beitrag schon fast angedeutet habe, ist der Befehl setconsole ein symlink auf busybox und somit binary. Ich bin aber jetzt auch kein Programmierer, der Sourcen liest/durchstöbert.
Ich dachte, es gibt vielleicht bei debian einen anderen Weg, um den Kernel mitzuteilen, auf welche Konsole er seine Meldungen ausgibt. Auf der Textkonsole scheint der (debian)-Kernel automatisch mitzuwechseln. Also wenn ich von tty1 auf tty2 wechsele, bekomme ich die akutellen Meldungen auf diese Konsole. Das finde ich eigentlich auch nicht so toll: Wenn ich auf tty1 mit Kernelmeldungen zugemüllt werde, kann ich nicht nach tty2 wechseln um dort Ruhe zu haben :(

Ich weiß auch nicht, welcher Prozess für die Ausgaben der Meldungen zuständig ist? init? oder der Kernel selber? rsyslogd ist es zumindest nicht, da ich beim beenden des daemons immer noch die Meldungen erhalte. Ich vermute der Kernel gibt die selber auf der aktuellen Textkonsole aus, denn die Meldungen beginnen ja schon beim Booten. Irgendwie konnte man auch nach einen Debuglevel setzen, wie geschwätzig der sein soll. Ich weiß nicht, ob das fest einkompiliert ist oder als bootparameter angegeben werden kann oder sogar noch im laufenden System (über /proc) geändert werden kann...
Da muss ich mich wohl noch einmal weiter mit beschäftigen...


Nachtrag: Hier mal ein Link zu setconsole der busybox:

Nachtrag2: Ich habe mal busybox aus dem debian-repository installiert und ein symblink namens 'setconsole' erststellt. Geht leider nicht:

Code: Alles auswählen

./setconsole 
setconsole: applet not found

`--# /bin/busybox 
BusyBox v1.21.1 (Debian 1:1.21.0-1) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2012.
Licensed under GPLv2. See source distribution for detailed
copyright notices.

Usage: busybox [function [arguments]...]
   or: busybox --list[-full]
   or: busybox --install [-s] [DIR]
   or: function [arguments]...

	BusyBox is a multi-call binary that combines many common Unix
	utilities into a single executable.  Most people will create a
	link to busybox for each function they wish to use and BusyBox
	will act like whatever it was invoked as.

Currently defined functions:
	[, [[, adjtimex, ar, arp, arping, ash, awk, basename, blockdev, brctl,
	bunzip2, bzcat, bzip2, cal, cat, chgrp, chmod, chown, chroot, chvt,
	clear, cmp, cp, cpio, cttyhack, cut, date, dc, dd, deallocvt, depmod,
	df, diff, dirname, dmesg, dnsdomainname, dos2unix, du, dumpkmap,
	dumpleases, echo, egrep, env, expand, expr, false, fgrep, find, fold,
	free, freeramdisk, ftpget, ftpput, getopt, getty, grep, groups, gunzip,
	gzip, halt, head, hexdump, hostid, hostname, httpd, hwclock, id,
	ifconfig, init, insmod, ionice, ip, ipcalc, kill, killall, klogd, last,
	less, ln, loadfont, loadkmap, logger, login, logname, logread, losetup,
	ls, lsmod, lzcat, lzma, md5sum, mdev, microcom, mkdir, mkfifo, mknod,
	mkswap, mktemp, modinfo, modprobe, more, mount, mt, mv, nameif, nc,
	netstat, nslookup, od, openvt, patch, pidof, ping, ping6, pivot_root,
	poweroff, printf, ps, pwd, rdate, readlink, realpath, reboot, renice,
	reset, rev, rm, rmdir, rmmod, route, rpm, rpm2cpio, run-parts, sed,
	seq, setkeycodes, setsid, sh, sha1sum, sha256sum, sha512sum, sleep,
	sort, start-stop-daemon, stat, strings, stty, swapoff, swapon,
	switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tee,
	telnet, test, tftp, time, timeout, top, touch, tr, traceroute,
	traceroute6, true, tty, udhcpc, udhcpd, umount, uname, uncompress,
	unexpand, uniq, unix2dos, unlzma, unxz, unzip, uptime, usleep,
	uudecode, uuencode, vconfig, vi, watch, watchdog, wc, wget, which, who,
	whoami, xargs, xz, xzcat, yes, zcat

offenbar fehlt das setconsole-Kommando bei der debian-binary :(

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Cae » 11.01.2014 17:05:41

Kermit24 hat geschrieben:Irgendwie konnte man auch nach einen Debuglevel setzen, wie geschwätzig der sein soll. Ich weiß nicht, ob das fest einkompiliert ist oder als bootparameter angegeben werden kann oder sogar noch im laufenden System (über /proc) geändert werden kann...
Von einem Boot-Parameter weiss ich nix, aber SysRq+[1..9] kann die Geschwaetzikeit anpassen. Analog funktioniert

Code: Alles auswählen

# echo [1..9] >/proc/sysrq-trigger
Der ioctl() vom Busybox-setconsole funktioniert bei mir nicht, als $user scheitert es trotz gesetzten Schreibrechten auf dem TTY mit

Code: Alles auswählen

./chtty: ioctl failed: Operation not permitted
-- als root bekam ich beim ersten Versuch einen Erfolg und seit dem nur

Code: Alles auswählen

./chtty: ioctl failed: Device or resource busy
. Mein Testcode sieht so aus:

Code: Alles auswählen

/* MIT License, author <cae@debianforum.de> */
#include <stdio.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <string.h>

int main(int argc, char **argv) {
	if (2 != argc) {
		fprintf(stderr, "Usage: %s {tty}\n", argv[0]);
		return 2;
	}

	int fd;
	char *dev = argv[1];

	if (-1 == (fd = open(dev, O_WRONLY))) {
		fprintf(stderr, "%s: can't open %s: %s\n", argv[0], dev, strerror(errno));
		return 1;
	}

	if (0 != ioctl(fd, TIOCCONS, NULL)) {
		fprintf(stderr, "%s: ioctl failed: %s\n", argv[0], strerror(errno));
		return 1;
	}

	close(fd);

	return 0;
}
Evtl. funktioniert das nur mit Seriellen oder so, ich steig' da gerade nicht durch.

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Kermit24 » 12.01.2014 00:01:04

Habe nun mal die busybox-1.22.0 von Dez 2013 selbst gebaut. Mit 'make menuconfig' alles abgewählt, außer setconsole. Bei mir klappt es auch nicht:

Code: Alles auswählen

./setconsole 
setconsole: TIOCCONS: Device or resource busy
Irgendwas scheint auf den SetTop-Boxen also anders zu sein als beim Debian-System. Dort funktioniert 'setconsole' über telnet einwandfrei.

Nachtrag: In der man-page von tty_ioctl steht:

Code: Alles auswählen

Redirecting console output
       TIOCCONS  void
              Redirect  output  that  would  have  gone  to  /dev/console   or
              /dev/tty0  to the given terminal.  If that was a pseudo-terminal
              master, send it to the slave.  In Linux before  version  2.6.10,
              anybody  can  do  this  as long as the output was not redirected
              yet; since  version  2.6.10,  only  root  (a  process  with  the
              CAP_SYS_ADMIN capability) may do this.  If output was redirected
              already EBUSY is returned, but redirection  can  be  stopped  by
              using this ioctl with fd pointing at /dev/console or /dev/tty0.
Scheinbar ist die Ausgabe schon umgeleitet und man muss sie irgendwie stoppen? Ich verstehe den letzten Satz ehrlich gesagt nicht richtig. Auf den SetTop-Boxen laufen wohl auch überwiegend ältere Kernel (2.4er).


Nachtrag2: Hm, jetzt habe ich es kapiert. Man muss erst ein "./setconsole /dev/console" oder "./setconsole /dev/tty0" ausführen. Danach kommt die busy-Meldung dann nicht mehr bei './setconsole'. Allerdings funktioniert es dennoch nicht. In meinem gnome-terminal erscheinen keine Ausgaben beim Ziehen/Stecken von USB-Geräten, auf tty[0-6] aber weiterhin.
Auch ein "./setconsole `tty`" (in meinem Fall /dev/pts/10) brachte leider keinen Erfolg :(

Kermit24
Beiträge: 311
Registriert: 29.04.2006 14:44:39

Re: Kernelmeldungen temporär nach xterminal umleiten

Beitrag von Kermit24 » 12.01.2014 20:21:09

Noch zwei kleine Dinge:

1. Dass die Kernelmeldungen immer zur aktuellen Textkonsole gesendet werden, lässt sich mit "setlogcons [0..6]" (hier: logge nur zu /dev/tty1) ändern. Mit der Grafikkonsole (i.d.R. 7) und xterminals funktioniert das leider nicht.
=> man setlogcons

2. Der Loglevel (=die Geschwätzigkeit) lässt sich auch über "dmesg -n [1..9]" festlegen
=> man dmesg

Antworten