Synology Git-Server einrichten

Wer ein Synology NAS besitzt kann sich recht einfach einen eigenen Git-Server einrichten. Leider war die Anleitung zur Nutzung des Git-Servers für mich etwas irreführend, daher habe mir Infos zusammengesucht und beschreibe hier nochmal, wie man Git zusammen mit der Synology nutzen kann. Die meisten Infos habe ich von hier erhalten.

Installation

Um den Git-Server zu installieren, öffnet man in der DSM-Oberfläche als Admin das Paketzentrum und sucht nach Git. Beim Git-Server klickt man auf „Installieren“.

Synology-Git-suchen

Falls nach dem Installieren nicht automatisch das folgende Fenster geöffnet wird, sucht man in der DSM-Oberfläche im Hauptmenü nach dem Git-Server und klickt das Symbol an. Es öffnet sich das folgende Fenster in dem man die User auswählt, die Zugriff über den Git-Server auf Git-Repositories auf der Synology erhalten sollen. Haken unter „Zugriff erlauben“ für den oder die Benutzer setzen und dann „Übernehmen“ auswählen.

Synology-Git-Benutzer-erlauben

Windows Dateidienst (und WebDAV) aktivieren

Falls noch nicht geschehen, aktiviert man den Windows Dateidienst. Die Git-Repositories werden direkt auf der Synology im Home-Verzeichnis des Synology-Benutzers angelegt, den man benutzt. Um sich die Arbeit zu vereinfachen kann man sich das Home-Verzeichnis des Synology-Benutzers auf seinem Client-Rechner einbinden. Dazu hat man verschiedene Möglichkeiten, ich habe den Windows-Dateidienst gewählt. Zum Aktivieren die Systemsteuerung starten und „Dateidienste“ auswählen.

Synology-Dateidienste-1

Dort nun einen Haken bei „Windows Dateidienst aktivieren“ setzen und auf „Übernehmen“ klicken.

Synology-Dateidienste-3

Für den Zugriff über Linux sollte man WebDAV aktivieren. Interessanterweise wurde mir mein home-Verzeichnis nicht angeboten, als ich unter Linux per SMB die Verbindung hergestellt habe. Daher noch auf den WebDAV Reiter wechseln und WebDAV aktivieren.

Synology-Dateidienste-2

Git-Repository unter Windows anlegen

Bei mir ist meine Synology unter \\CalibanStation erreichbar. Um nun das Home-Verzeichnis nutzen zu können, öffnet man einen Windows-Explorer und gibt in der Adresszeile die Adresse der eigenen Synology in der Form \\Servername oder \\IP-Adresse ein. In meinem Fall \\CalibanStation. In der Ansicht sollte das „home“-Verzeichnis auftauchen. Das öffnet man nun und legt ein „git“ Verzeichnis an. Es sollte dann ähnlich wie im folgenden Screenshot aussehen:

home-1

Für die weiteren Arbeiten benötigt man Git. Als Windows-Anwendung kann man dazu TortoiseGit nutzen, welches man hier herunterladen kann. Nachdem TortoiseGit installiert ist, wechselt man in das git-Verzeichnis auf dem geöffneten Synology-Home-Verzeichnis. Hier legt man nun ein neues Unterverzeichnis an, z.B. „MeinGitProjekt“ und wechselt in das neue Verzeichnis. Wenn man im Windows-Explorer nun die rechte Maustaste klickt, sollte im Kontextmenü ein Eintrag „Git Create Repository here…“ aufgeführt sein. Diesen anwählen. Nun wird man gefragt, ob man ein „Bare“ Repository anlegen will. Ein solches Repository ist für den Server gedacht und entsprechend aktivieren wir hier die Option. Dann mit „Ok“ generieren lassen.

home-2

Ein neues Git-Repository ist damit auf dem Server angelegt. Eine Arbeitsversion kann man wie folgt auf den Client-Rechner auschecken.

In seinem Arbeitsverzeichnis auf dem Client-Rechner betätigt man die rechte Maustaste und wählt im erscheinenden Kontextmenü den Eintrag „Git Clone…“ aus. Der Zugriff auf das Git-Repository „MeinGitProjekt“ erfolgt per SSH. Als URL gibt man folgendes ein, benutzername muss auf den eigenen Benutzernamen angepasst werden, calibanstation als Adresse für das eigenen Synology NAS anpassen und zu guter letzt noch MeinGitProjekt dem Namen des eigenen Git-Repositories auf dem NAS anpassen:

ssh://benutzername@calibanstation/volume1/homes/benutzername/git/MeinGitProjekt

Bei meinem Beispiel sehen die Daten in den Fenstern von TortoiseGit wie folgt aus:

clone-1

TortoiseGit meckert den ihm unbekannten Host Key an. Da ich meinem Synology NAS vertraue, bestätige ich die Abfrage mit „Ja“.

clone-2

Nun werde ich nach dem Passwort des hier verwendeten Synology Benutzers benutzername gefragt. Eingeben und mit „Ok“ bestätigen, anschliessend wird das Git-Repository auf dem Client-Rechner ausgecheckt.

clone-3

Fertig!

Git-Repository unter Ubuntu Linux 14.10 anlegen

Unter Ubuntu benutze ich den Datei-Explorer. Im Datei-Explorer gibt es in der Seitenleiste einen Bereich „Netzwerk“. Dort sollte „Mit Server verbinden“ erscheinen. Den Eintrag auswählen. Falls der Eintrag nicht vorhanden ist, im Menü „Datei“ ist der Eintrag vorhanden.

ubuntu-1

Ich nutze hier WebDAV (wie weiter oben schon erwähnt), da mein home-Verzeichnis bei SMB nicht mit angezeigt wurde. Als Serveradresse gibt man „smb://IP-Adresse:Port“ ein, in meinem Beispiel entsprechend „davs://192.168.1.23:15237/“. Auf „Verbinden“ klicken. Hat man Benutzernamen und Passwort noch nicht hinterlegt, wird man nun danach gefragt. Hier sind Benutzername und Passwort des entsprechenden Synology-Benutzers einzutragen.

ubuntu-2

Nun sollte man alle Verzeichnisse angezeigt bekommen, die man in der Synology auf seinen Benutzeraccount zugeordnet hat. Es sollte auch das home-Verzeichnis angezeigt werden. Für die weiteren Arbeiten wechseln wir jetzt auf ein Terminal. Im Terminal wechselt man in das gerade gemountete Verzeichnis, welches im Gnome Virtual File System zu finden ist:

cd /run/user/1000/gvfs/

Hier sollte jetzt das gemountete Verzeichnis zu sehen sein:

/run/user/1000/gvfs$ ll
insgesamt 0
dr-x------ 3 calibanatspace calibanatspace   0 Dez 24 23:15 ./
drwx------ 9 calibanatspace calibanatspace 260 Dez 24 23:15 ../
drwx------ 1 calibanatspace calibanatspace   0 Dez 20 01:56 dav:host=192.168.1.23,port=15237,ssl=true/

Wechseln in das gemountete Verzeichnis, inklusive Sprung direkt ins home-Verzeichnis:

cd dav\:host\=192.168.1.23\,port\=15237\,ssl\=true/home/

Falls noch nicht vorhanden, legt man hier ein Hauptverzeichnis für seine Git-Repositories an. Bei mir habe ich ein neues Verzeichnis „git“ angelegt, in dem alle weiteren Git-Repositories angelegt werden:

mkdir git

Um nun ein neues Git-Repository anzulegen, lege ich ein Unterverzeichnis unter dem git-Verzeichnis an und erzeuge ein bare-Git-Repository:

mkdir git/MeinGitProjekt
cd git/MeinGitProjekt
git --bare init

Das leere Git-Repository kann nun in einem anderen Verzeichnis geclont werden. benutzername, IP-Adresse und Repositoryname sind entsprechend anzupassen.

cd ~/git
git clone ssh://benutzername@192.168.1.23/volume1/homes/benutzername/git/MeinGitProjekt

 

Auflösung von Ubuntu 14.10 unter Virtualbox zu gering

Wenn man Ubuntu (14.10) frisch in einer Virtualbox installiert, hat man erstmal nur die minimalste Auflösung von 640 x 480. Um das zu ändern in Ubuntu ein Terminal öffnen und folgende Zeilen eingeben:

sudo apt-get install virtualbox-guest-dkms

Anschliessend das virtualisierte Ubuntu neu starten und man bekommt eine grössere Auflösung angezeigt.

Die Lösung zum Problem habe ich hier gefunden gehabt.

Maven und Jetty Embedded

Ich war auf der Suche nach einem Applikationsserver oder Servletcontainer, den ich embedded laufen lassen kann. Ziel ist es, eine quasi Standalone-Webanwendung hinzubekommen, die keinen installierten Applikationsserver benötigt. Am Ende sollte ein java -jar anwendungs.jar reichen, um eine Webanwendung zu starten. Ich hab Jetty ausprobiert.

Um Jetty als embedded Servletcontainer laufen lassen zu können, habe ich folgende pom.xml zusammengestellt:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>de.yellowshoes.jettyembedded</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>test</name>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.1.5.v20140505</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>de.yellowshoes.jettyembedded.test.HelloWorld</mainClass>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>de.yellowshoes.jettyembedded.test.HelloWorld</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Noch kurz die wichtigsten Teile der pom.xml erklärt.

Damit werden die notwendigen Jar-Dateien von Jetty als Abhängigkeiten für das Projekt definiert:

        <dependency>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-server</artifactId>
            <version>9.1.5.v20140505</version>
        </dependency>

Mit dem exec-maven-plugin kann man per Maven eine beliebige Javaklasse (wenn sie denn eine main-Methode implementiert) über Maven Kommandozeile aufrufen. Im Beispiel wird versucht eine Klasse de.yellowshoes.jettyembedded.test.HelloWorld aufzurufen. Der Aufruf über die Kommandozeile sieht dann beispielsweise so aus: mvn clean compile exec:java

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.3</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>java</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <mainClass>de.yellowshoes.jettyembedded.test.HelloWorld</mainClass>
                </configuration>
            </plugin>

Um ein Standalone-Jar zu erzeugen, nutze ich hier das Share-Plugin. Damit wird das Jar gebaut und alle definierten Abhängigkeiten entpackt und mit ins erzeugte Jar eingefügt. Der Aufruf zum Bauen des Jar sieht so aus: mvn clean install

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-shade-plugin</artifactId>
                <version>2.3</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>shade</goal>
                        </goals>
                        <configuration>
                            <transformers>
                                <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                    <mainClass>de.yellowshoes.jettyembedded.test.HelloWorld</mainClass>
                                </transformer>
                            </transformers>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

Die erzeugte Jar-Datei sollte jetzt test-0.0.1-SNAPSHOT.jar heissen und mittels java -jar test-0.0.1-SNAPSHOT.jar gestartet werden können….wenn man die fehlende Klasse HelloWorld hätte 🙂

package de.yellowshoes.jettyembedded.test;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.jetty.server.Request;
import org.eclipse.jetty.server.Server;
import org.eclipse.jetty.server.handler.AbstractHandler;

public class HelloWorld extends AbstractHandler {

    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
        response.setContentType("text/html;charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello World</h1>");
    }

    public static void main(String[] args) throws Exception {
        Server server = new Server(8080);
        server.setHandler(new HelloWorld());

        server.start();
        server.join();
    }
}

KeePass + KeeFox + ArchLinux

Zuerst installiert man sich KeePass per Pacman

sudo pacman -S keepass

Anschliessend im Firefox die Erweiterung KeeFox installieren, dann Firefox neustarten.

Nun im KeePass Installationsverzeichnis ein plugins Verzeichnis anlegen. Dort wird gleich eine Datei reinkopiert, die für die Verbindung zwischen KeePass und KeeFox benötigt wird

sudo mkdir /usr/share/keepass/plugins

Nun folgenden Befehl ausführen, um eine Datei aus der KeeFox Installation ins Plugins-Verzeichnis der KeePass Installation zu kopieren. gf5ewe6 muss dabei entsprechend angepasst werden.

sudo cp ~/.mozilla/firefox/gf5ewe6.default/extensions/keefox@chris.tomlinson/deps/KeePassRPC.plgx /usr/share/keepass/plugins/

In den KeeFox Einstellungen die folgenden Werte eintragen:

Bildschirmfoto vom 2014-04-27 01:02:00

Bildschirmfoto vom 2014-04-27 01:02:11

Falls KeePass gestart ist beendet man es nun und startet es neu. Jetzt sollte folgende Fenster aufgehen. Über die Eingabe der roten Buchstabenfolge im unteren Fenster authorisiert man die Verbindung zwischen KeePass und KeeFox.

Verknüpfung KeePass und KeeFox

Anschliessend sollte folgende Fenster angezeigt werden. Entsprechend wählt man hier den passenden Button. Jetzt sollten die Accountdaten aus KeePass auch in Firefox zur Verfügung stehen.

Bildschirmfoto vom 2014-04-27 00:58:08

Win8.1 Update unter Virtualbox

Standardmässig scheint es nicht möglich zu sein, Win8.1 unter VirtualBox zu installieren oder das Update darauf durchzuführen. Damit es installiert werden kann, im Terminal folgenden Befehl ausführen:

"c:\Program Files\Oracle\VirtualBox\VBoxManage.exe" setextradata [vmname] VBoxInternal/CPUM/CMPXCHG16B 1

[vmname] ist dabei der Name der virtuellen Maschine, z.B. „Win8“. Enthält der Name Leerzeichen, ist er auf jeden Fall in Anführungszeichen zu setzen.

Gefunden auf http://www.winboard.org/win8-installation/150773-upgrade-von-8-auf-8-1-unter-virtualbox-cpu-nicht-unterstuetzt.html

Jboss: Logging einrichten

Über die JBoss CLI kann man für seine Applikationen Loggingkonfigurationen definieren, die in der Applikation genutzt werden können.

Zuerst richtet man einen Handler ein, der für das Schreiben in einer Datei zuständig ist:

/subsystem=logging/periodic-rotating-file-handler="DBLOCATOR":add(formatter="%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%E%n", append=true, file={"relative-to"=>"jboss.server.log.dir", "path"=>"dblocator.log"}, suffix=".yyyy-MM-dd", name="DBLOCATOR")

Anschliessend definiert man einen Logger, den man später in der Applikation ansprechen kann:

/subsystem=logging/logger=de.sauerspace.dblocator:add(level=INFO, handlers=["DBLOCATOR"], use-parent-handlers=false)

In der Applikation bekommt man den passenden Log4J Logger dann über folgende Anweisung:

Logger log = Logger.getLogger( "de.sauerspace.dblocator" );

 

JBoss: Datasources einrichten

Update:

Nach diversen Problemen mit dem Deployment von Treibern und Einrichten von Datasources hier noch eine andere Variante, die jetzt wohl weniger Probleme macht. Die folgenden Befehle werden im JBoss CLI ausgeführt. Dazu im bin-Verzeichnis der JBoss Installation jboss-cli.sh ausführen. Anschliessend mittels connect mit dem laufenden JBoss verbinden. Funktioniert auch mit dem Wildfly.

module add --name=org.postgresql --resources=postgresql-9.3-1100.jdbc41.jar --dependencies=javax.api,javax.transaction.api
/subsystem=datasources/jdbc-driver=postgres:add(driver-module-name=org.postgresql,driver-name=postgres,driver-class-name=org.postgresql.Driver)
/subsystem=datasources/data-source="BeispielDS":add(jndi-name="java:jboss/datasources/BeispielDS",max-pool-size=10,min-pool-size=5,driver-name="postgres",connection-url="jdbc:postgresql://localhost:5432/beispieldb",user-name="beispieluser",password="geheim")

Die Datasource kann dann unter java:jboss/datasources/beispieldb angesprochen werden.


 

Alter Text:

Um eine Datasource im JBoss einzurichten, kann man dies per JBoss CLI umsetzen.

Falls der passende Treiber für die Datenbank noch nicht installiert ist, macht man dies mit folgendem Befehl. Anschliessend ist der Treiber unter dem Namen postgres referenzierbar.

deploy postgresql-9.3-1100-jdbc4.jar --name=postgres

Eine Datasource legt man mit folgendem Befehl an:

/subsystem=datasources/data-source="DBLocator":add(jndi-name="java:jboss/datasources/dblocator",max-pool-size=10,min-pool-size=5,driver-name="postgres",connection-url="jdbc:postgresql://localhost:5432/dblocator",user-name="username",password="geheim")

 

Arch Linux, Virtualbox und VERR_SUPDRV_COMPONENT_NOT_FOUND

Beim Starten einer virtuellen Maschine unter VirtualBox wurde mir die Fehlermeldung VERR_SUPDRV_COMPONENT_NOT_FOUND angezeigt. Ich hatte vorher die Netzwerkkonfiguration der virtuellen Maschine auf „Netzwerkbrücke“ umgestellt, anschliessend kam die Fehlermeldung. Als Fehler stellte sich das nicht geladene VirtualBox Modul vboxnetflt heraus.

Zum Starten des Modules kann man

sudo modprobe vboxnetflt

ausführen. Kann die virtuelle Maschine anschliessend ohne Fehler gestartet werden, trägt man das fehlende Modul unter /etc/modules-load.d/virtualbox.conf ein. Meine virtualbox.conf sieht nun wie folgt aus:

vboxdrv
vboxnetflt

IMAP-Server syncen

In den letzten Wochen sind mir mehrmals Festplatten meiner „Server“ verreckt. Auf den Servern lief unter anderem mein Mailserver mit Dovecot. Nachts werden die Daten zwar immer gesichert, aber der letzte Crash fand genau zum Zeitpunkt des Backups statt. Daher konnte ich dieses Backup nicht nutzen. Zum Glück konnte ich auf die Festplatte noch per externem Festplattengehäuse zugreifen und den aktuellen Stand des Mailservers manuell sichern und in der neuen Installation wieder einspielen.

Aber wie kann man die Daten dann zeitnah sichern? Mir fiel ein, dass auf meinem Synology-NAS ein Mailserver aktiviert werden kann. Idee war nun, den Hauptmailserver mit dem Mailserver auf der Synology zeitnah zu syncen. Da auf der Synology auch noch ein Webmailer installiert werden kann, hätte ich so eine Notbehelfslösung beim nächsten Crash.

Ich hatte mir zuerst Offlineimap angeschaut. Leider zickt es mit selbstgenerierten Zertifikaten bei SSL Verbindungen. Dann Imapsync gefunden. Es kann komplett über die Kommandozeile gesteuert werden. Und, da ich meine Rechner mittlerweile alle unter Arch Linux laufen lasse, es findet sich ein passendes Installationspaket in AUR, dem Programmrepository welches von Nutzern gepflegt wird.

Nach der Installation von Imapsync habe ich mir ein Shell-Skript angelegt, welches den Aufruf von Imapsync kapselt. Da auf dem Mailserver nur mein Account liegt, ist es eine ganz simple Lösung.

Das Shellskript findet sich unter ~/imapsync_calibanatspace.sh und hat folgenden Inhalt:

#!/bin/bash
imapsync --host1 localhost --port1 993 --user1 benutzername1 --password1 geheimespasswort1 --ssl1 --host2 backupmailserver --port2 993 --user2 benutzername2 --password2 geheimespasswort2 --ssl2 --delete2

Das Shellskript wird per Cron regelmässig aufgerufen. Ich lasse den Syncvorgang testweise erstmal alle drei Stunden durchführen. Daher habe ich folgendes für meinen Benutzer in der Crontab eingetragen:

0 0,3,6,9,12,15,18,21 * * * ~/imapsync_calibanatspace.sh