Montag, 7. September 2015

Yawls Version 1.2.2 "revolution"

Yawls in der Version 1.2.2 enthält folgende Neuerungen und Verbesserungen:
  • Bessere Systemd Kompatibilität durch SIGINT/SIGTERM Unterstützung
  • GUI aktualisiert jetzt alle Einträge nach einem Reset
  • Neu ist ein Interface welches es vereinfacht auch andere Methoden zum ändern der Displayhelligkeit hinzuzufügen.
  • und einige kleine weitere Verbesserungen.

Download:

yawls 1.2.2 all.deb
yawls 1.2.2.tar.gz 

Freitag, 17. Juli 2015

Yawls Version 1.2.1 "revolution"

Yawls in der Version 1.2.1 enthält folgende Neuerungen und Verbesserungen:
  • CLI und GUI Version wurden zusammengeführt 
  • Überarbeitete GUI mit verbessertem Kalibrierungsassistenten
  • Flüssigerer Wechsel zwischen verschiedenen Helligkeitsstufen
  • und vieles mehr

Download:

yawls 1.2.1 all.deb
yawls 1.2.1.tar.gz 

Donnerstag, 28. Mai 2015

Yawls Version 1.1.2 "picturesque"

Yawls in der Version 1.1.2 enthält folgende Neuerungen und Verbesserungen:
  • gksu wurde durch pkexec ersetzt
  • Performance Verbesserungen
    • An der Bestimmung der Umgebungshelligkeit
  • RAM Verbrauch verringert 
  • Fehlerausgabe aussagekräftiger
  • Behobene Fehler:
    • PID Datei Error wenn Programm nicht als root ausgeführt wird (LP: #1424250)
    • PID Datei speichert die falsche PID (LP: #1425129)

Freitag, 20. Februar 2015

Yawls Version 1.1.0 "picturesque"

Yawls in der Version 1.1.0 enthält folgende Neuerungen und Verbesserungen:
  • Der Systemdienst ist standardmäßig aktiviert und der Cronjob ist nur noch optional
    • Zahlreiche Verbesserungen am Systemdienst in Richtung minimaler Energieverbrauch und Stabilität.
  • Eine Grafische Oberfläche (GUI)
    • Ein Kalibrierungsassistent als einfache Möglichkeit die Kalibrierung zu beschleunigen
    • Ein Konfigurationseditor um die Einstellungen einfacher und schneller ändern zu können
Update Yawls 1.1.1
  • Besser Implementierung der Libraries
Downloads:
yawls-gtk 1.1.1 all.deb
yawls-cli 1.1.1 all.deb
yawls 1.1.1.tar.xz 

Sonntag, 8. Februar 2015

Yawls - Yet Another Webcam Light Sensor

Allgemeines:
Yawls ist ein kleines in Java geschriebenes Programm welches die Webcam eines Notebooks als Umgebungshelligkeitssensor nutzt um die Displayhelligkeit entsprechend der Umgebung anzupassen. 

Aktuell:
Im Moment besitzt das Programm noch keine Grafische Oberfläche und ist somit nur über die Konsole steuerbar. Das Programm arbeitet standardmäßig mit Cron um regelmäßig auf die Kamera zu zugreifen und ggf. die Helligkeit des Displays anzupassen. Es kann jedoch auch jetzt schon alternativ ein Systemdienst genutzt werden der ebenfalls mit dem Programm installiert wird aber nicht aktiviert ist.
Der Systemdienst kann mittels init.d Script aktiviert werden, es empfiehlt sich jedoch vorher den Cronjob auszukommentieren. Außerdem nutzt dieser Systemdienst eine Konfigurationsdatei in der Parameter sowie zusätzliche Optionen erklärt werden und entsprechend angepasst werden können.

Blick in die Zukunft:
In Yawls Version 1.1.0 Codename: "picturesque" wird es einige große Änderungen geben. Die Folgenden sind die relevantesten:
  • Der Systemdienst wird standardmäßig aktiviert und der Cronjob hingegen wird optional
    • Zahlreiche Verbesserungen am Systemdienst in Richtung minimaler Energieverbrauch und Stabilität.
  • Eine Grafische Oberfläche (GUI)
    • Ein Kalibrierungsassistent (als eine Möglichkeit die Kalibrierung zu beschleunigen)
    • Ein Konfigurationseditor (um die Einstellungen einfacher und schneller ändern zu können) 
Hier noch der Link zur eigentlichen Projekt Seite von Yawls.

Sonntag, 1. Februar 2015

Yawls Version 1.0.1

Yawls in der Version 1.0.1 enthält folgende Neuerungen und Verbesserungen:
  • Neuer upstream Release
  • Hinzugefügt OpenCV PPA für precise Kompatibilität
  • Geändert src/*/*/*/*
    • Verbesserte Java Konvention
  • Update src/*/*/*/engine/Brightness.java
    • Bug #1411946 geschlossen
    • Bug #1409247 geschlossen
    • Bug #1416639 geschlossen
    • Verbesserte Berechnung der Referenzwerte
  • Update src/*/*/*/engine/Face.java
    • Verbesserte Gesichtserkennung
  • Update src/*/*/*/util/Database.java, src/*/*/*/util/Config.java
    • Geänderter Pfad für Konfigurationsdatei
  • Update src/*/*/*/util/GeneratePath.java
    • Verbesserte Erkennung der korrekten sysfs Dateien
  • Update src/*/*/*/util/Translation.java
    • Gettext hinzugefügt für eine Vereinfachung der Übersetzung
    • Update build.sh
    • Update build.xml
  • Hinzugefügt src/*/*/*/engine/Threshold.java
    • Schwellenwerte für Aufhellung und Abdunkelung in eigener Methode
  • Update debian/compat
    • Bump Version auf 9
  • Update debian/rules
    • Hinzugefügt: override für update-rc um das init.d Script zu installieren ohne es zu aktivieren
  • Update debian/control
    • Bump debhelper Version auf >= 9
    • Homepage URL hinzugefügt
    • Version Control System URLs hinzugefügt
  • Update debian/yawls.install
    • Nicht benötigte Pfade entfernt
  • Hinzugefügt debian/yawls.postrm.debhelper und debian/yawls.prerm.debhelper
    • Für eine saubere deinstallation wenn das init.d Script aktiviert ist
  • Update debian/changelog
    • Changelog ist nun detailierter
  • Update man/yawls.*
    • Pfad korrektur für Konfigurationsdateien

    Downloads:

    Installer:
    yawls_1.0.1~ubuntu12.04_all.deb (sig)
    yawls_1.0.1~ubuntu14.04_all.deb (sig)
    yawls_1.0.1~ubuntu14.10_all.deb (sig)

    Source:
    yawls_1.0.1~ubuntu12.04.tar.gz (sig)
    yawls_1.0.1~ubuntu14.04.tar.gz (sig)
    yawls_1.0.1~ubuntu14.10.tar.xz (sig)

Donnerstag, 8. Januar 2015

ownCloud mit Nginx auf dem Raspberry Pi

Das Raspberry Pi eignet sich in Kombination mit ownCloud sehr gut als alternative zu den gängigen Cloud angeboten. Mit dem enormen Vorteil das man vollständig selbst bestimmen kann wer auf die Daten in der Cloud Zugriff hat und wer nicht.
Da ich selbst schon seit einiger Zeit eine solche Kombination als Cloud nutze möchte ich hier mein mit der Zeit angesammeltes Wissen teilen und werde dies in einer Schritt für Schritt Anleitung im folgenden tun. 
Wer schon ein funktionierendes Pi hat und nur wissen möchte wie man z.B. nginx ans laufen bringt kann die ersten Schritte einfach überspringen. Wer sich mit dieser Materie aber erst seit kurzem beschäftigt sollte ruhig alle Schritte durchgehen da ich hier und da ein paar Tipps geben werde die schon beim Kauf der Hardware einiges an Geld und Nerven einsparen können.

Schritt 1 (Der Einkauf):
Bevor man anfangen kann benötigt man natürlich zu aller erst die notwendige Hardware. Daher werde ich nun die benötigten Einzelteile auflisten und jeweils einen kleinen Kommentar dazu schreiben was beim Kauf dieses Teils ggf. zu beachten ist.
  • Ein Raspberry Pi
    • Am besten ein Raspberry Pi Typ B oder B+ da diese mehr Arbeitsspeicher besitzen.
  • Ein 5V Netzteil
    • Hierbei ist zu beachten das es auch genug mA bzw. A liefert um eine stabile Versorgung des Raspberry Pi zu gewährleisten.
    • Optimal sind nach meiner Erfahrung 5V Netzteile mit einer Stromstärke von ca. 2000mA bzw. 2A.
  • Je nachdem für welchen Typ des Raspberry Pi man sich beim ersten Punkt entschieden hat benötigt man eine SD Karte (für Typ B) oder eine microSD Karte (für Typ B+).
    • Auch hier gilt je schneller die Karte lesen/schreiben kann desto schneller startet und reagiert das System.
    • Die Speicherkapazität der Karte sollte ca. 8GB betragen. Dann ist sie mehr als groß genug für das Betriebssystem sowie zusätzliche Software.
  • Einen USB-Stick der unsere Cloud Daten speichern soll, daher richtet sich die Speicherkapazität nach dem was man alles in der Cloud speichern möchte.
    • Es würde auch eine Externe Festplatte funktionieren jedoch benötigen diese dann in der Regel einen Powered USB-Hub und erhöht somit den Stromverbrauch und den Platzbedarf um einiges.
  • Ein Netzwerkkabel
  • Eine Gehäuse für das Raspberry Pi
  • Gehäuse Entwurf
    • Hier kann man entweder auf ein schon Fertiges Produkt zurückgreifen oder selbst aktiv werden und sich ein Gehäuse bauen.
      • Wer ein Fertiges Gehäuse vorzieht sollte beim Kauf zum einen darauf achten das, dass Gehäuse auch zum Typ des Pi passt und für eine Ausreichende Belüftung des Pi's gesorgt ist.
      • Wer selbst ein Gehäuse bauen möchte kann entweder seiner Kreativität freien lauf lassen oder sich von meinem Entwurf inspirieren lassen.
  • USB Tastatur, USB Maus, Monitor/Fernseher mit hdmi-Anschluss und ein hdmi-Kabel (nicht für den eigentlichen Betrieb aber für die Einrichtung notwendig).
Auf elinux.org findet man eine Auflistung aller mit dem Raspberry Pi  bekannt kompatiblen Peripherie.

Schritt 2 (Die Installation):
Im folgenden Schritt werde ich getrennt die die Installation von Betriebssystem (hier Raspbian) und zusätzlich benötigter Software eingehen.

Schritt 2.1 (Das System):
  1. Die SD oder microSD Karte in FAT32 formatieren. 
  2. Danach oder währenddessen NOOBS (offline and network install) auf raspberrypi.org herunterladen.
    1. Die in der heruntergeladenen ZIP-Datei enthaltenen Dateien entpacken und auf die SD/microSD Karte kopieren.
    2. Die Karte sicher entfernen und in das Raspberry Pi einbauen.
  3. Nun Tastatur, Maus, Monitor, Netzwerkkabel und zum Schluss das Netzteil an dem Pi anschließen.
  4. Nach dem starten des Raspberry Pi erscheint ein Fenster in dem man  Verschiedene Betriebssysteme zur Auswahl hat, wir wählen hier Raspbian und Klicken auf Installieren. 

Schritt 2.2 (Zusatz Software):
Nun geht es daran das System für die ownCloud vorzubereiten dazu benötigt es nur einige wenige Befehle und etwas Zeit. Dafür benötigen wir allerdings nicht unbedingt die an dem Raspberry Pi angeschlossene Tastatur, Maus usw. lediglich das Netzwerkkabel ist zwingend erforderlich. Sollte man aber keinen zweiten Rechner zur Hand haben kann man diese Schritte natürlich auch direkt am Pi selbst durchführen.

Zuerst öffnen muss man ein Terminal öffnen und sich per ssh im Pi Einloggen oder man öffnent direkt am Pi ein Termial und gibt die Befehle dort direkt ein. Als kleine Anmerkung der Standard Benutzername bei Raspbian ist Pi mit dem dazugehörigen Passwort raspberry.
Ändern wir als erstes sicherheitshalber unser Passwort dies ist sehr einfach mit dem folgenden  Befehl zu bewerkstelligen:
passwd
Dieser Befehl fragt nach dem Ausführen erst nach dem alten Passwort (raspberry) und dann nach einem neuen. Meine Empfehlung ist es ein möglichst starkes mindestens 16 stelliges Passwort zu setzen.

Nun gibt man folgenden Satz von Befehlen nacheinander im Terminal ein.
sudo -s
apt-get update
echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list
apt-get install nginx php5 php5-fpm php-pear php5-common php5-mcrypt php5-mysql php5-cli php5-gd php-apc mysql-server fail2ban usbmount unattended-upgrades
exit  
Damit haben wäre nun alles installiert was benötigt wird um ownCloud auf dem Raspberry Pi ans laufen zu bringen.

Schritt 3 (Die Einrichtung):
Als erstes erhöhen wir den Swap unseres Raspberry Pi indem wir folgendes im Terminal ausführen:
# Der nachfolgende Befehl 'sudo -s' gibt allen nachfolgenden Befehlen root Rechte
# damit wir nicht immer sudo vor den Befehl Schreiben müssen
sudo -s
echo "CONF_SWAPSIZE=1024" > /etc/dphys-swapfile
dphys-swapfile setup
dphys-swapfile swapon

Jetzt richten wir automatisierte Sicherheitsupdates ein indem wir folgendes im Terminal eingeben...
nano /etc/apt/apt.conf.d/10periodic
... und dann den Inhalt dieser Datei wie folgt ändern:
APT::Periodic::Update-Package-Lists "1";
APT::Periodic::Download-Upgradeable-Packages "1";
APT::Periodic::AutocleanInterval "7";
APT::Periodic::Unattended-Upgrade "1";
Nun Speichern wir die Datei mit [strg+o] und beenden den Editor mit [strg+x].

Hiernach passen wir die php.ini Datei an. Dies ist einfach mit folgendem Befehl zu erledigen:
nano /etc/php5/fpm/php.ini
Im Editor passen wir die nachstehenden Zeilen an.
; Diese Zeilen suchen und ersetzen wir
upload_max_filesize = 1024M
upload_max_filesize = 1024M

; Und diese fügen wir am Ende der Datei ein
upload_tmp_dir = /srv/http/owncloud/data
apc.enabled = 1
apc.include_once_override = 0
apc.shm_size = 256M
Ist dies erledigt speichern wir die Datei [strg+o] und beenden den Editor [strg+x].

Da der Ordner auf den wir in der php.ini verweisen noch nicht existiert erstellen wir ihn.
mkdir -p /srv/http/owncloud/data
chown www-data:www-data /srv/http/owncloud/data

Nun legen wir uns noch eine MySQL Datenbank an damit wir diese später mit der ownCloud nutzen können. Der Eintrag database_password muss noch durch ein sicheres echtes Passwort ersetzt werden.
mysql -u root -p
create database owncloud; 
create user 'owncloud'@'localhost' identified by 'database_password';
grant all privileges on owncloud.* to 'owncloud'@'localhost';
quit
#Jetzt sichern wir MySQL noch ein bisschen besser ab
mysql_secure_installation

Jetzt Installieren wir die ownCloud der einfachheit halber haben wir schon weiter oben das Repository der ownCloud hinzugefügt, so dass wir es jetzt und auch später bei einem Update einfacher haben. Da wir die erst Installation sowie Updates mit apt erledigen können.
apt-get install owncloud

Nachdem das erledigt ist erstellen wir ein Zertifikat für den Server (dies nimmt unter Umständen viel Zeit in Anspruch) und bereiten im Anschluss nginx vor dazu gibt man einfach folgende Befehle im Terminal ein:
openssl req -newkey rsa:4096 -sha512 -x509 -days 3650 -nodes -out /etc/nginx/cert.pem -keyout /etc/nginx/cert.key 
openssl dhparam -out /etc/nginx/dhparam.pem 4096
chmod 600 /etc/nginx/cert.pem 
chmod 600 /etc/nginx/cert.key
nano /etc/nginx/nginx.conf

Nun ändern wir die folgenden Zeilen oder fügen sie hinzu:
events {
...
   worker_connections 128
...
}

http {
...
   ##
   # Simple BruteForce/DDOS Protection
   ##

   limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s;
...
   ##
   # Gzip Settings
   ##

   gzip on;
   gzip_static on;
   gzip_disable "msie6";

   gzip_vary on;
   gzip_proxied any;
   gzip_comp_level 7;
   gzip_buffers 16 8k;
   gzip_http_version 1.1;
   gzip_types image/svg+xml text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript;
...
}
Speicheren wir mit [strg+o] und beenden den Editor mit [strg+x]. Wieder in der Konsole angekommen geben wir diesen Befehl ein:
nano /etc/nginx/sites-available/default

Hier ein Beispiel wie die Datei aussehen sollte, wobei server_name noch angepasst werden muss. Zur Erklärung die Variable server_name kann entweder einer Domain zugeordnet werden oder einer Internen IP-Adresse z.B. 192.168.x.xxx. Dies ist wichtig jenachdem ob man den Server nur Intern im eigenen Netzwerk oder auch von Außen aus erreichbar haben möchte. Wobei für den letzteren Fall ein vorhandener DDNS vorausgesetzt wird.
upstream php-handler {
  #server 127.0.0.1:9000;
  server unix:/var/run/php5-fpm.sock;
  }

server {
  listen 80;
  server_name cloud.example.com;
  # enforce https
  return 301 https://$server_name$request_uri;
  }

server {
  listen 443 ssl;
  server_name cloud.example.com;

  ssl_certificate /etc/nginx/cert.pem;
  ssl_certificate_key /etc/nginx/cert.key;

  #ssl security additions
  ssl_session_cache shared:SSL:50m;
  ssl_session_timeout 5m;
  ssl_dhparam /etc/nginx/dhparam.pem;
  ssl_prefer_server_ciphers on;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers 'EECDH+ECDSA+AESGCM EECDH+aRSA+AESGCM EECDH+ECDSA+SHA384 EECDH+ECDSA+SHA256 EECDH+aRSA+SHA384 EECDH+aRSA+SHA256 EECDH+aRSA+RC4 EECDH EDH+aRSA RC4 !aNULL !eNULL !LOW !3DES !MD5 !EXP !PSK !SRP !DSS';
  resolver 8.8.8.8;


  # Path to the root of your installation
  root /var/www/owncloud/;
  # set max upload size
  client_max_body_size 10G;
  fastcgi_buffers 64 4K;

  rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
  rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
  rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

  index index.php;
  error_page 403 /core/templates/403.php;
  error_page 404 /core/templates/404.php;

  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
    }

  location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README){
    deny all;
    }

  location / {
   # The following 2 rules are only needed with webfinger
   rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
   rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

   rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
   rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

   rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

   try_files $uri $uri/ /index.php;
   }

  location ~ \.php(?:$|/) {
   #Simple Bruteforce/DDOS Protection
   limit_req zone=one burst=100 nodelay;

   fastcgi_split_path_info ^(.+\.php)(/.+)$;
   include fastcgi_params;
   fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
   fastcgi_param PATH_INFO $fastcgi_path_info;

   #php stability additions
   fastcgi_connect_timeout 60;
   fastcgi_send_timeout 180;
   fastcgi_read_timeout 360;

   fastcgi_param HTTPS on;
   fastcgi_pass php-handler;
   #serving static files
   fastcgi_param MOD_X_ACCEL_REDIRECT_ENABLED on;
   }

  location ^~ /data {
   internal;
   # Set 'alias' if not using the default 'datadirectory'
   alias /media/usb0/;
   }


   # Optional: set long EXPIRES header on static assets
   location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
       expires 30d;
       # Optional: Don't log access to assets
         access_log off;
   }

  }
Speicheren wir wieder mit [strg+o] und beenden den Editor mit [strg+x].

Nun starten wir den Webserver durch den nachstehenden Befehl neu.
/etc/init.d/nginx start
/etc/init.d/php5-fpm restart

Zum Schluss installieren wir noch einen Cronjob für die ownCloud dazu führt man diesen Befehl aus (wir Wählen nano als Editor)...
crontab -u www-data -e
...und fügt dann folgende Zeile hinzu aber aufgepasst nach dieser Zeile muss immer eine Leerzeile folgen.
*/15 * * * * php -f /var/www/owncloud/cron.php
Dann speicheren wir wieder mit [strg+o] und beenden den Editor mit [strg+x] und loggt sich aus der Root Shell mit [strg+d] aus.

Schritt 4 (Die Inbetriebnahme):
Die meiste Arbeit ist bereits erledigt wir müssen nur noch die ownCloud ein erstes mal im Browser aufrufen. Um dies zu bewerkstelligen müssen wir lediglich die Adresse in unserm Browser eingeben, die wir zuvor in der Datei /etc/nginx/sites-available/default unter der Variablen server_name angegeben haben und folgen einfach den Schritten des Installations Assistenten.
Hier noch ein paar Hinweise:
  • Als Datenbank nutzen wir MySQL
    • Benutzername ist owncloud und das Passwort ist das was wir für database_password eingesetzt haben.
  • Der Nutzerdatenpfad ist ein alternativer und zwar /media/usb0/
    • Dies leigt daran weil wir usbmount installiert haben um den USB-Stick automatisch einzuhängen zu lassen.