mdadm-startall: RAID-Systeme starten

Wednesday, February 1, 2017

In neueren Versionen von KNOPPIX, scheint das Skript zum starten aller RAID-Systeme mdadm-startall zu fehlen.
Ich habe es deshalb hier zum Download: attachs/mdadm-startall.

Software lokal installieren mit dem Linux Installations-Dreisatz (Eine Anmerkung)

Thursday, October 20, 2016

Wird ein Programm nicht über die Paketverwaltung angeboten, bleibt nur das Programm selbst zu installieren.
Hierfür wird i.d.R. der Linux Installations-Dreisatz aufgezeigt, der sich aus den GNU build utils der GNU Toolchain ergibt, um Software zu installieren. Auch selbst entwickelte Programme installiert man i.d.R. auf diese Weise.

Der Linux Installations-Dreisatz im Detail

Als Installations-Dreisatz bezeichnet man das Kompilieren und Installieren eines Programms mit folgenden drei Befehlen:

./configure --prefix=/usr/local
make
make install

In der Standardeinstellung ist normalerweise schon die Installation nach /usr/local vorgesehen. Denn /usr/bin gehört dem System und ist tabu. Siehe GNU Autoconf Handbuch Abs. 4.13 Default Prefix (https://www.gnu.org/software/autoconf/manual/autoconf.html#Default-Prefix).

Die drei Schritte sollten bekannt sein.
Nun ist aber in vielen Foren und Anleitungen zu lesen, dass für das make install Superuser-Rechte benötigt werden.
Doch das ist falsch. Der richtig Ansatz führt über die Gruppe staff, denn diese Gruppe ist vorgesehen um Software, ohne Superuser-Rechte lokal zu installieren. Fügt man sein Benutzerkonto dieser Gruppe hinzu, erhält man Schreibrechte unterhalb /usr/local und /var/local, so das zur Installation kein Root notwendig ist (was auch einen Sicherheitsgewinn bringt). Die Berechtigungen können im Detail wie folgt ermittelt werden: find / -group staff -writable 2>/dev/null.

Siehe auch: https://wiki.debian.org/SystemGroups.

Hat man Software lokal installiert, muss die Umgebungsvariable PATH entsprechend angepasst werden und /usr/local/bin und /usr/local/sbin hinzugefügt werden (ggf. auch in der Crontab). Und mittels ldconfig /usr/local/lib, der dynamische Linker angewiesen werden, auch nach Libs unter /usr/local/lib zu suchen.

Mehr Details zum Installations-Dreisatz findet man in der einschlägigen Literatur.

Als Alternative zur lokalen Installation, sollte aber immer das Erstellen eines distributions-spezifischen Pakets in Betracht kommen. Denn oft bieten Software-Projekte kein make uninstall an, oder es wurde nur unzureichend implementiert.

Webentwicklung/Webdesign; HTML: Telefonnummern verlinken

Thursday, June 30, 2016

Ganz ähnlich wie E-Mail-Adressen mit dem Schema (scheme) mailto angegebenen werden können und der Link i.d.R. den Mail-Client öffnet, um die E-Mail zu verfassen. Können auch Telefonnummern verlinkt werden (siehe RFC 3966).

Dazu muss das Schema tel genutzt werden. Beispiel:

Telefon: <a href="tel:+491631737743">+491631737743</a>

Am Computer weniger sinnvoll/nützlich, trumpft so ein Link am Smartphone allerdings richtig auf!

Raspberry Pi/Raspbian: Mails via SSH abholen (poor man’s solution)

Tuesday, June 14, 2016

Das hier vorgestellte Skript, kopiert via SSH und Shell, alle Mails vom Raspberry Pi ins lokale Postfach:

#!/bin/sh
# getrpimails.sh

set -e

mails="/var/tmp/$0.$USER.bak"

fetch () {
	ssh "rasberrypi" flock -x "/var/mail/pi" sh -c "'cat /var/mail/pi && rm -f -- /var/mail/pi'" > "$mails"
}

delivery () {
	touch "/var/mail/$USER" && flock -x "/var/mail/$USER" sh -c "cat '$mails' >>/var/mail/$USER"
}

fetch

while ! delivery; do
	sleep 3
done

Ganz sauber ist diese Lösung aber nicht, unter anderem könnten im Fehlerfall Mails verloren gehen. Z.B. dann, wenn die lokale Zustellung fehlschlägt/abgebrochen wird. Dann sind die Mails weg…

Hinweis: Eine überarbeitet Version, gibt es hier zum Download: attachs/ssh-getmails. Verbesserungsvorschläge willkommen.

Blacklist/Whitelist mit regulären Ausdrücken; Zeilenweise vs. Oder-Verknüpfung bei Angabe von Pattern

Monday, June 13, 2016

Ich programmiere in meiner Freizeit, meinen eigenen Feedreader (einige wissen dass vielleicht).

Dieser bietet zur Filterung unerwünschter Artikel, eine Black- und Whitelist an. Matched ein Artikel (nur der Titel wird gefiltert) gegen die Whitelist, gilt der Artikel als erwünscht und matched er gegen die Blacklist als unerwünscht. (Black- und Whitelist können auch kombiniert, oder eine der beiden Listen einfach weggelassen werden).

Die Listen sind dabei einfache Textdateien, die zeilenweise regulärere Ausdrücke enthalten, gegen die geprüft wird.

Statt aber nun für jedes Stichwort (Pattern) eine eigene Zeile zu nutzen, ist es performanter die Stichworte oder zu Verknüpfen.

Beispiel:

Besser ist es alle Stichworte oder zu verknüpfen:

a|e|i|o|u

Statt für jedes Stichwort eine eigene Zeile zu verwenden:

a
e
i
o
u

Benchmark

Hier mal das Benchmark.

Die Methode, alle Stichworte oder zu verknüpfen, ist wesentlich schneller (in diesem Beispiel, um ein ~10-faches schneller).

perl Desktop/benchmark.pl
                     Rate      zeilenweise oder-Verknüpfung
zeilenweise       80775/s               --             -91%
oder-Verknüpfung 869565/s             977%               --

Hier das Skript benchmark.pl, womit ich das obige Beispiel ermittelt habe. Wobei jedes Listen-Feld einer Zeile entspricht, da die Black- und Whitelist-Dateien, im Feedmailer-Code als Perl-Liste (Array) abgebildet werden.

#/usr/bin/perl

use strict;
use utf8;
use warnings;

use Benchmark qw(:all);

my $count = 1000000;
cmpthese(
    $count,
    {
        "oder-Verknüpfung" => sub {

            my @pattern = ("a|e|i|o|u");
            for (@pattern) {
                if ( "abcdefghijklmnopqrstuvwxyz" =~ m/$_/i ) {
                    ;
                }

            }

        },

        "zeilenweise" => sub {

            my @pattern = ( "a", "e", "i", "o", "u" );
            for (@pattern) {
                if ( "abcdefghijklmnopqrstuvwxyz" =~ m/$_/i ) {
                    ;
                }
            }

        },
    }
);