05.12.2018

Flash-Update auf Version 32

Mir fehlen langsam die Worte, wie die Versionsnummern inflationär in Höhen klettern. Google hat es mit Chrome vorgemacht, aus irgendwelchen Gründen macht es Mozilla mit Firefox und Thunderbird nach, und jetzt beschleunigt Adobe die Nummerierung des Flashplayers genauso.

Und weil mir die neuen Worte fehlen, nehme ich immer den alten Blogartikel, nur die Versionsnummern und die Links ändern sich ;)

Einen Hinweis muss ich aber nun doch noch einbauen: ab Ende Januar 2016 gibt es keine freien Downloads der Installationsdateien mehr. Genaue Modalitäten sind noch nicht bekannt, Adobe hat nur bekannt gegeben, dass die Downloadlinks über die "distribution3.html"-Seite nicht mehr zur Verfügung stehen werden und man eine Adobe-ID und eine Business-Lizenz benötige.

Wir sind jetzt schon bei Flash-Version 32 (mittlerweile zählt wohl auch ein Major release nicht mehr zu den besonders erwähnenswerten Ereignissen bei Adobe?). Wer sich selbst auf dem Laufenden halten will, kann das Blog des Security-Teams bei Adobe lesen oder als RSS abonnieren.

Wie üblich in ihrem freundlichen Service-Blog die passende Automation zum Herunterladen und Installieren. Falls ein Proxy verwendet wird, das "rem" bzw. "#" entfernen und eigene Proxy-Adresse eintragen.

Chrome, Edge und Internet Explorer aktualisieren das Flashplugin automatisch.

Besonderer Leserservice (neu): Bitte prüfen Sie hier Ihre aktuelle Adobe Flash-Version. Wer mit NoScript oder ähnlichen Skriptblockern arbeitet, muss 4 bis 5 verschiedene Adobe-Domains genehmigen, dann auf das Puzzle-Symbol klicken und damit Flashinhalte erlauben.

Das Tool wget wird bei Windows noch benötigt wie hier beschrieben. Bei Linux sollte es schon vorhanden sein, da es von vielen anderen Programmen intern verwendet wird.

Für Windows wie üblich beide Varianten, ActiveX und Netscape Plugin (Achtung übrigens, Firefox wird demnächst das NPAPI komplett abschaffen - mal sehen, was Adobe und Flash dann machen).

Die Download-URL hat sich übrigens im Vergleich zu Version 23 leicht geändert, sowohl bei Windows als auch bei Linux.
@echo off
rem set https_proxy=http://192.168.100.100:3128/
set VNP=32.0.0.255
set VAX=
32.0.0.255
set V=32
set H=fpdownload.adobe.com
set P=/get/flashplayer/pdc
set AX=install_flash_player_ax.exe
set NP=install_flash_player.exe
wget https://%H%%P%/%VAX%/%AX% -O flash-%VAX%_ax.exe
.\flash-%VAX%_ax -install
wget https://%H%%P%/%VNP%/%NP% -O flash-%VNP%_np.exe
.\flash-%VNP%_np -install
Für Linux 64 bit rpm (als root ausführen oder "sudo rpm" schreiben) gibt es jetzt auch wieder offiziell dieselbe Version wie für Windows. Eine Zeitlang war Flash für Linux bei Version 11.2 "eingefroren", Adobe hat es sich nun anders überlegt und liefert wieder, obwohl die Zeichen generell auf Untergang stehen - in Google Chrome ist Flash gar nicht mehr enthalten, und die anderen Browser-Hersteller wechseln auf Multimedia in HTML5 statt Flash. Es gäbe auch die Version "PPAPI" zum Herunterladen, das ist die Pluginvariante "Pepper" für das Google-API, ich gebe hier "NPAPI" für das Firefox-API im Skript an.
#!/bin/sh

# https_proxy=http://192.168.100.100:3128/

VL=${1:-
32.0.0.255}
H=fpdownload.adobe.com
PL=/get/flashplayer/pdc/${VL}

DL() { wget -N "$1/$2" -O "$3"; }

echo Linux 64 bit rpm ...
DL https://${H}${PL} \
   flash-player-npapi-${VL}-release.x86_64.rpm \
   flash-${VL}.x86_64.rpm
rpm -F --force flash-${VL}.x86_64.rpm
Der Filename für die 32bit-Variante ist "flash-player-npapi-${VL}-release.i386.rpm".

[20181205: Security Bulletin von Adobe]
[20190108: Security Bulletin von Adobe]
[20190212: Security Bulletin von Adobe]
[20190514: Security-Bulletin von Adobe]
[20190612: Security-Bulletin von Adobe]
[20190910: Security-Bulletin von Adobe]

22.11.2018

Wer ist noch wählbar?

Ich halte mich eigentlich eher für politisch links eingestellt. Wenn ich nicht in der UdSSR und der DDR gesehen hätte, dass der Kommunismus an der menschlichen Gier und Unvollkommenheit scheitert, wäre ich vermutlich auch ein Kommunist. So bin ich halt nur "irgendwie links" ;)

Leider macht es mir die SPD nicht leicht, links zu wählen. Samstag vor einer Woche war ein Interview mit Bouffier und Schäfer-Gümbel in der WZ, und beide Politiker brachten mich zum Kopfschütteln.

Die CDU behauptet, dass die Lehrerversorgung ganz wunderbar ist - sie kann es aber nicht belegen, weil sie dazu keine Statistik erfasst.
Die SPD genau wie die CDU findet die Vorratsdatenspeicherung ganz toll, und das ist ein schweres Problem für mich.
Abgesehen davon finde ich so gut wie alles von Oswin Veith grauenhaft, egal zu welchem Thema. Ich kann bei ihm keinerlei Sachkompetenz bei seinen Äußerungen erkennen.


Peter Tauber hat sich ein ganz dickes Fettnäpfchen geleistet: er hat bei Twitter des Todestags von Erwin Rommel gedacht ("Rommel galt allgemein als Hitlers „Lieblingsgeneral“").

Das große Interview (eine ganze Seite) und die ganzen kleinen Dinge außen herum waren der Anlass, diesen Frust in einen Leserbrief zu gießen.
Bemerkenswert finde ich die große Zahl Änderungen an meinem Leserbrief durch die Redaktion. Insbesondere der Unterschied, dass Bouffier von 105%, sein Kultusminister Lorz aber von realen 104% sprach, ist der Schere zum Opfer gefallen.

[Abgedruckt am 20.10.2018, Änderungen und Löschungen der WZ-Redaktion sind markiert]


Leserbrief zur Landtagswahl in Hessen
Herr Volker Bouffier hat deutlich gezeigt, dass er dem Thema Schulpolitik und seinem Kultusminister nicht viel Aufmerksamkeit schenkt, sonst hätte er nicht so vollmundig behauptet, dass die Lehrerversorgung in Hessen so toll ist. Er brüstet sich sogar mit der Zahl von 105% Lehrerversorgung. Dabei kann er weder anhand dieser Zahl noch generell überhaupt nicht beurteilen, ob die Lehrerversorgung gut ist - in Hessen gibt es nämlich keine zentrale Erfassung von Fehlstunden und Unterrichtsausfall. Er spricht auch noch von 105%, obwohl Herr Lorz im Frühjahr von 104% sprach (Bericht in der FR vom 15.02.18). Diese Zahl reicht 105% reichen nicht einmal aus, um die durchschnittliche Krankheitsrate abzufangen, die bei über 5% liegt (bei angestellten Lehrern, bei Beamten ist sie nochmals höher). Von diesen 104% Davon müssen auch noch Mediation, sozialpädagogische Zeiten und Aufwand für Inklusion und Integration abgezogen werden, und schon sieht diese Zahl gar nicht mehr so toll aus.
Leider ist die SPD in Hessen für mich auch nicht mehr wählbar, und das hat Herr Schäfer-Gümbel mit einem einzigen Satz im gedruckten Interview am Samstag geschafft: er unterstützt die Vorratsdatenspeicherung, für die auch Herr Veith so gern trommelt. Hat er die letzten Gerichtsurteile von Bundesverfassungsgericht und Europäischem Gerichtshof nicht wahrgenommen, die den Politikern mehrfach erklärt haben, auf wievielen Ebenen diese Schnüffelei verfassungswidrig ist? Ich bin ernsthaft erschüttert.
Unabhängig von diesem Interview möchte ich noch auf weitere mediale Äußerungen hinweisen, die sich Mitglieder der CDU kürzlich geleistet haben:
Herr Tauber, früher mal Generalsekretär der Bundes-CDU in Berlin, steht zwar nicht in Hessen zur Wahl, macht aber eifrig Wahlkampf. Er hat sich am 14.10. auf Twitter zu Wort gemeldet und an Erwin Rommel erinnert, der "von den Nazis zum Selbstmord gezwungen wurde". Dass dieser General aber vorher jahrelang Hitlers treuester General war, ist Tauber offensichtlich egal. Er hätte ja auch stattdessen an den Aufstand in Sobibor am selben Tag ein Jahr vorher erinnern können, aber das war ihm dann wohl zu profan.
Herr Veith, amtierendes Mitglied des Bundestages CDU-Bundestagsabgeordneter für den Wetteraukreis, spricht sich außer für die Vorratsdatenspeicherung auch für eine allgemeine Dienstpflicht aus, während er seinen Wahlkreis besucht. Schon mehrfach ist die Dienstpflicht gescheitert, was er eigentlich als Berufspolitiker und Jurist sogar besser wissen müsste als ich - ich bin "nur" Naturwissenschaftler.
Schon bei der Entstehung des Grundgesetzes - mit den Erfahrungen aus der NS-Zeit im Hinterkopf - wurde die allgemeine Dienstpflicht einhellig negativ beschieden, dann im Rahmen der Notstandsgesetze, erneut bei der Grundpflichtendebatte der 1980er/90er Jahre, anlässlich des Pflegenotstandes und der Entscheidung des BVerfG 1995 zur Feuerwehrabgabe, sowie bei der Aussetzung der Wehrpflicht gab es in Bayern 2011 einen Versuch eines sozialökologischen Pflichtjahrs. Alle diese Versuche sind gescheitert, weil das deutsche Grundgesetz eine allgemeine Dienstpflicht einfach nicht her gibt. Allein schon Art. 12 II GG, der den Arbeitszwang verbietet, steht der allgemeinen Dienstpflicht im Weg. Das Grundgesetz will damit verhindern, dass so etwas wie ein Reichsarbeitsdienst erneut eingeführt wird. Analog stehen der Dienstpflicht die EU-Grundrechtecharta und die Europäische Menschenrechtskonvention entgegen. 
Auf der einen Seite gibt es PISA, Bologna und weitere merkwürdige Bildungsreformen, landauf, landab hört man immer, dass die Schüler schneller zum Schulabschluss geführt werden müssen, und dann sollen sie mit der Dienstpflicht doch wieder ein Jahr lang fern vom Arbeitsmarkt sein? Schulabgänger ohne Ausbildung sollen qualifizierte Dienste, z.B. in Pflegeeinrichtungen, leisten? Und damit vielleicht den Arbeitsmarkt nachhaltig erschüttern und die "Preise", sprich Löhne, drücken? Oder ist das überhaupt der Hintergedanke?

12.09.2018

Lies die Anleitung bis zum Ende!

Eigentlich sollte das eine Selbstverständlichkeit sein, aber manchmal vergisst man solche Grundsätze oder überfliegt die Anleitung nur flüchtig.

So ist es mir kürzlich passiert, als ich ein "unofficial" LineageOS auf dem Smartphone eines Freundes installieren wollte. Ich hatte ihm Motorola empfohlen und er war begeistert von den "Moto Mods" - magnetischen Modulen, die man an die Rückseite anklipsen kann.

Ich selbst verwende ein Moto Z von 2016 (XT1650), weil mich das Kameramodul von Hasselblad fasziniert hat, und mein Freund ist ein HiFi-Fan, der das Modul mit JBL-Stereolautsprecher haben wollte. Daneben gibt es noch verschiedene Zusatzakkus, einen Drucker oder einen Beamer. Motorola garantiert bei der "Z"-Baureihe, dass die Module mindestens drei Smartphonegenerationen lang benutzt werden können, dass man also ein neueres Telefon der Baureihe kaufen kann und die Module können weiter verwendet werden. Das klappt wirklich: mein Akkumod - zusammen mit dem Moto Z gekauft - passt auch an das Z2 meines Bekannten.

Dummerweise hat er das Modell "Z2 Play" gekauft, das derzeit nicht offiziell von LineageOS unterstützt wird, d.h. es ist nicht über die Downloadseite zu bekommen. Der Entwickler bietet es quasi "privat" als Download bei Google Drive an. Bei meinem eigenen Telefon hatte ich als erstes Kriterium die Verfügbarkeit eines offiziellen LineageOS, und als zweites Kriterium wollte ich einen Bildschirm mit mehr als HD-Auflösung, also besser als die üblichen 1920x1080. Die "Play"-Modelle von Motorola haben aber nur diese Bildschirmgröße, deshalb fiel das bei mir durch's Raster.

[Update 20181017] Das Motorola Z2 Play "albus" ist mittlerweile offiziell.

Der erste Schritt war der Start des Telefons, weil man in den Entwickleroptionen erst das Entsperren des Bootloaders erlauben muss - das findet sich bei immer mehr Herstellern, nicht nur Motorola, sondern z.B. auch LG. Danach konnte ich das Smartphone mit dem PC verbinden und im Debugmodus mit adb die nötigen Dateien kopieren. Nach dem Wechsel in den Fastboot-Modus mit dem Befehl "adb reboot bootloader" konnte ich dann den Entsperrcode benutzen, den Motorola mir in einer Email geschickt hatte.

Der erste Installationsversuch von LineageOS schlug fehl, weil nach der Installation des (durchaus funktionsfähigen) TWRP-Recoverys das LineageOS-Zip sich mit "ERROR 255" nicht installieren ließ. Beim ersten Mal dachte ich, dass die Zip-Datei beschädigt ist und ließ sie mit "unzip -t" auf dem NAS prüfen, aber die Datei war in Ordnung.

Etwas Recherche ergab, dass für dieses Smartphone ein spezielles "64 bit" TWRP verwendet werden muss, das auch nicht offiziell von TWRP angeboten wird. An dieser Stelle wurde ich dann doch etwas unsicher über das ganze "inoffizielle" Gedöns ... aber mein Kumpel war zuversichtlich und wir machten weiter.

Der zweite Versuch schlug schon viel früher fehl: das neu geflashte Recovery startet bis zum Bildschirm, auf dem man "Install", "Wipe" usw. aufrufen kann, aber der Touchscreen war nicht funktionsfähig.

An dieser Stelle brachen wir die Installation dann doch ab und ich restaurierte auch das originale Recovery von Motorola wieder. Nach einem Neustart des Smartphones mit dem "hello moto" zeigte sich beruhigenderweise wieder das vertraute Bild der Motorola-Version von Android 7.1 Nougat.

Trotzdem ließ mir dieser Fehlschlag keine Ruhe - ich wollte das nicht auf mir sitzen lassen! Alle bisherigen Telefone ließen sich problemlos entsperren und mit CM bzw. LOS bespielen, warum also nicht dieses?

Beim erneuten Durchlesen der Beschreibung fiel mir auf, dass ich einen entscheidenden Satz überlesen hatte: "Bugs: Need to press power button two times for touch to work". Also einfach mal den Bildschirm ausschalten und wieder einschalten!

Das hat dann tatsächlich geklappt, es kam das übliche "Swipe to unlock", und danach konnten wir weiter machen. Die Installation von LineageOS, Google Apps und dem addon-su-Paket lief dann schmerzfrei, und nach der Freischaltung in meiner Firewall konnte mein Kumpel auch das Telefon fertig einrichten, Apps herunterladen usw. Den genauen Ablauf habe ich oft genug beschrieben, deshalb werde ich das hier nicht noch mal wiederholen ;-)

Eine kleine Besonderheit gibt es: nach dem Entsperren des Bootloaders wird das Einschaltbild ("boot logo") durch einen Hinweistext ersetzt, dass das Telefon entsperrt ist. Dieses Bootlogo kann man natürlich problemlos durch ein schöneres Bild ersetzen, es finden sich genügend fertige zum Downloaden, und mit dem "Motorola Bootlogo Maker" kann man sich auch eigene Bilder zurecht basteln.

Also am Ende alles gut ;-)

Da fiel mir dann der alte Spruch auch gleich wieder ein: "if all else fails, read the instructions".

[Update 20190924] Nachdem wir feststellten, dass LineageOS die meisten Mods nicht vernünftig unterstützt, weil man dazu proprietäre Softwaremodule benötigt, die die LineageOS-Entwickler nicht verteilen dürfen, haben wir das originale Android von Motorola wieder zurückgespielt. Der Akkumod funktioniert, aber der JBL-Lautsprecher leider nicht.

11.09.2018

Flash-Update auf Version 31

Mir fehlen langsam die Worte, wie die Versionsnummern inflationär in Höhen klettern. Google hat es mit Chrome vorgemacht, aus irgendwelchen Gründen macht es Mozilla mit Firefox und Thunderbird nach, und jetzt beschleunigt Adobe die Nummerierung des Flashplayers genauso.

Und weil mir die neuen Worte fehlen, nehme ich immer den alten Blogartikel, nur die Versionsnummern und die Links ändern sich ;)

Einen Hinweis muss ich aber nun doch noch einbauen: ab Ende Januar 2016 gibt es keine freien Downloads der Installationsdateien mehr. Genaue Modalitäten sind noch nicht bekannt, Adobe hat nur bekannt gegeben, dass die Downloadlinks über die "distribution3.html"-Seite nicht mehr zur Verfügung stehen werden und man eine Adobe-ID und eine Business-Lizenz benötige.

Wir sind jetzt schon bei Flash-Version 31 (mittlerweile zählt wohl auch ein Major release nicht mehr zu den besonders erwähnenswerten Ereignissen bei Adobe?). Wer sich selbst auf dem Laufenden halten will, kann das Blog des Security-Teams bei Adobe lesen oder als RSS abonnieren.

Wie üblich in ihrem freundlichen Service-Blog die passende Automation zum Herunterladen und Installieren. Falls ein Proxy verwendet wird, das "rem" bzw. "#" entfernen und eigene Proxy-Adresse eintragen.

Das Tool wget wird bei Windows noch benötigt wie hier beschrieben. Bei Linux sollte es schon vorhanden sein, da es von vielen anderen Programmen intern verwendet wird.

Für Windows wie üblich beide Varianten, ActiveX und Netscape Plugin (Achtung übrigens, Firefox wird demnächst das NPAPI komplett abschaffen - mal sehen, was Adobe und Flash dann machen).

Die Download-URL hat sich übrigens im Vergleich zu Version 23 leicht geändert, sowohl bei Windows als auch bei Linux.
@echo off
rem set https_proxy=http://192.168.100.100:3128/
set VNP=31.0.0.153
set VAX=31.0.0.153

set V=31
set H=fpdownload.adobe.com
set P=/get/flashplayer/pdc
set AX=install_flash_player_ax.exe
set NP=install_flash_player.exe
wget https://%H%%P%/%VAX%/%AX% -O flash-%VAX%_ax.exe
.\flash-%VAX%_ax -install
wget https://%H%%P%/%VNP%/%NP% -O flash-%VNP%_np.exe
.\flash-%VNP%_np -install
Für Linux 64 bit rpm (als root ausführen oder "sudo rpm" schreiben) gibt es jetzt auch wieder offiziell dieselbe Version wie für Windows. Eine Zeitlang war Flash für Linux bei Version 11.2 "eingefroren", Adobe hat es sich nun anders überlegt und liefert wieder, obwohl die Zeichen generell auf Untergang stehen - in Google Chrome ist Flash gar nicht mehr enthalten, und die anderen Browser-Hersteller wechseln auf Multimedia in HTML5 statt Flash. Es gäbe auch die Version "PPAPI" zum Herunterladen, das ist die Pluginvariante "Pepper" für das Google-API, ich gebe hier "NPAPI" für das Firefox-API im Skript an.
#!/bin/sh

# https_proxy=http://192.168.100.100:3128/

VL=${1:-
31.0.0.153}
H=fpdownload.adobe.com
PL=/get/flashplayer/pdc/${VL}

DL() { wget -N "$1/$2" -O "$3"; }

echo Linux 64 bit rpm ...
DL https://${H}${PL} \
   flash-player-npapi-${VL}-release.x86_64.rpm \
   flash-${VL}.x86_64.rpm
rpm -F --force flash-${VL}.x86_64.rpm
Der Filename für die 32bit-Variante ist "flash-player-npapi-${VL}-release.i386.rpm".

[20180911: Security Bulletin von Adobe]
[20181114: Security Bulletin von Adobe]
[20181120: Security Bulletin von Adobe]

10.09.2018

Die überraschende Firewall

Zur Abwechslung gibt es heute mal eine Anekdote einer interessanten und überraschenden Problemsuche bei einem Freund.

Besagter Freund wollte sich ein Emailkonto bei einem neuen Anbieter einrichten und es wollte nicht funktionieren. Das Emailkonto gehört zu einem Gesamtkunstwerk aus Website und Domainname eines Vereins. Durch Umzug der Website zu einem anderen Anbieter und Wechsel im Vereinsvorstand mussten wir ein Emailkonto für den Verein auf seinem PC neu einrichten.

Ich hatte vorher das Konto über die Verwaltungsseite des Anbieters angelegt, die technischen Daten für die Mailserver notiert (Pop, Imap, Smtp) und meinem Freund geschickt. Aber es wollte nicht funktionieren. Halt, das ist nicht ganz richtig. Mail abholen funktionierte, aber Mail versenden war nicht möglich.

Für mich erschwerend kam hinzu, dass es sich um einen Laptop mit Windows und Outlook handelt, und schon mit Windows tue ich mich sehr schwer. Mit Outlook habe ich eigentlich gar keine Erfahrung und musste mich durch eine etwas gewöhnungsbedürftige Bedienung durchkämpfen. Ich selbst verwende als Mailprogramm schon immer Thunderbird und bin sehr zufrieden damit.

Zuerst hatte ich die Sicherheitssoftware in Verdacht: Norton Antivirus hatte sich in Browser und Betriebssystem als Firewall eingeklinkt (der Windows-interne Firewall war abgeschaltet) und ich schaltete testweise Norton komplett ab, weil ich den Verdacht hatte, dass Norton ausgehende Mailverbindungen zu "komischen" Servernamen ablehnt (zur Unterdrückung von Spam). Aber das half nicht.

Also tiefer eingestiegen und mit einer Kommandozeile eine "telnet"-Verbindung zum Anbieter versucht. Auch das schlug fehl - es war also kein Outlookproblem, und da Norton abgeschaltet war, auch kein Nortonproblem. Ein "ping" war möglich. Zudem war das telnet-Programm zuerst gar nicht erreichbar, sondern ich musste es über die Systemsteuerung installieren (in der Systemsteuerung bei den Windows-Komponenten den "telnet-client" ankreuzen). Danach konnte ich auf der Kommandozeile mit dem schlichten Befehl "telnet mailservername 465" testen, ob der PC eine TCP-Verbindung zum Port 465 für SMTP über SSL aufbauen kann.

Nach mehreren erfolglosen Versuchen kam ich auf die Idee, im DSL-Router nachzuschauen - ein ziemlich neues Mietgerät von der Telekom für VDSL mit "Smarthome"-Fähigkeiten, also ziemlich neu. Und tatsächlich gibt es in diesem !$%&-DSL-Router einen Menüpunkt "Erlaubte Mailserver".

Der Router hat also tatsächlich einen Mini-Firewall auf Hostnamenebene eingebaut und kommt mit einer einigermaßen umfangreichen Liste von vordefinierten Mailanbietern und deren Hostnamen für Smtp-Mailablieferung. Nur "unser" Anbieter "Host Europe" war nicht in der Liste enthalten.

Also den Hostnamen unseres Smtp-Servers eingetragen und - bingo! Es ging immer noch nicht.

Erst nach einem Neustart des DSL-Routers wurde die Änderung funktionsfähig.

Der Neustart zog zwar weitere Probleme mit dem ISDN-Adapter der Telekom und der alten ISDN-Telefonanlage meines Freundes nach sich, aber diese Geschichte erzähle ich vielleicht ein anderes Mal ;-)

16.08.2018

Formeln in LibreOffice Calc mit einem perl-Skript erzeugen

Hier kommt mal wieder eine Kleinigkeit, die mich etwas Mühe gekostet hat: ein perl-Skript, das mir ein XLSX-Spreadsheet erzeugt, in dem funktionierende Formeln eingebettet sind. XLSX ist das XML-Dokumentenformat von Microsoft Office, funktioniert aber auch in LibreOffice. Technisch ist es weit umständlicher als das OpenDocument Format und nicht wirklich frei, aber das soll hier nicht das Thema sein.

Ich bin an und für sich kein großer Office-Benutzer und weiß eigentlich auch nur das Nötigste - aber beruflich hab ich halt doch immer mal wieder den Auftrag, irgendwelche Office-Dateien zu verwenden oder zu liefern. In solchen Fällen versuche ich immer, mir mit Perl-Skripten die Handarbeit vom Hals zu schaffen und stattdessen eine schöne Automation zu verwenden ;-)

Kürzlich wollte nun ein Kollege in ein Spreadsheet, das ich für ihn generiere, in mehreren Zellen eine Verknüpfung zu einem anderen Tabellenblatt ("sheet") eingebaut haben.

Ich hatte größere Schwierigkeiten, die richtige Schreibweise für Formelbefehle und die Zellenkoordinaten zu finden - LibreOffice ist hier zu hilfreich und verbirgt über automatische Korrekturen im Calc-Programm viele Eingabefehler vor dem Benutzer - die Schreibweise aus dem GUI ins Skript übernommen hat nicht funktioniert und beim Öffnen der neuen Datei erhielt ich immer eine Fehlermeldung in allen Zellen mit Formel. Interessant daran: wenn ich im Office-Programm die Formel bearbeitete und abspeicherte, fing sie an zu funktionieren, obwohl ich an der Schreibweise nichts geändert hatte (z.B. einfach ein Zeichen gelöscht und dasselbe Zeichen wieder eingetippt). Das war extrem frustrierend, zeigt es doch, dass hier im Sinne der Bequemlichkeit Dinge in der Software unter der Haube passieren, die man als Benutzer nicht erkennen kann.

Außerdem ist die Syntax zwischen Microsoft Office und LibreOffice leicht unterschiedlich. Auch bei /r/LibreOffice und /r/perl waren die Lösungsvorschläge für meine Fragen breit gestreut, was die mögliche Schreibweise der Formeln angeht. Letztendlich hat sich dann eine Schreibweise gefunden, die bei LibreOffice und MS Office funktioniert - hurra!

Für das Experimentieren hatte ich mir ein winziges Perl-Skript geschrieben, das eine XLSX-Datei mit zwei Sheets erzeugt und in einer Zelle des ersten Blatts einen Verweis auf das zweite Blatt einfügt. Beim Öffnen der Datei mit Office wird dann der Verweis ausgeführt und der referenzierte Wert (im Skript unten grün markiert) erscheint dynamisch in der Formelzelle. Der rot markierte Text wird durch die Zuweisung "$u[4]=..." durch die Formel ersetzt. Die Formel enthält noch Platzhalter %d und %s, um mit printf bestimmte Zeilennummern und Spaltennamen einzusetzen, während die XLSX-Datei erzeugt wird. Die write-Methode für eine Zeile des Spreadsheets erwartet eine Referenz auf ein Array mit den Zelleninhalten, deshalb muss ich als Parameter \@l angeben. Es gibt auch speziellere write-Methoden, mit denen man jede Zelle einzeln befüllen kann, aber write ist meistens gut darin, die Datentypen im Array zu erkennen und die Arbeit intern passend zu delegieren.

Das Spreadsheet sieht dann so aus:

Der erste Tab "unix users" enthält in Zelle E1 die Formel =IFERROR( VLOOKUP( A1; $Lookup.$A$1:$B$10000; 2; 0 );"" ). Statt der Platzhalters %d sieht man die Zeilennummer "1" bzw. die Spaltennummer "2" und statt der %s werden die Spaltennamen "A" und "B" eingesetzt, d.h. der Bereich, in dem nachgeschlagen wird, geht von A1 bis B1000 und es wird bei einem Treffer in A1 der Inhalt der 2. Spalte des Bereichs (hier dann B1) übernommen.
Den Formeltext in kursiv im vorigen Absatz habe ich übrigens aus dem Eingabefeld in LibreOffice kopiert. Man sieht, dass die Schreibweise nicht dem entspricht, was im Skript als Formelschreibweise verwendet wird - hier steht plötzlich $Lookup. und nicht Lookup!. Wenn ich mit unzip in die XLSX-Datei hineinschaue (trotz der Endung ist es eine schlichte Zip-Datei!), sehe ich die Schreibweise zwischen den XML-Tags für die Formel <f> ... </f> so wie im Skript: <f>IFERROR(VLOOKUP(A1,Lookup!$A$1:$B$10000,2,0),"")</f>


Und der zweite Tab "Lookup" enthält für jeden Unixuser die Beschreibung für das GECOS-Feld.

Für eine komplexe Geschichte wie eine XLSX-Datei ist das mit knapp 20 Zeilen perl zu bewerkstelligen. Ich liebe dieses Perl-Modul.
#!/usr/bin/perl -w
use strict 'refs';
use strict 'vars';
use utf8;
use Excel::Writer::XLSX;
 
my $excelout = 'formel.xlsx';
my $workbook = Excel::Writer::XLSX->new($excelout);
my $lookupfrm=qq{=IFERROR(VLOOKUP(A%d,Lookup!\$%s\$1:\$%s\$1000,%d,0),"")};
my $worksheet;
my @u=("root","*",0,0,"no gecos","/root","/bin/sh");
my $row=0;
 
print STDERR "# write Excel unix users\n";
$worksheet=$workbook->add_worksheet('unix users');
$worksheet->keep_leading_zeros();
$u[4]=sprintf($lookupfrm,1+$row,"A","B",2),
$worksheet->write($row, 0, \@u);
print STDERR "# unix user @u\n";
 
$worksheet=$workbook->add_worksheet('Lookup');
my @l=("root","root user");
$worksheet->write($row, 0, \@l);
print STDERR "# lookup @l\n";
 
$workbook->close();

31.07.2018

Trump darf man nicht schönreden - Leserbrief

Letzte Woche gab es eine neue Kolumne von Hr. Seligmann, in der er vorschlug, nicht nur das Negative in Trump zu sehen, sondern auch zu versuchen, ob es positive Auswirkungen seiner Politik geben könnte. Ich bin vollständig anderer Meinung - es ist nicht möglich, an Trump irgend etwas positiv zu finden, und schon der Versuch ist sinnlos.
[veröffentlicht am 31.07.2018]

Leserbrief zur Kolumne von Hr. Seligmann vom 24.07.2018
Nein, Herr Seligmann, an Trump ist nichts Gutes, und es hilft auch nichts, wenn man versucht, sich die Realität schön zu reden, wie Sie es in Ihrer Kolumne vorschlagen. Diese Art von Dialektik ist der "Zeit" letzte Woche um die Ohren geflogen, als die Zeitung das angeblich gleichberechtigte Pro und Kontra der Seenotrettung diskutieren wollte.
Trump lügt im Schnitt sechs Mal pro Tag, und er greift ohne Rücksicht Mitarbeiter und Mitmenschen an, die ihm die Wahrheit zu sagen versuchen.
Sein Lieblingsfeind ist die Washington Post, die regelmäßig seinen Unfug aufdeckt, und weil die Washington Post seit einigen Jahren Jeff Bezos gehört, dem Besitzer von Amazon, greift er ebenfalls Amazon an und fordert z.B. von der US-Post, das Porto für die Pakete von Amazon im Preis zu verdoppeln.
Diese Zeitung hat eine permanent aktualisierte Liste aller seiner Lügen, die man abrufen kann.
Dort sind für seine bisherigen 497 Regierungstage schon 3251 aufgedeckte falsche Behauptungen zu finden.
Wenn er widerlegt wird, kontert die Regierung mit "alternativen Fakten", aus denen sich sein Weltbild zusammensetzt.
Die Zahl der Hassverbrechen ist deutlich gestiegen seit seiner Wahl.
Auf Sportfeldern schreien weiße Schulkinder "Trump! Trump!" als Beleidigung, wenn das Gastteam afro- oder lateinamerikanisch ist.
Nach dem Regierungsantritt hat Trump systematisch wissenschaftliche (echte!) Fakten von Webseiten löschen lassen, auf die das Weiße Haus Einfluss hat, z.B. zum Klimawandel, in der Gesundheitspolitik usw. Das Gesundheitsministerium wies die Seuchenschutzbehörden an, bestimmte Begriffe wie "Diversität", "evidenzbasiert" und "wissenschaftsbasiert" nicht mehr zu verwenden.
In einem Menschen, der systematisch Hass und Lügen verbreitet und wissenschaftliche Fakten ignoriert und durch Zensur aus der Welt und aus dem Bewusstsein schaffen will, darf man nichts Gutes suchen. Die Mechanismen der Sprache, die Trump verwendet, hat Orwell in "1984" voraus gesehen: die Realität ist nichts, wenn man nur lang genug das Gegenteil behauptet und die Medien beherrscht. Hier kann man durchaus Vergleiche zum Medienmogul Berlusconi ziehen, der durch sein eigenes Medienimperium politisch zu Einfluss kam. Trump ist genauso, nur noch dreister.
Hannah Arendt warnte schon 1951: "Der ideale Untertan totalitärer Herrschaft ist nicht der überzeugte Nazi oder engagierte Kommunist, sondern Menschen, für die der Unterschied zwischen Fakten und Fiktion, wahr und falsch, nicht länger existiert."
Trump ist auf dem besten Weg dorthin, wenn er systematisch das Vertrauen in die Wissenschaft und in die Demokratie angreift.

11.07.2018

Flash-Update auf Version 30

Mir fehlen langsam die Worte, wie die Versionsnummern inflationär in Höhen klettern. Google hat es mit Chrome vorgemacht, aus irgendwelchen Gründen macht es Mozilla mit Firefox und Thunderbird nach, und jetzt beschleunigt Adobe die Nummerierung des Flashplayers genauso.

Und weil mir die neuen Worte fehlen, nehme ich immer den alten Blogartikel, nur die Versionsnummern und die Links ändern sich ;)

Einen Hinweis muss ich aber nun doch noch einbauen: ab Ende Januar 2016 gibt es keine freien Downloads der Installationsdateien mehr. Genaue Modalitäten sind noch nicht bekannt, Adobe hat nur bekannt gegeben, dass die Downloadlinks über die "distribution3.html"-Seite nicht mehr zur Verfügung stehen werden und man eine Adobe-ID und eine Business-Lizenz benötige.

Wir sind jetzt schon bei Flash-Version 30 (mittlerweile zählt wohl auch ein Major release nicht mehr zu den besonders erwähnenswerten Ereignissen bei Adobe?). Wer sich selbst auf dem Laufenden halten will, kann das Blog des Security-Teams bei Adobe lesen oder als RSS abonnieren.

Wie üblich in ihrem freundlichen Service-Blog die passende Automation zum Herunterladen und Installieren. Falls ein Proxy verwendet wird, das "rem" bzw. "#" entfernen und eigene Proxy-Adresse eintragen.

Das Tool wget wird bei Windows noch benötigt wie hier beschrieben. Bei Linux sollte es schon vorhanden sein, da es von vielen anderen Programmen intern verwendet wird.

Für Windows wie üblich beide Varianten, ActiveX und Netscape Plugin (Achtung übrigens, Firefox wird demnächst das NPAPI komplett abschaffen - mal sehen, was Adobe und Flash dann machen).

Die Download-URL hat sich übrigens im Vergleich zu Version 23 leicht geändert, sowohl bei Windows als auch bei Linux.
@echo off
rem set https_proxy=http://192.168.100.100:3128/
set VNP=30.0.0.154
set VAX=30.0.0.154
set V=30
set H=fpdownload.adobe.com
set P=/get/flashplayer/pdc
set AX=install_flash_player_ax.exe
set NP=install_flash_player.exe
wget https://%H%%P%/%VAX%/%AX% -O flash-%VAX%_ax.exe
.\flash-%VAX%_ax -install
wget https://%H%%P%/%VNP%/%NP% -O flash-%VNP%_np.exe
.\flash-%VNP%_np -install
Für Linux 64 bit rpm (als root ausführen oder "sudo rpm" schreiben) gibt es jetzt auch wieder offiziell dieselbe Version wie für Windows. Eine Zeitlang war Flash für Linux bei Version 11.2 "eingefroren", Adobe hat es sich nun anders überlegt und liefert wieder, obwohl die Zeichen generell auf Untergang stehen - in Google Chrome ist Flash gar nicht mehr enthalten, und die anderen Browser-Hersteller wechseln auf Multimedia in HTML5 statt Flash. Es gäbe auch die Version "PPAPI" zum Herunterladen, das ist die Pluginvariante "Pepper" für das Google-API, ich gebe hier "NPAPI" für das Firefox-API im Skript an.
#!/bin/sh

# https_proxy=http://192.168.100.100:3128/

VL=${1:-30
.0.0.154}
H=fpdownload.adobe.com
PL=/get/flashplayer/pdc/${VL}

DL() { wget -N "$1/$2" -O "$3"; }

echo Linux 64 bit rpm ...
DL https://${H}${PL} \
   flash-player-npapi-${VL}-release.x86_64.rpm \
   flash-${VL}.x86_64.rpm
rpm -F --force flash-${VL}.x86_64.rpm
Der Filename für die 32bit-Variante ist "flash-player-npapi-${VL}-release.i386.rpm".

[20180607: Security Bulletin von Adobe]
[20180710: Security Bulletin von Adobe]
[20180814: Security Bulletin von Adobe]

25.06.2018

Leserbrief: Heimrouter und Sicherheit

Die WZ hat regelmäßig in der Samstagsausgabe Sonderseiten zu bestimmten Themen, darunter auch Computer, Internet, Smartphones und verwandte Themen. Kürzlich erschien ein Artikel, wie nützlich und vielseitig die Router sind, die im privaten Heim den Internetzugang bereitstellen. Der Artikel ließ aber einen wesentlichen Aspekt aus, der mir als Berufsparanoiker sehr wichtig ist: die Sicherheit.

[veröffentlicht am 23.06.2018]

Leserbrief zum Artikel über Auswahl des Routers für zuhause
Kürzlich hat die WZ einen Artikel über die Auswahl des richtigen Routers für zuhause abgedruckt.
Der Artikel war umfangreich, aber inhaltlich unbefriedigend. Ich habe z.B. vermisst, dass bestimmte Router nicht nur den Internetzugang bereitstellen, sondern auch als Heimserver dienen können, indem man Drucker und Speicher anschließt, die dann jeder nutzen kann. Manche Router können sogar über einen USB-Stick mit Mobilfunk einen alternativen Zugang bereitstellen, wenn die Internetverbindung ausfällt. Immerhin fand Erwähnung, dass neuere Router einen Gastzugang beherrschen.
Was mir aber massiv aufgestoßen ist, ist das Fehlen jeglicher Hinweise oder Empfehlungen auf die Sicherheit dieser Geräte. Immerhin ist der Router dasjenige Gerät, das direkt ans Internet angeschlossen ist, weil das naturgemäß der Sinn der Sache ist. Aus diesem Grund ist es immens wichtig, dass das Gerät regelmäßig Softwareupdates bekommt, um Sicherheitslücken zu schließen oder Fehler zu beheben. Die allermeisten Router funktionieren mit einem kleinen Linuxsystem, und hier gibt es regelmäßig Verbesserungen und Fehlerkorrekturen.
Erst vor kurzem wurde bekannt, dass sehr viele Router von durchaus bekannten Firmen (wie Asus, D-Link, Huawei, Linksys, Ubiquiti, Upvel, und ZTE, sowie verschiedene NAS und Router-Modelle von Linksys, Mikrotik, Netgear, Qnap und TP-Link) gegen einen bestimmten Angriff verwundbar sind und sich deshalb Trojaner einnisten konnten. Die c't berichtete, dass das FBI zwar den Kontrollserver dieses einen Botnetzes lahmlegen konnte, aber die Sicherheitslücken existieren nach wie vor für jeden anderen Bösewicht (eine Liste der betroffenen Geräte). In der Vergangenheit wurden auch schon oft Angriffe auf Heimrouter bekannt, aber mit zunehmender Breitbandversorgung wird es immer interessanter, diese Geräteklasse anzugreifen - eben weil sie schlecht gepflegt werden.
Das ist aus drei Gründen gefährlich:
Erstens haben die bösen Buben durch die weite Verbreitung dieser Geräte eine enorme Armee an Drohnen, die sie für ihre Zwecke einsetzen können, wie z.B. Erpressung mit einem sog. DDoS-Angriff (Distributed Denial of Service), bei dem der Angegriffene mit Anfragen überschwemmt wird und sein Geschäft nicht mehr ausüben kann,
zum Zweiten ist der Router in der Lage, jedes Gerät im Heimnetz anzusprechen und zu belauschen,
und zum Dritten ist es möglich, dass der Internetverkehr nicht nur belauscht, sondern auch manipuliert wird, so dass z.B. Kreditkarteninformationen, Passwörter, Electronic Banking usw. kompromittiert werden können.
Man kann es nicht oft genug wiederholen: Software-Updates werden immer wichtiger in einer Welt, in der es sich lohnt, elektronische Verbrechen zu begehen. Einer aktuellen Meldung von heise zufolge kann man mit Spam bis zu 300.000 Dollar pro Monat verdienen, mit Trojanern für Klickbetrug (simulierte Abrufe von Werbung) sogar Millionen. Das soll jetzt aber keine Werbung sein, hier ins Geschäft einzusteigen, bitteschön!
Niemand sollte einen Router kaufen oder sich vom Internetprovider aufstellen lassen, wenn die Updatefrage für dieses Modell nicht geklärt ist. Die Hersteller aus der o.g. Liste liefern auch Geräte, die von Vodafone, Telekom, 1&1 und anderen Internetprovidern unter eigener Marke ausgeliefert werden (die Telekom und Vodafone verwenden u.a. gern Geräte von Asus, ZyXEL und Huawei). Jeder Besitzer sollte darauf achten, dass die Updates entweder automatisch installiert werden oder es sich zur Angewohnheit machen, regelmäßig zu kontrollieren, ob es neue Updates gibt.
Im Zweifelsfall kann der Internetprovider eine Updategarantie natürlich nicht geben. Hier empfiehlt es sich, das Gerät nicht von diesem zu kaufen oder zu mieten, sondern sich über Tests in Fachzeitschriften selbst ein gut - und vor allem lang! - gepflegtes Modell auszusuchen.
Tipp am Rand: das Standardpasswort des Geräts sollte auch auf etwas eigenes geändert werden. Manche Standardpasswörter der Hersteller werden nach einem eher langweiligen Algorithmus erzeugt und sind leicht berechenbar.

18.06.2018

Jährliches Theater mit den Dramateuren

Juhu, die Dramateure haben sich entschlossen, wieder ein Theaterstück von Sir Terry Pratchett aufzuführen!

Das diesjährige Stück war "Mummenschanz", im Original "Maskerade", und die Handlung orientiert sich vage am "Phantom der Oper", aber natürlich auf die ganz eigene und geniale Weise von Terry Pratchett.

Natürlich muss ein Pratchett-Fan dann mit einem passenden T-Shirt in's Theater gehen.

Die Aufführung fand wieder in Bischofsheim statt wie "Good Omens" letztes Jahr.

Dieses Jahr gab es sozusagen eine Fortsetzung von "Wyrd Sisters", das die Dramateure vor einigen Jahren aufgeführt haben - die Geschichte von "Mummenschanz" ("Maskerade" im Original) erzählt ein neues Kapitel im Leben der Hexen von Lancre, nachdem die dritte Hexe Magrat den König geheiratet und damit aus dem Hexenzirkel ausgeschieden ist. Esme Wetterwachs und Nanny Ogg suchen aus traditionellen Gründen wieder eine dritte Hexe, und ihre Wahl fällt auf Agnes Nitt. Die allerdings will lieber in Ankh-Morpork an der Oper singen.

Viel will ich über die Geschichte gar nicht erzählen - jeder Fan von STP wird die Scheibenwelt-Variante von "Phantom der Oper" sowieso kennen.

Die Schauspieler haben ihre Sache ausnahmslos sehr gut gemacht. Die beiden Hexen Esme und Nanny waren die Hauptpersonen und hatten eine unglaubliche Bühnenpräsenz. Agnes hat es ebenfalls geschafft, ihre Rolle so auszufüllen, wie ich sie mir beim Lesen des Buchs vorgestellt hatte. Die stimmlichen Künste wurden durch geschickt eingesetzte Tontechnik dem Buch entsprechend umgesetzt - das war sehr glaubwürdig und hat sich wunderbar in den Ablauf eingepasst.

Die Kostüme waren liebevoll gestaltet und haben viel zur Opern- und Bühnenatmosphäre beigetragen. Wie üblich auch in den vergangenen Jahren waren die Requisiten eher minimalistisch, aber perfekt passend zur Szene und Situation ausgewählt. Die Bühne hatte sogar zwei Ebenen, wobei der hintere Bühnenteil erhöht war und abwechselnd als Zimmer der Sängerinnen und als Loge des Phantoms diente. Auch der Raum vor der ersten Sitzreihe und hinter den Zuschauern wurde zur Tiefengestaltung mit einbezogen.

Schon die Fahrt von Lancre nach Ankh-Morpork in der Kutsche war ein Erlebnis für sich, bei dem sie den Sänger Heinrich Nacktschneck kennenlernen, der sich als ausländischer Künstler ohne Sprachkenntnisse ausgibt, damit er Erfolg hat. Er muss aber lernen, dass ihn jeder im Bemühen, ihn gemäß seiner (vermeintlichen) Kultur zu verwöhnen, im Gegenteil aber fast schon foltert, weil er nur Spezialitäten seiner Heimat serviert bekommt - wie Pasta - aber eben leider nichts Örtliches. Er liegt dann selbstverständlich Nanny Ogg zu Füßen, von der er schmackhafteren Reiseproviant bekommt.

Die Fußnoten, von denen Sir Terry genau wie Douglas Adams gern und reichlich Gebrauch macht, wurden wie bei den bisherigen Aufführungen realisiert, indem nach einem Signalton die Handlung "eingefroren" wurde und eine Sprecherin mit einem riesigen Fußnotenschild (*) eine Erklärung zu einem bestimmten Detail abgab.

Die Auszahlung der Tantiemen für Nannys Kochbuch wird schnell erledigt, als Esme dem Buchverleger recht deutlich macht, wie sehr sie es mißbilligt, dass Nanny über den Tisch gezogen wurde, was die Auflage und den Gewinn aus dem Buchverkauf angeht.

Im weiteren Ablauf wird dann klar, dass es zwei "Geister" in der Oper gibt, und am Schluss gibt es einen dramatischen Showdown zwischen dem Sheldon-ähnlichen leicht autistischen, kunstliebenden Geist und dem geldgierigen Regisseur, der den Mythos dazu mißbraucht, jeden zu beseitigen, der ihm auf die Schliche kommt.

Das Stück und die Realisierung haben mir ausnehmend gut gefallen und die Schauspieler haben alle ein großes Lob verdient.

Mein Fazit: Top Theater, jederzeit gerne wieder!


(Verwendung der Fotos mit freundlicher Genehmigung des Regisseurs Jonas Milke)

16.06.2018

Leserbrief: Gesetzesänderungen zur Verbrechensaufklärung

In der WZ vom 12.06. war ein kurzer, fast unauffälliger Leserinnenbrief abgedruckt, in dem Gesetzesänderungen gefordert wurden, weil aus "Datenschutzgründen" Dinge gelöscht werden müssten, die für die Verbrechensaufklärung wichtig seien.
Damit ist die Dame offensichtlich der Propaganda der Polizeibehörden auf den Leim gegangen, die vor einigen Tagen falsch gemeldet haben, dass 8.500 Straftaten nicht aufgeklärt werden konnten. Später ist das BKA dann zurückgerudert, als Zweifel an dieser Darstellung aufkamen.
[Veröffentlicht am 17.06.2018]

Leserbrief zum Leserbrief über Verbrechensaufklärung
Fr. S. schreibt in ihrem Leserbrief, dass die Polizei mehr Möglichkeiten zur Verbrechensaufklärung benötigt und deshalb Gesetze geändert werden müssten.
Sie schreibt weiter, dass aus "Datenschutzgründen" Hinweise wie z.B. Logdateien gelöscht werden "müssen". Das ist technisch falsch, denn da es derzeit rechtlich keine Vorratsdatenspeicherung gibt, fallen gar keine Daten an, die die Internetprovider speichern müssen, und deshalb muss auch nichts "gelöscht" werden, da es schlicht nicht vorhanden ist.
Damit geht sie der vorsätzlich falschen und unklaren Berichterstattung von Polizeibehörden, allen voran dem Bundeskriminalamt BKA, auf den Leim.
Dort wurde nämlich vor ein paar Tagen eine Pressemeldung in Umlauf gebracht, dass angeblich 8.500 Taten aus dem Bereich der Kinderpornographie nicht aufgeklärt werden konnten, weil die Vorratsdatenspeicherung nicht in Kraft getreten ist.
Kinderpornographie ist im Allgemeinen nur ein vorgeschobenes Argument, um die Überwachung prinzipiell zu intensivieren und das Grundgesetz weiter zu demolieren.
Diese BKA-Meldung ist in zweierlei Hinsicht falsch: es gab in Deutschland insgesamt nur um die 6500 Fälle von Kinderpornographie, und diese wurden zu 90% aufgeklärt. 
Später ist das BKA dann zurückgerudert, als Zweifel an dieser Darstellung aufkamen, und hat versucht, die Unstimmigkeiten der Meldung zu verschleiern.
Die 8.500 angeblich nicht aufklärbaren Fälle entstammten einem "Hinweis" einer nicht näher benannten "Organisation" aus den USA, es handelt sich also bei weitem nicht um Fälle, die in Deutschland verfolgt werden können.
Zur Quote von 90% bleibt noch anzumerken, dass dieser Wert sich gegenüber dem Vorjahr um 3,7% verbesser hat.
Zum Vergleich: die durchschnittliche Aufklärungsquote von Straftaten in Deutschland liegt bei 57%. Damit sind die 90% ein extrem guter Wert und die Steigerung dieser Quote ist ein sehr gutes Zeichen, dass die Methodik der Polizei auch ohne Vorratsdatenspeicherung bereits in der Lage ist, diese Straftaten aufzuklären und die Quellen auszutrocknen.
Es gibt bereits ein internationales Meldesystem für illegale Angebote wie Kinderpornographie, und dort werden ca. 80% aller gemeldeten Seiten innerhalb von weniger als 6 Stunden blockiert.
Und man bemerkt einmal mehr: die Vorratsdatenspeicherung mit extrem starken Eingriffen in die Grundrechte aller Bürger ist bei weitem nicht nötig.
Außerdem wurden sowohl die deutschen als auch die entsprechenden Pläne zur Vorratsdatenspeicherung auf EU-Ebene von den höchsten Verfassungsgerichten mehrfach vernichtend abgeschmettert, wie man u.a. hier bei den heise-Nachrichten nachlesen kann.

23.05.2018

Update von LineageOS 14.1 auf 15.1

Wie kürzlich versprochen wollte ich auch noch darüber berichten, ob das zerstörungsfreie Update von LineageOS 14.1 auf 15.1 funktioniert. Meine erste Probeinstallation von 15.1 auf dem Nexus 6 mit der Spiderman-App war eine komplette Neuinstallation, verbunden mit Löschen des Geräts. Mein eigenes Handy (seit April ein Moto Z von 2016) wollte ich aber ungern löschen und komplett neu einrichten. Es ist sehr lästig, in jeder App dann wieder die Anmeldung durchzuführen, den Google-Authenticator für die Zweifaktor-Authentisierung für alle Konten neu einzurichten usw. Wäre also schön, wenn das Update einfach so funktioniert ;-)

Spoiler: es funktioniert.

Es gibt einen wichtigen Punkt zu beachten, den ich letztes Jahr noch nicht kannte, als ich eine Zeitlang nach dem Niedergang von Cyanogen Inc. auf dem damaligen Nexus 5 statt CM für einige Monate das "nackte" Android aus dem AOSP-Projekt verwendete.

Damals hatte ich nach jedem Flashen eines Updates das Problem, dass die Google-Apps nicht mehr richtig funktionierten und z.B. dauernd die "Play Services" beendet werden, und auch einige andere Dinge merkwürdige Fehlermeldungen zeigten. Ich bin dann jedesmal wieder den steinigen Weg gegangen und habe komplett neu beispielt, also "wipe data" und Flashen von Android und Google-Apps.

Der simple Trick ist, dass man nach dem Flashen des Android-Pakets auch sofort die Google-Apps flashen muss. Beim Neustart des Geräts mit einer neuen Androidversion werden den Google-Apps spezielle Systemberechtigungen erteilt. Allerdings nur beim allerersten Neustart nach dem Flashen, danach nicht mehr. Wenn man also ein neues Android alleine flasht und bootet, hat man sich gerade die Google-Apps zerschossen. Diesen Trick hat mir ein freundlicher Kommentator bei XDA verraten.

Dieses Problem tritt bei "kleinen Updates" nicht auf, die man innerhalb von LineageOS mit dem eingebauten Updater durchführt, das war letztes Jahr mit dem AOSP-Android anders. Mit LineageOS kann man unbesorgt updaten. Es ist aber ratsam, in den Einstellungen des Updaters alte Updates automatisch löschen zu lassen, sonst ist irgendwann die Systempartition voll.

Wenn man das berücksichtigt, ist der Übergang von Nougat auf Oreo süß und schmerzfrei. Was man bei einem älteren Gerät allerdings nicht bekommt, ist das Update der Androidsoftware im Hintergrund bei laufendem Betrieb - "Project Treble" bekommt man nur mit Neugeräten, die vom Hersteller mit Oreo ausgeliefert werden und die Partitionierung des Speichers schon vorsieht, dass man zwei Betriebssystempartitionen hat - eine zum Booten und die zweite zum Umschalten nach einem Update.

Was mich im Licht der aktuellen Debatte um Sicherheitslücken in Prozessorhardware etwas beunruhigt: die Kernelversion ist hier bei 3.18, kompiliert wird mit einem gcc 4.9, der die derzeit notwendigen Workarounds für Spectre und Meltdown sicherlich nicht enthält. Die Baureihe 4.9 hat das letzte Update im August 2016 bekommen. Diese Sicherheitslücken sind zwar Presseberichten zufolge nur kritisch für Serverbetreiber, die keine Kontrolle über die virtuellen Maschinen von Kunden haben (z.B. ein Cloudbetreiber wie Amazon oder IBM), aber der Angriffsvektor ist bei einem Smartphone mit strikter Trennung der Apps durch Unix-Rechte natürlich genauso gegeben: eine App, die eine solche Lücke ausnutzen kann, ist in der Lage, "fremden" Speicher zu belauschen, der einer anderen App gehört, und dort könnte ein Private Key oder ein Zugangspasswort zum electronic banking zu stehlen sein.

Alt: Nougat 7.1.2, April 2018   Neu: Oreo 8.1, Mai 2018



25.04.2018

Ein erster Blick auf Android 8.1 mit LineageOS

Letzte Woche sah ich, dass es für das Nexus 6 keine weiteren Updates der 7er Androidversion von LineageOS geben wird - die "nightly updates" - eigentlich sind es ja "weekly" updates - enthalten jetzt 15.1.

Kurze Erklärung der Nummerierung: Android nummeriert zum Einen mit Zahlen (von 1.0, 1.1, 1.5, usw. bis jetzt hin zu 8.1) und zum Zweiten mit einem Spitznamen (Donut, Eclair, Froyo, bis jetzt hin zu Oreo). LineageOS orientiert sich bei der Nummerierung an den Anfangsbuchstaben der Spitznamen. Die Nummer von LineageOS entspricht der Position des Buchstabens im Alphabet, und "O" ist der 15. Buchstabe. Wenn Android dann eine "minor release" hat, wird diese Releasenummer hinten angehängt. Ganz kurz gab es also mal LineageOS 15.0, aber das wurde abgebrochen und die Entwickler bauen nur an 15.1 weiter. Von "Jelly Bean" gab es drei Versionen (4.1, 4.2, 4.3), und die dazugehörigen CyanogenMod-Versionen waren 10.0, 10.1 und 10.2 (bevor CyanogenMod in LineageOS überging und die Firma hinter CM pleite ging).

Rein zufällig ;-) hatte ich noch ein Nexus 6 mit ziemlich kaputtem Glas, aber intakter Technik herum liegen - ich schrieb ja schon ein paar Mal, dass meine Kinder beide sehr ruppig mit ihren Geräten umgehen und öfter mal mit gebrochenen Glasscheiben oder defekten Displays ankommen. Beim Nexus 6 lohnt sich eine Reparatur leider nicht mehr: ein neues Display kostet immer noch einzeln um die 125 €, und die Tatsache, dass alles geklebt ist, macht die Reparatur auch sehr aufwändig. Also lag das Gerät längere Zeit im Regal und Kind 2 musste sich ein identisches Gerät zulegen unter massiver Kostenbeteiligung vom Konfi-Geld ;-).

Also Herunterladen der aktuellen Version von LineageOS 15.1 und der erste Versuch, das Handy mit der neuen Version zu flashen.

Leider war das nicht erfolgreich: das TWRP-Recovery lehnte die Zip-Datei ab, obwohl es die korrekte Version war (Codename "shamu" für das Motorola Nexus 6, Modell XT1100). Die Fehlermeldung war beunruhigend: "E3004: This package is for device: shamu; this device is .". Also schien etwas mit dem Gerät nicht in Ordnung zu sein - es wusste nicht von sich selbst, dass es vom Typ "shamu" ist.

Nachdem ich überprüft hatte, dass die Zip-Datei wirklich in Ordnung ist, stellte sich nach ein wenig Recherche heraus, dass dieser Fehler sehr leicht behoben werden kann: Neuinstallation des Recovery-Images sollte helfen. Irgendwie war dem Gerät die Information abhanden gekommen, welchen Typ es selbst hat, aber das erneute Bespielen mit einem Recovery bringt das wieder in's Lot.

Praktischerweise kann man mit den halbwegs aktuellen TWRP-Versionen sogar ein Recovery updaten, wenn man sich im Recovery befindet. Ich dachte bislang, ich müsste erst neu starten, um dann im Fastbootmodus das Recovery-Image zu flashen. Das geht aber auch einfacher. Wenn TWRP läuft, ist das Handy am PC sichtbar, und ich konnte das neueste TWRP direkt mit MTP auf das Smartphone kopieren. Mit "Install" und dann dem Menüpunkt "install image" liess sich das Recovery updaten. Als letzten Schritt dann die Zielpartition aussuchen (offensichtlich "Recovery") und neu booten.

Danach war die Installation von LineageOS 15.1 ein Kinderspiel: Löschen der vorherigen Benutzerdaten ("wipe data"), Kopieren der Zip-Datei, Beschaffen der aktuellen Google Apps von opengapps.org für Android 8.1, Variante ARM 32 bit, in der Größe "nano". Normalerweise tendiere ich zum kleinsten Paket "pico", aber der Hinweis auf der Downloadseite "contains some apps that are not available in the Play Store" ließ mich dann doch die nächstgrößere Variante wählen - ist ja sowieso nur ein Testgerät. Danach gleich noch das Addon für "su" (32 bit), damit bei Bedarf auch gerootete Anwendungen möglich sind (wie z.B. das Backupprogramm Helium oder ein Filemanager).

Wie üblich, dauert das erste Booten recht lang, danach folgt dann die übliche Grundeinstellung mit WLAN, Benutzername, Google-Konto (wenn man das will), und dann kann es losgehen mit dem Testen der neuesten Androidversion, und das sogar mit dem monatlich aktuellen Securitylevel. LineageOS ist ungefähr zwei Wochen nach dem Release der Updates in das AOSP-Repository durch Google auch auf dem neusten Stand. Damit kann eigentlich so gut wie kein anderer Handyhersteller mithalten.

Die Optik und die Icons von 8.1 sind gewöhnungsbedürftig, wie man an den beiden Screenshots des Startbildschirms und der App-Auswahl sieht.

Was ich sehr schön finde: in der Statusleiste kann man jetzt die aktuelle Download/Upload-Geschwindigkeit einblenden, und die Einstellungen sind deutlich aufgeräumter und übersichtlicher.

Laut XDA ist es auch möglich, das Update von 14.1 auf 15.1 ohne Reset durchzuführen. Das werde ich auch noch testen ;-)

17.04.2018

Leserbrief zur Diskussion über Impfpflicht

Tja nun, die WZ dachte sich wohl "wir brauchen mehr Klicks" und hat auf Facebook eine Diskussion angefangen über das Impfen und die Impfpflicht.
Wen wundert's - die Impfgegner gießen die üblichen Verschwörungstheorien und wilden Behauptungen in die Kommentare unter den Facebook-Beitrag.

Ein paar Tage danach folgt dann ein scheinheiliger Artikel in der gedruckten Ausgabe, der die Facebook-Kommentare zusammenzufassen versucht.
Garniert wird der Artikel von einem "Pro"- und einem "Kontra"-Kommentar von zwei Redakteuren der WZ.

Es ist absolut in Ordnung, dass jeder eine Meinung hat und sie auch äußern kann - aber wenn man zu einem Thema inkompetent ist, sollte man vielleicht einfach mal das Motto von Dieter Nuhr beherzigen ("wenn man keine Ahnung hat ..."). Insbesondere regt es mich unglaublich auf, wenn Impfgegner mit harten wissenschaftlichen Fakten konfrontiert werden und das mit einem Achselzucken abtun. Schade ist nur, dass die meisten Impfgegner eine starke Meinung haben und keinerlei Hemmungen, dies auch öffentlich kund zu tun, aber sie erkennen leider nicht, dass diese Meinung falsch ist - ein schönes Beispiel für den Dunning-Kruger-Effekt ;-)

Das gute an Wissenschaft ist: sie funktioniert auch, wenn man nicht daran glaubt. Das Schlimme an Impfgegnern: wenn sie nicht daran glauben und das Impfen verweigern, gefährden sie nicht nur sich selbst (das wäre mir ja noch egal), sondern auch jeden anderen, den sie anstecken könnten.

[Der Leserbrief wurde am 14. April 2018 veröffentlich.]


Leserbrief zur Diskussion über Impfen und Impfpflicht (Facebook und gedruckt)
Liebe WZ-Redaktion,

was hat Sie denn geritten, dieses Fass aufzumachen? Geht es um Klicks und Onlinewerbung?

Beim Impfen kann es eigentlich gar keine Diskussion mehr geben. Das Thema ist medizinisch hervorragend erforscht.
Statistisch gesehen gibt es überhaupt keinen einzigen Grund, gegen das Impfen zu sein.
Durch Schutzimpfungen sind viele Krankheiten nahezu ausgerottet.

Stattdessen eröffnen Sie die Diskussion auf Ihrer Facebookseite erneut und bieten dadurch Impfgegnern eine willkommene Plattform, um größtenteils unwidersprochen Behauptungen in die Welt zu setzen und zu wiederholen, dass das Impfen "nutzlos" sei und mehr Schaden verursache als es Gutes tue.

In Venezuela sind seit Jahresbeginn mindestens 54 ungeimpfte Kinder an Masern gestorben. 2016 galt das Land noch als masernfrei.

In Serbien gab es eine Masernepidemie mit 4000 Ansteckungen und fast 20 Toten.

Die Diskutanten, die lautstark in den Facebook-Kommentaren Verschwörungstheorien über die Geldgier der Pharmakonzerne äußern, sind dieselbe Sorte Mensch, durch deren Schuld in Berlin vor kurzem Masern mit über 700 Ansteckungen und einem toten Säugling ausgebrochen sind.

Als Krönung des Ganzen darf Frau Kaufmann in ihrem "Kontra"-Kommentar in der Druckausgabe noch zeigen, dass sie in der Schule nicht aufgepasst hat, als das Grundgesetz besprochen wurde. Sie fabuliert munter drauflos, dass das Recht auf körperliche Unversehrtheit im Grundgesetz verankert ist und nicht durch eine Impfpflicht gebrochen werden kann. Dabei vergisst sie leider die Tatsache, dass alle Grundrechte nicht absolut gelten, sondern immer gegeneinander abgewogen werden müssen. Jedes Grundrecht findet seine Grenzen dort, wo die Grundrechte anderer verletzt werden, und das ist beim Impfen ganz klar der Fall. In Deutschland gab es jahrelang eine Impfpflicht gegen die Pocken. Das Bundesverwaltungsgericht entschied schon 1959, dass die verpflichtende Pockenschutzimpfung mit dem Grundgesetz vereinbar sei.

Es kann nicht sein, dass ein dogmatischer Impfgegner sich oder seine Kinder nicht impfen lässt und sie damit zu Trägern der Erreger macht. Dabei verletzt er nämlich offensichtlich das Recht auf körperliche Unversehrtheit aller Personen in seinem Umfeld. Wenn es hier Neugeborene oder Menschen mit Immunschwäche gibt, die aus medizinischen Gründen nicht geimpft werden können, provoziert er damit vorsätzlich deren Ansteckung und Gefährdung.
Manche Impfungen kann man erst ab einem Mindestalter impfen. Wenn nun die Mama das große Kind im Kindergarten abliefert und hat ihren 2 Monate alten Säugling dabei, dann ist so ein Schild an der Eingangstür "wir haben einen Fall von Masern" für mich schon vorsätzliche Körperverletzung, begangen von den Eltern, die ihr Kind nicht impfen lassen und trotzdem in den Kindergarten geben.
Es heißt nicht "Kinderkrankheit", weil es so ungefährlich ist, sondern weil hauptsächlich ungeschützte Kinder daran erkranken und womöglich sterben.

In Deutschland wurden in 10 Jahren ca. 180 Fälle von Impfschäden gemeldet, die meisten davon Bagatellen wie Fieber oder Hautausschlag. Statistisch ist ohne Impfung in derselben Zeit allein mit 800 Maserntoten zu rechnen, die sonstigen Folge- und Dauerschäden noch gar nicht eingerechnet. Natürlich ist jeder Impfschaden eine schlimme Sache für die Betroffenen, aber die Chance auf ein sorgenfreies, langes Leben ist mit Impfung wesentlich höher.

Eine Langzeitstudie an der Charité in Berlin hat übrigens festgestellt, dass der plötzliche Kindstod (SIDS) statistisch wesentlich seltener bei Säuglingen auftritt, die gegen Keuchhusten, Diphtherie und Polio geimpft sind.

Ich sehe das so ähnlich wie beim Führerschein oder beim Gesundheitspass für Beschäftigte in der Lebensmittelverarbeitung: ohne Schein kein Rein. Ganz einfach. Ohne Impfung kein Zugang zu öffentlichen KiTas, Schulen usw. Eine Impfpflicht muss es nicht geben - es steht jedem frei, das Risiko für sich einzugehen. Aber niemand darf für sein Umfeld entscheiden.

22.03.2018

Nerviges beim Autofahren - 2

Schön, dass Sie trotz Teil 1 wieder eingeschaltet haben zum nächsten Teil meines Gemeckers über Autofahren und Autofahrer und alles rundherum!

Ich hatte im letzten Teil schon angefangen, mich über Baustellen und das Verhalten von Fahrern in Baustellen auszulassen.

Einen Nachtrag zum Thema "Mittelspurfahrer" möchte ich noch nachliefern: der Postillon hat vor einiger Zeit über eine Sensation auf deutschen Autobahnen berichtet.

Auch sehr nett sind die Autofahrer, die in Baustellen links fahren, aber dann kein Gefühl dafür haben, wie breit ihr Auto tatsächlich ist, und sich dann nicht trauen, an breiten LKWs vorbeifahren. Dann bleiben sie schräg links hinter dem LKW, aber sie kommen auch nicht auf die Idee, dass sie wieder auf die rechte Spur wechseln, und blockieren dann erst mal alles.

Autofahrer, die nicht blinken können oder wollen, sind auch so eine Sache. Meistens geht das auch einher damit, nicht einschätzen zu können, wie schnell jemand von hinten angefahren kommt.

Nicht zu Unrecht lernt man in der Fahrschule, mindestens zweimal in den Spiegel zu schauen, um zu sehen, wie schnell jemand näher kommt, wie groß also der Geschwindigkeitsunterschied ist. Es gibt aber Fahrer, die das nicht nötig haben und dann einfach darauf vertrauen, dass der Hintermann gute Bremsen hat. Leider verursachen genau diese heftigen Bremsmanöver i.a. auch noch Folgebremsungen der weiteren Fahrzeuge dahinter, und das pflanzt sich dann vielleicht noch Kilometer nach hinten fort. Im schlimmsten Fall geschieht durch den unüberlegten und rücksichtslosen Spurwechsel sogar noch ein Unfall.

Wie gut, dass der Postillon erst kürzlich vermelden konnte, dass ab 2018 auch ein Blinker für das Geradeausfahren Pflicht wird!

Vielleicht wollen die Fahrer, die nicht blinken, den anderen Verkehrsteilnehmern aber auch einfach nicht die Überraschung verderben?

Marode Brücken sind auch so eine Sache für sich: durch die Vibrationen gehen Brücken schneller kaputt, als bei der Konstruktion vorausgesehen, weil insbesondere der LKW-Verkehr unglaublich zugenommen hat. An vielen Brücken gibt es Tempolimits wegen "Brückenschäden", üblicherweise 60 für LKWs und 80 für PKW. Ich denke mir dann, dass jeder, der das Tempolimit ignoriert, dazu beiträgt, dass die Brücke schneller kaputtgeht und saniert werden muss. Und natürlich passiert das von den Steuergeldern - meinen und seinen. Leider ist der Zusammenhang zwischen Steueraufwand und Tempolimit den meisten Autofahrern nicht allzu naheliegend.

Achja, nochmal Baustellen: die meisten dicken Automodelle, insbesondere die Disco- und Kindergartenpanzer, neudeutsch "SUV" genannt, sind mittlerweile inklusive Außenspiegeln deutlich breiter als zwei Meter, und das bedeutet in den üblichen Baustellen, dass sie rechts bleiben müssen. Im Fahrzeugschein steht die Breite ohne Spiegel, aber wenn auf einem Verbotsschild ein Limit von zwei Meter angezeigt wird, gilt das für die reale Breite inklusive beider Außenspiegel. Öffnen Sie einfach mal spaßeshalber die Scheiben in den vorderen Türen und messen Sie, wie breit Ihr Auto ist! Sie werden überrascht sein.

Tempolimits innerorts sind mir auch besonders wichtig und ich halte mich auch daran. In unserer Gemeinde ist vor einiger Zeit überall Tempo 30 eingeführt worden, außer auf der Bundesstraße und höchstens noch einer Durchgangsstraße durch jeden Ortsteil. Damit verbunden ist generell "rechts vor links". Leider hält sich kaum jemand daran - weder an das Eine noch an das Andere. Dabei ist es gerade innerorts wichtig, auf kleine und große Fußgänger Rücksicht zu nehmen. Besonders toll, wenn einem der Schulbus die Vorfahrt nimmt.

Ebenfalls gar nicht leiden kann ich es, wenn jemand mir zu dicht auffährt. Wenn ich mit der Familienkutsche unterwegs bin und habe jemanden hinter mir, dessen Front ich schon gar mehr nicht richtig im Spiegel sehen kann, weil er so nah ist, wünsche ich mir eine automatisch ausfahrbare Rampe statt der Heckklappe, um das Auto hinter mir als Beiboot an Bord zu nehmen (wie bei James Bond ;) ). Dieses Verhalten ist extrem dumm - wenn ich rechts fahren könnte, würde ich das tun. Meistens überhole ich aber gerade selbst, oder es ist eine ganze Schlange vor mir. In jedem Fall führt Drängeln aber zu erhöhtem Streß beim Gedrängelten und in letzter Konsequenz erhöht es das Risiko von Fahrfehlern und Unfällen (wie vor ein paar Jahren bei dem Unfall mit einem Mercedes-Testfahrer und einem Kleinwagen mit Mutter und Kind).

Eine besonders krasse Form von "dicht Auffahren" passiert anscheinend auch nur mir: ich bin vermutlich der einzige Idiot, der regelkonform am STOP-Schild wirklich anhält. Bei meinem vorherigen Astra ist mir an derselben Autobahnausfahrt zweimal (!) dieselbe Art von Unfall passiert: ich fahre bis zur Linie und halte an. Und dann bummst es. Weil der Autofahrer hinter mir (bzw. Kleinlaster, ist aber eigentlich egal) nicht erwartet hatte, dass ich tatsächlich anhalte. Das sind die Oberschlauen, die als zweiter in der Schlange sehen, dass von Links keiner kommt und dann einfach durchfahren wollen.

Dieselbe Art von Unfall ist mir dann mit dem kleinen Spaßauto nochmals passiert, allerdings an einem STOP-Schild an einer Einmündung zur Landstraße. Der Autofahrer hinter mir schaut nach links und bildet sich ein, er kann fahren, achtet aber nicht darauf, ob vor ihm das Auto noch da ist. Dieser Autofahrer war dann besonders penetrant: er beschimpfte mich auch noch, warum ich angehalten hätte. Der Gipfel der Selbstgerechtigkeit war, dass er von meinem kaputten Auto ausgiebig Fotos machen wollte, damit ich auf keinen Fall auf seine Kosten von der Versicherung Reparaturen bezahlen lasse, für die er nicht verantwortlich sei. Dabei hatte es gar keine sonstigen Schäden. Ich liebe das kleine Spaßauto, das ist technisch immer in Ordnung, nur manchmal ein bißchen staubig.

15.03.2018

Ich bau mir ein Linux wie es mir gefällt - 1

Seit langen Jahren bin ich begeisterter Nutzer einer ganz speziellen Linux-Variante namens "Linux from scratch".

Wie der Name sagt, wird dabei ein Linux-System von Grund auf ("from scratch") komplett neu gebaut. Dazu werden die Quelltexte verwendet, um selbst alle Pakete zu übersetzen und einen PC (oder ein anderes Rechnersystem) mit einem von Festplatte startfähigen Linux auszustatten.

Dabei hat man natürlich ein Henne-Ei-Problem: man braucht ein Linux, um das neue Linux zusammen zu bauen. Für dieses Problem gibt es mehrere Lösungsmöglichkeiten: zum Einen kann man das LFS in einer virtuellen Maschine zusammenbauen. Alternativ kann man auf dem Zielrechner zunächst eine kleine Partition mit einem anderen Linux einrichten, von dort starten und dann das LFS auf den freien Platz der Festplatte werfen. Das Linux zum Bauen kann man dann hinterher als Notfallsystem behalten, oder aus der Partition dann die Swappartition machen oder sie anderweitig verwenden. Für das allererste ("bootstrap") Linux reicht eine Minipartition von 8-16 GB, und dort kann man dann z.B. ein Linux Mint oder Fedora installieren.

"Linux from Scratch" ist nicht nur eine Anleitung für ein Linux zum Selbstbasteln, sondern ist hauptsächlich dazu gedacht, Erfahrung beim Bauen von Linuxprogrammen aus den Quelltexten zu sammeln.

Man lernt dabei eine ganze Menge, nämlich vor allem Zusammenhänge zwischen den verschiedenen Programmen, Konfigurationsdateien, aber auch viel über Netzwerke, und vor allem natürlich über die technischen Voraussetzungen, darunter die Verwendung von Makefiles, und man lernt, Logfiles zu lesen, um die Probleme zu beseitigen.

Bei "LFS" gibt es verschiedene Steigerungsmöglichkeiten, wie man sich selbst das Leben schwer und spannend machen kann. Man kann das Basissystem bauen, dann hat man "nur" eine Linux-Kommandozeile.

Darauf aufbauend ist es mit dem Fortsetzungsbuch "Beyond Linux from scratch" (BLFS) möglich, einen Server zu bauen, mit dem man z.B. eine Firewall, ein NAS, einen Webserver, oder noch viel mehr zusammen bauen kann. Oder man baut sich ein Desktopsystem mit einer grafischen Oberfläche, und am Ende steht dann der selbst kompilierte Firefox. Hört sich das nicht cool an?

Eine Schwierigkeitsstufe darüber steht die Automation des Bau-Vorgangs - und hauptsächlich darüber will ich hier schreiben. Die Anleitung von "LFS" für ein Basissystem und für das "BLFS" sind ziemlich gut. Wenn man sich daran hält, hat man gute Chancen, manuell Schritt für Schritt ein lauffähiges System zu erstellen. Man geht am Browser durch alle Kapitel der Reihe nach durch und führt gemäß Anleitung die einzelnen Schritte durch. Das ist beim ersten Mal ehrlich gesagt mühsam - ich spreche aus Erfahrung ;-). Andererseits ist es spannend zu erleben, wie das Linuxsystem mit jedem Schritt wächst und tatsächlich immer mehr dem ähnelt, was man als Linuxbenutzer kennt.

Die Automation "Automated Linux from scratch" (ALFS) hingegen ist in einer README-Datei nur spärlich beschrieben. Dafür hat man, wenn man das System einmal verinnerlicht hat, eine wunderbare und sehr esoterische Möglichkeit, Updates zu installieren oder das gesamte System auf Knopfdruck noch einmal komplett neu zu erzeugen.

Auf diese Weise habe ich über Nacht ein Linux gebaut - besser gesagt: bauen lassen, das mit dem neuesten Kernel 4.15 und C-Compiler gcc 7.3 gegen Spectre und Meltdown gefeit wäre. - Wenn, ja wenn mein Bastelsystem ein 64-bit-System gewesen wäre (x86_64) und nicht 32 Bit (i686). Und wenn ich das Gefühl hätte, dass ich wirklich von diesen Sicherheitslücken bedroht bin. Aber zum Thema Risikoanalyse muss ich noch mal einen eigenen Artikel schreiben, denke ich.

Und noch eine Stufe darüber verwendet man nicht die "stable" Variante der Bücher, sondern die LFS- und BLFS-Bücher, die gerade in der Entwicklung sind. Die Autoren der Kapitel sind permanent damit beschäftigt, neue Versionen der Pakete zu integrieren und die Artikel anzupassen. Wenn sich z.B. bei einem Paket das Verfahren ändert, wie man das Paket lauffähig kompiliert, wird das enorm schnell in die "development"-Variante von LFS bzw. BLFS übernommen. Genau das ist mir während des Schreibens dieses Artikels passiert: ich habe das Makefile angestoßen, und mittendrin wurde im Buch auf ncurses 6.1 umgestellt. Kaum war ich fertig, veröffentlichen die Entwickler die neue glibc-Version 2.27. So kann's gehen ...

Um noch mal auf "Meltdown" und "Spectre" zurück zu kommen: das LFS-Buch enthält seit kurzem brandneue Kernel- und gcc-Versionen, die diese Sicherheitslücken beheben sollen. Das ist natürlich immer "work in progress". Der aktuelle Stand ist, dass Spectre V2 und Meltdown repariert sind, und für Spectre V1 ist noch einiges an Entwicklerarbeit zu leisten. Die alten 32-bit-Prozessoren hinken hier leider hinterher, für 64 bit (also alles, was grob jünger als 10 Jahre ist) sollten alle Fixes auf jeden Fall in Arbeit sein.

So, jetzt aber wie versprochen eine genauere Beschreibung der Automation für LFS (ALFS). Dazu lädt man sich zunächst das aktuelle Paket herunter. Der Paketname lautet aus historischen Gründen "jhalfs" und ehrt damit den ersten Entwickler des Verfahrens mit seinen Initialen "jh".

Damit jhalfs funktioniert, benötigt es ein paar zusätzliche Linux-Pakete auf dem Gastsystem, die man nachinstallieren muss, weil sie normalerweise nicht für Endbenutzer erforderlich sind. Dazu gehören natürlich der C-Compiler gcc und einige Hilfsprogramme und Bibliotheken wie bison, awk, ncurses etc. Das Schöne ist: wenn man jhalfs startet, kontrolliert es, was noch fehlt und beschwert sich. Für die Verwendung der "development"-Fassung muss man außerdem noch Subversion installieren, um die tagesaktuellen Dateien aus dem Versionskontrollsystem herunter zu laden.

Die Automation setzt tatsächlich schon bei den allerersten Schritten ein, die man gemäß LFS-Buch durchführen würde: dem Erzeugen eines neuen Unixbenutzers "lfs" für das Kompilieren der Pakete, dem Anlegen von Verzeichnissen usw. Der einzige Schritt, den man selbst durchführen muss, ist das Erzeugen einer Festplattenpartition und sie dann so zu mounten, dass die Skripte sie finden können. Traditionell ist das /mnt/lfs, man kann es aber nach Belieben ändern, wenn man weiß, was man tut.

Vorab ein paar Worte zum Design von jhalfs: die Autoren erstellen LFS und die weiteren Bücher in einem speziellen XML-Format namens "DocBook"; daraus werden mit trickreichen XSLT-Transformationen dann lesbare Bücher in HTML, PDF oder sogar TeX. jhalfs verwendet ebenfalls XSLT-Transformationen, um aus dem Buch die Kommandozeilenanweisungen herauszufiltern, und erstellt daraus ein Makefile und Installationsskripte für jedes Kapitel, d.h. jedes zu installierende Paket. Die Automation mit ALFS ist also ein zweistufiger Prozess: zuerst werden aus dem Buch die Befehle zum Bauen herausgefiltert und in ein Makefile mit Hilfsskripten umgewandelt, und in einem zweiten Schritt wird diese Befehlsliste ausgeführt.

Die Autoren liefern außerdem eine komplette Liste der Softwarepakete mit Versionsnummern, die man entweder selbst herunterladen kann oder die automatisch nach Bedarf geholt werden, wenn man eine einigermaßen schnelle Internetverbindung hat. Grob geschätzt muss man für LFS ca. 400 MB an Paketen herunterladen und für BLFS, je nach Umfang, bis zu 2 GB.

Die Pakete sollte man in einem Verzeichnis /mnt/lfs/sources unterhalb der zukünftigen LFS-Partition ablegen, damit während des Ablaufs alle Pakete gefunden werden können. Hierzu wird eine Unix-Technik namens "chroot" (change root) verwendet, um einem laufenden Programm eine andere Festplattenstruktur vorzutäuschen - effektiv wird das verwendet, um so zu tun, als würde es schon in der "richtigen" LFS-Umgebung ausgeführt werden.

Das Makefile für LFS wird in einem neuen Unterverzeichnis erzeugt, in das man nach der Festlegung von ein paar Grundannahmen wechseln muss. Genau wie /sources sollte dieses Verzeichnis auf der zukünftigen LFS-Partition liegen, damit alle Skripte auch in der "chroot"-Umgebung erreichbar sind. Wenn man nun dort "make" startet, sollte nach einigen Stunden (je nach Geschwindigkeit des Rechners*) ein fast schon startfähiges Linux auf der neuen Partition vorliegen. Schritte, die man automatisieren kann, aber nicht muss, sind das Kompilieren eines Kernels und das Festlegen der Partitionen, die beim Starten gemountet werden sollen.

*) Als grobe Richtschnur zwei Vergleichszahlen, die ich mit der aktuellen LFS-Version gemessen habe. Das Paket, das mit großem Abstand am längsten dauert, ist der finale Schritt, den C-Compiler zu kompilieren. Auf einem alten Pentium 4 dauert das 540 Minuten, auf einem etwas aktuelleren i5-3350 immer noch knapp 230 Minuten. Eine SSD statt einer Festplatte ist hierbei eine große Hilfe, Zeit zu sparen.

Der erste Schritt nach dem Auspacken des jhalfs-Pakets ist, in das Verzeichnis zu wechseln und dort "make" einzugeben. Wer schon mal einen Kernel selbst kompiliert hat, wird gleich einen Aha-Effekt erleben: die Konfiguration verwendet dieselbe Textoberfläche für die Menüauswahl wie der Kernel beim "make menuconfig". Hier kann man LFS/BLFS wählen, "stable" oder "development", ob der Kernel auch automatisiert kompiliert werden soll und einiges mehr. Die Grundeinstellungen sind gar nicht so schlecht, und man sollte nur ändern, was man auch versteht ;-)

Nach dem "exit" aus diesem ALFS-Menü kommt die Frage, ob man zufrieden ist mit der Konfiguration. Bei "yes" werden die schon erwähnten Prüfungen durchgeführt, ob alle Developerpakete auf dem Gastlinux vorhanden sind und bestimmte Mindestvoraussetzungen erfüllen, wie z.B. gcc mindestens in Version 4.6 (weil frühere Versionen Fehler enthalten, so dass das LFS nicht funktionieren würde oder Pakete nicht kompiliert werden können usw.). Wenn das alles erfolgreich geprüft wurde, wechselt man (als Benutzer, nicht als root) in das neue Verzeichnis und startet dort erneut "make".

Coole Socken schauen sich im Unterverzeichnis lfs-commands die Dateien unterhalb von chapter040506 und 07 erst mit dem Editor an, bevor sie make starten. Man könnte insbesondere bei den Dateien für Kapitel 7 direkt auf die Idee kommen, dort die Stellen noch zu bearbeiten, die mit **EDITME** markiert sind ;-)

Parallel dazu empfiehlt es sich, dieselbe Version des Buchs in einem Browser zu öffnen und die Kapitel zu lesen, die der Automatismus auch gerade zu bauen versucht. Bei Problemen kann man dann im jeweiligen Kapitel nachlesen, was gerade passiert.

Wahrscheinlich wird es beim ersten Mal nicht gleich komplett erfolgreich funktionieren; das ist aber nicht schlimm: wenn ein Fehler gemeldet wird, kann man sich die Logdatei dieses Schritts aus dem Unterverzeichnis logs anschauen, den Fehler beheben und dann einfach wieder "make" eingeben. Das make-Programm ist so schlau, dass es an derselben Stelle weitermacht. Manche Pakete werden mehrfach gebaut, z.B. der C-Compiler und einige Hilfsprogramme. Dies hat den Zweck, dass man nicht aus Versehen Abhängigkeiten zum Gastsystem einbaut. Wenn ein wichtiges Programm mit der C-Bibliothek des Gastsystems gelinkt wäre, würde das nach dem Booten ja nicht mehr funktionieren. Also wird ein "Zwischensystem" in einem anderen Pfad (/tools) gebaut, das dann das endgültige LFS kompilieren kann.

Ein paar generelle Tipps, wenn das Kompilieren eines Pakets fehlschlägt: gcc 7.3 ist "bleeding edge", also so brandneu, dass man sich bei Verwendung auch mal in die Finger schneiden kann ;-). Ich will damit sagen, dass hier soviele Änderungen drin sind, z.B. Anpassungen an die aktuellen C- und C++-Standards, die in den meisten Paketen und in den Gehirnen der Entwickler noch nicht angekommen sind. Aber: man will gcc 7.3 und aktuelle binutils einsetzen, weil hier die Reparaturarbeiten für Meltdown und Spectre stattfinden. Trotzdem nochmal die Empfehlung: erst mal ein "stable" LFS bauen und danach als Steigerung auf "development" umsteigen.

Typisches Problem beim Kompilieren:
  • ein C-Programm verwendet Datentypen, die jetzt in einer neu eingeführten include-Datei <stdint.h> deklariert werden und nicht mehr in <stdlib.h>. Vorläufig muss man also irgendwo den zusätzlichen include-Befehl unterbringen, bevor das Programm erfolgreich kompiliert werden kann. Freundlicherweise sagt make sehr genau, wo ein Problem aufgetreten ist.
  • beim Korrigieren eines Problems hat man Dateien oder Verzeichnisse als root editiert oder bearbeitet. Das führt zu einem Folgefehler, weil LFS alles mit dem Benutzer "lfs" durchführen will und dann ein Abbruch wegen Berechtigungsproblemen passieren kann (bringe ich laufend fertig).
    chown lfs:lfs is your friend.
Was mir noch untergekommen ist:
  • das gcc-interne Makro __sigemptyset gibt es nicht mehr. Man kann stattdessen sigemptyset (ohne die Unterstriche) verwenden.
  • die Makros major und minor für Devices sind jetzt in <sys/sysmacros.h> zu finden.
  • grub lässt sich mit binutils 2.30 auf 32-bit-Systemen nicht übersetzen, man muss zusätzlich zu den configure-Switches im LFS-Buch noch den Switch "--enable-64-bit-bfd" angeben. Alternativ binutils 2.29.1 statt 2.30 verwenden.
Zwei Schritte sind im LFS-Buch etwas vage beschrieben, weil sie sehr stark vom eigenen PC abhängen: die Konfiguration des Kernels und die bootfähige Festplatte. Wenn man ein Linux-Gastsystem mit "kernelconfig"-Unterstützung hat, kann man sich selbst einen maßgeschneiderten Kernel bauen mit "make oldconfig", das verwendet dann nämlich genau die Einstellungen, die im Moment aktuell sind.

Der einzige wichtige Punkt ist, dass das Filesystemformat des Bootlaufwerks in den Kernel fest kompiliert sein soll. Es nutzt nichts, wenn das Root-Filesystem mit ext4 formatiert ist und der Kernel die ext4-Fähigkeit erst mit einem Modul lernen soll, das auf der ext4-Festplatte liegt - hier beißt sich die Katze in den Schwanz. Ach ja: nach dem Kompilieren von Kernel und Modulen unbedingt in der chroot-Shell "make modules_install" durchführen und in /lib/modules kontrollieren!

Für spätere Bildungs- und Forschungszwecke kann man natürlich auch eine "initiale Ramdisk" (initrd) vorsehen und dort benötigte Module und sonstige Files ablegen, aber wenn man sich einen maßgeschneiderten Kernel für diesen speziellen PC erzeugt, ist das erst mal nicht nötig. Man kann es später machen, um Microcode-Updates per "early load" zu aktivieren, aber lebensnotwendig ist es erst mal nicht. Für intel-Prozessoren gibt es hier die Microcode-Dateien.

Vor dem Reboot sollte man dann im neuen /etc-Verzeichnis (das derzeit noch /mnt/lfs/etc heißt) nach Dateien schauen, die ein "**EDITME**" enthalten. Dort kann man dann Hostname, IP-Adresse, Nameserver etc. einbauen, die zur eigenen Umgebung passen (wenn man keinen eigenen DNS-Server betreibt, die IP-Adresse des DSL-Routers, der als DNS-Forwarder die Anfragen an den Provider weiterreicht). Die Dateien findet man mit einem beherzten "grep -l EDITME /mnt/lfs/etc/*", und wenn man gleich auf einen Schwung alle bearbeiten will, wirft man die Liste der Ergebnisse einfach einem Editor vor: "vi $(grep -l EDITME /mnt/lfs/etc/*)".

Die wichtigste Datei ist hier die /etc/fstab, die beschreibt, welche Partition der Festplatte welchen Zweck hat und wohin im Filesystem gehört. Eine Swappartition sollte man auf jeden Fall vorsehen, selbst wenn der PC gefühlt genug RAM eingebaut hat. Eine Begründung dafür findet sich hier (der Autor des Artikels arbeitet bei Facebook in einem Rechenzentrum). Früher gab es mal eine Regel "doppelt soviel Swap wie RAM", aber ich würde prinzipiell für normale Desktopsysteme zwischen 2 und 8 GB Swap vorsehen.

Was man auf keinen Fall vergessen darf: dem root-User des neuen LFS-Systems vor dem Reboot ein Passwort zu geben. Sonst kann man zwar wunderbar booten, aber sich nicht anmelden ;-)

Ganz ehrlich: das Gefühl ist unbeschreiblich, wenn das selbstkompilierte Linux dann tatsächlich zum ersten Mal bootet und man den Loginprompt sieht ;-)

Wenn das neue System nicht booten will, muss man Ursachenforschung betreiben. Ein "kernel panic" tritt auf, wenn das Root-Filesystem nicht gefunden wurde. Vermutlich fehlt dann das Kernelmodul für das betreffende Filesystem. Oder die Angabe in der /boot/grub/grub.cfg passt nicht, welche Partition das ist. Die Schreibweise von grub und Linux unterscheiden sich hier leider etwas. "sda" für Linux ist "hd0" in grub.

Ein Fehler, den ich mal gemacht habe: alle USB-Treiber als Module deklariert und dann nicht in /etc/modules definiert. In dieser Situation wird es für eine USB-Tastatur schwierig, ihre Eingaben abzuliefern :-).

In solchen Situationen bootet man dann erneut das Gastsystem, mountet die LFS-Partition wieder unter /mnt/lfs und fängt an zu reparieren.

Wenn es bootet und man sich anmelden kann, ist das Reparieren leichter: die Fehlermeldungen z.B. der init-Skripte stehen ja noch auf dem Bildschirm, und man kann Schritt für Schritt alles Nötige korrigieren und das neue, selbstgebaute Linuxsystem einrichten. Das LFS hat schon alles an Bord, um eigenständig Pakete zu übersetzen und zu installieren.

Nach dem erfolgreichen LFS geht es dann mit dem BLFS weiter.
Ein paar Vorschläge, wie man sich das LFS etwas bequemer bedienbar gestaltet:
  • gpm (copy+paste mit Maus in der Textoberfläche)
  • cpio (zum Bauen von initrd)
  • openssl (ssl-Bibliothek)
  • openssh (ssh server und client)
  • dhcpcd (IP-Adresse über DHCP setzen lassen)
  • nfs-utils (wenn man ein NAS hat, z.B. eine Fritzbox, oder selbst bauen will)
  • samba (wenn man selbst ein NAS aufbauen will oder einen Windows-Domaincontroller)
  • lm_sensors (Hardwareüberwachung von CPU und Lüfter)
  • lsusb (list USB devices)
  • lspci (list PCI devices)
  • ghostscript (für PDF)
  • cups (zum Drucken)
  • Firefox (für Katzenvideos im Internet)