Anwendungen
Portal
Forum
Wiki
Ikhaya
Planet
Mehr
Anmelden

21. Januar 2015

Server-Probleme im Zeitalter von HTTP/2

Permalink SUCKUP.de: IT-Blog

Ich hatte heute das Problem, dass einige Webseiten extrem langsam bis gar nicht mehr vom Webserver ausgeliefert wurden. Also prüfe ich als erstes mit “htop” ob die CPU ausgelastet ist, danach via “iotop” die Festplatte, mit “iftop” den Traffic, mit “netstat” die offenen Netzwerkverbindungen und via “free” wie viel Speicher noch zur Verfügung steht. Und die Hardware war nicht mal ansatzweise ausgelastet. Nach einigen weitere Tests ist schnell aufgefallen, dass nur “http”-Anfragen betroffen waren. Selbst eine einfach GET-Anfrage eines Bildes ist zeitweise fehlgeschlagen.

Die größte Änderung am Vortag war, dass eine Webseite mit zirka 1 Millionen Usern komplett auf “https://” umgestellt wurde. Daher habe ich kurzfristig wieder auf “http://” umgestellt, jedoch ohne eine Änderung festzustellen.

linux_kill_9
Quelle: http://www.reddit.com/r/ProgrammerHumor/comments/27vcjg/signal_kill/

Zeitgleich ist aufgefallen das der MySQL-Prozess nicht korrekt neugestartet ist, somit liefen zwei MySQL-Server (ps aux | grep mysql), wobei nur einer wirklich Anfragen angenommen hat. Der zweite Prozess wollte sich nicht mehr via “service mysql restart” neustarten lassen, hat die Fehlermeldung “Can’t connect to local MySQL server through socket ‘/var/run/mysqld/mysql.sock’” produziert und wurde daher via “kill” getötet und anschließend der MySQL-Server neugestartet.

Dies hat auch das Problem mit den langsamen Webseiten behoben, zumindest kurzweilig. Danach hatten “http”-Anfragen wieder Probleme. Im “error”-Logfile (/var/log/apache2/error.log) vom Apache habe ich dann endlich eine Meldung gefunden, welche mich auf die richtige Fährte gebracht hat: “server reached MaxRequestWorkers setting, consider raising the MaxRequestWorkers settings”

website-download-with-spdy

Vor einer Woche hatte ich das “SPDY“-Protokoll auf dem Server aktiviert und getestet, alles hat ohne Probleme funktioniert. Dann habe ich gestern die bereits erwähnte Webseite komplett auf “https” umgeroutet und noch immer kein Problem festgestellt. Am Morgen wurden dann Newsletter versendet und eine ganze Menge Leute sind in kurzer Zeit via “https” auf die Webseite gekommen, da das “SPDY”-Protokoll nur mit “https” arbeite haben diese User nicht die üblichen Anfragen  (HTTP 1.0 / 1.1) an den Server gestellt, sondern durch Multiplexverfahren mehrere Anfragen gleichzeitig verarbeitet werden.

http-diagram-spdy
Quelle: http://stackoverflow.com/questions/10480122/difference-between-http-pipeling-and-http-multiplexing-with-spdy

Die erste Intuition, dass es etwas mit der “SSL”-Umstellung zu tun hatte war schon mal nicht verkehrt, jedoch hatte ich die entsprechenden Einstellungen nur in der “.htaccess” auskommentiert, die “https”-Verbindungen jedoch nicht zurück nach “http” umgeleitet …

RewriteCond %{SERVER_PORT} !^443
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]

… und den Apache nicht neugestartet, somit waren die aktuellen Anfragen noch aktiv und Nutzer welche auf der Webseite waren haben weiter “https”-Anfragen generiert.

Im nächsten Schritt musste nun festgestellt werden, wie viele Apache Prozesse bzw. gleichzeitige Verbindungen einstellt werden mussten und wie man dies am besten konfiguriert. Die Apache-Dokumentation sagt hierzu folgendes:

“The MaxRequestWorkers directive sets the limit on the number of simultaneous requests that will be served … For non-threaded servers (i.e., prefork), MaxRequestWorkers translates into the maximum number of child processes that will be launched to serve requests. The default value is 256; to increase it, you must also raise ServerLimit.”

Also habe ich via …

netstat -anp | grep -E ":80|:443" | grep ESTABLISHED | wc -l

… bzw. zur groben Orientierung via …

ps aux | grep apache | wc -l

… herausgefunden wie viele http(s) Anfragen bzw. Apache Prozesse aktuell vorhanden sind und habe diese Einstellungen zunächst entsprechend hoch eingestellt (“/etc/apache2/mods-enabled/mpm_prefork.conf”), so dass die Webseite wieder korrekt funktionierte. Anschließend habe ich die zuvor beschriebenen Befehle verwendet, um die endgültigen Einstellungen zu ermitteln. Die folgenden Einstellungen sind an einen Server mit 32G Arbeitsspeicher getestet und sollte nicht einfach übernommen werden.

<IfModule mpm_prefork_module>
ServerLimit                                    1024
StartServers                                        1
MinSpareServers                              32
MaxSpareServers                          250
MaxRequestWorkers              1024
MaxConnectionsPerChild             0
</IfModule>

————————————————–

Lösung: Wenn man das “SPDY”-Modul aktiviert und später auf “SSL” umstellt, sollten man vorher die Apache-Konfiguration anpassen! ;)

————————————————–

Es folgt noch ein kleines Tutorial, wie man “SPDY” für Apache installieren kann. Jeder der bereits auf “nginx” umgestiegen ist, kann dies ggf. bereits ohne weitere Installation ausprobieren: http://ginx.org/en/docs/http/ngx_http_spdy_module.html

Installation: SPDY für Apache 2.2

Download: https://developers.google.com/speed/spdy/mod_spdy/

# z.B.: wget https://dl-ssl.google.com/dl/linux/direct/mod-spdy-beta_current_amd64.deb
dpkg -i mod-spdy-*.deb
apt-get -f install

Installation: spdy für Apache 2.4

apt-get -y install git g++ apache2 libapr1-dev libaprutil1-dev patch binutils make devscripts fakeroot
cd /usr/src/
git clone https://github.com/eousphoros/mod-spdy.git
## wähle deine Apache Version  
# z.B.: git checkout apache-2.4.7
# z.B.: git checkout apache-2.4.10
cd mod-spdy/src
./build_modssl_with_npn.sh
chmod +x ./build/gyp_chromium
rm -f out/Release/mod-spdy-beta*.deb
BUILDTYPE=Release make linux_package_deb
dpkg-i out/Release/mod-spdy-beta*.deb

Video:

Links:

- Projekt Webseite: http://www.chromium.org/spdy/

- Quellcode: https://code.google.com/p/mod-spdy/wiki/GettingStarted

- “mod_spdy” für Apache 2.2: https://developers.google.com/speed/spdy/mod_spdy/

- “mod_spdy” für Apache 2.4: https://github.com/eousphoros/mod-spdy

- Online-Test für “SPDY”: https://spdycheck.org/

- Präsentation zum Thema “HTTP/2″ von @derschepphttps://schepp.github.io/HTTP-2/

- Browserkompatibilität mit “SPDY”: http://caniuse.com/#search=spdy

Chivalry: Medieval Warfare ist nun in Beta für Linux

Permalink Steam for Linux

Seit etwa einer Woche können Besitzer von Chivalry: Medieval Warfare sich als Betatester der Linux- und Mac-Version des Spiels melden.

Um Zugriff auf die Beta zu bekommen, macht ihr einen Rechtsklick auf das Spiel in eurer Steam-Bibiliothek, klickt anschließend auf "Eigenschaften", danach auf "BETAS" und wählt abschließend „linuxtesting“.

Daraufhin sollte Chivalry auch für Linux verfügbar sein, sollte das nicht der Fall sein, hilft ein Neustart von Steam.

Tags: 
Steam
Linux
Chivalry: Medieval Warfare
Beta

20. Januar 2015

Firefox 35+: Firefox-Profil zurücksetzen über Mozilla-Webseite

Permalink Sören Hentzschel

Firefox bietet über eine vermutlich den Meisten nicht bekannte Firefox-Seite die bequeme Möglichkeit, das benutzte Firefox-Profil per Knopfdruck zurückzusetzen, um damit mögliche Probleme zu beheben. Seit Firefox 35 geht dies auch über die Mozilla-Webseite.

Über Hilfe → Informationen zur Fehlerbehebung oder auch durch Eingabe von about:support in die Adressleiste gelangt der Firefox-Nutzer zu einer Seite mit für den Support hilfreichen Informationen. Ebenfalls findet sich hier eine Schaltfläche zum Zurücksetzen des Firefox-Profils, was viele individuelle Probleme lösen kann. Mit Firefox 35 wurde die Wortwahl geändert. Es ist nicht länger von Zurücksetzen die Rede, stattdessen wird der Vorgang nun als Restaurieren bezeichnet. In Anbetracht dessen, dass dabei ein Großteil der Daten erhalten bleibt, ist Zurücksetzen auch nicht die treffendste Wahl gewesen.

Wer die Downloadseite von Firefox mit der gerade aktuellen Firefox-Version aufruft, startet damit üblicherweise keinen automatischen Download, stattdessen erscheint der Hinweis, dass man bereits die neuste Version benutzt. Seit Firefox 35 findet sich in diesem Fall außerdem nun auch eine Schaltfläche mit der Aufschrift “Firefox restaurieren” und der Überschrift “Machen Sie Firefox wieder flott”. Damit wird die Firefox-interne Funktion zum Zurücksetzen des Profils direkt über die Mozilla-Webseite ausgelöst.

Die vermutliche Idee dahinter: Die meisten Probleme mit Firefox liegen in einem defekten Profil begründet, entsprechend hoch ist die Erfolgsrate mit einem neuen Profil. Wer mit der aktuellsten Firefox-Version die Downloadseite von Firefox aufruft, erhofft sich wahrscheinlich die Lösung von Problemen durch Neuinstallation. Dies bringt allerdings nur in den allerseltensten Fällen etwas, das Zurücksetzen des Profils hingegen eher.

Wörter in Dateien ersetzen: rpl anstatt sed

Permalink debinux

Kleiner Tipp für alle, die für sed keine Zeit oder eine andere Ausrede haben: rpl.
Der pythonische Helfer für nicht allzu tägliche Aufgaben, ersetzt Wörter oder Wortteile in Dateien.

Bevor zu Mistgabeln gegriffen wird: Nein, sed ersetzt es nicht. Bei weitem nicht.
Es kommt aber ohne RegEx aus.

Für zwischendurch ein super Helfer. Ein bischen RegEx oder die sed Basics sollten dennoch bekannt sein.
Dabei fallen die mahnenden Blicke durchaus in die eigene Richtung.

Python wird vermutlich schon installiert sein, weitere Abhängigkeiten gibt es nicht. Daher gilt für Debian und Konsorten:

apt-get install rpl

Um dem Post etwas Länge Information beizubringen, die relativ kleine man-page als Code für den Abschluss:

SYNOPSIS
     rpl [-LhiwbqvsRepfdt] [-xSUFFIX] "old_string" "new_string" "target_file ..."

DESCRIPTION
     Basic usage is to specify two strings and one or more filenames or directories on the command line.  The first string is the string to replace, and the second string is the replacement string.

     -h, --help
             A short help text.

     -L, --license
             Show the license and exit.

     -xSUFFIX
             Search only files ending with SUFFIX, e.g.  “.txt”.  May be specified multiple times.

     -i, --ignore-case
             Ignore the case of old_string.

     -w, --whole-words
             Make old_string match only on word boundaries.

     -b, --backup
             Move the original files to filename~ before replacing them.

     -q, --quiet
             Quiet mode.

     -v, --verbose
             Verbose mode.

     -s, --dry-run
             Simulation mode, no files are changed.

     -R, --recursive
             Recurse into subdirectories.

     -e, --escape
             Expand escape sequences in old_string and new_string.  Examples of escape sequences are ‘\n’ (new-line), ‘\t’ (tab), ‘\x42’ (hexadecimal number 42), ‘\033’ (octal number 033).

     -p, --prompt
             Prompt for confirmation before replacing each file.

     -f, --force
             Ignore errors when trying to restore permissions and file ownership.

     -d, --keep-times
             Keep modification times when replacing files.

     -t, --use-tmpdir
             Use a temporary directory for storing temporary files, usually the value of the environment variable TMPDIR.  The default is to put temporary files in the same directory as the file being modified.

     -a, --all
             Do not ignore files and directories starting with .

19. Januar 2015

Steam Bug löscht sämtliche Dateien!

Permalink Steam for Linux

Für alle Nutzer der Linux-Version von Steam gilt heute:

NICHT MIT DEN STEAM-DATEIEN HERUMSPIELEN!

Sonst könnte nicht nur das Löschen sämtlicher persönlicher Dateien auf ihrer Festplatte die Folge sein - sondern auch das Verschwinden von Dateien auf externen Speichermedien, wie zum Beispiel USB-Sticks.

Grund dafür ist ist ein Fehler im „Steam.sh“ Bash Script:

rm -rf "$STEAMROOT/"*

Fehlt die „Steam data directory“, so wird die Zeile missverstanden und alle persönlichen Dateien werden gelöscht!

Tags: 
Steam
Linux
Bug

Browser-Gerangel 2015

Permalink barfoos

Weit mehr als ein Jahr ist vergangen seit dem letzen Browser-Gerangel. Zeit zu gucken, was sich seit dem Verändert hat. Mittlerweile gibt es auch von Opera eine stabile Webkit-Version unter dem Namen OperaBeta. Diese ist im neuen Test somit auch wieder enthalten. Erstmal habe ich auch auf einem Android-Smartphone die Browser-Testsuiten für einige Browser laufen lassen, denn alle Browser unterstützen mittlerweile (teilweise nur per Plugin) das Synchronisieren von Lesezeichen, Tabs und vielem mehr. Die Entscheidung welchen Browser ich nutzten möchte, wird somit auch von der Performance auf einer völlig neuen Geräteklasse abhängig.

Testumgebungen

Für die Benchmarks verwendete ich folgende von mir im Moment hauptsächlich verwendeten Systeme:

Navis, mein Heim-PC, läuft mit einem Intel i5-2400 dem 8 GiB RAM zur Verfügung stehen. Seit einem Jahr liegt das installierte Ubuntu 14.04 LTS zusammen mit allen für Browser relevanten Daten von einer SSD.

Navicula, mein Laptop, läuft mit einem Intel i5-3230M dem ebenfalls 8 GiB RAM zur Verfügung standen und dessen Programme von einer SSD im mSATA-Slot geladen werden. Auf diesem System läuft ein frisch aktualisiertes Ubuntu 12.04 LTS.

Weitere Infos zur Ausstattung der beiden Systeme findet ihr auf meiner Benutzerseite bei ubuntuusers.de

Padfone 2, ist ein von Asus hergestelltes Smartphone, dass mit einem Quad-core auf 1.5 GHz getakteten Prozessor läuft, der auf 2 GiB RAM zugreifen kann. Auf ihm läuft ein Android 4.4.2 KitKat. Bis auf Chromium bieten alle Browser-Herstellerinnen auch eine fast versionsgleiche Android-Ausgabe ihres Programms an.

Weitere Infos zur Ausstattung des Padfone 2 finden sich zum Beispiel bei gsmarena.com.

Testkandidaten

Getestet wurden von mir die vier Browser, die ich am häufigsten verwende.

  • Firefox in Version 35 geht als mein momentaner Standard-Browser an den Start.
  • Google Chrome in Version 39.0.2171.9x nutze ich vor allem für vom Firefox nicht unterstützte Medienformate und Flashcontent.
  • Google Chromium, die OpenSource-Variante des Webkit-Browsers aus dem Hause Google wurde auf Navis in Version 39.0.2171.65 und auf Navicula in Version 37.0.2062.120 von mir getestet. Für Android konnte ich keine lauffähige Version finden.
  • Opera war im letzten Test wegen dem Wechsel zur Webkit-Engine außen vor. Mit Opera Beta ist die Browserschmiede in diesem Test nun in Version 27.0.1689.xxxx wieder beteiligt.

Verwendete Benchmarks

Für meine Tests verwendete ich insgesamt vier Testumgebungen. Zunächst mussten sich alle getesteten Browser dem ACID3-Test unterziehen.

Hier gab es eine unerfreuliche Überraschung. Während im letzten Test all Browser mit einer einwandfreien Darstellung glänzten, fallen diesmal zwei Kandidaten negativ auf.

Firefox rendert die Testgrafik zwar mit 100/100 punkten richtig, zeigt jedoch mit “You should not see this at all” mehr an, als eigentlich erwünscht ist. Hier hat Mozilla wohl noch nachzubessern.

Firefox 35 mit Problemen im ACID3-Test

Auch Chromium überrascht. In der für Ubuntu 12.04 LTS letzten aktuellen Version 37 scheitert Chromium an der 100er-Marke und erreicht lediglich 98/100 Punkten. Das ist besonders erstaunlich, weil die zuletzt getestete Version 25 noch in der Lage war, den Test erfolgreich abzuschließen.

Browsermark

Nach diesem sanften Einstieg mussten sich die Browser dann im Browsermark von Rightware behaupten. Hier zeigte sich für mich durchaus erstaunliches. Der nagelneue Opera Beta lässt alle anderen Browser hinter sich. Und zwar unabhängig von der Leistungsfähigkeit des Systems. Das ist eine wirklich starke Leistung. Das Chrome und Firefox im Mittel hier am schlechtesten abschneiden würden, hatte ich so nicht erwartet.

Peacekeeper

In der dritten Testumgebung, dem Peacekeeper-Benchmark von Futuremark lässt sich tatsächlich kein Sieger feststellen. Hier liegen alle Browser mehr oder weniger gleich auf. Die Differenzen, die in der Grafik zu sehen sind, erlauben keinen Schluss auf einen Sieger, da sie schlicht nicht groß genug sind. Lediglich Chromium zeigt einen Dämpfer auf dem Laptop Navicula.

Speed-Battle

Zu letzt ließ ich die vier Browser dann noch im Speed-Battle von u-uu.de gegeneinader antreten. Das Ergebnis zeigt erneut, dass der Test scheinbar sehr zu Gunsten des Firefox-Browsers geschrieben ist. Er lässt die anderen hier deutlich hinter sich. Als objektive Testsuite fällt sie für mich deswegen für zukünftige Tests aus.

Fazit

Zum Abschluss gibt es nun noch zwei Übersichtsgrafiken, die die Einzelergebnisse auf eine etwas andere Art darstellen. Zu sehen sind hier die gemittelten Ergebnisse in den einzelnen Testsuiten Browsermark Peacekeeper Speed-Battle auf den beiden Systemarchitekturen.

2015_fazit_ubuntu

Zwei Ergebnisse lassen sich meiner Meinung nach aus dieser Übersich ableiten. Der Unterschied zwischen der Leistungsfähigkeit der Browser ist in den vergangenen zwei Jahren gesunken. Alle Browser liefern gute Werte. Keiner fällt deutlich zurück. Dennoch, wenn es einen Sieger gibt, dann heißt er Opera Beta. Das ist erstaunlich und von mir so nicht erwartet worden.

2015_fazit_android

Bei den auf Android laufenden Browsern sind die Abstände deutlich größer als auf den beiden Ubuntu-Systemen. Auch hier trägt Opera Beta den Sieg davon. Abgeschlagen ist hier der Firefox, der deutlich hinter Chrome zurück bleibt. Auch dieses Ergebnis hätte ich in dieser Deutlichkeit nicht erwartet.

Die Rohdaten lassen sich dank dem Ubuntuusers-Paste-Service hier herunterladen.

Programmieren – Die Grundlagen von C: Hallo Welt

Permalink DevDiary

Wer wollte nicht schon einmal ein eigenes Programm schreiben?
Um einen ersten Einblick über die Grundlagen von Programmiersprachen zu geben habe ich beschlossen, angefangen bei der Sprache C, eine neue Kategorie mit Inhalten zu füllen.
Die Programmiersprache C ist eine der am weitest verbreitetsten Programmiersprachen weltweit und auch einer der älteren Sprachen.
Dank des ebenfalls in C geschriebenen Kernels bietet sie unter Linux sogar über die sogenannten Header Dateien eine Schnittstelle an.
Viele andere Programmiersprachen sind von dem Syntax her C ähnlich.

Der Datentyp int

In der Programmiersprache C gibt es wie bei allen Sprachen mehrere Datentypen, der wichtigste ist hierbei die Zahl.
Genauer die ganze Zahl im englischen wie auch im C Syntax wird dies als Integer bezeichnet und im Quellcode das Kürzel int verwendet.
Dies bedeutet dass eine Variable vom Typen int z.b. den Wert 1, 2, 3 etc. aber nicht 1.5 annehmen kann.
In C wird praktischerweise vieles als Integer behandelt was einem eine einfache Methode zum verarbeiten von Daten bietet.
So kann man zum Beispiel einen Buchstaben auch als Zahl verwenden.

Die Main Funktion

Um überhaupt ein Programm zu erschaffen braucht es bei C immer die sogenannte Main Funktion.
Sie wird bei dem ausführen eines Programms als erste aufgerufen und im Idealfall bildet sie auch den Abschluss.
Im deutschen würde man so etwas als Hauptfunktion bezeichnen.

Diese Funktion ist von dem bereits erwähnten Datentypen int und wird folgendermaßen definiert.
Zuerst wird der Typ der Funktion angegeben (int) danach kommt der Name (main) und in den Klammern können noch Parameter angegeben werden die beim aufrufen dieser übergeben werden.
In den geschweiften Klammern steht der Quellcode der beim aufrufen ausgeführt werden soll.
Dabei bedeutet die Zeile return 0; , dass am Ende die Zahl 0 zurückgegeben werden soll.
Hierbei sei gesagt, dass in der Main Funktion bei Rückgabe von 0 dem Betriebssystem mitgeteilt wird, dass das Programm erfolgreich ausgeführt wurde und der Speicher geleert werden kann.

int main()
{
	return 0;
}

Bibliotheken

Die Bibliotheken funktionieren bei Programmiersprachen fast genauso wie bei Büchern.
In Büchereien findet man in den zahlreichen Büchern die Informationen die man gerade braucht sodass man diese nicht selber recherchieren muss.
Um eine häufig gebrauchte Aufgabe in einem Programm nicht jedes mal von vorne zu programmieren benutzt man Bibliotheken in denen einzelne Funktionen für diese Aufgaben bereits enthalten sind.

Jede Bibliothek besteht dabei aus mehreren Headerdateien in denen wiederum die Funktionen und Datentypen deklariert werden.
Nach dem einbinden der einzelnen Headerdateien über den Syntax #include kann man die in ihnen deklarierte Funktionen verwenden.
Bei Standardbibliotheken werden die Dateinamen zwischen den spitzen Klammern < und > geschrieben.
Dies weist den Compiler an die Headerdatei in den ihm bekannten Bibliotheksverzeichnissen zu suchen.
Falls man eigene Headerdateien im jeweiligen Projektverzeichnis verwenden möchte, nutzt man Anführungszeichen.

Die wichtigsten Bibliotheken unter C sind die von C selbst, in ihnen stehen all die Funktionen und Datentypen die den Syntax von C ergeben.
Um sie einzubinden verwendet man folgenden Quelltext welcher ganz oben stehen muss.
Dabei ist stdio.h die Standardbibliothek für Ein- und Ausgabe und muss bei fast jedem Programm eingebunden werden.
In ihr ist zum Beispiel die Funktion printf, mit der man Text ausgeben kann, enthalten.

#include <stdio.h>

Ausgeben von Text

Um Text in die Konsole auszugeben wird die Druckfunktion (printf) aus der Bibliothek stdio.h verwendet.
Mit ihr kann man nicht nur Text ausgeben sondern über sogenannte Platzhalter in dem auszugebenden Textes auch Werte von Variablen jeden Typs einfügen.
Diese Platzhalter werden in dem Text über das Prozentzeichen gefolgt von dem jeweiligen Buchstabens des Datentyps festgelegt.
Nach dem ersten Parameter, welcher den auszugebenden Text darstellt, wird für jeden Platzhalter der reihe nach Parameter mit den entsprechenden Variablen angelegt.
Über bestimmte Zeichenabfolgen, sogenannte Escapesequenzen, können Textformationen wie beispielsweise ein Zeilenumbruch (\n) in dem Text untergebracht werden.

printf(„Dies ist der Text aus Zeile: %i\n“, 0);
Platzhalter Datentyp
%i Integer (Zahl)
%c Char (Zeichen)
%s String (Text)

Das erste Programm: Hallo Welt

Klassisch ist dass Beispielprogramm Hallo Welt, dank des simplen Aufbaus ist jedoch für diesen Zweck ideal geeignet.
Dafür werden die zuvor erwähnten Elemente verwendet welches in dem nachfolgenden Beispielcode aufgeführt wird.
Diesen speichert man in der Datei namens main.c wobei der Dateiname natürlich beliebig gewählt werden kann wobei die Endung .c notwendig ist um dem Compiler später die verwendete Programmiersprache mitzuteilen.

#include <stdio.h>

int main()
{
	printf(„Hallo Welt!\n“);
	return 0;
}

Erstellen des Quellcodes

Um aus C Quelltext ein Programm zu erstellen braucht es 2 Arbeitsschritte (kompilieren und linken), diese jedoch werden meist beide von dem sogenannten Compiler abgearbeitet.
Dabei wird der Code in Menschen lesbarer Textform zu eine vom Betriebssystem ausführbare Binärdatei verwandelt.
Diese besteht aus Einsen und Nullen welche dem Computer im Grunde Anweisungen geben.

Unter Linux verwendet man am besten den GNU-Compiler gcc welcher in den meisten Fällen entweder bereits vorinstalliert oder in den Paketquellen enthalten ist.
Man findet ihn in dem Paket gcc.

Um nun mit dem Compiler den Quellcode zu kompilieren wechselt man mit einem Terminal in das Verzeichnis in dem die zu kompilierende Quelldatei liegt.
Danach führt man den folgenden Befehl aus.

gcc -o helloworld main.c
Parameter Bedeutung
gcc Aufruf des GNU-Compilers.
-o helloworld Der Buchstabe o steht für output.
Nach einem Leerzeichen folgt der Dateiname welcher für die kompilierte Datei benutzt werden soll.
Im Beispiel wird die Datei helloworld erstellt.
main.c Name der zu kompilierenden Datei.
Im Beispiel wird die Binärdatei aus der Quelldatei main.c erstellt.

Legende von den Fachwörtern

Da man beim Programmieren eine sehr fachbezogene Thematik hat, gibt es für alles immer ein Fachwort.
Um Neulinge nicht gleich ins kalte Wasser zu stoßen findet man in diesem Abschnitt eine kurze Erklärung von Wörtern die man zum Verständnis des Artikels braucht.

Funktionen sind im Grunde Aufgaben, beispielsweise kann eine Funktion zum addieren oder drucken existieren.
Diese können beliebig oft aufgerufen werden ohne immer wieder ihren Quelltext aufschreiben zum müssen.

Parameter sind Angaben welche dynamisch, also nicht immer gleich, sind.
Funktionen enthalten Parameter wie beispielsweise die Funktion addiere den Parameter A und B hat.
Die beiden Parameter A und B werden addiert und dann zurückgeben.

Ausblick

Nächstes mal geht es um den zweiten wichtigen Datentypen Char und dass einlesen von Text mit einem weiteren Beispiel.

Fazit

Durch wenig Aufwand ist man schnell zu einem ersten Programm gekommen und hat dabei erste Grundlagen von C gelernt.
Da dies längst noch nicht alles an den Grundlagen darstellt, möchte ich diese in späteren Artikeln behandeln.

Nachtrag:
Dank eines aufmerksamen Lesers habe ich die, natürlich, falsche Bezeichnung zu Datentyp korrigiert.

Bugfix: fufix Mailserver Installer 0.7.1.1

Permalink debinux

Ohje, da hat sich doch glatt ein nerviger Fehler eingeschlichen. Angelegte Domänen in Postfixadmin waren nicht sichtbar, außer dem Adminstrator wurden diese noch einmal explizit zugewiesen.

Dafür jetzt auch etwas aufgeräumter und in naher Zukunft mit dem SabreDAV Framwork versehen…
Der Changelog fällt entsprechend klein aus.

Changelog

– FIXED: Domains do not appear in “Domain List” (this brings back the PHP Notice, just ignore it for now)
– Only stop service “clamav-freshclam” while running “freshclam”
– Adjusted colors and style
– Use more [INFO] tags
– Catch errors when configuring timezone and installing packages
– Removed CalDAV und CardDAV from dashboard

Download

https://github.com/andryyy/fufix/releases/tag/v0.7.1.1

Linux 3.19-rc5

Permalink menzer.net

Erwartungsgemäß sind nicht viele Änderungen eingeflossen, trotzdem hätte es Torvalds lieber noch ruhiger gehabt.

Immerhin wurde ein Fehler in der arm64-Architektur behoben, dessen Fix es leider nicht mehr in den -rc4 geschafft hatte. Einen guten Teil der Änderungen machen weitere Korrekturen aus dem ARM-Umfeld aus. Ein weiterer Stapel an Patches betrifft USB - auch hier wieder mit einigen Fehlerkorrekturen.

Die kleine Statistik:

Commits geänderte Dateien eingefügte Zeilen gelöschte Zeilen Datum Tage *
3.19-rc1 12141 10333 477712 344938 21. Dez 2014 14
3.19-rc2 65 69 653 351 29. Dez 2014 8
3.19-rc3 225 183 1932 2190 6. Jan 2015 8
3.19-rc4 218 192 1922 1029 11. Jan 2015 5
3.19-rc5 311 263 2405 1120 18. Jan 2015 7
Gesamt 12 964 10 555 483 492 348 496 42

* Tage seit dem letzten rc/Release

Quellen: Linux Kernel Mailing List

18. Januar 2015

WordPress auf HTTPS umstellen

Permalink Kaffeeringe

By: Michael Coghlan - CC BY-SA 2.0

Mit der richtigen Anleitung ist es recht einfach, WordPress auf HTTPS umzustellen — auch bei einer Multisites-Installation. Eine sehr schöne Anleitung gibt es bei webongo.de. Ich musste allerdings für meine Multisites-Installation bei all-inkl.com ein paar Umwege nehmen.

Schritt 1 und 2 funktionieren natürlich: Ich habe ein SSLTSL-Zertifikat in meinem Hosting-Paket. Das hat auch schon länger das Backend verschlüsselt. Und natürlich sollte man vor jeder Aktion ein Backup machen und das Caching abschalten. Ich habe mein Cache-Plugin einfach deinstalliert.

Bei Schritt 3 beginnt die Abweichung: Bei einer Multisites-Installation kann man die URL nicht in der Administration ändern. Das macht aber nichts, denn in Schritt 4 werden ohnehin alle Einträge in der Datenbank ersetzt. Das bei Webongo vorgeschlagene SQL–Statement funktioniert bei mir allerdings nicht, weil REPLACE bei meiner MySQL-Installation nicht geht.

Es gibt aber mit Search Replace DB ein Tool, mit dem man sehr einfach http://example.com durch https://example.com ersetzen kann.

Ab da ging es dann nach Anleitung weiter. Und nach wenigen Minuten lief die komplette Seite über HTTPS.

Aber Achtung!

Moderne Browser zeigen in verschlüsselten Seiten keine unverschlüsselten Inhalte an! Das bedeutet: Youtube-Embeds funktionieren dann nicht mehr, wenn sie nicht ohnehin schon per HTTPS-eingefügt wurden. Das gleiche gilt für alle anderen Arten von Embeds.

Ich habe bisher Youtube-Videos ohnehin nicht so oft eingebunden. Aber wenn ich das gemacht habe, dann über ein Plugin, das leider noch nicht fähig war, die HTTPS-Version des Youtube-Embed-Codes zu erzeugen. Im Code stand nur mehrfach der Vorsatz, dass das irgendwann mal passieren sollte. Ich hab mir das jetzt ohne die ganzen möglichen Optionen selbst zusammengehackt.

Fazit!

Die Umstellung an sich, hatte ich schon mehrfach versucht. Allerdings hatte ich bisher keine ordentliche Anleitung dafür gefunden. Ich hätte eigentlich gedacht, dass das per Config-Eintrag gingen — wie für das Backend. Am Ende war es aber doch sehr einfach.

Schwieriger könnte für einige das Leben mit einem verschlüsselten Blog werden — vor allem dann, wenn man viel fremde Inhalte embeddet. Aber soweit ich das sehe, gibt es keine großen Geschwindigkeitsnachteile durch die Verschlüsselung und ich habe meinen kleinen Beitrag zu einem verschlüsselten Internet geleistet.

Links

systemds binary journal ist eine bescheuerte Idee

Permalink onli blogging

Meine jüngsten Erfahrungen mit Arch bestärken mich darin, auf meinem Hauptcomputer einen großen Bogen um alles mit systemd zu machen. Es ist nervenaufreibend bescheuert.

Das Arch auf meinem Pogo startet nicht mehr, ich habe keine Idee warum. Also starte ich ihn ohne Arch, mounte die Platte und will in die Logs schauen. Und das geht nicht, denn das systemd Log ist binary. Auf dem alten Linux vom pogo ist da natürlich kein Viewer dazu, aber hey, selbst für mein Ubuntu finde ich keinen Viewer dafür (denn: Ich finde dafür überhaupt keinen viewer, außer systemctl, was mir nicht hilft).

Natürlich ist das konfigurierbar. Wahrscheinlich, irgendwie. Aber es würde mich gar nicht wundern, wenn ich dafür irgendein Paket installieren oder einen Voodoo-Befehl ausführen müsste. Was nicht geht, denn in das ARM-System kann ich von hier aus nicht chrooten. Aber es ist sowieso nicht so dokumentiert, dass ich es bisher fand. Außerdem bekomm ich Kopfschmerzen von dem Blödsinn, statt jetzt das Bootproblem zu lösen mich erstmal um lesbare logs kümmern zu müssen.

Systemd stinkt. Ich such jetzt eine Alternative.

fufix Mailserver Installer v0.7 (Update: v0.7.1.1)

Permalink debinux

Wieder einmal möchte ich vorab allen danken, die mir geholfen haben Fehler zu finden und/oder neue Funktionalität eingebracht haben.

Es gab zudem wieder einige Änderungen in Paketen, die dazu führten, dass die Packetinstallation ohne Snakeoil-Zertifikate unvollständig abgebrochen hat. Sehr ärgerlich.

Und ja, es gibt eine Upgrade-Funktion, aber nein, sie funktioniert leider erst mit dem nächsten Release. Das liegt insbesondere an der Änderung des Passwort-Hashes von MD5-CRYPT in SHA512-CRYPT. Diese Änderung kam übrigens via GitHub herein, vielen Dank dafür!
Auch ein anderer User hat einige Vorschläge eingereicht, die ich leider erst mit der nächsten Version implementieren könnte. Aber auch hier: Vielen Dank!

Ich freue mich, wenn ich euch bei der Einrichtung helfen kann und werde immer gerne unterstützen, wenn es zu Problemen kommt. Bitte in dem Fall eine E-Mail schreiben, das funktioniert bei mir leider etwas besser als die Kommentarfunktion. :-)

Der nächste Schritt sollte wohl eine bessere README-Datei sein.

Wie auch immer. Hier nun der Changelog:

– Clean headers (version only) when message is not marked as spam. Spam headers still include “score”, “required” and “tests”.
– Skip RBL checks in SA (MTA does that)
– Local domain names are allowed in Postfixadmin
– Disallow unauth. senders to send you mail as someone@yourdomain.tld
– Fixed message_size_limit to 25MiB
– Certificates are installed properly
– Better hostname handling (esp. Ubuntu Servers)
– DNS check includes MX record check
– Warn if memory is less than ~750M
– Webroot changed to /var/www (further releases MAY include Apache)
– Autoconfig for Icedove: Replaced user agent check in nginx, works for all TB-like clients now
– Upgrade function for !further! releases (not yet supported, sorry)
– Roundcube update from 1.0.3 to 1.0.4
– Daily SA rules update by “Heinlein Support” via cronjob
– Postfixadmin upgrade to revision 1736
– Password hash changed from MD5-CRYPT to SHA512-CRYPT
– Fix for passwords containing “#” in Dovecot SQL connect strings
– Fix for “PHP NOTICE” when adding superadmin in Postfixadmin
– Fix for Wheezy when backports are enabled
– Debug option in configuration file

Die genauen Änderungen der Dateien, könnt ihr wie immer hier nachsehen.

Download

Hier entlang, bitte.

Installation

Eine kleine Info-Seite findet ihr nach wie vor hier.

Wochenrückblick 03/2015

Permalink deesaster.org

Der Wochenrückblick lässt das Geschehen der vergangenen Woche rund um Ubuntu, Linux und Open Source Revue passieren.

Rund um Ubuntu

Ubuntu Find-A-Task

Für die englischsprachige Community wurde mit Ubuntu Find-A-Task ein neuer Service eingerichtet, über den potentielle Helfer ein paar

Fragen je nach ihren Fähigkeiten beantworten müssen und so mögliche Tätigkeitsfelder kennenlernen können. Die Tätigkeitsfelder sind dabei Support, Schreiben, Befürworter, Entwicklung sowie Qualität und Design.

Quelle: Ian's TechBlog

Community Leadership Summit 2015 im Juli

Am 18. und 19. Juli 2015 findet in Portland, Oregon, USA das Community Leadership Summit 2015 statt. Es treffen sich dort verschiedene Vertreter aus den diversen, weltweiten Communitys, um sich miteinander auszutauschen.

Quelle: Jono Bacons Blog

Ubuntu Scopes statt Apps

Letzte Woche verschickte Canonical an ausgewählte Personen einen kleinen Newsletter, welcher die Begriffe „Aggregation scopes“ und „Branded scopes“ für das kommende Ubuntu Phone einführte. Aus dem Newsletter wurde leider nicht ganz klar, was es mit beiden Begriffen auf sich hat bzw. in wie weit diese dem Benutzer, der heute nur Apps kennt, helfen werden. Es bleibt die Veröffentlichung des Ubuntu-Smartphones von bq im Februar abzuwarten.

Quelle: OMG!Ubuntu!

systemd in Ubuntu 15.04

Nur noch drei Monate sind es bis zu Veröffentlichung von Ubuntu 15.04 „Vivid Vervet“. Die neue Ubuntu-Version soll dann auch die Integration des Init-Systems systemd beendet haben, nachdem die Mutterdistribution Debian im Februar 2014 entschieden hatte, auf das System zu wechseln, womit Canonicals eigenes Init-System Upstart fallen gelassen wurde.

Quelle: Pro-Linux

Neues rund um Linux

Stadt München tritt Document Foundation bei

The Document Foundation kümmert sich um die Verbreitung offener Standards und offener Programme. Der unabhängigen Stiftung ist mit Florian Haftmann nun auch ein Vertreter der Stadt München beigetreten, der vor allem seine Erfahrungen bei der Migration von Windows auf LiMux einbringen soll.

Quellen: Golem, Linux-Magazin, heise open, Pro-Linux, OMG!Ubuntu!

Builder: Entwicklungsumgebung für GNOME

Builder ist eine IDE, mit der sich grafische Anwendungen für die GNOME-Oberfläche leichter erstellen lassen sollen. Das Projekt befindet sich aber noch in der Entwicklung, hat die Crowdfunding-Phase aber gut überstanden.

Quellen: Golem, heise open, Pro-Linux

Wikipedia erhält Erasmus-Preis

Die Wikipedia bzw. die Wikipedia-Community wurde von der niederländische Stiftung Praemium Erasmianum mit dem Erasmus-Preis ausgezeichnet. Die Verleihung findet im Herbst statt und kommt mit einem Preisgeld von 150.000 Euro daher.

Quelle: heise open, Pro-Linux

Spielen unter Linux

Shadowrun: Hong Kong für Linux

Die Kickstarter-Phase ist noch nicht abgeschlossen, aber das Projekt bereits finanziert. Und laut Entwickler HSB soll es das Spiel auch für Linux geben und ab August 2015 als DRM-freie Version zur Verfügung stehen.

Quelle: Pro-Linux

Steam löscht Nutzerdaten

Ein kleiner Fehler in einem Skript hat dazu geführt, das beim Ausführen von Steam das gesamte Nutzerverzeichnis und alle Daten, auf die der Nutzer Zugriff hatte, gelöscht wurden. Grund für diesen Fauxpas war eine nicht gesetzte Variable, die nicht überprüft wurde und dann den Befehl rm -rf "$STEAMROOT/"* absetzte, was alle zugreifbaren Daten auf dem System löschte.

Quelle: Golem

Hardware und Mobiles

Tizen-Smartphone in Indien

Das erste Smartphone mit dem mobilen Linux-Betriebssystem Tizen kommt von Samsung in Indien auf den Markt. Das Einsteiger-Smartphone soll sich dort gegen die Konkurrenz von Googles Android und Mozillas Firefox OS durchsetzen.

Quellen: Pro-Linux, OMG!Ubuntu!

Mini-Rechner mit Linux Mint

Clement Lefebvre, Entwickler von Linux Mint, hat diese Woche in Zusammenarbeit mit CompuLab einen Linux-Mint-Rechner angekündigt. Die „Mintbox Mini“ soll ab dem zweiten Quartal 2015 für rund 300 US-Dollar verfügbar sein.

Quellen: Pro-Linux, Linux-Magazin, OMG!Ubuntu!

Sonstiges

Die Gefahren der Cloud

Das Linux-Magazin hat eine Erhebung der EU-Statistikbehörde Eurostat veröffentlicht, nach der nur jeder fünfte Deutsche seinen Daten in der Cloud lagere. Bei den jüngeren Nutzern liegt die Quote deutlich höher.

Die Gefahren der Ablage in der Cloud sollten aber jedem bekannt sein und das law blog hat diese Woche erst wieder darauf hingewiesen: Ausländische, d.h. vor allem us-amerikanische Cloudanbieter wie Google oder Microsoft durchsuchen aktiv den Speicher ihrer Kunden nach (ihren Maßstäben) illegalen Inhalten, was dann ggf. zu einem Durchsuchungsbefehl in Deutschland führen kann.

Deutsche Gerichte und WoW

Man glaubt es kaum, aber auch deutsche Gerichte beschäftigen sich mit MMORPGs. Es ist extrem witzig, in einem Gerichtsurteil vom Sammeln von Kräutern wie Frost Lotus, Icethorn, Lichbloom oder Adder’s Tongue oder den Zonen Dragonblight, Icecrown und Storm Peaks zu lesen. Daran erkennt man, dass Computerspiele Teil unserer Kultur geworden sind.

Galileo Press heißt nun Rheinwerk Verlag

In der Open-Source-Szene sind Galileo Press keine Unbekannten. Sie haben zahlreiche Bücher zu Linux-Themen im Angebot und unterstützen die Community, wann immer es möglich ist (z.B. durch Buchpreise und -spenden). Aus markenrechtlichen Gründen musste sich der Verlag leider umbenennen und heißt nun Rheinwerk Verlag. Ansonsten ändert sich aber nichts, die Qualität der Bücher bleibt sicherlich gleich hoch.

Quelle: Pro-Linux

Searx: IP-Adressen im UWSGI Log anonymisieren (Nginx)

Permalink thomas-leister.de

Standardmäßig wird bei einem Searx Setup mit UWSGI die IP-Adresse des Anfragenden Clients im UWSGI Log (/var/log/uwsgi/app/searx.log) mitprotokolliert. Die IP-Adresse bezieht Searx in meinem Setup über Nginx, der Searx vorgeschaltet ist. Die Adresse wird über den WGSI Parameter „REMOTE_ADDR” übergeben. Wer die IP-Adressen seiner Nutzer nicht protokollieren will, kann dafür sorgen, dass Nginx eine falsche REMOTE_ADDR an Searx übermittelt.

IP-Adresse durch Dummy ersetzen

In der Nginx-Konfiguration für Searx wird dabei die hervorgehobene Zeile hinzugefügt:

server {
    listen 80;
    listen [::]:80;
    listen 443 ssl;
    listen [::]:443 ssl;
    server_name search.trashserver.net;

    ssl_certificate /etc/myssl/public-combined.pem;
    ssl_certificate_key /etc/myssl/privkey.pem;

    location / {
        uwsgi_param REMOTE_ADDR 127.0.0.1;
        include uwsgi_params;
        uwsgi_pass unix:/run/uwsgi/app/searx/socket;
    }
}

Nach dem Abspeichern der Konfiguration folgt ein

service nginx reload

… und die IP-Adressen werden im Searx UWSGI Log ab sofort durch „127.0.0.1” ersetzt.

Log abschalten

Wer die Log-Datei nicht benötigt und die Protokollierung der HTTP Aufrufe komplett deaktivieren will, fügt zur Searx UWSGI Konfiguration (/etc/uwsgi/apps-available/searx.ini) ein

disable-logging = true

ein und startet den UWSGI Service neu:

service uwsgi restart

 

Searx Update auf 0.6.0

Permalink thomas-leister.de

Gerade wurde ich darauf hingewiesen, dass meine Searx Instanz unter https://search.trashserver.net veraltet sei. Eine Übersicht über einige öffentliche Search Instanzen gibt es auf dieser Seite: http://stats.searx.oe5tpo.com/

Ich habe natürlich sofort ein Update gefahren ;) Offenbar ist eine neue Python-Abhängigkeit dazugekommen, denn nach einem Neustart verweigerte Searx zunächst den Dienst. Python-pygments müsse installiert werden.

Na, dann tun wir das doch mal (im Searx Rootverzeichnis):

source searx-ve/bin/activate
pip install pygments

Nach einem

service uwsgi restart

lief wieder alles wunderbar. Wer eine eigene Searx-Instanz betreiben will, kann sich meine Anleitung dazu ansehen. Ich hoffe, sie ist noch aktuell. Bei der Gelegenheit will ich aber noch darauf hinweisen, dass Anonymität erst gewährleistet ist, wenn eine Searx Instanz von mehreren Usern benutzt wird. Erst dann verschwimmen die Nutzungsprofile ineinander. Ihr seid also herzlich eingeladen, mit https://search.trashserver.net zu suchen, so wie es schon einige User tun. ;)

Arch Linux: Probleme beim Booten mit Kernel 3.18.2-2

Permalink thomas-leister.de

Gestern habe ein Systemupdate via Pacman durchgeführt. Dabei wurde auch der neue Kernel 3.18.2-2 installiert. Nach einem Neustart startete mein Ultrabook nicht mehr ordnungsgemäß. Auf dem Display wurden Fehlermeldungen ausgegeben wie z.B.:

NMI watchdog: BUG: soft lockup - CPU#1 stuck for 22s!

oder

BUG: unable to handle kernel NULL pointer dereference at 0000000000000080

Wo genau die Ursache für diese Fehler liegt, habe ich noch nicht herausgefunden. Es scheint jedenfalls Probleme mit verschiedenen Netzwerkgeräten zu geben: https://bbs.archlinux.org/viewtopic.php?id=192287 … und auch sonst sind die Arch Foren mit Themen im Bezug auf Probleme mit Kernel 3.18.2 gut gefüllt. Ganz rund scheint der Kernel noch nicht zu laufen, deshalb habe ich mich kurzerhand dazu entschieden, den älteren Kernel 3.17.6 zu nutzen.

Weil mein System nicht mehr vernünftig zu bedienen war, habe ich mich von außen mit einem Live USB Stick eingeklinkt und den alten Linux-Kernel inkl. Kernel-Headern wieder installiert.

Dazu wird auf das eingebundene System gechrootet und in den „/var/cache/pacman/pkg/” Ordner gewechselt.

Via

pacman -U linux-3.17.6-xxx.pkg

und

pacman -U linux-headers-3.17.6.-xxx.pkg

habe ich den alten Kernel installiert. Nach einem Reboot war wieder alles in Ordnung.

17. Januar 2015

Notebook Festplattenbug selbst im aktuellem Ubuntu

Permalink Erfahrungen mit Ubuntu

Selbst in aktuellen Ubuntu Versionen und auch anderen Linuxen ist er noch drin. Der Notebook Festplatten Bug. Worum geht es:

Wenn man Linux auf einem Notebook mit normaler Festplatte installiert hört
man in regelmässigen, kurzen Abständen ein Klackern.
Der Grund ist folgender: Festplatten haben eine Stromsparfunktion, und die Platte fährt zu diesem Zweck in eine Parkfunktion. Aus dieser Parkfunktion wird sie aber sofort wieder herausgeholt. Dieser Vorgang geschieht alle paar Sekunden, abhängig nach Linux Version. Bei Desktoprechner tritt der Effekt nicht auf.
Durch diesen Schlafvorgang und sofortiges Aufwecken altert die Festplatte, und der "Load_Cycle_Count" steigt in schwindelerregende höhen.

Mit installiertem smartmontools kann man den Wert wie folgt auslesen:

smartctl -A /dev/sda | grep -E "(Load_Cycle_Count|ID)" 

Hier kann man beobachten, wie nach  kurzer Zeit der Wert um 1 erhöht wird.
Eine Platte in einem alten Toshiba hab ich  hierdurch verloren.

Durch Suche in diversen Foren habe ich mir Lösungen erarbeitet.

In alten Debian und Ubuntu Versionen (z.b. Debian 4 und 5) habe ich folgenden Befehl in die
rc.local aufgenommen:
hdparm -B 254 /dev/sda 

Wenn man die Schlaffunktion genutzt hat musste ich den noch in
/usr/lib/pm-utils/sleep.d/95hdparm-apm

hinzufügen.

Debian Jessie, Ubuntu 14.x

Unter diesen Funktionen hat der hdparm Befehl nicht mehr funktioniert,
im Gegenteil, dadurch wurde die Platte noch häufiger geparkt.
Hier nutze ich ein kleines Script:

#!/bin/bash
while :
do
sleep 10
/usr/sbin/smartctl -g apm /dev/sda > /dev/null
done

Das habe ich in die rc.local eingetragen, so das es im Hintergrund
ausgeführt wird. ( aufruf mit & am Ende).
Das Script ruft alle 10 Sekunden einen APM Wert der Platte ab
und dieses Verhindert das sie in die Schlafposition geht.

Ich verstehe nicht, das dieser Bug, der Festplatten richtig in den Tot treibt
immer noch so verbreitet ist. Noch ist nicht jedes Notebook mit einer SSD
ausgerüstet.

 

Defektes Arch Linux mit Live USB Stick reparieren

Permalink thomas-leister.de

Mit einem Arch Linux Live USB Stick kann ein System von außen repariert werden, selbst wenn dieses nicht mehr bootet oder Eingaben annimmt. Wie ihr einen solchen Stick erstellt, ist im Arch Wiki erklärt. Hier will ich nur kurz einen „Notizzettel” hinterlassen und beschreiben, wie man sich mit dem Stick auf ein bestehendes Arch System aufschaltet.

Vom USB Stick wird gebootet. In der Root-Kommandozeile wird zuerst das Tastaturlayout auf ein deutsches Layout gestellt:

loadkeys de-latin1-nodeadkeys

An dieser Stelle ist es hilfreich zu wissen, dass y und z vertauscht sind und der Bindestrich mit der ß-Taste eingegeben werden muss.

Internetverbindung herstellen

Für viele Reparaturarbeiten ist eine Internetverbindung notwendig – vor allem, wenn via Pacman neue Pakete heruntergeladen werden müssen.

WLAN Verbindung herstellen

Für eine schnell eingerichtete WLAN-Verbindung bringt Arch Linux das Tool „wifi-menu” mit. Nach Aufruf des Tools werden WLAN Netzwerke gesucht und angezeigt. Das gewünschte Netzwerk wird ausgewählt und nach Eingabe der Passphrase sollte die Verbindung stehen.

LAN Verbindung herstellen

Der Netzwerkkarte wird nicht automatisch eine IP-Adresse zugewiesen, sodass der Rechner zunächst offline ist. Um eine IP-Adresse zu erhalten und sich auf diese Weise dem LAN Netzwerk bekannt zu machen, muss zunächst der Name der Netzwerkschnittstelle herausgefunden werden. Das geschieht über die Eingabe von „ip link”. Mit diesem Kommando wird eine IP-Adresse beim Router angefordert:

dhcpcd enp2s0

…wobei der Name der Schnittstelle natürlich durch den eigenen Bezeichner zu ersetzen ist. Die Verbindung zum Netzwerk / Internet sollte nun stehen.

Arch System einbinden

Unverschlüsselte Systempartition einbinden

Im einfachsten Fall ist die Systempartition (für das Wurzelverzeichnis „/”) nicht verschlüsselt. Dann kann mit

lsblk

eine Liste der vorhandenen Laufwerke ausgegeben werden, und die Systempartition z.B. via

mount /dev/sda2 /mnt

in das Verzeichnis „/mnt” gemountet werden. Falls es eine separate Bootpartition gibt, auf der ein Bootmanager wie GRUB liegt, sollte diese mit eingebunden werden:

mount /dev/sda1 /mnt/boot

(=> Nächster Schritt: „In das bestehende Arch System wechseln”)

Verschlüsselte Systempartition einbinden

Falls die Sytempartition mit LUKS verschlüsselt ist, muss sie selbstverständlich zuerst entschlüsselt werden. Dazu wird zunächst das dm-crypt Kernelmodul geladen:

modprobe dm-crypt

Mit dem „lsblk”-Befehl wird eine Liste der verfügbaren Festplatten und Partitionen ausgegeben. Der richtige Bezeichner für die verschlüsselte Partition (im Beispiel: /dev/sda2) wird im nächsten Schritt benötigt.

LUKS ohne LVM

Folgender Cryptsetup-Befehl entschlüsselt die Partition und legt eine neue Gerätedatei „system” an, über die auf die unverschlüsselten Daten zugegriffen werden kann.

cryptsetup luksOpen /dev/sda2 system

Die unverschlüsselte Version der Systempartition wird nun in das Live-Dateisystem gemountet:

mount /dev/mapper/system /mnt

Falls der Bootloader sich auf einer anderen Partition „sda1″ befindet, sollte dieser ebenfalls mit eingebunden werden:

mount /dev/sda1 /mnt/boot

LUKS + LVM

Wenn die LUKS-verschlüsselte Partition einen LVM Container enthält, wird das Dateisystem stattdessen so entschlüsselt und gemountet:

cryptsetup luksOpen /dev/sda2 lvm

Für das Einbinden der richtigen LVM Partition kann ein Blick auf die Ausgabe von „lsblk” nicht schaden. Das Schema ist: /dev/[LVM Gruppenname]/[Partitionsname]. Z.B.:

mount /dev/main/root /mnt

… und auch hier wird eine ggf. vorhandene Bootpartition ebenfalls mit eingebunden:

mount /dev/sda1 /mnt/boot

In das bestehende Arch System wechseln

Mit dem Kommando

arch-chroot /mnt

„chrootet” man sich nun in das defekte Arch-System und kann dort arbeiten, als hätte man es direkt gebootet. Aktionen, die z.B. über pacman durchgeführt werden, wirken sich innerhalb dieser Chroot-Umgebung nicht mehr auf den Live USB Stick aus, sondern auf das System, das eingebunden wurde.

Chroot-Umgebung verlassen und Partitionen aushängen

Sobald die Reparaturarbeiten erledigt sind, wird die Chroot-Umgebung mit einem „exit” wieder verlassen. Die eingebundenen Partitionen werden jetzt noch ausgehängt, um alle Änderungen aus dem Puffer auf die Festplatte zu übertragen:

umount /mnt/boot /mnt

Wenn vorher eine LUKS-verschlüsselte Partition eingebunden wurde, wird das virtuelle LUKS-Gerät noch freigegeben:

cryptsetup luksClose system

bzw.

cryptsetup luksClose lvm

Mit einem „shutdown now” oder „reboot” wird der Computer heruntergefahren oder neu gestartet.

Add-ons funktionieren seit Update auf Firefox 35 nicht? Lösung!

Permalink Sören Hentzschel

Mozilla hat vergangenen Dienstag Firefox in Version 35.0 veröffentlicht. Für manche Nutzer mit vom Standard abweichender Konfiguration haben einige Add-ons aufgehört zu funktionieren. Hier gibt es die Lösung.

Problem und Ursache

Mozilla hat am Dienstag Firefox 35.0 veröffentlicht. Manche Nutzer beklagten nach dem Update, dass einige Add-ons, unter anderem Adblock Plus / Edge, aufgehört haben zu funktionieren. Grund hierfür ist eine Änderung in Firefox 35 in Bezug auf IndexedDB, welche eben jene Probleme auslöst, sofern der Nutzer die versteckte Firefox-Einstellung dom.indexedDB.enabled auf false gesetzt hat. Standardmäßig steht dieser Schalter auf true, das heißt betroffen sind von diesem Problem ausschließlich Nutzer, welche zuvor selbst an den Einstellungen von Firefox herumgespielt oder ein Derivat installiert haben, welches diese von Mozilla nicht vorgesehene Einstellung als Standard definiert hat. Wie Firefox-Ingenieur Kyle Huey in Mozillas Bugtracker klargestellt hat, ist die Deaktivierung von IndexedDB keine von Mozilla unterstützte Konfiguration.

Lösung

Nichtsdestominder hat Mozilla das Problem zeitnah behoben, bereits in Firefox 36 wird dieses Problem der Vergangenheit angehören. In der Zwischenzeit können betroffene Nutzer das Problem umgehen, indem sie about:config in die Adressleiste eingeben, die Warnung bestätigen, nach dem Schalter dom.indexedDB.enabled suchen und diesen per Doppelklick wieder auf seine Standard-Einstellung true setzen (via Ghacks / camp-firefox.de).

Tomate – Pomodoro unter Linux

Permalink Liomans Blog

Ich habe die Pomodoro-Technik für mich entdeckt. Diese wird immer mal wieder als die neuste Idee der Zeiteinteilung angepriesen, aber an sich ist der Trick uralt. Aber zuerst zur Technik an sich. Man stellt sich einen Kurzzeitwecker auf 25 Minuten (oder eine andere sinnvolle nicht zu lange Zeiteinheit). In dieser Zeit tut man nichts anderes, als die gestellte Aufgabe(n) zu erledigen. Man surft nicht auf YouTube herum, checkt nicht schnell mal die Mails oder schaut auf das Handy. Klingelt der Wecker, stellt man ihn gleich wieder. Dieses mal auf 5 Minuten und verhält sich genau umgekehrt. Sprich man macht echt Pause und vermeidet alle Arbeit. Holt sich einen Kaffee, bewegt sich ein bisschen, lässt frische Luft herein usw. Nach vier Pomodoros macht man eine längere Pause von 20-30 Minuten und lässt auch hier alle Arbeit ruhen.

Logo des Programms Tomate

Logo des Programms Tomate

Das funktioniert wirklich gut und die Produktivität steigt sehr schnell, wenn man sich mal daran gewöhnt hat. Die klassische Low-Tech-Variante mit Zettel Papier und Kurzzeitwecker ist wahrscheinlich die intensivste und Beste. Leider ist sie nicht ganz bürokompatibel. Wenn ständig irgendwo ein Wecker klingeln würde, wäre es um die konzentrierte Arbeitsatmosphäre schnell schlecht bestellt. Für solche Gelegenheiten bieten sich diverse Mobilapplikationen an oder, wenn man eh am Rechner sitzt, ein kleines Programm. Neben diversen Browsererweiterungen gibt es eben auch native Anwendungen. Für Linux/ Ubuntu hat sich Tomate als das derzeit Beste erwiesen (Oder das was mir am meisten zusagt). Tomate ist mit Python und Gtk3 entwickelt und beherrscht die wichtigsten Funktionen. Es ist nicht in den Paketquellen enthalten, kann aber per PPA hinzugefügt und installiert werden.  Dazu im Terminal folgende Zeilen eingeben.

sudo add-apt-repository ppa:stvs/tomate
sudo apt-get update && sudo apt-get install -y tomate

In den Einstellungen kann man nun die Zeiten ändern, oder die kleine Tomate im Indicator dazu bringen den Fortschritt anzuzeigen. Außerdem ist es möglich die Art der Benachrichtigung zu ändern, leider ist eine Änderung des Tones (noch) nicht möglich. Was leider auch noch etwas unschön ist. Klickt man auf das Kreuz oben rechts schließt man das Programm. Möchte man es nur in der Benachrichtigungsleiste haben, muss man auf das Icon klicken und kann dann mit einem Klick auf “Hide” das Fenster verstecken.

Zum Blog: www.lioman.de

Notizenmanagement mit ownCloud

Permalink (Mer)Curius

Im Artikel “Notizen-Dilemma” hatte ich kurz vor Weihnachten nach euren Lösungen für synchronisierte Notizen und Aufgaben gefragt. Die Kommentare haben meinen recht ernüchterten Gesamteindruck weitestgehend widergespiegelt. Die Lösungen reichten von Windows-Software in Wine bis zu recht komplexen Wiki-Lösungen. Wenn man sich einmal eingearbeitet hat, mag das funktionieren. “Einfach” und “selbsterklärend” ist das sicherlich nicht.

Zur Zeit nutze ich deshalb als primäre Lösung immer noch die Evernote-App auf dem Smartphone und im den Webdienst im Browser auf Notebook und PC. Sollte sich an der Linux-Client-Situation jedoch nichts ändern ist diese Lösung bei erstbester Gelegenheit zum Abschuss freigegeben.

Große Hoffnungen kann man wohl auf die Entwicklung rund um ownCloud setzen, die ja in der Vergangenheit bereits einige Bewegung in diesen Bereich gebracht hat. Im Januar wurde auf apps.owncloud.org ein Qt-basiertes Notizenprogramm freigegeben. Mittels QOwnNotes lassen sich Notizen auf den ownCloud Server synchronisieren, die dann auch mobil und via Web-Interface bearbeitet werden können.

Beispielbild von der Entwicklerseite

Beispielbild von der Entwicklerseite

Das zur Verfügung stehende Debian-Paket ist seit einigen Tagen vernünftig gegen die bestehenden Bibliotheken gelinkt und keine Zusammenstellung mehr aus Programm und Bibliotheken. Damit sind erste Tests möglich.

Zweifelsohne steckt das ganze Programm noch in den Kinderschuhen und man kann ihm noch nicht alle wichtigen Notizen anvertrauen. Es bringt jedoch ein wenig Hoffnung in diesen für Linux-Nutzer ziemlich unbefriedigenden Bereich. Hoffentlich bleibt der Entwickler am Ball!


Artikelbildquelle: City post-its: Wall von Sarah Joy unter CC 2.0 auf Flickr

Polipo: Permission denied

Permalink Invictus deus ex machina

Mein vor einiger Zeit aufgesetzter Proxyserver startete nicht mehr. Stattdessen bekam ich von Polipo nur noch die Meldung:

Starting polipo: Couldn't open log file /var/log/polipo: Permission denied

Allerdings ließ sich das ganze relativ problemlos aus der Welt schaffen:

touch /var/log/polipo
chmod 640 /var/log/polipo
chown proxy:proxy /var/log/polipo

Danach konnte der Dienst mittels:

service polipo restart

wieder gestartet werden.

16. Januar 2015

Bundler scheitert an Nokogiri auf Arch Linux ARM

Permalink onli blogging

Auf meinem pogo läuft (jetzt wieder) Arch, und es soll mein music-streamer drauf laufen. Für die Lyricanzeige benutzt der nokogiri, und das mit bundler zu installieren scheitert.

Nokogiri ist ein komisches ruby-gem. Es versucht sich selbst komplett zu kompilieren, was unter Arch-ARM scheitert. Die kritische Abhängigkeit libxml2 ist aber auch in den Quellen. Unter Ubuntu würde man libxml2-dev installieren und danach bundle config nokogiri.build --use-system-libraries ausführen, woraufhin ein bundle install durchlaufen würde.

Nicht so unter Arch. Dort lautet der nötige Befehl, um nokogiri mit gem zu installieren, so:

gem install nokogiri --  --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

Also einfach den bundle config-Befehl von oben anpassen, zu

bundle config nokogiri.build --use-system-libraries --with-xml2-include=/usr/include/libxml2 --with-xml2-lib=/usr/lib/

?

Das funktioniert nicht. In keiner Konfiguration, Kombination, ob mit oder ohne --use-system-libraries, keiner Quelle aus dem Internet folgend lässt bundler sich dazu bewegen, nokogiri mit dem Äquivalent das Gem-Befehls zu installieren. Entweder versucht er, alles selbst zu kompilieren, oder er findet die libxml2 nicht.

Ich durfte mich jetzt also entscheiden, nokogiri oder bundler rauszuschmeißen. Auf nokogiri zu verzichten erschien mir hier als das kleinere Übel.

Ruby ist toll. Aber das Verpacken von Rubycode zur späteren Verteilung stinkt.

Skript – Bildschirmfoto automatisch benennen

Permalink DevDiary

Mit Skripten lässt sich nicht nur Zeit sparen sondern sie erleichtern einem auch dass Leben, ein Thema bei dem so manch Autor Zeit aufwendet sind Bildschirmfotos.
So wird beispielsweise nicht nur der Artikel zu einem Spiel geschrieben sondern auch während des Spielens eine menge Bildschirmfotos gemacht um ein paar in dem besagten Artikel zu verwenden.
In diesem Artikel möchte ich zeigen wie man mit einem einfachen Skript diese Arbeit per Tastendruck zu erledigen.
Dabei werden Tools benutzt die bei vielen Distributionen bereits vorinstalliert sind und die mit wenig Aufwand weitere Anpassungen zulassen.

Was brauche ich?

Für die Bildschirmaufnahme wird die weit verbreitete Software gnome-screenshot und für die Tastenkonfiguration dass Systemeinstellungswerkzeug, ebenfalls von dem Gnome Projekt, verwendet.

Falls dass Werkzeug zur Bildschirmfotoerstellung nicht bereits installiert ist kann dies über die
Installation von folgendem Paket getan werden.
Dafür benutzt man den jeweiligen Paketmanager, bei apt würde beispielsweise dieser Befehl genügen.

apt-get install gnome-screenshot 

Das Skript

Als erstes erstellt man eine Datei mit dem späteren Namen des Kommandos welcher auf die Dateiendung .sh enden sollte.
Die erste Zeile gibt an mit welchem Programm diese Datei später ausgeführt werden soll.
Darauf folgend kann man sich über ein Kommentar wichtige Informationen wie dass spätere Tastenkürzel aufschreiben.
Dabei fängt jede Kommentar Zeile mit einer Raute an, diese teilt dem Programm mit dass der folgende Inhalt ignoriert werden soll.

#!/bin/bash
# Tastenkombination: ALT F5

Darauf folgend definiert man zwei Variablen in denen später Informationen gespeichert oder gelesen werden.
Die erste Variable trägt den Name appname und beinhaltet den Titel der Applikation die man derzeit aufnehmen möchte.
Dabei wird sie später benutzt um den ersten Teil des Dateinamen des aufgenommenen Bildschirmfotos zu bilden und muss manuell gesetzt werden.

Die nächste Variable wurde als number benannt und deren Wert wird von dem Skript automatisch gesetzt.
Sie bildet den abschließenden Teil des Dateinamens und wird im nächsten Schritt hochgezählt.

appname="Firefox"
number="0"

In diesem Teil legt man eine sogenannte Zählschleife (for) an welche nach jedem Durchlauf den Wert der Zähl Variable (hier z) solange um einen erhöht bis dieser eine vorher festgelegte Höhe überschreitet.
Mit done signalisiert man das Ende der Schleife und nach dem Durchlauf wird an dieser Stelle zurück zum Anfang der Zählschleife gesprungen.

for ((z=0;z<=100;z++))
do
…
done

Innerhalb der Schleife wird eine sogenannte Bedinge Anweisung (im engl. if statement) ausgeführt.
Bedingte Anweisungen führen den inneren Quellcode nur dann aus wenn ihre Bedingung erfüllt ist.
In diesem Beispiel wird geprüft ob die Datei mit dem Namen schon existiert.
Wem hier der Pfad mit den beiden Dollarzeichen komisch vorkommt dem sei noch gesagt dass diese die beiden Variablen von oben widerspiegeln.
Quellcode der nach then kommt wird immer dann ausgeführt wenn die Bedingung erfüllt ist, in diesem Fall wird die Variable number um einen erhöht.

Um etwas für den Fall dass die Bedingung nicht erfüllt ist zu definieren verwendet man else.
In diesem Beispiel wird der Befehl zum aufnehmen des Screenshots ausgeführt und über break die Anweisung zum vorzeitigen unterbrechen der Zählschleife gegeben.
Ähnlich wie zuvor wird nur der eingerückte (einmal Tabulatortaste drücken) Quelltext ausgeführt.
Um die bedingte Anweisung wieder zu schließen nutzt man einfach dass Wort fi.

if [ -f "/home/username/Bilder/$appname-Screenshot$number.png" ]
	then
		((number++))
	else
		gnome-screenshot --window --remove-border –file="/home/username/Bilder/$appname-Screenshot$number.png"
		break
fi

Dass fertige Shell Skript:

#!/bin/bash
# Tastenkombination: ALT F5
appname="Firefox"
number="0"
for ((z=0;z<=100;z++))
do
	if [ -f "/home/username/Bilder/$appname-Screenshot$number.png" ]
		then
			((number++))
		else
			gnome-screenshot --window --remove-border --file="/home/username/Bilder/$appname-Screenshot$number.png"
			break
	fi
done

Bitte beachten:
In den Codebeispielen wird der Pfad /home/username/…. verwendet, diesen bitte an dass eigene Benutzerverzeichnis anpassen.

Die Tastenkombination

Damit man am ende nur eine Tastenkombination für ein Screenshot betätigt werden muss sollte man diese in den Systemeinstellungen festlegen.
Meist findet man die in den Konfigurationsmöglichkeiten der Tastatur wieder.
In dem Beispiel wird eine eigene Tastenkombination hinzugefügt und als Befehl der Pfad zu dem eben erstellten Skript festgelegt.
Nach einer Bestätigung des Dialoges kann nun jederzeit ein Bildschirmfoto mit den in der vorhin erstellten Datei gesetzten Parametern aufgenommen werden.

Das Tastenkürzel anlegen - Quelle – Bildschirmfoto von Gnome Einstellungsmanager
Das Tastenkürzel anlegen – Quelle – Bildschirmfoto von Gnome Einstellungsmanager

Fazit

Mit so einem Skript lässt sich nicht nur Stück für Stück eine menge Zeit sparen sondern es macht meiner Meinung nach auch eine menge Spaß sie zu erstellen.
Man schafft sich Skript für Skript seine eigene Bibliothek an kleinen Helfern für den Alltag.
Dieses Skript erlässt einem dass lästige aufnehmen und benennen der Bildschirmfotos während man beispielsweise ein Spiel spielt um später einen Artikel darüber zu schreiben.
Darüber hinaus hat man mithilfe diesen kleinen Projektes ein paar Grundlagen aus der Programmierung gelernt.