Rss

  • youtube
  • google

Alexa die Google Suche beibringen – Amazon Echo

Mittlerweile ist der Markt für Sprachassistenten hart umkämpft und mit Google Home gibt es bald den ersten großen Konkurrenten für Amazon Echo.
Wer bereits ein Echo besitzt hat wohl gemerkt, dass Amazon scheinbar einen Vertrag mit Microsoft abgeschlossen hat – denn die Suchfunktion und etliche Features werden von Microsoft Bing bezogen. Von Google keine Spur.
Ich selbst stehe mit der Bing Suchmaschine eher auf Kriegsfuß und benutzte ausschließlich Google.

Ich selbst habe mir ein Echo Dot zugelegt und bin hier und da auf eine Sprachlose Alexa gestoßen, die mir leider nur mit „Entschuldigung, auf diese Frage habe ich leider keine Antwort“ auf  einige Fragen antwortet.

Beispiel: Ab welchem Alter ist man in Deutschland volljährig ?

Wie viele Länder gehören zu Europa ?

Von Haus aus gibt es leider nicht die Möglichkeit von Bing auf die Google Suche umzusteigen, jedoch kann man weitere Funktionalitäten in Alexa über die „Skills“ freischalten.
Ein paar schlaue Füchse haben hier einen Skill geschrieben, der das eigene Alexa an Google anbindet. Das ganze dauert ungefähr 5-10 Minuten.

Die Englischsprachige Anleitung und den Sourcecode findet ihr unter Github: https://github.com/tartanguru/alexa-google-search

Eine Videoanleitung gibt es hier:

Eine weitere (bebilderte) Anleitung, allerdings auf Englisch gibt es hier: http://alexamods.com/guide-install-ask-google-alexa-skill/.
Daher spare ich mir mal, eine weitere Anleitung zu schreiben.

Nach der Installation könnt ihr Alexa dann googlen lassen mit „Alexa frag Google: Was auch immer ihr wollt“.

LG G4 – Ein Custom Rom installieren

Mit der Veröffentlichung von Googles neuem High-End Flaggschiff (dem Pixel) wurde auch Android 7.1 herausgebracht. Die Hersteller haben sich bereits teilweise dazu geäußert, welche ihrer Geräte noch die neuste Android 7 Version erhalten werden – jedoch auch nicht vollständig bzw. ohne Terminangabe. T3n pflegt eine Liste mit Infos dazu, aus der sich entnehmen lässt, dass Android 7.1 bereits für das LG G5 ausgerollt wird. Ob und wann das Update für das LG G4 kommt ist noch offen.

Ich habe seit einigen Tagen das auf Android 7.1 basierende Custom-Rom CM14.1 (crDroid) auf meinem Handy installiert und bin bisher sehr zufrieden. Vorher hatte ich das Original Rom installiert und muss sagen, dass die Performance extrem zugenommen hat. Außerdem ist die Akkulaufzeit ein ganzes Stück besser als zuvor, da Android 7 auf eine „Batterieoptimierung“ setzt, wo durch das „stilllegen“ von Apps im Hintergrund der Akku geschont wird.

Wer also nicht warten kann, ist hier eine kleine Anleitung wie man das neueste Android auf sein LG G4 bekommt.
Das ganze passiert in 3 Schritten:

  1. Bootloader entsperren
  2. TWRP Recovery installieren
  3. Custom-Rom installieren

Continue Reading >>

Xiaomi Mi Flower Tester – Der smarte Blumenmonitor

20160622172713_83028Wer kennt es nicht: Da hat man sich mal wieder ein paar Tage nicht den Zimmerpflanzen gewidmet, schaut die ein oder andere nicht mehr ganz so grün drein. Wohl das gießen vergessen ?

Stellt sich die nächste Frage: Wie viel Wasser ist denn jetzt eigentlich gut für meine Pflanze? Was ist die optimale Temperatur? Muss man mal wieder Düngen, oder braucht sie mehr Sonnenlicht ?

Xiaomi hat hier ein nagelneues Gadget herausgebracht, welches das Wohlbefinden eurer Pflanzen überwachen soll. Der „Xiaomi Mi Plant Flowers Tester“. Ich habe mir das Teil für 10,50€ bei Gearbest aus China bestellt. Lieferzeit war ca. 10 Tage, aber nun habe ich das Gadget schon ein paar Tage bei mir im Wohnzimmer platziert.

Wie funktioniert es ?

Man steckt den Flower Tester einfach in die Erde neben die Wurzel der Pflanze. Dieser hat die folgenden Sensoren:

  • Feuchtigkeitsensor (Muss bewässert werden?)
  • Temperatursensor (Stimmt das Raumklima?)
  • Lichtsensor (Bekommt die Pflanze genug Licht?)
  • Nährstoffgehalt als elektrische Leitfähigkeit in µS/cm (Stimmt der Düngeranteil?)

Das ganze kommt mit einer Handelsüblichen CR2032 Knopfzellenbatterie aus.  Zur Laufzeit habe ich noch keine Informationen gefunden, werde euch aber auf dem Laufendem halten.

Continue Reading >>

Raspberry Pi 3 – Unnötige Pakete entfernen (Jessie)

Die beliebteste Distribution für den Raspberry Pi, das Raspbian wird mittlerweile in 2 Versionen zum Download angeboten. Einmal mit der neuen „Pixel“ Desktop Oberfläche und einmal als Lite Variante. Die „Pixel“ Version ist mittlerweile auf über 4GB angewachsen, was an den dutzenden vorinstallierten Apps liegt.

Den meisten kram wie Minecraft oder irgendwelche Entwicklungsumgebungen braucht man in der Regel ja eigentlich nie – also weg damit.
Ich habe mal eine Liste gemacht, mit den zusätzlich installierten Apps:

wolfram-engine
minecraft-pi
python-minecraftpi
sonic-pi
python3-numpy
smartsim
penguinspuzzle
timidity
scratch
nuscratch
python3-pygame
python-pygame
python-tk
python-picraft
bluej
claws-mail
greenfoot
minecraft-pi
nodered
geany
libreoffice*
xpdf

Um die Pakete zu deinstallieren folgenden Befehl absetzen:

apt-get remove wolfram-engine minecraft-pi python-minecraftpi sonic-pi python3-numpy smartsim penguinspuzzle timidity scratch nuscratch python3-pygame python-pygame python-tk python-picraft bluej claws-mail greenfoot minecraft-pi nodered geany libreoffice* xpdf

Anschließend gibt es noch eine Menge an nicht mehr benötigten Abhängigkeiten, die man ebenfalls deinstallierten sollte:

apt-get autoremove --purge

Was sagt ihr, gibt es noch weitere Pakete die man aufnehmen sollte ?

VMware Horizon View 6/7 – Smartcard Authentifizierung aktivieren

Um die Smartcard Authentifizierung des View Connection Servers zu aktivieren sind folgende Schritte notwendig.
Die Authentifizierung per Smartcard ist dann möglich bei Benutzerung von: View Horizon Client, PCoIP / Teradici, aber auch für die Administrationsoberfläche.

Zuerst muss mann ein Java Keystore anlegen in den das Root Zertifikat der eigenen Zertifizierungsstelle importiert wird.
Wenn man ein Zwischenzertifikat (Intermediate) benötigt, muss auch dieses Zertifikate importiert werden. (Einfach Schritt 1 wiederholen).

Schritt 1: Root Zertifikat in Keystore importieren

cd C:\Program Files\VMware\VMware View\Server\jre\bin
keytool.exe -import -alias ZertifikatsBeschreibung -file C:\temp\caRoot-base64.cer -keystore ..\..\sslgateway\conf\trust.key

Jetzt muss ein Passwort für den Keystore festgelegt werden. Das VMware Default Kennwort sollte hier eingetragen werden: secret
Mann kann auch ein eigenes Password wählen, dies muss dann aber auch in der locked.properties Datei eingetragen werden und bringt nicht wirklich eine höhere Sicherheit.Zusätzlich muss man dem angezeigtem, importiertem Zertifikat vertrauen (yes), damit es in den Keystore hinzugefügt wird.

Enter keystore password: secret
Re-enter new password:secret
Owner: your Certificate Information
Issuer: your Certificate Information
Serial number: your Serial Number
Valid from: Sun Jun 20 21:17:18 CEST 2010 until: Wed Jun 20 21:27:17 CEST 2040
Certificate fingerprints:
MD5:  your fingerprints
SHA1: your fingerprints
SHA256: your fingerprints
your fingerprints
Signature algorithm name: SHA1withRSA
Version: 3

Extensions:

#1: ObjectId: 1.3.6.1.4.1.311.21.1 Criticality=false
0000: 02 01 00                                           ...

#2: ObjectId: 2.5.29.19 Criticality=true
BasicConstraints:[
CA:true
PathLen:2147483647
]

#3: ObjectId: 2.5.29.15 Criticality=false
KeyUsage [
DigitalSignature
Key_CertSign
Crl_Sign
]

#4: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
.....
]
]

Trust this certificate? [no]:  yes
Certificate was added to keystore

Java Keystore erstellen

Schritt 2: locked.properties anlegen / ergänzen

Jetzt wechseln wir in das folgende Verzeichnis:

C:\Program Files\VMware\VMware View\Server\sslgateway\conf

Dort sollte sich nun unserer Keystore (trust.key) befinden. Damit der View Connection Server weiß, dass er die Datei laden soll, müssen wir nun eine neue Datei anlegen (falls nicht vorhanden) die: locked.properties heißt.
Die Datei mit Notepad editieren und mit folgenden Inhalt füllen:

trustKeyfile=trust.key
trustStoretype=jks
useCertAuth=true

Schritt 3: View Connection Server Service neustarten

Entwerder per CMD:

net stop wsbroker
net start wsbroker

Oder per services.msc
view-restart-service

Schritt 4: Smartcard Authentication innerhalb des View Administrators aktivieren

Nun muss noch im View Administrator die Smartcard Authentication aktiviert werden. Es gibt hier zwei Einstellungsmöglichkeite: Optional und Required. Bei Optional kann man sich wie wie gewohnt per User/Passwort authentifizieren. Wird eine Smartcard erkannt, wird diese aber gewählt. Bei Required ist eine Anmeldung per Smartcard verpflichtend.

Die Einstellung findet man unter: View Configuration -> Servers -> Connection Servers -> Server auswählen -> Edit -> Authentication

view-smartcard

Um zu überprüfen ob alles korrekt ist, kann man im debug log nach „useCertAuth“ suchen. Die Logs liegen unter: „C:\ProgramData\VMware\VDM\logs“

2016-09-16T13:43:50.488+02:00 DEBUG (1F48-1A98) <Front> [e] useCertAuth is configured as: false
2016-09-16T13:43:50.488+02:00 INFO (1F48-1A98) <Front> [e] Smart Card/Certificate Authentication will not be used as useCertAuth is false

bzw.

2016-09-16T14:56:15.505+02:00 DEBUG (1CD0-1D88) <Front> [e] useCertAuth is configured as: true
2016-09-16T14:56:15.505+02:00 INFO (1CD0-1D88) <Front> [e] Smart Card/Certificate Authentication enabled at gateway

Fertig 😉

SMTP Warteschlange (postqueue) unter Ubuntu leeren

Hat man aufgrund eines Problems auf einmal eine riesige Anzahl Mails in der SMTP Warteschlange eines Servers kann man diese auch händisch leeren.
Natürlich nur wenn die Mails nicht mehr relevant sind. Wie dies geht, bzw. wie man auch nur einzelne Mails aus dem Ausgang entfernt ist hier kurz beschrieben.

Klappt unter Ubuntu 14.04, sollte aber auch bei älteren Versionen sowie Debian funktionieren, da fast die gleichen Postfix Versionen eingesetzt werden.

Um die SMTP Warteschlange anzeigen zu lassen:

postqueue -p 

Führt zu der Ausgabe:


27389E2449 609 Mon Aug 8 13:17:40 nagios@domain.de
(host smtp.host[1.2.3.4] said: 451-Unknown sender ip address. check your settings. 451 2016-08-11-120-dad7d58089e2f4ab10811ddf75be38fd (in reply to MAIL FROM command))
absender@domain.de

-- 973 Kbytes in 1090 Requests.

Um die Warteschlange komplett zu löschen wird dies mit dem Befehl gemacht:

postsuper -d ALL
postsuper: Deleted: 1090 messages

Alternativ kann man aber auch nur einzelne Mails löschen indem man die ID angibt:

postsuper -d 27389E2449
postsuper: Deleted: 1 messages

Wenn man im Anschluss nochmal mit postqueue -p abfragt sollte man eine leere Warteschlange haben:

postqueue -p
Mail queue is empty

Vmware Horizon View 7 – Composer – Fix: „Internal View Composer Error“

vmwareviewcomposer

Beim Installieren eines neuen View Composers bin ich auf den folgenden Fehler gestoßen. Ich dachte zuerst an ein Zertifikatsproblem, da in den Logs zuvor SSL sehr oft erwähnt wurde. Bei genauerem hinsehen fällt aber ein „Access Denied“ auf, welches mich dann auf den richtigen Weg brachte.

Hat der Benutzer, welcher für die vCenter Anbindung verwendet wird, die passenden „lokalen“ Rechte auf dem Server ?
In meinem Setup habe ich den View Composer auf dem vCenter Server installiert und verwende Domänen-Benutzer. Ich hatten dem Benutzer volle Administrationsrechte im vCenter gegeben, jedoch keine lokalen Rechte (in Windows).

Lösung:

Also dem Benutzer der auch für den vCenter Zugriff verwendet wird lokale Administrationsrechte gegeben.
Anschließend den View Composer Dienst neustarten und über den View Administrator erneut probieren.

2016-07-12T15:52:34.598+02:00 DEBUG (0B40-0FA4) <Thread-43> [TrackerObject] Sync complete: DomainHealth:SERVERNAME|DOMAIN to version: 11
2016-07-12T15:52:34.600+02:00 DEBUG (0B40-0FA4) <Thread-43> [TrackerManager] Sending message: (TrackerMessage SYNC {}: {nn=SERVERNAME, u=[{„type“:“SET“,“item“:{„name“:“ATTR_DOMAIN_NAME“,“type“:“STRING“,“stringValue“:“DOMAIN“}},{„type“:“SET“,“item“:{„name“:“ATTR_DOMAIN_DNS“,“type“:“STRING“,…
2016-07-12T15:52:34.794+02:00 DEBUG (0B40-0E4C) <Thread-51> [TrackerObject] Sync complete: certificatessohealth:SERVERNAME to version: 11
2016-07-12T15:52:34.795+02:00 DEBUG (0B40-0E4C) <Thread-51> [TrackerManager] Sending message: (TrackerMessage SYNC {}: {nn=SERVERNAME, u=[{„type“:“SET“,“item“:{„name“:“name“,“type“:“STRING“,“stringValue“:“SERVERNAME“}},{„type“:“SET“,“item“:{„name“:“enrollserverconnection“,“type“:“NVPLIST“,“nvpList…
2016-07-12T15:52:34.795+02:00 DEBUG (0B40-0ED4) <EnhancedSecurityManager$EnhancedSecurityTask-1468330894772> [EnhancedSecurityManager$EnhancedSecurityTask] Current mode: ENHANCED current level: ENHANCED
2016-07-12T15:52:45.905+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [CertMatchingTrustManager] Created new CertMatchingTrustManager com.vmware.vdi.ssl.CertMatchingTrustManager@23e07a96 with ThumbprintManager com.vmware.vdi.desktopcontroller.LdapThumbprintManager@4320146b
2016-07-12T15:52:45.906+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [HardenedSSLSocketFactory] Creating new HardenedSSLSocketFactory, caller=com.vmware.vdi.ssl.HardenedSSLSocketFactory.<init>(SourceFile:67)
2016-07-12T15:52:45.907+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [HardenedSSLSocketFactory] SSL provider: SunJSSE version 1.8
2016-07-12T15:52:45.907+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [HardenedSSLSocketFactory] SSL protocol: TLSv1.2
2016-07-12T15:52:45.908+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [HardenedSSLSocketFactory] SSL secure protocols (2): [TLSv1.2, TLSv1.1]
2016-07-12T15:52:45.908+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [HardenedSSLSocketFactory] SSL cipher suites (6): [TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384, TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_128_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA]
2016-07-12T15:52:45.953+02:00 DEBUG (0B40-0938) <MessageFrameWorkDispatch> [MessageFrameWork] ValidateCertificateChain ok=1, msecs=0
2016-07-12T15:52:46.046+02:00 DEBUG (0B40-0938) <MessageFrameWorkDispatch> [MessageFrameWork] ValidateCertificateChain ok=1, msecs=0
2016-07-12T15:52:46.806+02:00 DEBUG (0B40-0938) <MessageFrameWorkDispatch> [MessageFrameWork] ValidateCertificateChain ok=1, msecs=0
2016-07-12T15:52:46.834+02:00 DEBUG (0B40-128C) <ajp-nio-8009-exec-4> [ViewFlexFactory] com.vmware.vdi.admin.ui.bean.VCServerBean.validateCertificate 37242 ms
2016-07-12T15:52:46.852+02:00 DEBUG (0D30-1344) <AJP-42> [SimpleAJPService] (ajp:admin:Request16) Response 200 OK
2016-07-12T15:52:53.873+02:00 DEBUG (0D30-1068) <Thread-27> [SimpleAJPService] (ajp:admin:Request17) Request from /10.0.101.55: POST /admin/amfproxy/amfsecure
2016-07-12T15:52:53.875+02:00 DEBUG (0D30-1068) <Thread-27> [SimpleAJPService] (ajp:admin:Request17) Gateway headers sent to the broker:
2016-07-12T15:52:53.875+02:00 DEBUG (0D30-1068) <Thread-27> [SimpleAJPService] (ajp:admin:Request17) gateway-type = [SG-cohosted]
2016-07-12T15:52:53.876+02:00 DEBUG (0D30-1068) <Thread-27> [SimpleAJPService] (ajp:admin:Request17) gateway-location = [Internal]
2016-07-12T15:52:54.585+02:00 DEBUG (0B40-0FB4) <CBHealthUpdate> [TrackerObject] Sync complete: BrokerHealth:SERVERNAME to version: 17
2016-07-12T15:52:54.587+02:00 DEBUG (0B40-0FB4) <CBHealthUpdate> [TrackerManager] Sending message: (TrackerMessage SYNC {}: {nn=SERVERNAME, u=[{„type“:“SET“,“item“:{„name“:“HEALTH_LAST_UPDATE_TIME“,“type“:“LONG“,“longValue“:1468331574585}},{„type“:“SET“,“item“:{„name“:“ATTR_BROKER_VERSION“,“type“:“ST…
2016-07-12T15:52:54.603+02:00 DEBUG (0B40-0938) <MessageFrameWorkDispatch> [MessageFrameWork] ValidateCertificateChain ok=1, msecs=0
2016-07-12T15:52:55.079+02:00 ERROR (0B40-1284) <ajp-nio-8009-exec-2> [VCServerBean] Internal View Composer error. Contact your administrator.
2016-07-12T15:52:55.083+02:00 DEBUG (0B40-1284) <ajp-nio-8009-exec-2> [ViewFlexFactory] Internal View Composer error. Contact your administrator. com.vmware.vdi.admin.ui.common.ViewFlexFactory$ViewProxy.invoke(SourceFile:125)
com.vmware.vdi.admin.ui.common.FlexRemoteException: Internal View Composer error. Contact your administrator.
at com.vmware.vdi.admin.ui.common.FlexFaultHandler.systemError(SourceFile:70)
at com.vmware.vdi.admin.ui.bean.VCServerBean.validateViewComposerCertificate(SourceFile:1758)
at com.vmware.vdi.admin.ui.bean.VCServerBean.validateViewComposerCertificate(SourceFile:1710)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at com.vmware.vdi.admin.ui.common.ViewFlexFactory$ViewProxy.invoke(SourceFile:113)
at com.sun.proxy.$Proxy60.validateViewComposerCertificate(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at flex.messaging.services.remoting.adapters.JavaAdapter.invoke(JavaAdapter.java:386)
at flex.messaging.services.RemotingService.serviceMessage(RemotingService.java:178)
at flex.messaging.MessageBroker.routeMessageToService(MessageBroker.java:1468)
at flex.messaging.endpoints.AbstractEndpoint.serviceMessage(AbstractEndpoint.java:1044)
at flex.messaging.endpoints.amf.MessageBrokerFilter.invoke(MessageBrokerFilter.java:101)
at flex.messaging.endpoints.amf.LegacyFilter.invoke(LegacyFilter.java:154)
at flex.messaging.endpoints.amf.SessionFilter.invoke(SessionFilter.java:42)
at flex.messaging.endpoints.amf.BatchProcessFilter.invoke(BatchProcessFilter.java:63)
at flex.messaging.endpoints.amf.SerializationFilter.invoke(SerializationFilter.java:190)
at flex.messaging.endpoints.BaseHTTPEndpoint.service(BaseHTTPEndpoint.java:328)
at flex.messaging.MessageBrokerServlet.service(MessageBrokerServlet.java:373)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:720)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:466)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:391)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:318)
at com.vmware.vdi.admin.ui.servlet.AMFProxyServlet.a(SourceFile:90)
at com.vmware.vdi.admin.ui.servlet.AMFProxyServlet.doPost(SourceFile:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:648)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:292)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.filters.FailedRequestFilter.doFilter(FailedRequestFilter.java:97)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.vmware.vdi.support.ViewAdminFilter.doFilter(SourceFile:103)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.vmware.vdi.admin.be.filters.CertificateAuthFilter.doFilter(SourceFile:140)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at com.vmware.vdi.admin.be.filters.DisableUrlSessionFilter.doFilter(SourceFile:73)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:240)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:207)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:212)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:141)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:522)
at org.apache.coyote.ajp.AbstractAjpProcessor.process(AbstractAjpProcessor.java:868)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:672)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1502)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1458)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
Caused by: Access is denied.
at org.apache.axis.message.SOAPFaultBuilder.createFault(SOAPFaultBuilder.java:222)
at org.apache.axis.message.SOAPFaultBuilder.endElement(SOAPFaultBuilder.java:129)
at org.apache.axis.encoding.DeserializationContext.endElement(DeserializationContext.java:1087)
at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at org.apache.axis.encoding.DeserializationContext.parse(DeserializationContext.java:227)
at org.apache.axis.SOAPPart.getAsSOAPEnvelope(SOAPPart.java:696)
at org.apache.axis.Message.getSOAPEnvelope(Message.java:435)
at org.apache.axis.handlers.soap.MustUnderstandChecker.invoke(MustUnderstandChecker.java:62)
at org.apache.axis.client.AxisClient.invoke(AxisClient.java:206)
at org.apache.axis.client.Call.invokeEngine(Call.java:2784)
at org.apache.axis.client.Call.invoke(Call.java:2767)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.vmware.SviService.Admin.v3_5.Binding.SslBasicAuthEndpointStub.getVersion(SslBasicAuthEndpointStub.java:2015)
at com.vmware.vdi.svisupport.SVIConnection.testConnection(SourceFile:147)
at com.vmware.vdi.admin.be.VCManager.validateSVICert(SourceFile:1235)
at com.vmware.vdi.admin.ui.bean.VCServerBean.validateViewComposerCertificate(SourceFile:1740)
… 61 more
2016-07-12T15:52:55.083+02:00 DEBUG (0B40-1284) <ajp-nio-8009-exec-2> [ViewFlexFactory] com.vmware.vdi.admin.ui.bean.VCServerBean.validateViewComposerCertificate 1201 ms
2016-07-12T15:52:55.153+02:00 DEBUG (0D30-1300) <AJP-25> [SimpleAJPService] (ajp:admin:Request17) Response 200 OK
2016-07-12T15:53:30.182+02:00 DEBUG (0D30-0E80) <MsgWorker#5> [bm] Item on queue „Inbound JMS Worker“ for 55 us, queue length = 0, available workers = 9 of 10
2016-07-12T15:53:30.182+02:00 DEBUG (0D30-0E80) <MsgWorker#5> [r] (-) RequestGetStatus: serverType = ice, server = null, localHostname = SERVERNAME
2016-07-12T15:53:30.183+02:00 DEBUG (0D30-0E80) <MsgWorker#5> [cc] (-) Queuing request ABSGC29-b
2016-07-12T15:53:30.183+02:00 DEBUG (0D30-1008) <ABSGC29> [cc] Handling request ABSGC29-b, on queue for 33uS
2016-07-12T15:53:30.186+02:00 DEBUG (0D30-1008) <ABSGC29> [cc] Queuing receipt ABSGC-11
2016-07-12T15:53:30.186+02:00 DEBUG (0D30-1180) <ABSGC29:C> [cm] Handling message ABSGC-11, on queue for 28uS
2016-07-12T15:53:30.186+02:00 DEBUG (0D30-0E80) <MsgWorker#5> [cs] (-) Queuing request PSGC28-10
2016-07-12T15:53:30.186+02:00 DEBUG (0D30-100C) <PSGC28> [cs] Handling request PSGC28-10, on queue for 26uS
2016-07-12T15:53:30.186+02:00 DEBUG (0D30-100C) <PSGC28> [cs] Sending GETCOUNTERS request PSGC28-10

Vmware View Horizon 7 – SSL Zertifikat austauschen

Für ein Testsystem habe ich den neuen View Horizon 7 Connection Server installiert und wollte das selbstsignierte Zertifikat durch ein Zertifikat der Windows CA austauschen.
Normalerweise hat es immer geklappt über die MMC einfach ein neues Computerzertifikat zu erzeugen, und den Friendly Name umzusetzen.

Jedoch bekam ich diesmal folgende Fehlermeldung:

2016-07-12T08:44:31.019+02:00 INFO (1188-0C10) <Thread-1> [v] The Secure Gateway Server is checking for connection attempts on http://*, port:80
2016-07-12T08:44:31.065+02:00 INFO (1188-0C10) <Thread-1> [v] The Secure Gateway Server is using SSL certificate store of type KeyVault
2016-07-12T08:44:31.065+02:00 WARN (1188-0C10) <Thread-1> [KeyVaultKeyStore] (NetHandler) Failed to get certificate chain for: "vdm"
2016-07-12T08:44:31.065+02:00 WARN (1188-0C10) <Thread-1> [KeyVaultKeyStore] (NetHandler) Certificate chain not found for alias: vdm
2016-07-12T08:44:31.081+02:00 INFO (1188-0C10) <Thread-1> [v] The Secure Gateway Server is listening on https://*, port:443
....
2016-07-12T08:46:22.939+02:00 ERROR (1188-1AE4) <pool-1-thread-1> [KeyVaultKeyStore] (NetHandler) No qualifying certificates in keystore
2016-07-12T08:46:22.940+02:00 ERROR (1188-1AE4) <pool-1-thread-1> [KeyVaultKeyStore] (NetHandler) No qualifying certificates in keystore
2016-07-12T08:46:22.941+02:00 ERROR (1188-1AE4) <pool-1-thread-1> [KeyVaultKeyStore] (NetHandler) No qualifying certificates in keystore
2016-07-12T08:46:22.942+02:00 ERROR (1188-1AE4) <pool-1-thread-1> [KeyVaultKeyStore] (NetHandler) No qualifying certificates in keystore
2016-07-12T08:46:22.963+02:00 ERROR (1188-0938) <pool-1-thread-2> [KeyVaultKeyStore] (NetHandler) No qualifying certificates in keystore

Also habe ich nochmal von Hand eine Zertifikatsanforderung mit OpenSSL erstellt:

openssl req -new -sha256 -nodes -newkey rsa:4096 -subj '/C=DE/ST=Hessen/L=Location/O=Company/OU=TEST/CN=server.fqdn.info/emailAddress=support@domain.de/subjectAltName=altFQDN,DNS.1=view.domain.info' > ssl.csr
Generating a 4096 bit RSA private key
....................................................................................................................................................++
..........................................................................................++
writing new private key to 'privkey.pem'
-----

Anschließend über die Windows Zertifizierungsstelle signiert (https://certsrv.domain.info/certsrv/). Als Base64 Zertifikat wieder herunterladen und ein PFX generieren:

openssl pkcs12 -export -in certnew.cer -inkey privkey.pem -out cert.pfx
Enter Export Password:
Verifying - Enter Export Password:

Anschließend das Zertifikat über die MMC (Certificates) in den Personal Zertifikatsspeicher importieren.
Vmware View erstellt automatisch ein selbst signiertes Zertifikat, welches den Friendly Name „vdm“ trägt. Dieser muss umbenannt werden, z.b. „vdm-original“.
Bei dem eigenen Zertifikat muss dann der Friendly Name „vdm“ über (Rechtsklick – Properties) gesetzt werden.

friendlycertname

Anschließend den „Vmware View Connection Server“ Dienst neustarten.

img_001

QNAP – Dateinamen von ISO-8859-1 in UTF8 umbenennen

Es war an der Zeit Daten eines QNAP-NAS auf einen anderen Netzwerkspeicher zu migrieren. Als Tool hatte ich dazu WinSCP verwendet um die Dateien via SCP auf einer externen Festplatte zwischenzuspeichern. Jedoch hat es mir dabei alle Umlaute aus Dateinamen in nicht lesbare Zeichen umgewandelt:

Sperrmüll.jpg wurde zu Sperrm¦ll.jpg
Häuser.docx wurde zu H¦user.docx

Im Nachhinein lag es vermutlich an der falschen Codepage die im QNAP Webinterface falsch eingestellt war. Eine nachträgliche Änderung brachte jedoch auch keine Verbesserung mehr.
Also mussten ich die Dateien alle wieder korrekt umbenennen. Das habe ich mit Hilfe des ConvMV Tools gemacht, wie hier beschrieben:

Schritt 1: Perl installieren (OPKG Paket)

Über das  QNAP Webinterface kann über dass „App Center“ Perl installiert werden. Dies benötigen wir um später das Tool „convmv“ auszuführen.

Schritt 2: ConvMV herunterladen

Eventuell gibt es schon eine neuere Version, kann hier nachgeschaut werden.

wget https://www.j3e.de/linux/convmv/convmv-2.0.tar.gz --no-check-certificate

Schritt 3: ConvMV Entpacken

tar xzf convmv-2.0.tar.gz
cd convmv-2.0/
config_util

Schritt 4: ConvMV / Perl Pfad anpassen

Da bei QNAP der Pfad für Extensions nicht unter /bin/ liegt muss in der ersten Zeile des convmv Skriptes der korrekte Perl Pfad angegeben werden. Dieser sollte bei QNAP dieser sein, kann bei Synology ggf. variieren:

#!/share/MD0_DATA/.qpkg/Optware//bin/perl

Schritt 5: ConvMV im Testmodus durchlaufen lassen

Hier wird angegeben, dass wir Dateien aus dem Format „ISO-8859-1“ in „UTF8“ umbenennen wollen. Es wird noch nichts umbenannt, nur eine Ausgabe mit den Änderungen vorgegeben.

/share/Constey/temp/convmv-2.0/convmv -f iso-8859-1 -t utf8  -r /share/Constey/Privat/

Schritt 6: Änderung durchführen

Sieht die Ausgabe korrekt aus, wird der Parameter „–notest“ angehängt, damit werden die Dateien dann auch endgültig umbenannt.

Bsp:
mv "/share/Constey/Privat/Garage Sperrm¦ll.jpg" "/share/Constey/Privat/Garage Sperrmüll.jpg"
mv "/share/Constey/Privat/H¦user.docx" "/share/Constey/Privat/Häuser.docx"
Skipping, already UTF-8: /share/Constey/Privat/Pictures/2016-04-16/Königslutter (16).jpg
Skipping, already UTF-8: /share/Constey/Privat/Pictures/2016-04-16/Königslutter (7).jpg
Ready! I converted 2002 files in 155 seconds.

Codepage im QNAP Webinterface einstellen:

Unter „Systemeinstellungen -> Allgemeine Einstellungen“ findet man den Reiter „Codeseite“ dort kann man die Dateinamenkodierung auf „Westeuropäisch/Latin1“ umstellen.

Fix Raspberry Pi 3 Wifi after Upgrade from Pi 2

Ich hatte ein Raspberry Pi 2 Image (Debian Wheezy) per rpi-update, und apt-get dist-upgrade bereit für den Raspberry Pi 3 gemacht, und wollte dann beim neuen Pi 3 das integrierte WLAN benutzen. Klappte leider auf anhieb nicht wie erwartet, denn das wlan0 interface fehlte und ich bekam Fehler wie:

iwconfig wlan0 power off
Error for wireless request "Set Power Management" (8B2C) :
SET failed on device wlan0 ; No such device.

Fehler ist wohl dass die Bibliotheken für den Chipsatz fehlen (brcmfmac4340-sdio.bin). Das kann man schnell verifizieren per:

ls -l /lib/firmware/brcm/

-rw-r--r-- 1 2625 2625 96224 Jun 15 2014 bcm43xx-0.fw
-rw-r--r-- 1 2625 2625 180 Jun 15 2014 bcm43xx_hdr-0.fw
-rw-r--r-- 1 2625 2625 397312 Oct 7 2014 brcmfmac43143.bin
-rw-r--r-- 1 2625 2625 385067 Jun 15 2014 brcmfmac43143-sdio.bin
-rw-r--r-- 1 2625 2625 455745 Jun 15 2014 brcmfmac43241b0-sdio.bin
-rw-r--r-- 1 2625 2625 403855 Jun 15 2014 brcmfmac43241b4-sdio.bin
-rw-r--r-- 1 2625 2625 253748 Jun 15 2014 brcmfmac4329-sdio.bin
-rw-r--r-- 1 2625 2625 222126 Jun 15 2014 brcmfmac4330-sdio.bin
-rw-r--r-- 1 2625 2625 451566 Jun 15 2014 brcmfmac4334-sdio.bin
-rw-r--r-- 1 2625 2625 569291 Jun 15 2014 brcmfmac4335-sdio.bin
-rw-r--r-- 1 2625 2625 219557 Jun 15 2014 brcmfmac43362-sdio.bin
-rw-r--r-- 1 2625 2625 507752 Jun 15 2014 brcmfmac4354-sdio.bin

Man kann die Bibliotheken manuell aus dem github fork herunterladen:

cd /lib/firmware/brcm/
wget https://github.com/RPi-Distro/firmware-nonfree/raw/master/brcm80211/brcm/brcmfmac43430-sdio.bin
wget https://raw.githubusercontent.com/RPi-Distro/firmware-nonfree/master/brcm80211/brcm/brcmfmac43430-sdio.txt

Damit diese aktiv werden nochmal den Pi neustarten und dann kanns losgehen.

Den Stromsparmodus des Wifi Chips kann man deaktivieren mit:

iwconfig wlan0 power off

Nach aktiven WLAN’s in der Umgebung kann man dann auch suchen per:

iwlist wlan0 scan