Archiv der Kategorie: Software

Alles was mit Software zu tun hat

Intel Core i-Prozessoren und die Govenors

Unter Linux wird/wurde die Frequenz der Prozessoren bisher durch das cpufreq-Backend des Kernels geregelt. Es gab verschiedene „Govenors“, welche je eine Eintscheidungsart implementierten. Beispiel:

ondemand CPU auf kleinster Taktfrequenz, wird bei Last erhöht
performance CPU immer auf maximaler Taktfrequenz
powersave CPU immer auf kleinster Taktfrequenz

Mit den neuen Core i-Prozessoren (i3,i5,i7) ist dieses Konzept nur noch bedingt brauchbar – die CPU selbst hat viele Mechanismen um Strom zu sparen, sie muss allerdings „aufwachen“ um über den Govenor entscheiden zu können, ob die Beschäftigt ist oder nicht. Da hierdurch die dynamische Frequenzregelung am Ende mehr Strom verbraucht als ein Prozessor, welcher sich auf höchster Taktrate selbst verwaltet, bieten neue Kernel nun nur noch powersave oder performance für diese Prozessoren an. Für Intel empfiehlt sich „powersave“ zu wählen, durch die TurboBoost-Technologie erhöht die CPU ihren Takt bei entsprechender Last selbstständig. Mit Tools wie z.B. i7z lässt sich die Frequenzänderung auch entsprechend beobachten.

tl;dr: Intel-CPUs nur mit powersave-Govenor betreiben, CPU regelt Takt selbst passend hoch.

Gentoo: Linker-Fehler bei alten Paketen mit neuer GLibc

Möchte man alte Pakete auf einem System mit neuerer GLibc nutzen kommt es u.U. beim Linknen zu kleineren Verstimmungen:

/usr/lib/gcc/x86_64-pc-linux-gnu/4.7.3/../../../../x86_64-pc-linux-gnu/bin/ld: note: 'floor@@GLIBC_2.2.5' is defined in DSO /lib64/libm.so.6 so try adding it to the linker command line 
/lib64/libm.so.6: could not read symbols: Invalid operation 
collect2: error: ld returned 1 exit status

Als Workarround kann man die nötige Lib über paketspezifische LDFLAGS händisch einbinden:

/etc/portage/enc/templd.conf

LDFLAGS="$LDFLAGS -lm"

/etc/portage/package.env:

bla-foo/bar   templd.conf

Via nlsa8z6zoz7lyih3ap @ Gentoo Forums

IE11: Intranetseiten werden nicht korrekt dargestellt

Kurzer Hinweis an alle, die neuere Webapplikationen in einem Windows-Intranet nutzen wollen: Je nach Einstellung werden Webseiten mit internen IPs/Hostnames bei Nutzung des IE 11 automatisch in der „Kompatibilitätsansicht“ gerendert. Als Beispiel verschluckt sich daran die JS-Komponente des Vorlkszählers und zeigt folgende Meldung:

„Die Eigenschaft „forEach“ eines undefinierten oder Nullverweises kann
nicht abgerufen werden.“

Der Fehler scheint in diesem Fall nur mit dem IE11 im Kompatibilitätsmodus aufzutreten, der IE10 rendert trotz der Einstellung korrekt.

Mögliche Auswege:

a) Kompatibilitätsmodus abschalten

Unter Extras->Einstellungen der Kompatibilitätsansicht die Option
„Intranetsites in Kompatibilitätsansicht anzeichen“ abschalten

Bild: https://adlerweb.info/blog/wp-content/uploads/2014/05/intranet-241×300.png

Vorsicht: Dies kann ggf. andere intern verwendete Webapps unbrauchbar machen
– ask your Admin…

b) Auf der Webseite explizit IE11-Modus fordern

Hierzu folgendes im Header ergänzen:

Beim Volkszähler wäre der Code in /htdocs/frontend\index.html.

Alternativ gibt es auch passende Doctypes oder HTTP-Header um den IE zur Zusammenarbeit zu bewegen.

Linux-Shell/Bash: Passwörter einlesen (read)

Ab und an benötigen Scripte schon mal Passwörter für andere Systeme. Meist finden sich die Passwörter hardcoded im Script oder werden per Argument mitgegeben. Beide varianten haben den Nachteil, dass die Passwörter im Script oder der passenden Log-Datei (z.B. .bash_history) ggf. lesbar sind.

Bei interaktiv genutzten Scripten lässt sich mit „read“ das Passwort in eine Variable einlesen. Mit -s kann das echoing, also die Ausgabe des Passworts während des Eintippens, unterbinden.

read -s -p "Passwort fuer Nutzer123? " pwd
./befehl -u Nutzer123 -p "${pwd}"

Aria2 als Daemon mit Webinterface unter Arch Linux

Kurz und knapp: Aria2 ist ein Downloadmanager für Linux, welcher ein sehr großes Funktionsspektrum bietet – Downloads werden per HTTP/HTTPS, FTP, BitTorrent oder Metalink abgewickelt. Im HTTP-Bereich ist es möglich Downloads in mehrere Parts zu stückeln und diese von verschiedenen Mirror-Servern zu laden.

In meinem Fall soll das Ganze auf einem (GUI-losen) Linux-System laufen und von einem PC verwaltbar sein – so kann z.B. die neue Linux-Distro gemächlich über meine alte DSL-Leitung vor sich hin laden ohne meine Kabel-Hauptleitung zu belasten oder mich zu Zwingen den Rechner durchlaufen zu lassen. Als Host genügt dabei durchaus ein Linux-Embedded-System wie z.B. viele Router oder auch der Raspberry Pi.

Aria2 findet sich in den offiziellen Arch-Repos und lässt sich entsprechend direkt installieren. Für den Daemon-Modus nutze ich einen eigenen Benutzer namens „aria2“. Im Home-Verzeichnis des Nutzers wird (wenn nicht vorhanden) ein Ordner .aria2 erstellt (führenden Punkt nicht vergessen). Dort wiederum eine Datei namens aria2.daemon mit folgendem Inhalt:

continue
daemon=true
dir=/home/aria2/Downloads
file-allocation=falloc
log-level=warn
max-connection-per-server=4
max-concurrent-downloads=3
max-overall-download-limit=0
min-split-size=5M
enable-http-pipelining=true

enable-rpc=true
rpc-listen-all=true
rpc-user=rpcuser
rpc-passwd=rpcpass

Die Konfiguration weist Aria2 an als Daemon zu starten und alle Downloads in /home/aria2/Downloads zu speichern. Pro Server werden maximal 4 Verbindungen geöffnet, insgesamt 3 Downloads werden parallel geladen. Eine Bandbreitenbeschränkung für den Download ist nicht hinterlegt. In den letzten Zeilen werden die Zugangsdaten für das Frontend hinterlegt.

Anm: rpc-user und rpc-pass sind „deprecated“ und sollten nicht mehr verwendet werden, zum aktuellen Zeitpunkt wurde das hier verwendete Frontend jedoch noch nicht auf die neue Authentifizierungsmethode portiert

Anm2: file-allocation=falloc weist aria2 an den für den Download nötigen Platz im Vorfeld zu reservieren, dies verhindert Fragmentierung der Daten, jedoch kann es beim Start des Download einige Sekunden bis Minuten dauern bis die ersten Daten übertragen werden. falloc ist nur auf neueren Dateisystemen wie ext4, btrfs oder xfs nutzbar, bei älteren Systemen kann prealloc genutzt werden. Mit none wird die Reservierung abgeschaltet.

Um den Daemon automatisch beim Boot zu starten wird zudem die Datei /etc/systemd/system/aria2c.service erstellt:

[Unit]
Description=Aria2c download manager
After=network.target

[Service]
Type=forking
User=aria2
RemainAfterExit=yes
ExecStart=/usr/bin/aria2c --conf-path=/home/aria2/.aria2/aria2.daemon

[Install]
WantedBy=multi-user.target

Auch hier ggf. die Pfade an das eigene Setup anpassen.

Per systemctl start aria2c wird der Dienst gestartet – läuft dies ohne Fehlermeldung kann er mit systemctl enable aria2c in den „Autostart“ des Servers gelegt werden. Alles ist auch nochmal in der Arch-Wiki zu finden.

Für das Webinterface verwende ich webui-aria2. Es nutzt ausschließlich Javascript/HTML5 (Websockets/AJAX) für die Kommunikation, daher ist es weder notwendig die Daten auf dem selben System abzulegen, PHP/Python/Perl… zu installieren oder einen Webserver zu nutzen. Theoretisch kann die Datei auf der lokalen Festplatte des verwaltenden PCs/Laptops liegen und dort geöffnet werden. In meinem Fall liegen die Dateien auf einem bereits vorhandenen Webserver, so muss ich bei Updates nicht immer zwischen all meinen Geräten hin und her kopieren.

Beim öffnen der HTML-Datei werden die Zugangsparameter abgefragt. Bei Host wird die IP des Servers mit Aria2 eingetragen, der Port ist bereits hinterlegt. User/Passwort wurden in der zuvor erstellten Konfigurationsdatei eingerichtet.

Im Anschluss sollte die Verbindung aufgebaut werden können – am besten Prüft man das über Settings->Server Info, sind hier Daten hinterlegt konnte die Verbindung aufgebaut werden. Lasset die Downloads starten!

Bild: https://adlerweb.info/blog/wp-content/uploads/2014/05/aria2-300×195.png

Downloads direkt auf einem kleinen Linux-System? Check.

Zur Referenz: Der gezeigte Download ist Star Trek Phase II: Kitumba von startrekphase2.de.

PHP: Gekürzte var_dump()-Ausgaben abschalten

„Mal schnell“ ein paar Daten im PHP-Code lesbar ausgeben funktioniert üblicherweise sehr zuverlässig mit var_dump(). Auf einem System zeigte sich das Phänomen, dass lange Strings oder verschachtelte Arrays nicht vollständig angezeigt wurden. Ursache ist die Standardkonfiguration vieler Distros der PHP-Extension xdebug. In der entsprechenden ini-Datei lässt sich das Kürzen mit folgenden Zeilen unterbinden:

xdebug.var_display_max_data=-1
xdebug.var_display_max_children=-1
xdebug.var_display_max_depth=-1

Gentoo: tcpdump -w kann keine Dateien schreiben / Dateien nicht auffindbar

Mit tcpdump kann man sehr einfach auf der Konsole Netzwerkverbindungen mitlesen und so Fehler genauer betrachten. Üblicherweise lässt sich mit der Option „-w datei.pcap“ dieser Mitschnitt auch als pcap-Datei speichern, welche beispielsweise mit Wireshark geöffnet und weiter analysiert werden kann.

Unter Gentoo zeigten sich heute 2 seltsame Verhaltensmuster:

Mit absoluten oder relativen Pfaden:


tcpdump -i br0 -w /tmp/test.pcap
tcpdump: /tmp/test.pcap: No such file or directory

Ohne Pfad erscheint keine Fehlermeldung, die Datei wird aber augenscheinlich auch nicht erstellt:


host tmp # tcpdump -i br106 -w test.pcap
tcpdump: WARNING: br106: no IPv4 address assigned
tcpdump: listening on br106, link-type EN10MB (Ethernet), capture size 65535 bytes
^C
14 packets captured
14 packets received by filter
0 packets dropped by kernel
host tmp # ls -l test.pcap
ls: cannot access test.pcap: No such file or directory
host tmp #

Auslöser ist das USE-Flag „chroot“ – hierdurch wird der Prozess in ein virtuelles Root gesperrt, sodass Fehler (hoffentlich) nicht zu viel Schaden anrichten können. Alle Pfade beziehen sich auf /var/lib/tcpdump/ – entsprechend sind dort auch die ohne Pfadangabe generierten pcap-Dateien zu finden.

./adb: No such file or directory

Da Eclipse/Java auf all meinen Produktivsystemen – mal wieder – nur am abstürzen ist sollte es „mal schnell“ eine VM richten. Leider gab es bei der Installation der Android Developer Tools den o.g. Fehler. Etwas seltsam, denn die Datei ist vorhanden und lässt sich auch mit less & co lesen. Auch ldd ist keine große Hilfe – statisch gelinkt.

Lösung ist aber in der selben Richtung: Tatsächlich müssen die 32-Bit-Libraries installiert sein. Für Debian/Ubuntu/Mint hilft ein

sudo apt-get install ia32-libs

Eclipse: „Workspace in use“ nach Absturz

Nach einem Absturz konnte Eclipse nicht mehr auf den zuletzt geöffneten Workspace zugreifen. Um den Workspace wieder freizugeben muss im zugehörigen Verzeichnis die Datei .metadata/.lock gelöscht werden. Natürlich sollte man vorher mit ps o.Ä. sicherstellen, dass tatsächlich kein Eclipse mehr läuft, andernfalls könnten simultane Zugriffe zu Datenverlust führen.

SSH: X11 connection rejected because of wrong authentication.

„Mal schnell“ eine GUI über SSH aufrufen – normal kein Problem: Wenn auf dem Server X11Forwarding in der Datei /etc/ssh/sshd_config auf yes steht lässt sich mit ssh -vCXY user@host eine Verbindung starten, welche GUI-Aufrufe auf dem lokalen Rechner darstellt.

Heute leider nicht: GUI-Aufrufe verabschiedeten sich mit folgender Meldung:

X11 connection rejected because of wrong authentication.

An der SSH-Verbindung konnte man nichts sehen, diese Endete mit

debug1: Requesting X11 forwarding with authentication spoofing.

, also ohne Fehler.

Das Problem ist mal wieder aus der Kategorie „so einfach, dass man es übersieht“: Die Platte war voll…

df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda6 29G 28G 0 100% /

Nachdem wieder etwas Platz verfügbar war ging auch x11 per SSH wieder fehlerfrei.