Dienstag, 7. Juli 2015

CIFS über SSH

Um eine CIFS Verbindung über einen SSH Tunnel zu fahren, muss zuerst der SSH Tunnel aufgebaut werden. Dabei sollte statt des veralteten Port 139 der aktuellere Port 445 verwendet werden, da es ansonsten zu Problemen kommen kann.

Der Aufbau der SSH Verbindung kann auf unterschiedliche Weise geschehen. Die einzelnen Verfahren haben dabei Vor- und Nachteile.

  1. Aufbau im Vordergrund ohne Command. Hier muss man den Tunnel manuell in der Hintergrund schicken
    ssh -N -L 10445:10.5.107.32:445 user@jumpserver
    
  2. Aufbau im Hintergrund ohne Command. Zum stoppen muss der Prozess gefunden werden.
    ssh -f -N -L 10445:10.5.107.32:445 user@jumpserver
    
  3. Aufbau im Hintergrund mit Master ohne Command. Extra Aufwand, dafür gute Steuerung
    ssh -f -N -M -S  -L 10445:10.5.107.32:445 user@jumpserver
    
  4. Aufbau im Hintergrund mit Timeout. Auto-Close
    ssh -f -L 10445:10.5.107.32:445 user@jumpserver sleep 60
    

Sobald die Verbindung steht, kann man dann einen CIFS Mount durchführen:

mount -t cifs //WINSERVER/SHARE /mnt/ -o user=winuser,port=10445,ip=127.0.0.1,domain=windomain

Freitag, 19. Juni 2015

Bind-Variables vs. Substitution-Variables

Substitution-Variables werden durch & bzw. && gekennzeichnet. Diesen kann optional ein Name folgen. Bei & (temporary substitution variable) fragt SQL Developer jedes Mal nach dem Wert. Bei && (permanent substitution variable) wird ein einziges Mal gefragt und der Wert an allen Stellen eingesetzt. Der Wert ist jedoch ein einfacher String-Wert, so dass ggf. Quotes verwendet werden müssen.
Die Verwendung von Substitution-Variables kann durch die Eingabe von
set define off; 
abgeschaltet werden. Dies ist insbesondere dann von Interesse, wenn ein zu prüfender String ein & Zeichen enthält.

Häufig werden eher Bind-Variables benötigt. Diese werden als Name mit einem : als Prefix gekennzeichnet (z.B. :foo). Für diese wird einmal der benötigte Wert angefragt und dann an allen Stellen der Query eingefügt.
Beispiel:

select :foo, :foo || :foo from dual;


Montag, 8. September 2014

Executors and Job Queues

Wenn ich eine Reihe von Jobs (Runnable oder Callable) habe, die ich gerade parallel ausführen lassen möchte, kann ich das mit Threads lösen. Die modernere Variante sind jedoch angepasste Executoren. Hier wird es aber schnell aufwendig, wenn ich eine Queue der beendeten Futures verwalten möchte. Eine einfachere Lösung bietet hier Guava mit der ListenableFuture Klasse an. Mit Hilfe der Executor-Decoratoren lassen sich die Standard Java Executoren verwenden, so dass der Code-Overhead an dieser Stelle minimiert werden kann. Ein kleines Anwendungsbeispiel lässt sich in oben erwähntem Link finden.


Dienstag, 2. September 2014

Reflection, neue Instanz und Generics

Es gibt Gelegenheiten, wo man eine Klasse über Reflection erzeugen möchte, dabei aber auch hässliche Casts verzichten will.

Am einfachsten geht die wie folgt:
Class<?> genClazz = Class.forName(className);
Class<? extends XYZ> clazz = genClazz.asSubclass(XYZ.class);
Constructor<? extends XYZ> ctor = clazz.getConstructor(String.class, Integer.TYPE);
XYZ var = ctor.newInstance("bla", 10);

Donnerstag, 31. Juli 2014

Abstellen der temporären IPv6 Adresse unter Windows

Im internen Netzwerk kann die temporäre IPv6 Adresse eher stören, wenn Dienste diese per DNS Request versuchen aufzulösen, da sie nicht im DNS eingetragen wird. Daher kann es, um Wartezeiten zu vermeiden, praktisch sein, diese abzuschalten.

Hierzu müssen in einer Admin-Shell folgende Befehle eingegeben werden:

netsh interface ipv6 set privacy state=disabled store=active
netsh interface ipv6 set privacy state=disabled store=persistent
netsh interface ipv6 set global randomizeidentifiers=disabled store=active
netsh interface ipv6 set global randomizeidentifiers=disabled store=persistent
Nach einem Reboot sollten keine neue temporären IPv6 Adressen erstellt werden. Quelle: https://knowledge.zomers.eu/misc/Pages/How-to-disable-temporary-IPv6-address-allocation-at-a-Windows-PC.aspx

Freitag, 6. Juni 2014

Konfiguration

Unter Ubuntu lassen sich installierte Pakete mittels des Befehls dpkg-reconfigure neu konfigurieren. Hinter dem Befehl muss aber der Name des gewünschten Paketes angegeben werden. Aber woher kommt dieser?

Mit Hilfe des Befehls debconf-show --listowners bekommt man eine Liste der Pakete, die mit debconf (und damit auch mit dpkg-reconfigure) konfiguriert werden. Mit debconf-show paketname bekommt man dann auch die aktuelle Konfiguration angezeigt.

Alternativ kann man das Programm configure-debian benutzen. Hier wird man grafisch durch eine Liste geführt. Falls man nicht die Pakete in Gruppen zusammengefasst haben möchte, muss man den Parameter --list beim Aufruf mit angeben.

Montag, 2. Juni 2014

rsync

Als Notiz (schließlich heißt das hier Notizbuch) die rsync Parameter:

Einfache Kopie
rsync --stats --archive --verbose --compress --partial --progress --rsh=ssh \
   source user@dest:/directory
Kopie mit Checksumme
rsync --checksum --stats --archive --verbose --compress --partial --progress \
   --rsh=ssh source user@dest:/directory
Prüfung ohne Kopiervorgang
rsync --dry-run --stats --archive --verbose --compress --partial --progress \
   --rsh=ssh source user@dest:/directory