Anwendungen
Portal
Forum
Wiki
Ikhaya
Planet
Mehr
Anmelden

20. März 2015

Ärger mit dem Upgrade auf ownCloud 8

Permalink Intux

news-470

Letzte Woche habe ich zwei Tage vergeblich am Update von ownCloud 7 => 8 auf meinem Raspberry Pi gebastelt. Nach der Aktualisierung war nichts weiter zu sehen als eine weiße Seite.

Dank eines Artikels auf BITblokes und etwas herum experimentierens, konnte ich meine ownCloud 8.0.2 dann doch noch entsprechend einrichten.

Bevor man den Sprung auf die höhere Version 8 wagt, sollte man für ein perfektes Gelingen folgende Apps deaktivieren.

  • Music
  • Contacts
  • Calendar

Jetzt kann das Update über

Updater => Open Update Center durchgeführt werden.

Via SSH geht man nun in das App-Verzeichnis auf dem Raspberry Pi. Bei mir sieht das so aus (Befehl an die eigene Verzeichnis-Struktur anpassen):

cd /var/www/apps

Folgende Verzeichnisse sind unbedingt zu löschen.

sudo rm -r contacts
sudo rm -r calendar
sudo rm -r music
sudo rm -r search_lucene
sudo rm -r documents
sudo rm -r bookmarks

Diese werden dann in der ownCloud über den Punkt Empfohlen erneut installiert.

Erscheint unter Administration diese Fehlermeldung diese Fehlermeldung,

PHP-Zeichensatz ist nicht auf UTF-8 gesetzt. Dies kann Fehler mit Nicht-ASCII Zeichen in Dateinamen verursachen. Wir empfehlen daher den Wert von ‘default_charset’ in der php.ini auf ‘UTF-8′ zu ändern.

so ist die php.ini entsprechend anzupassen.

sudo nano /etc/php5/apache2/php.ini

Vor dem Eintrag

;default_charset = “UTF-8″

ist das Semikolon zu entfernen. Nun Ctrl + o, dann Enter und Ctrl + x ausführen, um den Editor zu verlassen.

Mit

sudo /etc/init.d/apache2 restart

Server neustarten. Dann den RasPi upgraden und rebooten.

sudo apt-get update && sudo apt-get upgrade

sudo reboot

Jetzt sollte ownCloud 8.0.2 wie gewünscht laufen!

fufix mailserver installer v0.8.2 mit OpenDKIM Unterstützung

Permalink debinux

Hallo,

die Sonnenfinsternis- oder Geburtstags-Edition.

Ich habe die OpenDKIM-Implementierung in fufix noch ein wenig testen wollen, bin nun aber zufrieden.
Die Einstellungsmöglichkeiten im fcc sind noch recht schlank.

Zusätzlich ist es nun möglich, das Größtenlimit für Nachrichten zu verändern.

Den Changelog pastiere ich direkt aus dem GitHub:

- OpenDKIM implementation
- Fixed responsive design when logged in
- Raspberry Pi fixes
- Maintenance section
  1. DNS information
  2. System information
  3. Common tasks
- Change message size limit in fcc
- Removed backup function, added hint to "Common tasks"
- Less is more: README.md

Die Hauptseite zu fufix ist angepasst!

Mein größter Dank gilt wie immer der Community! Vielen Dank für das Melden von Fehlern, das Bitten um Features und die Pull Requests im GitHub!

Stay tuned, oder: Performance Teil II

Permalink Linux – AHA

 

In dem Artikel “Neue CPUs langsamer als neue” vom 29.01.2015 stellte sich durch einen Hinweis heraus, dass neue Server (wenigstens von HP und Dell) standardmäßig mit “Handbremse” ausgeliefert werden. Mit Handbremse daher, dass sie mit dem aktivierten “Balanced Powermanagement” Profil ausgeliefert werden. Je nach Anwendung bremst diese Einstellung einen Server massiv aus. Möglicherweise ist das Problem auch, dass das System nicht erkennt wenn entsprechende Anforderungen an den Server gestellt werden und die Leistung dann erhöhen müsste. In unserem Fall kamen wir nach der Änderung des Profils von “Balanced” in “Performance” auf die erwartete Leistung.

Erkenntnis ist der erste Schritt zur Besserung …

Die neue Einstellung konnte dann einigen Servern ein wenig auf die Sprünge helfen.

… bis gestern

Ein wirklich zorniger HP DL980G7 – ein Server mit 8×8 Cores, CentOS 7, … – der für die an ihn gestellte Anforderung mehr als 4x so lange benötigte als das “alte” System mit 4×8 Cores. Einfach, hab ich gedacht. Da wird das Powermanagement im Bios noch auf “Green IT” stehen. Einstellungen geprüft, auf Performance geändert – nix. Nix? Nix! Keine Änderung. Hmmmm… ok.

Da ACPI schon für viele komische Verhaltensweisen verantwortlich war, habe ich ACPI im Kernel komplett deaktiviert. Dadurch stand HyperThreading nicht mehr zur Verfügung, jedoch lief das System nun in der erwarteten Geschwindigkeit. Das ganze war nicht wirklich zufriedenstellend.

Grüner Pinguin?

Da ohne ACPI die Leistung zur Verfügung stand, prüfte ich ob lokal auf dem System irgendeine Art throttling der CPU aktiv war – dieses würde ohne ACPI nicht funktionieren. Der mir bis dahin bekannte Daemon cpufreq(d) lief nicht und ich fand auch keine Konfiguration in dieser Richtung.

Beim durchblättern der gesamten Prozessliste fiel mir dann ein Prozess auf: tuned.

Ein bisschen suchen und siehe da “tuned is a dynamic adaptive system tuning daemon that tunes system settings dynamically depending on usage.”. Mir bis dahin unbekannt. Das Tool zur Administration lautet “tuned-adm”. Standardmäßig ist das Profil “balanced” aktiv – war da nicht schon mal was mit balanced? Egal. Ein Listing der verfügbaren Profile:

root@dl980 ~# tuned-adm list
Available profiles:
- balanced
- desktop
- latency-performance
- network-latency
- network-throughput
- powersave
- sap
- throughput-performance
- virtual-guest
- virtual-host
Current active profile: balanced

Und ändern kann man das aktive Profil so:

root@dl980 ~# tuned-adm profile latency-performance

Am Ende funktioniert das ganze mit ACPI, allen 128 Prozessoren (HT)  :D und Bumms.

19. März 2015

Firefox 37+: Mozilla deaktiviert Domain-Whitelisting zur Add-on-Installation für Nicht-HTTPS-Webseiten

Permalink Sören Hentzschel

Wer Add-ons für Firefox installieren möchte, muss dies nicht über die offizielle Mozilla-Seite tun. Beim Versuch, Add-ons aus Nicht-Mozilla-Quellen zu installieren, gibt Firefox jedoch zunächst eine zusätzliche Warnung aus. Diese kann für einzelne Domains über die Einstellungen deaktiviert werden. Ab Firefox 37 funktioniert das Whitelistung nur noch für HTTPS-Webseiten.

Für die Installation von Add-ons für Firefox ist addons.mozilla.org (AMO) normalerweise die erste Wahl. Jedoch kann es immer wieder vorkommen, dass man Add-ons auch aus einer anderen Quelle installieren möchte. Dies ist kein Problem, jedoch muss der Nutzer die Installation zunächst explizit erlauben.

Wer regelmäßig von einer bestimmten Nicht-Mozilla-Webseite Add-ons installiert, der wird diese Webseite möglicherweise auf die Ausnahmeliste in den Firefox-Einstellungen unter Sicherheit setzen, denn auf diese Weise kann die zusätzlich notwendige Bestätigung für einzelne Domains deaktiviert werden, wie es standardmäßig für AMO sowie den Firefox Marketplace der Fall ist.

Als Konsequenz eines Sicherheits-Bugfixes in Firefox 37 (geplanter Erscheinungstermin: 31. März) ist es standardmäßig nicht länger möglich,  die Meldung auf HTTP-Webseiten zu deaktivieren, ein entsprechender Ausnahmelisten-Eintrag wird ignoriert. Damit Firefox also ohne zusätzliche Warnung Add-ons von einer Webseite installieren kann, muss diese Webseite über HTTPS erreichbar sein. Die URL zur XPI-Datei selbst kann weiterhin eine HTTP-URL sein, entscheidend ist die Webseite, welche die Installation auslöst.

Firefox ESR 31.x bleibt von dieser Änderung unberührt, Nutzer der ESR-Version bekommen diese Änderung dann mit Firefox ESR 38.x. Um die Änderung rückgängig zu machen, kann über about:config der Schalter extensions.install.requireSecureOrigin auf false gesetzt werden.

Webcam mit Temperatur

Permalink raspitux

Ich habe heute mal ein wenig mit meiner Raspberry Pi Camera herumgetüftelt, als ich auf folgende tolle Anleitung von Intux gestoßen bin. Mit ein paar Modifikationen konnte ich dann auch auf meinem Raspberry Pi wie gewünscht ein Bild erzeugen und dieses mit den aktuellen Temperaturen meines DS18B20 Außentemperatursensors vereinen.

Mittels crontab werden alle zehn Minuten Bilder erzeugt und anschließend mittels FTP Verbindung auf mein Webspace geladen. Hier seht ihr das Ergebnis :-)
webcam
Blick aus meinem Zimmer auf das Landratsamt Mosbach. Im Hintergrund der Henschelberg.

18. März 2015

Tolles Foto rein und zack sieht es gut aus…

Permalink Kaffeeringe

By: Harry Vale - CC BY 2.0

Hast Du Dir mal angeschaut, was es für eine breite Auswahl fertiger WordPress-Themes gibt? Für lau, kleines Geld oder richtig dicken Dollar gibt es eine unendliche Vielfalt. Eines jedoch scheine alle gemeinsam zu haben: Für das durchschnittlichen Blog sind sie untauglich.

Die Vorschaubilder selbst von Themes, die explizit für Blogs gedacht sind, bestehen zumeist zu 80% aus tollen Stockfotos. Tolle Fotos haben die meisten Hobby-Bloggerinnen und Hobby-Blogger nicht zur Verfügung. Ich versuch schon immer, mir bei den freien Bildern von Flickr so einigermaßen ordentliche Bilder zu suchen. Aber so tolle Bilder, wie die Theme-Designer benutzen, finde ich da nie.

Ein gutes Blog-Theme muss vor allem ohne Bilder gut aussehen. Vielleicht kann es noch ein schönes, großes Kopfbild benutzen. Ein einziges, markantes, schönes Bild lässt sich immer finden.

Ein gutes Blog-Theme muss eine hervorragende Typografie haben, denn normale Blogs bestehen meistens nur aus Text. Der muss gut zugänglich sein.

Aber WordPress macht diesen Fehler sogar selbst. „Twenty Fourteen“ ist auch so ein Theme, das nur gut mit Fotos aussieht. „Twenty Fifteen“ sieht sowohl mit als auch ohne Bilder gut aus. Leider benutzen das auch schon wieder ganz schön viele Blogs.

Von den wenigen Themes, die meiner Meinung nach auch ohne viele Bilder gut aussehen, gefällt mir zum Beispiel MNMLST und auch Kylee More wird ohne Bilder gut aussehen — wobei mich da schon wieder diese „Filed under“-Geschichte auf der Startseite nervt.

Ich hab hier ja mein selbstgestricktes Layout und das finde ich auch ganz okay. Wenn mir aber jemand ein schönes, schlichtes Layout empfehlen könnte, würde ich mich sehr freuen.

17. März 2015

GitHub integriert PDF-Betrachter von Mozilla

Permalink Sören Hentzschel

PDF-Dokumente können ab sofort auf GitHub auch direkt auf der Webseite betrachtet werden. Zum Einsatz kommt dabei der PDF-Betrachter pdf.js von Mozilla.

Der populäre Hoster für Git-Repositories GitHub kann nun auch direkt PDF-Dokumente im Browser darstellen (Beispiel-Dokument). Hierfür kommt pdf.js zum Einsatz, der von Mozilla entwickelte PDF-Betrachter, welcher vollständig auf Webtechnologien basiert und auch in Firefox integriert ist.

‘Open Source als Prinzip’ beim Richtungsweiser Bildung

Permalink Sebastian Seitz - Open Source in Schule

Bereits Ende Januar fand in Berlin der Richtungsweiser Bildung statt. Die kleine aber feine Veranstaltung trug den Untertitel “Symposium für zukunftsorientierte Lehr- und Lernmittel” und versammelte ca. 40 ExperteInnen und Interessierte im dem Eventspace The WYE.  Die Vorträge sollten kurz sein und Impulse liefern, damit man sich in den Pausen und Diskussionsrunden dazu austauschen konnte.

Ich wurde in dem Kontext gebeten eine grobe Einführung in das Thema Open Educational Resources zu geben. Das habe ich dann auch ganz wörtlich genommen und etwas über das Prinzip Open Source erzählt, was zum Glück seit einigen Jahren in immer mehr Bereiche unseres Lebens vordringt (z.B. Open Data, Open Content, Open Innovation, …). Das was die Community rund um Freie und Open-Source-Software schon lange wusste, wird daher so manch anderem jetzt klar: Offenheit ist eine gute Sache. Sie fördert Innovation, Freiheit und Austausch.

SpamAssassins Erkennungsrate mit SA-Learn verbessern

Permalink My-IT-Brain

Unter “Training für SpamAssassin” wurde bereits erklärt, wie man mit dem Hilfsprogramm sa-learn das Erkennungsverhalten von SpamAssassin trainieren kann.

An dieser Stelle möchte ich noch mal ein konkretes Beispiel dazu dokumentieren.

Auf meinem Server verwende ich die Maildir-Verzeichnisstruktur, zum Speichern meiner E-Mails.

In meinem Fall befinden sich die bereits gelesenen E-Mails im Posteingang im Pfad /var/mail/vmail/example.org/username/mail/cur. Die in diesem Ordner liegenden E-Mails sind kein Spam. Dies kann SpamAssassin mit dem folgenden Befehl mitgeteilt werden:

# sa-learn --ham /var/mail/vmail/example.org/username/mail/cur/ --progress
100% [=========================================================================================================================]  10.43 msgs/sec 00m01s DONE
Learned tokens from 13 message(s) (18 message(s) examined)

Spam landet in meinem Fall im Pfad /var/mail/vmail/example.org/username/mail/Junk/cur. Diese Mails können mit dem folgenden Kommando verarbeitet werden.

sa-learn --spam /var/mail/vmail/example.org/username/mail/Junk/cur

Weitere Informationen findet man auf der offiziellen Homepage von SpamAssassin.

16. März 2015

MediaWiki: alle Seiten einer Kategorie plus Unterkategorien als PDF exportieren

Permalink Produnis

Ich habe ein kleines php-Script geschrieben, mit welchem man alle Seiten einer Kategorie inklusive der Seiten aller Sub-Kategorien von einer beliebigen MediaWiki-Instanz als PDF exportieren kann.
Benötigt werden PHP>5.5, wkhtmltopdf und pdftk (müssen evtl. erst installiert werden).

https://github.com/produnis/myscripts/blob/master/PHP/mwc2pdf.php

Ihr müsst am Anfang des Scripts die drei Variablen euren Bedürfnissen entsprechend anpassen, und dann das Script aufrufen per:

$ php /Pfad/zu/mwc2pdf.php

Das Script nutzt nun die “api.php” der MediaWiki-Instanz und erstellt damit einen “Pagetree”. Von diesem Pagetree wird jede einzelne Seite mittels wkhtmltopdf in eine PDF-Datei exportiert.
Anschließend werden alle erzeugten PDF-Dateien mittels pdftk zu einer einzelnen Datei namens “MWC2PDF.pdf” zusammengeführt.

$ nano mwc2pdf.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
< ?php
## Welcome to mwc2pdf
## ----------------------------------------------
## Media Wiki Category To PDF (MWC2PDF)
## is a php script that exports a Category from MediaWiki
## into PDF, including all Pages of that category as well as
## all pages from subcategories.
## mwc2pdf uses MediaWiki's "api.php" to collect
## all data and create a "pagetree".
## mwc2pdf prints out every item of that pagetree
## into a single pdf-file using "wkhtmltopdf".
## It than combines all single pdf-files into
## one single pdf-file called "MWC2PDF.pdf" using "pdftk".
##
## -----------------------------------------------
## Requires:
## - PHP >= 5.4
## - wkhtmltopdf
## - pdftk
## -------------------------
## Written by Joe Slam 2015
## Licence: GPL
## -------------------------
##
## Usage:
## 1) Change the three lines to fit your situation
## 2) open terminal
## 3) $ php /PATH/TO/mwc2pdf.php #
##
## All files are generated in the directory you call mwc2pdf from
##
####################################################################
# + + + + + + + + + + + + + + + + + + + + + + +
## Change this vars to fit your system
$mywiki = "http://192.168.0.2/produniswiki/"; // URL to index.php
$kategorie = "Kategorie:Hauptkategorie"; // Which Category to grab?
$kategorie_word = "Kategorie:"; // What is "Category:" in your wiki's language?
# + + + + + + + + + + + + + + + + + + + + + + +
# ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
## Dont change after here...
# ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
##----------------------------------------------
## API -Commands
#------------------
# List all Subcategories
$cmd_subcat = "api.php?action=query&format=xml&list=categorymembers&cmlimit=5000&cmtitle=";
# List all Pages of Category
$cmd_catinfo = "api.php?action=query&format=xml&prop=categoryinfo&titles=";
# Get URL from pageid
$cmd_geturlfromID = "api.php?action=query&format=xml&inprop=url&prop=info&pageids=";
# Functions
#-------------------
#-----------------------------------------------------------------------
function getCategoryID($xml){
# this function returns the pageid of a category
$arr=$xml->query[0]->pages[0]->page->attributes();
#echo $arr["pageid"] . ": ";
#echo $arr["title"] . "\n";
return($arr["pageid"]);
}
#-----------------------------------------------------------------------
#-----------------------------------------------------------------------
function startsWith($haystack, $needle)
{ # this function checks if the string
# "$hayshack" starts with the letters "$neddle"
$length = strlen($needle);
return (substr($haystack, 0, $length) === $needle);
}
#-----------------------------------------------------------------------
function wikiHTMLprint($command){
# This function takes a pageid and
# returns the "printable"-URL of that
# page/category
$xml = simplexml_load_file($command);
$arr = $xml->query[0]->pages[0]->page->attributes();
$output= str_replace("&action=edit", "&printable=yes", $arr['editurl']);
return($output);
}
#---- end of functions --------------
#### M A I N S C R I P T
#-------------------------
echo "\n\nCollecting data for " . $kategorie ."\n\n";
# Get pageid of start-category
$xml = simplexml_load_file($mywiki . $cmd_catinfo . $kategorie);
$current_parent = getCategoryID($xml);
# Setting up all important vars() and arrays()
#---------------------------------------------
$x = 0;
$y = 0;
$done = FALSE;
$the_pageids = NULL;
$the_names = NULL;
$loop_list = NULL;
$next_level = 0;
$current_level = 0;
$the_pageids[0] = $current_parent;
$the_names[0] = $kategorie;
$the_prefix[0] = "p0_";
$the_parentid[0] = 0;
$the_level[0] = 0;
$is_category[0] = "C";
$loop_list[0] = $kategorie;
$loop_id[0] = $current_parent;
$loop_prefix[0] = "p0_";
//---------------------------------
$x++;
# MAIN LOOP
#----------------------
while ($done == FALSE){
// get pageid of current category
$current_parent = $loop_id[$y];
# getting members of this category
//-------------------------------------------------------------
$xml = simplexml_load_file($mywiki . $cmd_subcat . $loop_list[$y]);
foreach($xml->query[0]->categorymembers[0]->cm as $child){
$arr = $child->attributes();
#echo $arr["pageid"] . ": ";
#echo $arr["title"] . "\n";
// is this a Page?
//---------------------------------------------------
if(startsWith($arr["title"], $kategorie_word) == FALSE){
if(
(startsWith($arr["title"], "Datei:") == FALSE) AND
(startsWith($arr["title"], "File:") == FALSE) AND
(startsWith($arr["title"], "Media:") == FALSE) AND
(startsWith($arr["title"], "Bild:") == FALSE)
){
// is page already in list?
if(in_array("" . $arr["title"] . "", $the_names)){
#echo "page " . $arr["title"] . " already in list \n";
}else{
#echo "new Page";
$the_pageids[$x] = $arr["pageid"];
$the_names[$x] = $arr["title"];
$the_parentid[$x] = $current_parent;
$the_level[$x] = $current_level;
$the_prefix[$x] = $loop_prefix[$y] . sprintf('%05d',$x);
$is_category[$x] = "P";
}
}else{ $x--; }
//----------------------------------------------------
// is this a Category?
//----------------------------------------------------
}elseif(startsWith($arr["title"], $kategorie_word) == TRUE){
// is Category already in list?
if(in_array("" . $arr["title"] . "", $the_names)){
#echo "cat " . $arr["title"] . " already in list \n";
}else{
#echo "new Category";
$loop_list[] = $arr["title"];
$loop_id[] = $arr["pageid"];
$loop_prefix[] = $loop_prefix[$y] . sprintf('%05d',$x) . "_";
$the_pageids[$x] = $arr["pageid"];
$the_names[$x] = $arr["title"];
$the_prefix[$x] = $loop_prefix[$y] . sprintf('%05d',$x) . "_";
$the_parentid[$x] = $current_parent;
$the_level[$x] = $current_level+1;
$is_category[$x] = "C";
}
}
//----------------------------------------------------
$x++;
} // END foreach
$y++;
$current_level++;
if($y == sizeof($loop_list)+2){
$done=TRUE;
}
//--------------------------------------------------------------
} // End WHILE false
// END Main Loop
#############################################################################
# # # # S O R T D A T A # # # # # # #
#--------------------------------------------
array_multisort($the_prefix, $the_pageids, $the_names, $the_parentid, $the_level,$is_category);
#--------------------------------------------
# # # # # # # # # # # # # # # # # # # # #
#--- output final array ---
echo "\nThis is what I got:\n";
$i = count($the_prefix);
echo $i;
for ($x =0;$x < $i; $x++){
echo $the_prefix[$x] . "|" . $is_category[$x] . "| ". $the_pageids[$x] . ": " . $the_names[$x] . " | Lev=" . $the_level[$x] . " (P=" . $the_parentid[$x] . ")\n";
}
#--------------------------------------------
## print PDF of Cats and Pages
## depends: wkhtmltopdf
#---------------------------------------------
echo "\nPrinting single Pages to PDF (wkhtmltopdf)\n";
$i = count($the_prefix);
echo "\n";
for ($x =0;$x < $i; $x++){
$command = $mywiki . "" . $cmd_geturlfromID . "" . $the_pageids[$x];
$this_pdf = wikiHTMLprint($command);
echo "Printing pageid " . $the_pageids[$x] . " | (" . $x . "/" . $i . ")\n";
$command = "wkhtmltopdf '" . $this_pdf . "' " . sprintf('%06d',$x) . "-" . $the_prefix[$x] . "-" . $is_category[$x] . "_" . $the_pageids[$x] . ".mwc2pdf.pdf";
$out = shell_exec($command);
echo "\n";
}
#---------------------------------------------
## cats the PDFs into a single one
## depends: pdftk
#---------------------------------------------
# $dummy = shell_exec("wkhtmltopdf http://google.com google.pdf");
echo "\nGenerating single PDF-file (pdftk)\n";
$command = "pdftk *.mwc2pdf.pdf cat output MWC2PDF.pdf";
$out = shell_exec($command);
## -------------------------------------------------------
echo "\nDone.\n";
?>
share this

15. März 2015

Wochenrückblick 11/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 Membership Board sucht neue Mitstreiter – immer noch

Bereits Ende Februar wurde zur Bewerbung im Ubuntu Membership Board aufgerufen. Leider fanden sich bisher noch zu wenige Bewerber, sodass die Bewerbungsfrist bis zum 30. März 2015 verlängert wurde.

Quelle: Ubuntu Fridge

Ubuntu-15.04-Hintergrundbild vorgestellt

Mit jeder neuen Version von Ubuntu wird auch ein neues Hintergrundbild eingeführt, welches sich von Version zu Version aber nur marginal ändert. Das neue Bild für Ubuntu 15.04 „Vivid Vervet” ist dunkler als in 14.04 und 14.10, zeigt aber immer noch den neu eingeführten Origami-Stil.

Quelle: OMG!Ubuntu!

Neues rund um Linux

Google Code schließt die Pforten

Google Code war eine beliebte Plattform für Entwickler von Open-Source-Software. In den letzten Jahren setzten viele Entwickler aber vermehrt auf andere Projekthoster wie beispielsweise GitHub. Selbst Google lagert einen großen Teil des eigenen Codes nicht mehr auf Google Code. Daher wird Anfang 2016 der Betrieb der Plattform komplett eingestellt. Die Plattform Google Developers bleibt weiterhin erhalten.

Quellen: Pro-Linux, heise open, Golem, Linux-Magazin

Preis für Abschlussarbeiten im Umfeld von Open-Source-Software

Die Bremer Firma Univention lobt auch dieses Jahr wieder einen Absolventenpreis für herausragende Abschlussarbeiten mit einem Thema im Umfeld von Open-Source-Software aus. Noch bis zum 22. März 2015 können sich Absolventen mit Abschlussarbeiten der Jahre 2013, 2014 und 2015 bewerben. Die ersten drei Plätze bekommen ein Preisgeld von insgesamt 3500 Euro. Die Verleihung findet auf der re:publica Anfang Mai 2015 in Berlin statt.

Quellen: Pro-Linux, heise open, Linux-Magazin

Kernel-Entwickler sollen netter zueinander sein

Die Linux-Kernel-Entwickler haben sich letzte Woche einen „Code of Conflict“ verpasst, der dabei helfen soll, Konflikte bei Code Reviews friedlicher zu lösen. Falls sich jemand bei einem Review persönlich angegriffen fühlt, sollen sogenannten Mediatoren zwischen den Beteiligten vermitteln.

Quellen: Pro-Linux, heise open, Golem

GitHub macht Lizenzwahl leichter

Der Projekthoster GitHub beherbergt zahlreiche Projekte, von denen viele die MIT-Lizenz oder die GPL nutzen. Nach wie vor gibt es aber sehr viele Projekte (über 80 Prozent), die gar keine freie Lizenz mit angeben. GitHub vereinfacht daher die eigene Lizenzauswahl, sodass Projekte diese leichter angeben können. Daneben wurde die GitHub-API erweitert, sodass von extern die Lizenz der Projekte auch leichter abgefragt werden kann.

Quellen: Linux-Magazin, Golem

Spielen unter Linux

Cities: Skyline für Linux

Cities: Skyline ist eine Sim-City-ähnliche Stadtbausimulation, die für Linux, MacOS X und Windows erschienen ist. Das Spiel wird über Steam vertrieben, sodass ein Konto dort für die Aktivierung notwendig ist.

Quelle: Pro-Linux, Games4Linux

Age of Wonders 3-Erweiterung: Eternal Lords angekündigt

Mit Eternal Lords kündigt Entwickler Triumph Studios eine zweite große Erweiterung an, die Mitte April erscheinen soll. Mit der Erweiterung soll es dann auch erstmals eine Version des Grundspiels für Linux, welche bereits in einer offenen Betaphase getestet wird.

Quellen: Golem, Games4Linux

Hardware und Mobiles

UbuTab – Das Ubuntu Tablet erhältlich

Anfang Dezember wurde auf Indiegogo eine Crowdfunding-Kampagne für ein Ubuntu-Tablet gestartet. Obwohl die Kampage ihr Ziel nicht erreichte, wird das UbuTab nun zu einem Preis zwischen 329 und 659 US-Dollar zum Kauf angeboten.

Quelle: Marcos Costales' Blog

Ubuntu auf dem MWC

Anfang März fand der Mobile World Congress 2015 in Barcelona statt, bei dem auch Canonical mit seinen Ubuntu Phones und Tablets vertreten war. Ein kurzes Video zeigt ein paar Eindrücke der Messe.

Quelle: OMG!Ubuntu!

Synology DSM -&gt; ownCloud 7.0.4 Upgrade auf OC 8.0.2

Permalink Linuxvoodoo – Thorstens Technikkruscht

Nach der OC Installation 7.0.2 und dem nachfolgenden minor Upgrade auf 7.0.4 ist zwischenzeitlich seit etlichen Wochen ownCloud 8 released und in der Version 8.0.2 verfügbar.

Auf meiner Synology arbeitet zwischenzeitlich DSM in der aktuellsten Version DSM 5.1-5022 Update 3 und ich habe mich heute dazu entschieden den Major Upgrade auf 8.0.2 an zu gehen. Ich gehöre damit sicher nicht zu den “early adopter” aber ich nutze meine OC auch ausgiebig und “produktiv”. In den Kommentaren zur OC Installation 7.0.2 auf Synology hat “Malte” eine OC8 Neuinstallation nach der selben Vorgehensweise wie bei 7.0.2 durchgeführt und war erfolgreich. Vielen Dank an dieser Stelle @Malte für die Info! Neuinstallationen rocken also auch so auf der Synology.

Für den Upgrade von 7.0.4 auf 8.0.2 empfehle ich dringend mal wieder ein Backup der OC Installation zu erstellen. Ich übernehme keine Gewähr für korrupte Installationen oder verlorene Daten. Bei mir hat der Upgrade nach der beschriebenen Vorgehensweise funktioniert!

Ich empfehle darüber hinaus diesen Thread hier im OC Forum aufmerksam durch zu lesen. Hier sind u.a. auch Voraussetzungen oder Probleme für den OC8 Upgrade festgehalten gerade im Hinblick auf viele 3th Party Apps.

Deaktivierung 3th Party Apps

In mehreren Thread und auch dem OC8 Upgrade Manual wird empfohlen Drittanbieter Apps zu deaktivieren. Achtung: Kalender und Kontakte gehört u.a. zu den Drittanbieter Apps!

Ich habe bei mir folgende Apps deaktiviert:

  • Calender
  • Contacts
  • Pictures
  • Shared Files

Ob das notwendig war habe ich nicht getestet, aber bei diesen Apps bin ich über Probleme in Foren gestolpert.

Grundsätzlich ist der ganze Upgradeleitfaden auf diesen Seiten von owncloud.org zu finden. Ich habe die meisten Aktionen verfolgt, allerdings leutet es mir nicht ein warum ich einen zweiten Ordner “owncloud2″ erstellen und anschließend alles in owncloud rüberkopieren soll etc. Hier weiche ich leicht vom Upgradeleitfaden ab.

Als Vorbereitung habe ich anschließend noch meinen Desktopclient beendet damit er auch mit evtl. Sync checks aufhört. für den Upgrade wird dann die OC in den Maintenance Modus versetzt:

ssh root@<synologyIP>
cd /volume1/web/owncloud/config
vi /config.php

Den Eintrag ‘maintenance’ => false setzen wir auf true

Auswahl_005Speichern und raus.

Ich bename mein bisheriges ownCloud-Verzeichnis komplett um zu “owncloud_<Version>” um auf die Dateien zugreifen zu können. Was u.a. natürlich auch eine Backup gleich kommt.

mv /volume1/web/owncloud /volume1/web/owncloud_7.0.4

Ich lade den aktuellsten Installer der OC8.0.2 herunter. Ich lade diesen mit Absicht unter das Verzeichnis “web” da er beim entpacken ein Verzeichnis “owncloud” anlegt. Den aktuellsten Downloadlink könnt ihr euch immer bei owncloud.org besorgen. Hier eben mit 8.0.2:

cd /volume1/web
wget https://download.owncloud.org/community/owncloud-8.0.2.tar.bz2

Anschließend stoppen wir den httpd Dienst unserer Synology. Damit ich temporär auch kein Zugriff auf euer DSM möglich:

httpd -k stop

Da der httpd Befehl in der PATH Variablen gefunden wird sollte dieser direkt funktionieren. Ansonsten hilft “/usr/bin/httpd -k stop“.

Anschließend entpacke ich das .tar.bz2 Paket und passe die Berechtigungen an:

cd /volume1/web
tar xjvf owncloud-8.0.2.tar.bz2
chmod 775 owncloud
chown -R root:http owncloud

Es wird ein Ordner “owncloud” entpackt welcher die OC8.0.2 enthält.

Anschließend kopiere ich meine existierende config.php und das alte data/ Verzeichnis der 7.0.4 Installation in das neue OC Verzeichnis. Nur zur Vorsicht mit vollständigen Pfaden:

cp /volume1/web/owncloud_7.0.4/config/config.php /volume1/web/owncloud/config/                  
cp -a /volume1/web/owncloud_7.0.4/data/ /volume1/web/owncloud/data

Der zweite Kopierbefehl kann logischerweise abhängig von der Datenmenge etwas dauern. Bei mir sind ca. 32 GB enthalten, das braucht etwas zum kopieren ;-)

Ich habe anschließend bemerkt das manche der Dateien in meinem data/ Verzeichnis noch keine Schreibberechtigungen für die Gruppe http beinhalteten. Das kann aber auch ein Problem des vorherigen Upgrades sein. Ich hatte hier ab und an “http 403″ Fehler beim synchronisieren in den letzten Wochen.

Um die Berechtigungen gerade zu ziehen lasse ich folgende “find” Anweisungen laufen, dies muss vermutlich nicht zwingend durchgeführt werden aufgrund des OC8 upgrades sondern ist eine Problemlösung für meinen Sync Prozess:

find /volume1/web/owncloud/data -type d -exec chmod 770 {} \;
find /volume1/web/owncloud/data -type f -exec chmod 660 {} \;

Wir nehmen in der config.php den maintenance Modus wieder raus, machen die config.php für den httpd schreibbar und starten unseren Apache Service auf der Synology:

vi /volume1/web/owncloud/config/config.php

Auswahl_006

chmod 660 /volume1/web/owncloud/config/config.php
httpd -k start

Anschließend Browser öffnen und auf die ownCloud Seite surfen:

https://<synologyname>/owncloud

Auswahl_001Hier schreibt der Upgradeleitfaden das Enterprise nutzer bei großen Installationen auch die Möglichkeit haben die Aktualisierung über ein Skript laufen zu lassen. Ich habe keine Enterprise Lizenz. 32GB sind zwar nicht klein, aber ich probiere es einfach über den Webaktualisierer…

Auswahl_002Dauer: keine 2 Minuten später kann ich mich zu OC8.0.2 einloggen.

Auswahl_004Das Menü ist aufgrund der deaktivierten Apps recht aufgeräumt:

Auswahl_003Ich bin anschließend in die Appverwaltung und habe mir wieder Apps hinzugefügt. U.a. ist WebDAV eine der Apps welche standardmäßig erstmal deaktiviert sind. Nach etwas durchsuchen habe ich folgende Apps für meine Benutzung wieder hinzugefügt:

  • WebDAV user backend
  • Share Files
  • Contacts 8.0
  • Calender 8.0
  • Pictures
  • Document 8.0

Zugriff auf Kalender- und Kontaktdaten ging anschließend auf Anhieb.

Bei der Aktivierung von z.b. Pictures kam es zu einem Fehler. Ich musste mich einmal ausloggen und bei einem späteren Versuch hat es anschließend funktioniert. Problemlösung: vermutlich ausloggen und einloggen ;-)

Problemlösung PDF

PDF Dateien können nicht dargestellt oder heruntergeladen werden

Bei .pdf Dateien gibt es direkt nach der Installation/Upgrade der ownCloud beim öffnen oder herunterladen folgende Fehlermeldung:

dsm_update_pdfEine Lösung dazu fand ich hier im ownCloud Forum. Wobei das nicht wirklich intuitiv ist. In die folgende Konfigurationsdatei unseres httpd komme eine Zeile hinzu. Ich erkläre die Schritt. Auf der Synology per SSH:

$> vi /etc/httpd/conf/extra/mod_xsendfile.conf-user

Hinzufügen der Zeile “XSendFilePath /volume1/web/owncloud/data″ mit dem Editor vi.

Meine Datei mod_xsendfile.conf-user sieht nach dem editieren folgendermaßen aus (Danke Malte aus den Kommentaren für das konkretere XSendFilePath):

LoadModule xsendfile_module modules/mod_xsendfile.so
    XSendFile on
    XSendFilePath /var/services/web /var/services/homes
    SetEnv MOD_X_SENDFILE_ENABLED yes
    XSendFilePath /volume1/web/owncloud/data

Anschließend muss der http Dienst noch durchgestartet werden:

$> httpd -k restart

Nach der Aktion kann man auch in OC8.0.2 PDF Dateien sowohl öffnen als auch herunterladen.

Damit PDFs direkt im Browser lesbar sind muss man die Aktion allerdings bei jedem Update der Synology DSM wiederholen.

Raspberry Pi und Pi 2 im Leistungsvergleich

Permalink Finns Blog

In meinem letzten Beitrag habe ich mit großer Freude über meinem neuen Raspberry Pi 2 berichtet, dessen höhere Leistung sich schon beim Einrichten bemerkbar gemacht hat. Exakte Benchmarks überlasse ich lieber den entsprechenden Experten, aber CPU- und IO-Leistung zweier Systeme lassen sich “Pi mal Daumen” ziemlich einfach vergleichen.

Die einzige Gemeinsamkeit der beiden Pis ist das Betriebssystem, Raspbian. Die übrige Hardware unterscheidet sich wie folgt:

Raspberry Pi B:
  • Single Core ARMv6 CPU 700 MHz
  • 512 MB RAM
  • 8 GB Kingston SD10V Class 10 SD-Karte
Raspberry Pi 2 B:
  • Quad Core ARMv7 CPU 900 MHz
  • 1024 MB RAM
  • 32 GB Yellow Frog Class 10 microSDHC-Karte

Der Hostname des ersten Modells ist mail, da er als Mail Relay dient. Beim zweiten Modell war ich noch weniger kreativ, dieser heißt schlicht rpi2.

Test 1: Netzwerkdurchsatz mit iperf

iperf wird auf einem entfernten System als Server gestartet und auf dem zu testenden System als Client. Man hat die Möglichkeit, sowohl TCP als auch UDP Übertragungen zu messen.

Raspberry Pi B:

iperf_rpi1

Raspberry Pi 2 B:

iperf_rpi2

Bei TCP Übertragungen schafft das erste Modell ca. 42 MBit/s, das zweite Modell hingegen ca. 91 MBit/s, was einen deutlichen Unterschied darstellt.

UDP Übertragungen hingegen werden bei beiden Systemen nur mit etwa 1 MBit/s ausgeführt, was mich ein wenig verwundert. Das liegt wohl daran, dass iperf diese Geschwindigkeit bei UDP Tests als Standard ansetzt, da UDP ohnehin nicht für schnelle Datenübertragungen, sondern für Übertragungen mit geringen Latenzen gedacht ist. Mit dem Schalter 

-b 100M
  kann die gewünschte UDP Geschwindigkeit festgelegt werden, was dann zu Ergebnissen um 60 MBit/s auf beiden Systemen führt, allerdings mit Datenverlust.

Test 2: IO Performance mit dd messen

dd (DiskDump) ist ein praktisches Tool, welches ich hauptsächlich verwende, um Vollbackups von Datenträgern anzufertigen oder diese zurück auf den Datenträger kopieren. Aber auch die Schreib- und Lesegeschwindigkeiten lassen sich damit ermitteln, wenn man das Caching- und Sync-Verhalten von Linux berücksichtigt.

Raspberry Pi B:

dd_rpi1

Raspberry Pi 2 B:

dd_rpi2

Im ersten Schritt wird eine Datei geschrieben, das erste Modell schafft hier etwa 8 MB/s, das zweite hingegen etwas mehr als 15 MB/s.

Damit im zweiten Schritt beim Lesen die Datei nicht aus dem Cache gelesen werden, wird ein sync ausgeführt und die Caches werden geleert. Dann schaffen beide Systeme ähnliche Werte, das erste etwas mehr als 15 MB/s und das zweite etwa 18 MB/s.

Test 3: CPU Performance mit dd Messen

Ja, mit dd lässt sich auch eine ungefähre Aussage über die CPU Leistung treffen, indem man z.B. aus 

/dev/zero
liest und dessen Prüfsummen berechnen lässt. Getestet habe ich es mit 100 MB voller Nullen und MD5, SHA1 und SHA512 Prüfsummen.

Raspberry Pi B:

checksum_rpi1

Raspberry Pi 2 B:

checksum_rpi2

Die Unterschiede sind ziemlich eindeutig. Dies ist nicht allein auf die höhere Taktrate zurückzuführen, sondern auch auf die andere Prozessorarchitektur des zweiten Modells zurückzuführen.

Wirklich überraschend sind diese Ergebnisse nicht, es ist ja schließlich bekannt, dass das zweite Modell mehr Leistung besitzt. Die SD Karte im zweiten Modell ist eine mir bisher unbekannte “Yellow Frog” Karte, mit der ich bereits Boot-Probleme hatte. Die Performance ist allerdings zufriedenstellend, deshalb werde ich sie auch behalten, so lange die Boot-Probleme nicht vermehrt auftreten.

14. März 2015

Der Raspberry Pi 2 läuft

Permalink Finns Blog

Der Raspberry Pi wurde von Beginn an hoch gelobt und eine große Community hat sich um das Mini-Computer Projekt gebildet. Es gibt zwar preislich geringfügig teurere Alternativen, die mehr Leistung besitzen, aber seit erscheinen des Raspberry Pi 2 mit 1 GB RAM und einem 900 MHz Quad-Core Prozessor gibt es nun auch endlich einen kräftigen Raspberry Pi.

Nachdem ich schon drei Raspberry Pi Model B besitze, die ihren Dienst sehr zufriedenstellend verrichten, habe ich mir nun einen Raspberry Pi 2 zugelegt. Ich habe etwas günstiges für einen lokalen Datenbank- und Webserver mit akzeptabler Leistung gesucht habe und nach der Installation von Raspbian und kurzer Einrichtung habe ich diesen Server nun vernünftig zum Laufen bekommen.

DSCN4680

Die Netzwerk- und IO-Performance ist zwar auch beim zweiten Modell nicht mit üblichen Rechnern zu vergleichen, aber ich brauche ihn nur als Server ohne grafische Oberfläche. Wer an einer Installation mit grafischer Oberfläche interessiert ist, sollte man bei BITblokes vorbei schauen.

Installation, Update und Bootprobleme

Ich habe mir das Raspbian Image auf raspberrypi.org heruntergeladen und mit 

dd
auf eine 32 GB microSD Karte kopiert. Nach dem ersten Boot erscheint das Setup, in dem ich nur das Root-Dateisystem vergrößert und ein Passwort gesetzt habe. Den Rest erledige ich lieber per SSH.

Nach dem ersten ersten Einloggen sollte man dann das ganze System einmal aktualisieren:

apt-get update && apt-get upgrade
rpi-update
reboot

Leider hatte ich irgendwann ein Problem und der Raspberry Pi wollte nicht mehr booten. Auf einem Monitor war dann folgendes zu sehen:

DSCN4676_verändert

Die SD Karte habe ich in meinem Rechner dann mit 

badblocks
und 
fsck
überprüft, konnte aber keine Fehler feststellen. Das Problem scheint auch einige andere User zu betreffen, aber die Ursache sind eher mechanischer Natur, denn ein erneutes Einstecken der SD Karte hilft scheinbar und der Raspberry Pi bootet wieder. Das ist sehr unschön, aber ich werde ja sehen, wie gut der kleine Server langfristig läuft.

Software, Konfiguration und Dienste

Da ich eine MySQL Datenbank benötige, habe ich das Repository vom pi3g Blog eingebunden und MariaDB installiert. Um die SD Karte langfristig ein klein wenig mehr zu schonen habe ich ramlog installiert und das Logverzeichnis 

/var/log
in eine Ramdisk bzw. genauer gesagt in ein tmpfs ausgelagert.

Natürlich darf auch ein automatisches Backup nicht fehlen. Dies erledige ich zentral mit rsnapshot, wie ich es auch bei anderen Servern mache.

Um Probleme zu erkennen und auch langfristig eine Aussage über die Leistung treffen zu können, habe ich den neuen Raspberry Pi 2 auch ins Monitoring eingetragen, welches von einem anderen Raspberry Pi ausgeführt wird.

Schon bei der Installation der Pakete bemerkt man, dass das zweite Modell mehr Leistung besitzt. Das fällt auch im Monitoring auf, mein check_cpu Plugin zeigt kaum etwas an. Bei einem anderen Raspberry Pi der ersten Generation, der hier nur (!) als Mail Relay und Temperatur- und Feuchtigkeitssensor dient, besteht eine gewisse Grundlast, die schon etwa 10% der CPU Zeit ausmacht und die Load beträgt im Schnitt 0.15. Direkte Vergleiche zum zweiten Modell kann ich aber nicht wirklich ziehen, da die Aufgabenbereiche sehr unterschiedlich sind.

Als Webserver werde ich übrigens Apache verwenden. Auch wenn dieser etwas mehr Leistung als andere Webserver benötigt, bin ich mit der Konfiguration gut vertraut und ich mag homogene Umgebungen.

Fazit

Ein Leistungsmonster ist der Raspberry Pi sicherlich nicht, aber ich bin gespannt, wie das zweite Modell sich langfristig schlägt. Die Probleme mit der SD-Karte werde ich im Auge behalten, aber ich bin optimistisch, dass sich Ursache und Lösung finden werden. Nun habe ich endlich lokal eine MySQL Datenbank und die Abfragen sind deutlich schneller als der MySQL Server in einer VM von active-servers.com. Dies liegt aber daran, dass ich per VPN auf die Datenbank zugreife und nur eine langsame DSL Leitung besitze, woraus extrem hohe Latenzen ergeben.

Kurztipp: Alte Dateien finden und löschen

Permalink Finns Blog

Manchmal stehe ich vor dem Problem, dass ich ein Verzeichnis habe, das teilweise alte Dateien beinhaltet, die ich nicht mehr benötige. Je nach Menge ist das manuelle Löschen zu umständlich, so dass eine andere Lösung her muss.

Vorab ist es eventuell hilfreich, einen ersten Blick mit 

ls -lt
  auf die Dateien zu werfen, der Parameter 
-t
  sortiert die Dateien nach der Zeit der letzten Änderung. Mit 
ls -ltR
  kann man das ganze auch rekursiv ausführen, das ist aber auch noch nicht sehr hilfreich.

Besser geht das ganze mit

find
, welches neben den hier genannten noch viel mehr praktische Parameter besitzt:
# Findet Dateien und Ordner, dessen Inhalt vor mehr als 90 Tagen zuletzt geändert wurden:
find . -mtime +90
# Findet Dateien und Ordner, dessen Inode Informationen (u.a. Besitzer, Gruppe, Link Anzahl, Modus/Dateirechte) vor mehr als 90 Tagen geändert wurden:
find . -ctime +90
# Findet Dateien und Ordner, dessen letzter Zugriff mehr als 90 Tage her ist:
find . -atime +90
# Zusätzlich nur nach Dateien Suchen:
find . -type f -mtime +90
# Zusätzlich nur nach Ordner Suchen:
find . -type d -mtime +90

Hiermit listet 

find
die nach den entsprechenden Kriterien gefundenen Ordner und Dateien auf. Mit dem Parameter 
-exec
kann man nur noch einen Befehl für jedes gefundene Objekt ausführen:
# Findet und löscht Dateien und Ordner, die vor mehr als 90 Tagen zuletzt geändert wurden:
find . -mtime +90 -exec rm -r {} \;

Vorsicht: Sollte man sich vertan haben, wird eventuell mehr gelöscht als gewünscht. Falls man 

find
mit dem automatischen Löschen kombiniert, sollte man vorab ohne dem 
-exec
  Parameter arbeiten und manuell überprüfen, ob die Suchkriterien korrekt sind.

 

13. März 2015

Auflösung ist nicht gleich Auflösung

Permalink [ENC]BladeXP's Blog

Wie groß ist eigentlich ein Pixel? Was wie die Frage eines Kindes klingt, ist selbst für erwachsene nicht einfach zu beantworten. Die richtige Antwort, welche vor allem Juristen freuen dürfte: Das kommt drauf an!

Beispiel

Ein Ordner welcher 14 PNG Dateien mit jeweils 1648x2290 Pixel Auflösung enthält, sollte mit nachfolgendem Befehl in ein PDF umgewandelt werden:

convert Folder/*.png -quality 20 -compress JPEG target.pdf

In den letzten Jahren leistete dieser Befehl stets großartige Arbeit, doch heute war etwas anders. Das Resultat war, das 2 der 14 Seiten trotz vermeintlich gleichem Format der Quelldaten nur ca. 60% der Größe hatten. Wie ich gut eine Stunde (und 2 Bier) später feststellen durfte, war die Ursache in den Einstellungen meines Scanners zu finden: Die vorhandenen Dateien wurden mit 200 DPI Auflösung gescannt, die heutigen Dateien aber mit 300 DPI (man gönnt sich ja sonst nichts). In den Quelldaten ist die Auflösung des Scanners enthalten, eine Eigenschaft die mein typischer Arbeitsablauf (Bilder anpassen und konvertieren mit GIMP) nicht verändert hat. Durch diese Information in der Quelldatei ging convert davon aus, es müsse die unterschiedlichen Dateien angleichen.

Lösung

GIMP Dialog Print Size

Des Rätsels Lösung bestand darin innerhalb von GIMP zu definieren, welche Druckgröße ich gerne haben möchte. Im Menü Bild findet man den im Screenshot sichtbaren Dialog Druckgröße, dort kann direkt die gewünschte Auflösung als DPI Wert (oder auch eine andere für den Zweck passende Einheit) hinterlegt werden. Nach einem erneuten Exportieren der Datei im PNG Format war auch das PDF, welches convert erzeugte, im richtigen Format. Alternativ können auch alle Dateien neu als PNG exportiert werden, wichtig wäre dabei, dass der Haken Auflösung speichern entfernt wird, ich halte den zuerst genannten Weg jedoch für sinnvoller.

Fazit

Wie groß ist jetzt ein Pixel? Das ist immer abhängig vom Zielmedium und dessen Auflösung in Abhängigkeit zur Größe. Eine Grafik mit 640x480 Pixeln Auflösung wirkt auf einem 50" Full-HD TV vergleichsweise klein, auf einem 10 Meter LED Board im Außenbereich (Werbetafel,1024x768) wirklich groß und an einem 1200-DPI-Drucker geradezu winzig. Indem einer Datei hierzu Informationen auf den Weg gegeben ("Ich wurde mit 300 DPI gescannt.") kann Software automatisch eine entsprechende Anpassung durchführen.

In meinem Beispiel hat convert festgelegt, dass die erste Seite 1648x2290 Pixel bei 200 DPI hat, die nachfolgenden Seiten werden an diesem Standard angepasst. Meine heute gescannten Seiten hatten 300 DPI, was bedingt das diese, um die gleiche Fläche zu füllen, 2472x3435 Pixel haben müssen. Denn ob ich 300 Pixel pro Inch unterbringe oder 200 ist ein wesentlicher Unterschied, es ist also wichtig, Auflösung immer in Relation zur Größe zu setzen.

Active Directory: Linux Domänen-Beitritt für Bequeme

Permalink debinux

Wenn die Zeit mal wieder die Muße verdrängt, sich durch digitale Bedienungsanleitungen und angestaubte Lesezeichen zu Samba, Winbind, Kerberos und gleiches Teufelszeug zu wühlen, erleichtert BeyondTrust dem Admin das Leben.

Das Produkt nennt BeyondTrust etwas unglücklich “PowerBroker Identity Services, Open Edition” – findet man garantiert nicht mehr wieder. Wenn mich nicht alles täuscht, nannte es sich vorher “LikewiseOpen” und befand sich sogar im Debian/Ubuntu Repository. Das sollte zu Zeiten eines Ubuntus in Version 10.04 gewesen sein.

Mein Ziel ist es Domänen-Benutzern schnell Zugang zu einem Linux-System zu gewährleisten. Die Anmeldung erfolgt durch den Benutzernamen “DOMAIN\username” und, logisch, zugehörigem Kennwort.
Ich setze als Test-System ein Debian Jessie amd64-System ein.

Ich bequeme mich im Folgenden auf die Abkürzung “PBIS”.
Beyondtrust stellt seinen Nutzern ein Forum unter der Adresse http://forum.beyondtrust.com/ zur Verfügung. Die Aktivität hält sich stark in Grenzen. Support erwartet ihr besser in Foren oder im IRC, ganz klassisch.

Downloaden lässt sich PBIS für verschiedenste System, darunter übrigens auch OS X, hier.

Die Installation verläuft zügig und stellt keine Fragen, die uns überfordern würden.
Im Beispiel verwende ich die gerade aktuelle Version 8.2.1:

cd ~ ; wget http://download.beyondtrust.com/PBISO/8.2.1/linux.deb.x64/pbis-open-8.2.1.2979.linux.x86_64.deb.sh
chmod +x pbis-open-8.2.1.2979.linux.x86_64.deb.sh
./pbis-open-8.2.1.2979.linux.x86_64.deb.sh

Would you like to install package for legacy links? Nein, das ist nicht notwendig und bezieht sich auf den “Vorgänger” LikewiseOpen. Wenn ihr diese Verknüpfungen bräuchtet, wüsstet ihr es.

Der Domänen-Beitritt verläuft schmerzfrei:

domainjoin-cli join DOMAIN.LOCAL Administrator

Achtet auf die Großschreibung!
Auf Systemen mit einer GUI, stünde eine grafische Oberfläche bereit: domainjoin-gui

PBIS legt sich im Pfad /opt/pbis/ ab und erstellt/verändert nach einem Domänen-Beitritt nur wenige Dateien im System.
Zu den veränderten Dateien gehören etwa diverse /etc/pam.d/common-* Dateien, da selbstverständlich PAM um den Domänen-Login erweitert werden muss, wie auch Kerberos-spezifische Konfigurationen, etwa /etc/krb5.conf.
Außerdem erstellt es einen Dienst unter “/etc/init.d/lwsmd”, auch der darf gerne genauer unter die Lupe genommen werden.
Eine Domäne verlassen können wir ebenso schnell durch domainjoin-cli leave.

Ich gehe davon aus, dass das Prinzip eines Domänen-Beitritts bekannt ist und beende damit den kleinen Artikel aus Zeitmangel.
Schaut euch noch die Tools unter /opt/pbis/bin an, zum Beispiel lässt sich die Standard-Shell von Domänen-Benutzern durch ein einfaches /opt/pbis/bin/config LoginShellTemplate /bin/bash abändern.

Achtet bitte auch darauf, dass die Zeit mehr oder weniger synchron zum DC läuft, sonst streikt Kerberos! :-)

11. März 2015

Tageseinsatz

Permalink Erfahrungen mit Ubuntu

Seit fast 9 Tagen läuft Ubuntu 14.04.2 bei mir im Dauereinsatz. Für einen Server sicher nichts besonderes. Dort habe ich schon über  200 Tage Systeme im Betrieb. Aber dieser Rechner steht im harten Alltag zuhause. Das Notebook wird von der  Familie mit 4 Personen geteilt, jeder mit einem eigenen Account. Es wird munter zwischen den Accounts gewechselt, der Rechner wird nur zugeklappt, geht im Schlafmodus, wacht wieder auf. Das mehrmals am Tag. Garniert mit Programmierung auf entfernen FTP und SSH Servern, Minecraft zocken und und und.

Kurz. Diese Version arbeitet perfekt nicht nur auf dem Server sondern
im täglichen Einsatz.

cairo-dock hat unter xfce4.12 einen Schatten

Permalink Produnis

Seit dem Update auf xfce4 wirft das Cairo-Dock einen komischen Strich auf meinen Desktop.
cairoschatteen

Das Ganze ist eine Einstellungssache von xfce4.

Gehe in den Einstellungen zu xfce4-settings | Window Manager Tweaks | compositor und entferne den Haken bei “Schatten unter Leisten anzeigen
Feineinstellungen der Fensterverwaltung_001

share this

PDFs komprimieren

Permalink onli blogging

Die PDFs eingescannter Dokumente, im Grunde ja nur in PDFs verpackte JPGs, sind mit mehreren MB zu groß, um sie einfach so per Mail zu verschicken. Bei mir waren das diesmal bei nur zwei Seiten 2,3 MB. Sie zu komprimieren ist gar nicht so ganz einfach: PDF-Betrachter bieten die Option gar nicht erst an, manche Tools in der Kommandozeile - imagemagicks convert beispielsweise - übertreiben es mit der Komprimierung und machen das Dokument unleserlich. Gut funktioniert hat bei mir dieser Tipp:

pdf2djvu -d [dpi-resolution] input.pdf -o temp.djvu
djvups temp.djvu temp.ps
ps2pdf temp.ps output.pdf

Das output.pdf ist 320 KB groß, die Bilder darin haben nicht merklich an Qualität verloren.

10. März 2015

Ubuntu 14.04 und Officejet 2620 (Scanner)

Permalink Erfahrungen mit Ubuntu

Nachtrag zum letzten Post zu dem Officejet 2620 Scanner und Drucker.
Die Funktionalität des Druckers kann ich mit "Einwandfrei" bestätigen.
Stand schon im letzten Post.
Der Scanner funktioniert mit Ubuntu 14.04 auch tadellos.
Einzellne Seiten, wie auch mehrere Dokumente in einem Rutsch.


ownCloud Major-Update durchführen

Permalink My-IT-Brain

Auf meinem privaten Linux-Server lief bis vor kurzem noch ownCloud 7.0.4. In diesem Artikel möchte ich kurz dokumentieren, wie das Update auf Version 8.0.0 durchgeführt wurde.

Zuerst ist sicherzustellen, dass man eine aktuelle Datensicherung der ownCloud-Installation mit dazugehöriger Datenbank hat.

Vor dem Update habe ich im Administrationsbereich meiner ownCloud die beiden Apps “Contacts” und “Calendar” deaktiviert. Laut unbestätigten Quellen im Internet können damit seltene Probleme vermieden werden. Dirk und hefeweiz3n haben mich in den Kommentaren zu diesen Artikel darauf hingewiesen, dass dieser Hinweis in der offiziellen ownCloud Dokumentation zu finden ist.1 Und ich dachte mir: “Better safe than sorry.” ;-)

Zunächst lädt man sich das aktuelle ownCloud Release in ein beliebiges Verzeichnis herunter und entpackt es dort.

wget https://download.owncloud.org/community/owncloud-8.0.0.tar.bz2
tar -xjf owncloud-8.0.0.tar.bz2

Anschließend wechselt man in das DocumentRoot der ownCloud-Installation und löscht dort alle Dateien und Verzeichnisse mit Ausnahme von config und data. Dies kann man z.B. schnell erreichen, wenn im DocumentRoot folgender Befehl ausgeführt wird:

find . -mindepth 1 -maxdepth 1 ! -path ./data ! -path ./config -exec rm -rf {} \;

Nun können die heruntergeladenen Dateien in das DocumentRoot kopiert werden. Im Anschluss sind lediglich die Benutzerrechte zu kontrollieren. Der Benutzer, unter dem der Webserver läuft, muss wieder überall Leserechte erhalten.

Zum Abschluss ruft man die ownCloud-Installation auf und führt die Datenbankaktualisierung durch.

Abschließend nicht vergessen, die Plugins wieder zu aktivieren.

Fertig!

An dieser Stelle noch einmal vielen Dank an kofrezo für seine Tipps vor dem Update.

  1. ownCloud Server Administration Manual

IPFire – ausgehende Verbindungen blockieren

Permalink Finns Blog

Ich nutze seit langer Zeit die Firewall-Distribution IPFire, die meinen Bedürfnissen sehr gut entspricht. IPFire ist nicht so komplex wie beispielsweise pfSense, aber bietet genügend Möglichkeiten, um sinnvoll in kleinen Netzwerken eingesetzt zu werden.

Sicherheit ist ein komplexes Thema, das Definieren von Firewall-Regeln ist nur ein kleiner Teil des Ganzen. IPFire und die meisten gewöhnlichen Router sind so konfiguriert, dass eingehende Verbindungen vom Internet zur Firewall selbst blockiert werden, ausgehende Verbindungen der Clients im Netzwerk zum Internet aber durchgelassen werden. In der Praxis ist dies für den Durchschnittsbenutzer sinnvoll, da dieser nicht weiß, welche seiner Programme über welche Ports auf das Internet zugreifen.

Netzwerk-Profies halten diesen Artikel vermutlich für ungenau und lückenhaft, aber ich möchte mich damit an Nutzer richten, die “nur” ein grundlegendes Verständis von Routern und Firewalls besitzen und IPFire nutzen möchten, um ihr Netzwerk ein wenig sicherer zu machen. Einen sinnvollen Einstieg bietet das IPFire Wiki, in dem auch die Standard Firewall-Policies beschrieben werden. Diese Sachen sollte man sich in Ruhe ansehen, da man ohne die Firewall zu verstehen diese nicht sinnvoll konfigurieren können wird. Im schlimmsten Fall verschlechtert man die Sicherheit, hat am Ende eine für die Clients nicht funktionierende Konfiguration oder man kann sich selbst nicht mehr bei der Firewall anmelden, da man sich ausgesperrt hat.

Bei IPFire muss man 3 Arten von Verbindungen unterscheiden:

  • Eingehende Verbindungen (INPUT): Eingehende Verbindungen zur Firewall von anderen Netzen
  • Ausgehende Verbindungen (OUTPUT): Verbindungen von der Firewall in andere Netze
  • Weitergeleitete Verbindungen (FORWARD): von einem Netz durch Router/Firewall zu anderen Netzen

Das Standard-Verhalten der Firewall bei OUTPUT- und FORWARD-Verbindungen kann unter dem Menüpunkt “Firewall – Firewall Options” konfiguriert werden. Das Verhalten für diese beiden Verbindungstypen habe ich auf “Blocked” gesetzt. Ohne das Hinzufügen entsprechender Firewall-Regeln ist es nun für Clients und für die Firewall selbst nicht mehr möglich, auf das Internet oder andere Netze zuzugreifen. An dieser Stelle ist es sinnvoll, das Logging der Firewall zu aktivieren, da man so schnell erkennen kann, welche Verbindungen noch blockiert werden, damit man diese bei Bedarf erlauben kann.

ipfire_firewall_options

Als nächstes können nun verschiedene Firewall-Regeln hinzugefügt werden, die man unter dem Menüpunkt “Firewall – Firewall Rules” findet. Am einfachsten zu verstehen sind vermutlich die INPUT (Incoming Firewall Access) und OUTPUT (Outgoing Firewall Access) Regeln, d.h. welche Zugriffe zur Firewall erlaubt sein sollen und wohin die Firewall selbst zugreifen darf. Alles übrige, sprich die FORWARD Regeln, werden allgemein unter der Überschrift “Firewall Rules” behandelt. Für das Hinzufügen gibt es nur einen Button. Ob eine Regel eine FORWARD-, INPUT- oder OUTPUT-Regel ist, ergibt sich aus der Konfiguration. Beim ersten Mal ist es vielleicht etwas verwirrend, aber wenn man das Wiki ein wenig studiert hat, geht das Hinzufügen neuer Regeln sehr schnell von der Hand.

Das folgende Bild zeigt eine Regel, die Verbindungen aus dem grünen Netz zum roten Netz (Internet) per Port 80 (TCP) erlaubt:

ipfire_firewall_http_rule

Mit dieser Regel können die grünen Clients per HTTP auf das Internet zugreifen. Fügt man noch eine gleichartige Regel für Port 443 (TCP) hinzu, können die Clients alle Webseiten aufrufen. (Natürlich gibt es auch Webseiten, die auf anderen Ports erreichbar sind. Dies ist aber die Ausnahme und betrifft häufig selten gewöhnliche Webseiten, eher Konfigurationwebseiten von Software oder Geräten, wie z.B. IPFire mit dem Port 444.)

Ab hier bleibt jedem selbst überlassen, welche Netze und Ports man konfiguriert. Für das reine Surfen reichen die TCP Port 80 und 443, eventuell benötigt man noch den UDP Port 53, falls externe DNS Server verwendet werden. Nutzer von WhatsApp benötigen den TCP Port 5222 (XMPP, das genaue Netz muss ich noch ermitteln), um Push Benachrichtungen zu empfangen. Falls Mail-Clients verwendet werden, kommen je nach Verbindungskonfiguration noch die TCP Ports 25, 110, 143, 578, 993 oder 995 hinzu.

Je nach Vorlieben und Konfiguration kommt am Ende eine mehr oder weniger komplexe Konfiguration dabei heruas. Ich werde diese Konfiguration eine Weile testen und eventuell noch durch den Einsatz von Gruppen oder das Umstellen auf netzweite anstatt einzelner Client-Regeln überschaubarer zu machen.

ipfire_firewall_rules

Besonders interessant sind jetzt die Firewall-Logs, da man hier erkennen kann, welche Verbindungen (außer den erlaubten HTTP, HTTPS, etc., das wäre mir zu viel in den Logs) die eigenen Clients nach außen aufbauen möchten. Natürlich kann theoretisch fast jede Software Daten per HTTP(S) versenden, um durch fast alle Firewalls durchzukommen, aber das ist nicht immer der Fall. Ich denke hierbei an Malware oder Quasi-Malware, wie sie von Herstellern von Smartphones gerne auf den Geräten vorinstalliert wird oder an sonstige geschwätzige Software, die der Nutzer eigentlich nicht braucht.

Die Logs können also erstens zum konfigurieren notwendiger Firewall-Regeln verwendet werden und zweitens zum Aufspüren von Clients mit fragwürdiger Software. In meinem Fall sieht das ganze zum Glück recht überschaubar aus, ich nutze zum Durchsehen der Logs (

/var/log/messages
 ) 
grep
und ein paar andere Dinge, um mir das ganze etwas überschaubarer anzuzeigen:
grep DROP_FORWARD /var/log/messages | awk '{print $10 " " $11 " " $18 " " $20}' | sort | uniq

Damit erhalte ich eine kurze Liste von Clients, Zieladressen und Zielports. Dort finde ich inzwischen nichts ungewöhnliches mehr, bis auf ein paar Verbindungen zu einigen LG und MediaTek Netzen. Ich muss noch klären, ob diese für Updates wirklich notwendig sind oder ob nur “Statistiken” dorthin gesendet werden. Ich vermute eher das Zweite.

8. März 2015

Kurztipp: Koukaam NETIO PDUs mit Nagios / Icinga überwachen

Permalink Stankowic development

Download PDF
Koukaam NETIO-230B

Koukaam NETIO-230B

Koukaam NETIO Steckdosenleisten verfügen über eine Netzwerkschnittstelle, über welche die einzelnen Anschlüsse komfortabel gesteuert werden können. Noch schöner wäre es, wenn man diese auch über Nagios bzw. Icinga überwachen könnte. 2012 entstand so ein provisiorisches Bash-Skript, welches die einzelnen Anschlüsse und Zeitsynchronisation über NTP überwachte.

Dieses Wochenende habe ich das Skript auf Python migriert und einige neue Features implementiert.

Das Skript, welches kostenfrei auf Icinga Exchange bezogen werden kann, ist nun auch in der Lage einzelne Ports überwachen.

Details zur Installation und Konfiguration, sowie ein Specfile für ein RPM-Paket, finden sich in der Dokumentation.

check_netio

:)

Download PDF

Wochenrückblick 10/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

Neues rund um Linux

Spielen unter Linux

Hardware und Mobiles