UWP App Entwicklung und MVVM

Hier will ich einfach ein paar nützliche Links zu dem Thema sammeln.

Eine minimale MVVM:  https://blogs.msdn.microsoft.com/johnshews_blog/2015/09/09/a-minimal-mvvm-uwp-app/

Was gibt es für Entwickler neues in Windown 10?  https://dev.windows.com/en-us/getstarted/whats-new-windows-10

How-Tos von Microsoft: https://msdn.microsoft.com/en-us/library/windows/apps/mt244352.aspx

Ein einfaches Hamburger-Menü: http://blogs.msdn.com/b/quick_thoughts/archive/2015/06/01/windows-10-build-your-first-hamburger-menu.aspx

„where T : class, new()“ – What the fuck?https://msdn.microsoft.com/en-us/library/d5x73970.aspx

ReactiveUI: http://docs.reactiveui.net/en/index.html

Redux.NET: https://github.com/GuillaumeSalles/redux.NET

ServiceStack: https://github.com/ServiceStack/ServiceStack

UWP App Entwicklung für Windows 10

Ich beschäftige mich in meiner Freizeit mit der Entwicklung von Windows10 Apps und der Universal Windows Platform. Besonders viele Informationen gibt es darüber im Netz noch nicht. Was ich aber sehr empfehlen kann, wenn man schon Erfahrung mit C# hat, ist die Microsoft Virtual Academy.
Da gibt es sehr viele Lehrvideos, die Qualität ist gut und es ist kostenlos.
Momentan schaue ich die Videoreihe Windows 10 Development for Absolute Beginners.

Erlebnisse wie ein Admin from Hell

In diesem Thread werde ich über meine Erfahrungen und Misserfolge als Admin berichten. Ein Server zu haben mit 6 virtuellen Maschinen erfordert einiges an Maintenances. Vor allem wenn die Umgebung komplett auf fertige webbasierte Lösungen verzichtet und vieles über Kommandozeile bedient wird. Als Abenteuer kommt noch dazu meine Dummheit und Risikobereitschafft.

Log Aptitude – [2016-01-01]

Der Befehl ‚aptitude reinstall yourpackage‚ sorgt dafür, dass ein Paket neu herunter geladen und neu installiert wird.

Log Gamin – [2015-12-23]

Ich bin neugierig. Ich will wissen, was das Packet ‚gamin‘ für eine Funktionalität hat. Laut dem Link hier ist ‚gamin‘ ein Überwachungssystem für Dateien und Verzeichnisse. Genauer gesagt, das Dateisystem wird auf Veränderungen überprüft.

Wenn zum Beispiel die Log Datei ‚auth.log‘ eine Änderung erfährt, welches durch ein Login Versuch erfolgen kann, bekommt der Fail2Ban mit Hilfe der ‚gamin‘ diese Änderung mit. Dementsprechend kann Fail2Ban Aktionen durchführen wie z.B. wie oft der Login Versuch war und ist die maximale Anzahl der Logins erreicht?

Log Fail2Ban – [2015-12-23]

Letzen führte ich ein Upgrade des Mailservers von der Distribution Wheezy auf die Distribution Jessie. Der Mailserver ist ein Produktivserver.

Die Funktionalität muss gewährleistet sein. Es darf kein Ausfall geben. Deshalb machte ich von der virtuellen Mailservermaschine ein Snapshot und sicherte es in eine separate Festplatte. Danach starte ich den gewohnten, von Debian Organisation vorgeschlagenen Schritte, um den Upgrade Prozess durchzuführen.

Nach dem Upgrade begann ich alle Log Dateien zu analysieren um mögliche Ausfälle zu erkennen. Dabei stellte ich fest, dass der Fail2Ban (Instrusion Prevention System Framework) nicht richtig funktioniert.

Nun, es ist nachts 2:00 Uhr. Das wird nichts mit früh ins Bett gehen.

Da der Fehler auch so vielsagend ist, habe ich erstmal diverse Suchmaschinen mit der Fehlermeldung gefüttert. Auf diesem Link kam ein Hinweis.

Ich öffnete die Fail2Ban Konfigurationsdatei /etc/fail2ban/jail.local.

In diesem änderte ich die folgende Zeile backend = auto auf backend = gamin.

# „backend“ specifies the backend used to get files modification.# Available options are „pyinotify“, „gamin“, „polling“ and „auto“.

 

# This option can be overridden in each jail as well.

#

# pyinotify: requires pyinotify (a file alteration monitor) to be installed.

# If pyinotify is not installed, Fail2ban will use auto.

# gamin: requires Gamin (a file alteration monitor) to be installed.

# If Gamin is not installed, Fail2ban will use auto.

# polling: uses a polling algorithm which does not require external libraries.

# auto: will try to use the following backends, in order:

# pyinotify, gamin, polling.

backend = gamin

 

Anschließend installierte ich das Packet ‚gamin‘ auf die Maschine.

aptitude install gamin

 

Danach muss der Dienst fail2ban neu gestartet werden.

/etc/init.d/fail2ban restart

 

Trotzt der Änderungen war der Fehler immer noch vorhanden. Den entscheidenden Hinweis fand ich in der Log Datei. Die von mir erstellte IP Blocklist war fehlerhaft.

Der Syntax in der Liste war mit der neuen Version von Fail2Ban nicht mehr kompatibel.

Ich löschte die Datei ‚ip_blacklist‘ und setzte die vorhergehenden Änderungen wieder zurück.

backend = auto

 

Anschließend startete das Framework ‚Fail2Ban‘ neu.

/etc/init.d/fail2ban restart

 

Um sicher zu stellen ob der Dienst ohne Probleme funktioniert, sollte der Status von fail2ban abgefragt werden. Durch die Ausgabe in der Konsole können wir vorhandene Fehler in der Konfigurationsdatei erkennen.

/etc/init.d/fail2ban status -l

 

Diskussion – Intention des Dokuments

In zwischen menschlichen Leben entstehen oft Diskussionsbedarf um Entscheidungen zu finden oder mögliche Lösungswege zu gehen. Eine Diskussion ist laut Wikipedia ‚Ein Gespräch zwischen zwei oder mehreren Personen in dem ein bestimmtes Thema untersucht wird, wobei jede Seite ihre Argumente vorträgt“

 

Jedoch stellte ich in der Praxis fest, dass das Ganze nicht reibungslos funktioniert. Zwischenmenschliche Beziehungen werden zerrüttet und Kollegen sind auf einander nicht zu gut zu sprechen, welches nicht im Sinne des Unternehmens ist.

Alleine, dass die Kollegen nicht mehr mit einander Informationen austauschen verursacht unnötige Iterationen, Frustrationen und Kosten in unserer täglichen Arbeit.

Bei vielen Menschen fehlt es an Wissen, Geduld, Methoden und rhetorische Verfahren um eine Diskussion erfolgreich zu führen. Wenn ich in meine Vergangenheit schaue wurden die Methoden in meiner Schulzeit nicht so erörtert. Auch in dem Unternehmen, wo ich bisher gearbeitet habe, wurden hierzu keine Schulungen angeboten um eine ausgereifte Diskussionskultur gedeihen zu lassen. Stattdessen wurde ein professioneller Umgang voneinander erwartet, die nicht gegeben war.

Die meisten schweigen und nehmen die vorgetragenen Punkte und Entscheidungen hin und erwähnen ihren Unmut hinter den Rücken von Entscheidungsträgern.

Den Punkt, dass Entscheidungsträger keine Meinungen hören wollen und Diskussionen abwürgen, werde ich hier nicht erörtern.

Gründe für eine schlechte Diskussion

Was sind die Gründe dafür, dass viele Diskussionen in einem Fiasko enden?

Im Laufe der Jahre habe ich nach vielen Diskussionen und Fiaskos folgende Erkenntnisse gemacht:

  • Unterschiedliche Intelligenzen treffen auf einander.
  • Teilnehmer haben unterschiedliches Wissen oder sind nicht vorbereitet

Dazu der Spruch von Uli Löchner, deutscher Aphoristiker: Das größte Übel bei den meisten Diskussionen: fehlende Sachkenntnis.

  • Schlechtes Gedächtnis. Die Aussagen von Gegenüber werden nicht verinnerlicht.
  • Ideologie behaftete Teilnehmer.
  • Nicht zu hören des Gegners
  • Nicht auf die Argumente des anderen eingehen
  • Abschweifungen von dem eigentlichen Thema. Es wird gänzlich was anderes Diskutiert ohne das vorhergehendes Thema abgeschlossen zu haben.

 

Wie eine gute Diskussion geführt werden kann

Jede Diskussionsteilnehmer sollte bereit sein, wenn beweisbare Argumente vorliegen, seine Meinung über das Diskussionsthema ändern zu können.

Falls sich einer der Argumente von dem Gegner wiederlegt wurde oder es war ein fehlerhaftes Argument, sollte dies nicht mehr in der bestehenden Diskussionsthematik angewendet werden.

Zusätzlich gilt, dass eine Position welches durch überprüfbare oder bessere Beweise belegt wurde als wahr angenommen werden sollte.

Wenn eine Diskussionsgegner eine Behauptung aufstellt so obliegt ihm die vollständige Beweislast. Dies sollte durch ruhiges zuhören ohne Zwischentöne ihm ermöglicht werden.

Eine Diskussion sollte fern von jeglicher Ideologie stattfinden.

Beispiel: Religion. Über Religion diskutiere ich grundsätzlich nicht. Der Mensch möchte glauben. Dieses Glauben respektiere ich.

Desweiteren sollten keine weiteren Argumente in die Runde geworfen werden, wenn ein vorhergehendes Argument nicht geklärt wurde. Abschweifungen!!!

Argumentationen sollten immer belegt sein. Wissenschaftliches vorgehen – Hypothese, Recherche, Untersuchung mit Beweisen und Nachvollziehbarkeit.

Eine Diskussion darf hitzig geführt sein. Wenn sich während einer Diskussion Aggressionen aufstauen oder Emotionen überhand nehmen, sollte die Diskussion abgebrochen werden. Sie kann am nächsten Tag weitergeführt werden.

Manchmal erlebe ich Menschen, die in einer Diskussion hinein schlittern obwohl sie in diesem Themengebiet keinerlei Kenntnisse haben. Hier rate ich die Anwendung der Exit – Strategie – höfflich und bestimmend sagen ‚Ich habe in diesem Themengebiet wenig wissen, deswegen möchte ich über den Sachverhalt nicht reden.‚ – Die Anwendung der Exit – Strategie ist keine Schande. Komischerweise wird diese Methode nicht oft angewendet. Ich finde dieses Verhalten faszinierend!

 

Eine Diskussion wird zu einem Battle, wenn gut vorbereitete Menschen daran teilnehmen. Hier wird mit harten Bandagen gekämpft. Provokation, Denunziation, Taktiken und rhetorische Attacken sind ein Teil dieses Battles. Je mehr man Diskussionen nach den genannten Regeln führt, umso besser geht man mit diesen Attacken um.

Zusammenfassung

Ich selbst bin ein leidenschaftlicher Diskussionsteilnehmer. Ich mag es, wenn rational denkende Menschen aufeinander Treffen und die Fetzen fliegen lassen. Sie bringen mich auf andere Ebenen. Sie zeigen mir Dinge, die ich vorher nicht so gesehen habe. Sie zwingen mich immer weiter zu lernen. Es ist ein geistiger Genuss auf höchstem Niveau.

In eine Diskussion geht es darum eventuell ein Kompromiss zu finden und nicht darum über den anderen zu dominieren. Zumindest ist es meine Philosophie.

Es geht bei einer Diskussion nicht um Recht zu bekommen.

Man muss aber auch keine Diskussion führen, wenn die obigen Bedingungen nicht erfüllt werden.

Hier kann man diese Exit – Strategie anwenden – ‚Herr X / Frau X wir haben unterschiedliche Ansichten, wo wir keine Gemeinsamkeiten finden werden.‚ und die Diskussion höfflich abbrechen. Ich persönlich wende diese Methode sehr gerne an.

Was mich aber in Rage bringt, wenn der Diskussionsteilnehmer sich jeglicher Argumentation verweigert und mit Behauptungen ankommt anstatt sich der Situation zu stellen und mit mir zusammen neue Sphären zu betreten. Egal, wie der Altersunterschied der Teilnehmer ist, die Devise lautet, auch eine 20 Jährige mit Potenzial kann einem neuen Aspekte zeigen. Sofern die betreffenden Personen aus ihren Komfortbereich rauskommen und sich dem Battle stellen.

Lebenszeit ist kostbar. Ich mag es nicht dieses mit Menschen zu verschwenden mit denen ich nicht offen reden kann!

 

Quellen:

  1. Diskussion – Wiki
  2. Science Blog – Cornelius Courts

Git Zugang über HTTPs

Einleitung

Wir wollen für unsere Projekte eine Art Git Server aufbauen. Darüber soll Code und Dokumente verwaltet werden. Vorrangiges Ziel war es, dass der Zugang von überall her möglich sein sollte. Kein Firewall oder anderweitige Tools sollten den Zugang erschweren. Deswegen war es naheliegend den Port 443 dafür zu verwenden.

Selbstverständlich haben wir die anderen Möglichkeiten, wie Gitolite und Gitweb in Erwägung gezogen. Jedoch lag uns daran, das System einfach zu halten und über das Web so wenig wie möglich eine Angriffsfläche zu bieten.

Installation

Alle Schritte, die hier beschrieben werden, erfolgt als Root User.

Zunächst installieren wir folgende Softwarepakete ‚Git, ‚apachae2“, ‚apache2-utils‘ und ‚openssl‘

roo@xxx: aptitude install git apache2, apache2-utils openssl

Nach erfolgreicher Installation legen wir ein Verzeichnis an. Wechseln zum Verzeichnis und initialisieren den Git. Zuletzt weisen wir den www-data (Apacahe) User Lese -und Schreiberechte auf dem Repository.

root@xxx: mkdir /home/git/repos

root@xxx: cd /home/git/repos

root@xxx: chown -R www-data:www-data /home/git

Damit nur erlaubte Benutzer über ‚https‘ Git Repository Zugang haben, legen wir ein Passwort Datei für en entsprechenden User. Dazu verwenden wir den Befehl ‚htpasswd‘ Mit dem Option ‚-c‘ wird die Passwort Datei angelegt mit dem genannten User ‚ nameOfExampleUser1‘.

root@xxx: cd /etc/apache2

root@xxx: htpasswd -c passwd_for_git_users nameOfExampleUser1

Wollen wir weiter Nutzern den Zugang gewähren, so müssen wir folgenden Aufruf machen.

root@xxx: htpasswd nameofExampleUser2

 Achtet bitte drauf, dass User ‚www-data‘ auf die Passwortdatei ‚pass_for_git_users‘ Lese -und Schreibrechte erhält.

Für den https‘ Zugang benötigen wir ein Zertifikat. Entweder erzeugen wir ein selbst signiertes Zertifikat.

root@xxx: openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/apache2/ssl/apache.key -out /etc/apache2/ssl/server.crt

Bei der Zertifikat Erstellung werden nun folgende Fragen gestellt

Generating a 2048 bit RSA private key
…..+++
………………………………………………….+++
writing new private key to ‚/etc/apache2/ssl/apache.key‘
—–
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter ‚.‘, the field will be left blank.
—–
Country Name (2 letter code) [AU]:DE
State or Province Name (full name) [Some-State]:NoneOneHere
Locality Name (eg, city) []:EveryWhere
Organization Name (eg, company) [Internet Widgits Pty Ltd]:UnknownLimited
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:example.com
Email Address []:webmaster@example.com

Die wichtigste Anfrage ist der der ‚Common Name‘. Hier müsst ihr eure offizielle Domain Namen eintragen.

Nun können wir im Verzeichnis ‚etc/apache2/sites-available‘ folgende Einträge machen, damit das selbst signierte Zertifikat aktiv wird.

root@xxx: nano /etc/apache2/available-sites/default-ssl

 
 

# SSL Engine Switch:
# Enable/Disable SSL for this virtual host.
SSLEngine on

# add certificate path
SSLCertificateKeyFile /etc/apache2/ssl/server.key
SSLCertificateFile /etc/apache2/ssl/server.crt

In die Datei ‚/etc/apache2/sites-available/default-ssl werden weitere Einträge gemacht.

<VirtualHost *:443>
# Add for GIT Server

  ServerName git.example.com
  ServerAdmin webmaster@example.com
  ErrorLog /var/log/apache2/git_apache_error.log

  SetEnv GIT_PROJECT_ROOT /home/git
  SetEnv GIT_HTTP_EXPORT_ALL
  SetEnv REMOTE_USER=$REDIRECT_REMOTE_USER
  ScriptAlias /git/ /usr/lib/git-core/git-http-backend/

  <Directory „/usr/lib/git-core/“>
      AllowOverride None
      Options +ExecCGI -Includes
      Order allow,deny
      Allow from all

    </Directory>

  <LocationMatch „^/git/.*$“>
      AuthType Basic
      AuthName „My Git Repositories“
      AuthUserFile /etc/apache2/gitusers.passwd
      Require valid-user
   </LocationMatch>

   SSLEngine on

    SSLCertificateKeyFile /etc/apache2/ssl/server.key
    SSLCertificateFile /etc/apache2/ssl/server.crt

    # Server Certificate Chain:
    <FilesMatch „\.(cgi|shtml|phtml|php)$“>
        SSLOptions +StdEnvVars
    </FilesMatch>
   

     <Directory /usr/lib/cgi-bin>
         SSLOptions +StdEnvVars
     </Directory>
</VirtualHost>

Für Apache muss der folgende Module aktiviert werden ’ssl“.

root@xxx: a2enmod ssl

Nach dem alle Einstellungen durchgeführt worden sind sollte die ‚default-ssl‘ Seite aktiviert werden und Apache neu gestartet sein.

root@xxx: a2ensite default-ssl

root@xxx: /etc/init.d/apache2 reload

Den Server testen

Der Remote Server Git Repository sollte zunächst initialisiert werden. Man wechselt zunächst in dem Repository Verzeichnis an dem Remote Server und führt den folgenden Befehl aus.

root@xxx

: git config --bool core.bare true

Die Push Möglichkeit von einem lokalen Repository zu einem Remote Repository sollte jetzt auch möglich sein.

Nun sollte eine Passwortanfrage kommen. Nach dem der Passwort verifiziert worden ist, wird der Repository geklont.

 

WPF und Databindings

Zurzeit beschäftige ich mich sehr stark mit WPF (Windows Presentation Foundation) und Databindings. Dabei stellte sich die Frage, was ist eine Databinding und wofür ist sie unter WPF da.

Um es einfach zu erklären ist Data binding nichts anderes wie, dass eine Datenquelle mit einem Element verbunden ist. Ein Element kann z.B ein TextBlock, Label oder Listbox sein. Durch die Bindung erfolgt die Synchronisation des Elements durch die Datenquelle.

In dem unten gezeigten Fenster, ist der gelbmarkierte WPF Element ein ‚TextBox‘. In diesem wird ein Text eingetippt.

Durch die Datenbindung wird der eingetippte Text sofort in dem WPF Element ‚TextBlock ‚ (Blau markiert) gezeigt.

Einfach ausgedrückt ist der TextBox die Datenquelle (Source) und das Element ‚TextBlock‘, die Destination der ankommenden Daten.

Die Datenbindung kann direkt in der XAML Sprache innerhalb des Visual Studio Projektes realisiert werden. Während des Build Vorgangs entsteht die zugehörige c# Datei.

Die zweite Möglichkeit besteht darin, die Datenbindung direkt als c# Code zu schrieben.

In den folgenden Beispielen werde ich das Verfahren der Databinding mit XAML beschreiben. XAML ist eine Beschreibungssprache, welches von der Firma ©Microsoft entwickelt wurde.

XAML = Extensible Application Markup Language

Das obige Beispiel sieht in XAML wie folgt aus:

Damit der ‚TextBlock‘ Texteingaben empfangen kann, muss der Eigenschaft ‚Text‘ des Elements ‚TextBlok‘ gebunden werden mit dem Eigenschaft ‚Text‘ (Gelb markiert), der Datenquelle.

<TextBlock TextWrapping=“Wrap“ Text=“{Binding Text, ElementName=InputTB}“/

 

Zusätzlich wird der Name des Elements „InputTB“ übergeben, an die Eigenschaft der Binding – Klasse ‚ElementName‘. Damit ist die Bindung welches in XAML realisiert worden ist, vollständig.

Die vollständige Binding an den ‚TextBlock‘ kann auch wie folgt dargestellt werden.

<TextBlock TextWrapping=“Wrap“ Text=“{Binding Path=Text, ElementName=InputTB}“/>

 

‚Path‘ ist ebenfalls eine Eigenschaft der Binding – Klasse. In diesem wird die Bindungsquellen Eigenschafft ‚Text‘ zugewiesen.

Farbige Bash Console unter Debian

Wenn Ihr eine farbige Bash Console haben wollt, müsst ihr unter dem Home Verzeichnis des Benutzers folgende Datei öffnen:

nano /home/userofthemachine/.bashrc

Anschließend entfernt ihr bitte die Hash Zeichen ‚#‚, so dass die Zeilen, wie unten aussehen.

# You may uncomment the following lines if you want `ls‘ to be colorized:

export LS_OPTIONS=‘–color=auto‘

eval „`dircolors`“

alias ls=’ls $LS_OPTIONS‘

 

Durch den Befehl ‚alias‘ wird der ‚ls‘ Befehl, wie folgt aufgerufen ‚ls –color=auto

Was bewirkt nun der Befehl – ‚ls –color=auto‘

Die Ausgaben des ‚ls‘ Befehls (list directory contents) für bestimmte Dateitypen und Verzeichnisse werden farbig gezeigt.

  • Verzeichnisse sind in blauer Schrift
  • Ausführbare Script Dateien sind in grüner Farbe
  • Usw.

Wenn die Farben geändert werden sollen, so kann der Befehl wie unten gezeigt aufgerufen werden um eine eigene ‚Dircolor‘ Datei zu erzeugen

Dircolors –p > /home/username/.owndircolor

Wenn ihr die Date ‚.owndircolor‘ öffnet, so könnt Ihr explizit eure eigenen Einstellungen durchführen und die Datei abspeichern.

Schließlich ersetzen wir den Eintrag „eval „`dircolors`„‚ in der Datei ‚bashrc‘

# You may uncomment the following lines if you want `ls‘ to be colorized:

export LS_OPTIONS=‘–color=auto‘

eval „`dircolors -b ~/.owndircolor`“

alias ls=’ls $LS_OPTIONS‘

Nach dem Log out und Login sind die neuen Einstellungen aktiv.

 

 

 

 

 

 

Smartmontools hinter einem MegaRaid LSI Raid Controller

Immer wieder haben wir das Problem, dass unsere Server ausfallen. Das Hauptproblem war, trotz RAID, meistens unsere Festplatten.

Die Verfügbarkeit unsere Server war also immens schlecht. Wir starteten eine Analyse, um die Situation zu verbessern.

Irgendwie muss uns das System warnen, wenn unsere Festplatten langsam die Grätsche machen.  Wie wir wissen, besitzt jede Festplatte die Möglichkeit einer Selbstdiagnose (S.M.A.R.T = Self – Monitoring, Analysis and Reporting Technology). Hierbei werden wichtige Parameter überwacht. Für die Auswertung dieser Parameter können wir das Werkzeug Smartmontools verwenden.

Unter Debian wird die Software zur Verfügung gestellt. Das Packet kann mit Root Rechten wie folgt installiert werden.

aptitude install smartmontools

Für die Überwachung startet die Software, ein Daemon ’smartd‘. Die Einstellungen für die Überwachung befinden sich in der Datei.

/etc/smartd.conf

Als erstes versuchte ich ein Scan um die Verfügbaren Geräte im System zu bekommen.

root@xxx: smartctl –scan /dev/sda -d scsi # /dev/sda, SCSI device

Das Ergebnis sind nicht die Festplatten im System sondern der Hardware Raidcontroller selbst.

Es stellte sich die Frage, wie komme ich an die einzelnen Festplatten hinter dem Hardware Raid Controller ran?

Dazu muss unter Debian entsprechende Tools für dein Raid Karte verfügbar gemacht werden.

Dazu muss in der source.list Datei folgen Eintrag durchgeführt werden.

root@xxx: nano /etc/apt/source.list

Der Eintrag in die Datei sieht, wie folgt aus.

Anschließend muss die GPG Signatur geholt werden.

root@xxx: wget -O – http://hwraid.le-vert.net/debian/hwraid.le-vert.net.gpg.key | sudo apt-key add –

Weiterführende Informationen findet ihr unter der Link

Nun werden die Tools für meine Raid Karte installiert mit Hilfe der Liste in dem oben genannten Link.

root@xxx: aptitude install megacli 

Als nächstes musste ich herausfinden mit welcher ID die Festplatten von dem Raid Controller verwaltet werden.

root@xxx: megacli -PDlist -a0 | grep ‚^Device Id:‘ 

Nach dem ich die ID herausgefunden habe, kann ich folgende Einträge in der Konfiguration Datei ‚/etc/smartd.conf‘ durchführen

 

# DEVICESCAN may be followed by any desired Directives.
# LSI MegaRAID
/dev/sda -d megaraid,xx  -a -W 8,50,60 -R 5 -s S/../.././02
-M daily -M test -m yourname@youraddress  -M exec /usr/local/bin/ssmtp_mail
/dev/sda -d megaraid,xx  -a -W 8,50,60 -R 5 -s S/../.././02 -M daily -M test -m yourname@youraddress  -M exec /usr/local/bin/ssmtp_mail
/dev/sda -d megaraid,xx  -a -W 8,50,60 -R 5 -s S/../.././03 -M daily -M test -m yourname@youraddress  -M exec /usr/local/bin/ssmtp_mail

/dev/sda -d megaraid,xx  -a -W 8,50,60 -R 5 -s S/../.././04 -M daily -M test -m yourname@youraddress  -M exec /usr/local/bin/ssmtp_mail
 

-a     // all test values shall be examined

-W   // Warn when there is a temperature step of 8°C. Also warn when the temperaqture is between 50 and 60°C

-R 5 // Warn when new sectors are reallocated.

-s S/../.././x // Between 2 and 4 O’clock, the tests shall be started

-M  daily  // When the are errors detected, the warning shall be sent daily

– M test // After each start of the smartmontool deamon, a test Email shall be sent

– m yourname@youraddress // self explained

-M exec // call the script to collect the data and to send via mail

xx = The ID of the hard drive in your system

 

 Damit der smartd Dämon bei eventuellen Systemneustart wirklich auch gestartet wird, muss in der  Konfigurationsdatei ‚etc/default/smartmontools‘, folgender Eintrag gemacht werden.

# uncomment to start smartd on system startup
start_smartd=yes
# uncomment to pass additional options to smartd on startup
smartd_opts=“–interval=3600″

Die zweite unkommentierte Zeile legt fest, in welchen Intervallen die Überprüfung stattfinden soll.

In unserem Fall wird alle 1h,  die Überprüfung aufgerufen.

Danach sollte der ’smartd‘ Dämon neu gestartet werden.

root@xxx: /etc/init.d/smartd restart

 

Trouble Shooting

Es kann euch passiren, dass nach Aufruf von ’smartctl‘, diese Meldung kommt ‚Device is: Not in smartctl database‘.

Deshalb muss der Smartmontools Datenbank für die Festplatten aktualisiert werden.

Hierzu muss der folgende Befehl in die Kommandozeile eingetippt werden.

root@xxx: update-smart-drivedb

Das Ergebnis ist wie folgt:

/usr/share/smartmontools/drivedb.h updated from branches/RELEASE_5_41_DRIVEDB

Achtung:

Unter Debian Wheezy hatte ich Probleme mit der Aktualisierung der Datenbank. Nach Recherchen habe ich herausgefunden, dass ein veraltetes Download link beim Aufruf von ‚update-smart-drivedb‘ verwendet wird.

Durch Anpassen des Links in der Datei ‚/usr/sbin/update-smart-drivedb‘, wird das Problem beseitigt.

root@xxx: nano /usr/sbin/update-smart-drivedb

In der geöffneten Datei sollte der unten genannte Eintrag stehen.

# ViewVC repository browser
SRCEXPR=‘http://sourceforge.net/p/smartmontools/code/HEAD/tree/$location/smartmontools/drivedb.h?format=raw‘

 

Smartmontools Benachrichtigung über Email

Nach dem alles soweit eingerichtet ist, bestand der Wunsch dahin, dass das System den verantwortlichen Administrator, bei einem Festplattendefekt, sofort eine E-Mail Benachrichtigung versendet.

Wir haben als MTA (Mail Transfer Agent) die Software ’ssmtp‘ ausgesucht. Die Software dient ausschließlich zum Senden von Mails. Ein Empfang vom System ist aus Sicherheitsgründen nicht vorgesehen.

Die Software ist sehr simple. Sie kann an eine Vorgegebene EMailadresse, die Systemnachrichten versenden. Eine entsprechende Authentifizierung kann das Tool durchführen.

Standardmäßig wird das Smartmontool die interne Mail benützen.

Mit einem Script sorgen wir dafür, dass Smartmontools alle notwendigen Informationen in eine Text Datei speichern kann. Anschließend ruft das Skript die Software ’ssmtp‘ auf.

Ich platzierte das Skript ’ssmtp_mail‘ in das Verzeichnis ‚/usr/local/bin/‘. Das Skript entstand mit Hilfe der Manpage von Smartmontools

root@xxx: nano /usr/local/bin/ssmtpmail

Das Skript selbst sieht wie folgt aus.

#!/bin/bash
#@authors: Hakan Eryigit
#@version 1.0
#create 2014 / 01 / 04
#
# This script file is related for the xxx hypervisor
# First a Email header is generated after that the outputed
# information of Smartmontools will be written in to a temporary file.
# Finally ssmpt tool is called to send the  mail.
# The last operation is to remove the temporary file
# Macro for temporary file with its name
FILE_TEMPORARY=/tmp/smartInfo
# The directory of the ssmtp tool

SSTMP_DIRECTORY=/usr/sbin/ssmtp

echo To:  $SMARTD_ADDRESS > $FILE_TEMPORARY
echo Subject:  „$SMARTD_SUBJECT“ >> $FILE_TEMPORARY

# Save the content of the macro in to a file. See man page as example
cat >> $FILE_TEMPORARY

# Append the output of smartctl : in to the given file
smartctl -a -d $SMARTD_DEVICETYPE $SMARTD_DEVICE >> $FILE_TEMPORARY

# Now email the message to the user at address ADD:
$SSMTP_DIRECTORY  $SMARTD_ADDRESS <  $FILE_TEMPORARY

# Cleaning. The temporary file shall be removed
rm $FILE_TEMPORARY

Nur root soll auf diesen Skript zugreifen und das Skript soll ausführbar sein!

root@xxx: chown root:root /usr/local/bin/ssmtpmail
root@xxx: chmod +x /usr/local/bin/ssmtpmail

Als letztes wird in der Datei ‚/etc/smartd.conf‘ folgende Einstellung hinzugefügt.

-M exec /usr/local/bin/ssmtp_mail -M test
-M exec // specified explicit path for the used system mail. In our case, the script is giving the path.

Nach Abschluss der Arbeiten muss der Deamon neu gestartet werden. Das System muss uns ein Statusbericht via Email verschickt haben.

root@xxx: /etc/init.d/smartd restart

Bitte überprüfen ob eine Statusmeldung in Email Postfach vorliegt. Das Ganze kann eine weile Dauern.

Smartmontools hinter einem Adaptec Raidcontroller

 FFM1 Server

Unser Server 1 entspricht momentan den aktuellen Stand der Technik. Der Plattenarray wurde als Raid 10 aufgesetzt, welches durch einen Adaptec Raid Controller verwaltet wird. Auch für diesen Server wollen wir Smartmontools Überwachung implementieren. Entsprechend besteht der Wunsch, die SMART Daten hinter einem Raid Controller Array zu erhalten.

Jedoch stellte sich heraus, dass wir auf jedenfalls die generischen SCSI Subsystem Treiber benötigen, da unser System auf SAS Platten aufsetzt. 

Vorsicht: Alle in diesem Artikel erwähnten Befehle werden als root ausgeführt.

Dazu lade ich mit nachfolgenden Befehl die ’sg‘ Treiber.

root@xxx:modprobe sg 

Jedoch ist der Treiber beim nächsten Systemstart nicht geladen. Deshalb muss der generische Treiber persistent beim Systemstart mit geladen werden.

Dazu öffnen wir die Datei ‚modules‘ mit dem folgenden Befehl.

root@xxx: nano /etc/modules

Und machen diesen Eintrag

# /etc/modules: kernel modules to load at boot time.
#
# This file contains the names of kernel modules that should be loaded
# at boot time, one per line. Lines beginning with „#“ are ignored.
# Parameters can be specified after the module name.
# 20140315 HE – Loading of SCSI generic subsystem driver during system start
sg

Das Ganze sollte getestet werden, in dem man ein Neustart durchführt. 

Nachdem Neustart kann der Befehl ‚lsmod‘ ausgeführt werden. Dieser Befehl listet quasi alle geladenen Module auf.

root@xxx: lsmod | grep -i sg

Nun können wir unser Festplatten hinter einem Raid Controller sehen.

root@xxx: smartctl -d scsi –all /dev/sgX

root@xxx:   smartctl -d scsi –all /dev/sg1

root@xxx:   smartctl -d scsi –all /dev/sg2

usw

 

Nun möchten wir, dass der Smart Deamon jeden Tag für uns die automatische Festplattentests durchführen lässt.  Bei Fehler soll der Deamon eine Systemnachricht schicken.

Wir öffnen die Datei ‚/etc/smartd.conf‘ und machen folgende Einträge

# DEVICESCAN may be followed by any desired Directives.
# Adaptec Raidcontroller
/dev/sgXX -d scsi -a -W 8,50,60 -R 5 -s S/../.././02 -M daily -M test -m yourname@youraddress -M exec /usr/local/bin/ssmtp_mail

/dev/sgXX -d scsi -a -W 8,50,60 -R 5 -s S/../.././02 -M daily -M test -m yourname@youraddress -M exec /usr/local/bin/ssmtp_mail
/dev/sgXX -d scsi -a -W 8,50,60 -R 5 -s S/../.././03 -M daily -M test -m yourname@youraddress -M exec /usr/local/bin/ssmtp_mail
/dev/sgXX -d scsi -a -W 8,50,60 -R 5 -s S/../.././04 -M daily -M test -m yourname@youraddress -M exec /usr/local/bin/ssmtp_mail

 
 

-a // all test values shall be examined

-W // Warn when there is a temperature step of 8°C. Also warn when the temperaqture is between 50 and 60°C

-R 5 // Warn when new sectors are reallocated.

-s S/../.././x // Between 2 and 4 O’clock, the tests shall be started

-M daily // When the are errors detected, the warning shall be sent daily

– M test // After each start of the smartmontool deamon, a test Email shall be sent

– m yourname@youraddress // self explained

-M exec // call the script to collect the data and to send via mail

XX = The number of SCSI devices in your system, depends of RAID type in your system.

Damit der smartd Dämon bei eventuellen Systemneustart wirklich auch gestartet wird, muss in der Konfigurationsdatei ‚etc/default/smartmontools‘, folgender Eintrag gemacht werden.
# uncomment to start smartd on system startup
start_smartd=yes

# uncomment to pass additional options to smartd on startup
smartd_opts=“–interval=3600″

Die zweite unkommentierte Zeile legt fest, in welchen Intervallen die Überprüfung stattfinden soll.

In unserem Fall wird alle 1h, die Überprüfung aufgerufen.

Danach sollte der ’smartd‘ Dämon neu gestartet werden.root@xxx: /etc/init.d/smartd restart

SSMTP (simple MTA)

Noch ist das System nicht ganz funktionsfähig. Für das Versenden der Systemnachrichten benötigen wir noch ein smtp Programm (simple mail transfer agent MTA). Wir haben hierfür das Software Packet ’sstmp‘ ausgesucht. Die Software ist relative einfach zu konfigurieren und kann eigentlich nur Systemnachrichten versenden.

Zunächst muss das Tool installiert werden.

root@xxx: aptitude install ssmpt

Nun muss die Konfigurationsdatei mit einem geeigneten Editor geöffnet werden.

root@xxx: nano /etc/ssmtp/ssmtp.conf

Nun werden die Einstellungen durchgeführt.

#
# Config file for sSMTP sendmail
#
# The person who gets all mail for userids < 1000
# Make this empty to disable rewriting.
root=theUsert@who.de

# The place where the mail goes. The actual machine name is required no
# MX records are consulted. Commonly mailhosts are named mail.domain.com
mailhub=your.mail.hub@yourcountry

# Where will the mail seem to come from?
#rewriteDomain=

# The full hostname
hostname=localhost.localdomain

# Are users allowed to set their own From: address?
# YES – Allow the user to specify their own From: address
# NO – Use the system generated From: address
#FromLineOverride=YES

# Importent entries are below

UseSTARTTLS=YES
UseTLS=YES
AuthUser=theUser@who.de
AuthPass=yourpasswort for the EMail account

Nach dem alle Einstellungen in der Datei ’ssmtp.conf‘ durchgeführt worden sind muss in der Datei ‚/etc/ssmtp/revaliases‘ die Benützer / User eingetragen welches die MTA benützen dürfen.

root@xxx: nano /etc/ssmtp/revaliases

Nach dem Öffnen der Datei, werden die Benützer eingetragen.

root:theUser@who.de:smtp.who.de:587
www-data:theUser@who.de:smtp.who.de:587

Wir haben also den User ‚root‘ und der User des Webservers ‚www-data‘ erlaubt Systemnachrichten zu versenden.

Achtung: Bitte denk daran, dass der Firewall den Verkehr am Port 587 nach außen weiterleiten darf. Ansonsten werden keine Systemnachrichten versendet.