Ich hatte die Aufgabe die Datenbank einer XenApp 7.6 Datenbank von einem SQL-Server auf einen anderen SQL-Server zu verschieben bzw. zu migrieren.
Es gibt unter http://support.citrix.com/article/CTX140319 eine Anleitung – die aber nur mit einigen Ergänzungen funktionierte.

Hier ist mein Weg für den Umzug der Datebank:

Dazu schließt alle Management Konsolen und öffnet auf allen Delivery Controllern eine Powershell als Administrator und setzt erstmal alle Datenbankverbindungen zurück:

Add-PSSnapin Citrix*
Set-LogSite -State Disabled
Set-LogDBConnection -DataStore Logging -DBConnection $null
Set-MonitorDBConnection -DataStore Monitor -DBConnection $null
Set-MonitorDBConnection -DBConnection $null
Set-AcctDBConnection -DBConnection $null
Set-ProvDBConnection -DBConnection $null
Set-BrokerDBConnection -DBConnection $null
Set-EnvTestDBConnection -DBConnection $null
Set-SfDBConnection -DBConnection $null
Set-HypDBConnection -DBConnection $null
Set-ConfigDBConnection -DBConnection $null -force
Set-LogDBConnection -DBConnection $null -force
Set-AdminDBConnection -DBConnection $null -force

Danach kann die Datenbank über das SQL Server Management Studio auf dem alten Datenbankserver sicheren und auf dem neuen Datenbankserver wiederherstellen.

Wichtig hierbei ist dass die SQL-Logins für die Computerkonten der Delivery Controler im neuen SQL-Server vorher mit

create login [domain\DeliveryControllerServername$] from windows

XenDesktop-Datenbank-Migration-SQL

angelegt werden. Dann müssten die Berechtigungen für die Delivery Controller nach der Wiederherstellung der Datenbank passen.

Danach muss auf den Delivery Controllern in der Registry kontrolliert werden dass unter

HKEY_LOCAL_MACHINE\Software\Citrix\XDservices\

in den einzelnen Unter-Schlüsseln unter

DataStore\Connections

der REG_SZ-Wert ConnectionString leer ist.

XenDesktop-Datenbank-Migration-Registry

Dazu öffnet man auf allen Delivery Controllern eine Powershell als Administrator und setzt die neuen Datenbankverbindungen. Einfach DatenbankServer\Instanzname und DatenbankName die entsprechenden Werte eintragen. Wenn die Datenbank auf der Standardinstanz des SQL-Servers läuft kann auf \Instanzname verzichtet werden und nur der Servername eingetragen werden:

Add-PSSnapin Citrix*
$dbs=“Server=DatenbankServer\Instanzname;Initial Catalog=DatenbankName;Integrated Security=True“
set-ConfigDBconnection -dbconnection $dbs
set-AdminDBconnection -dbconnection $dbs
set-LogDBconnection -dbconnection $dbs
set-AcctDBconnection -dbconnection $dbs
set-BrokerDBconnection -dbconnection $dbs
set-EnvTestDBconnection -dbconnection $dbs
set-HypDBconnection -dbconnection $dbs
set-MonitorDBconnection -dbconnection $dbs
set-ProvDBconnection -dbconnection $dbs
set-SfDBconnection -dbconnection $dbs
Set-LogDbConnection -DataStore logging -DbConnection $dbs
Set-MonitorDbConnection -DataStore monitor -DbConnection $dbs
Set-LogSite -State Enabled

Wenn das auf allen Delivery Controllern sauber durchgelaufen ist, kann auf dem ersten Delivery Controller das Citrix Studio öffnen.

Bei mir wollte das Studio ein Site Upgrade und eine Aktualisierung der Delivery Controller. Beides warf bei mir den Fehler, dass die Delivery Controller schon verbunden sind. Sonst lief alles durch.

Es funktionierte aber trotzdem danach alles sauber 🙂

Quellen:
http://support.citrix.com/article/CTX140319
https://www.linkedin.com/pulse/20141030170612-131030064-how-to-migrate-your-citrix-xendesktop-or-xenapp-7-x-database
http://blogs.citrix.com/2014/02/05/xendesktop-7-x-database-migration/
http://www.dcug.de/xd7-datenbank-migrieren/

Neben dem NGINX kann natürlich auch der Apache2 für einen ReverseProxy für die Exchange-Dienste EAS (Exchange ActiveSync) und OWA (OutlookWebAccess) verwendet werden – und zusätzlich seit einiger Zeit auch (wieder) für OutlookAnywhere (RPCoverHTTP)! I

Folgende Konfiguration hat bei mir unter Ubuntu 14.04 einwandfrei funktioniert:

1) Apache2 installieren

apt-get install apache2 apache2-doc

2) Modul für OutlookAnywhere installieren

apt-get install libapache2-mod-proxy-msrpc

3) Module aktivieren

a2enmod headers
a2enmod rewrite
a2enmod proxy_http
a2enmod ssl
a2enmod proxy_msrpc

3) Zertifikat erstellen

Jetzt sollte das Zertifikat für die externe Domäne erzeugt werden. Als erstes erzeugen wir die Key-Datei:

openssl genrsa -out server.key 2048

Jetzt erstellen wir eine Zertifikatsanforderung:

openssl req -new -key server.key -out server.csr

Hier ein Beispiel:

Country Name (2 letter code) [AU]: DE
State or Province Name (full name) [Some-State]: Bayern
Locality Name (eg, city) []:Testhausen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Testfirma
Organizational Unit Name (eg, section) []:EDV
Common Name (eg, YOUR name) []:mobile.test.extern
Email Address []:edv@test.extern

Please enter the following ‚extra‘ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Wichtig ist der Common Name -> das ist die externe Domain – hier im Beispiel mobile.test.extern. Challenge Password und optional company name kann leer gelassen werden.

Falls man auch die Autodiscover-Adresse für OutlookAnywhere mit einem Zertifikat absichern will braucht ein SAN-Zertifikat: http://stefan.ploing.de/2014-01-22-san-zertifikat-mit-openssl/

Danach hat man zwei Dateien – die server.key und die server.csr. Jetzt muss nur die Anforderung in die CA eingereicht werden. Ich mache dies immer über die Webschnittstelle der Zertifizierungsstelle. Über http(s)://cert-server/certsrv kann man die csr eingeben und ein Webserver-Zertifikat erstellen. Wichtig hierbei ist das man die csr-Datei nicht in Windows öffnet. Ich empfehle über einen SSH-Client wie Putty auf dem Linux-Server:

cat server.csr

auszuführen und die Ausgabe dann zu kopieren. So stellt man sicher das die Formatierung richtig ist. Ansonsten kann es zu Zertifikatsfehlern kommen. Die Ausgabe sieht dann so aus:

—–BEGIN CERTIFICATE REQUEST—–
MIIBzzCCATgCAQAwgY4xCzAJBgNVBAYTAkRFMQ8wDQYDVQQIDAZCYXllcm4xEzAR
BgNVBAcMClRlc3RoYXVzZW4xDTALBgNVBAoMBFRlc3QxDDAKBgNVBAsMA0VEVjEb
MBkGA1UEAwwSbW9iaWxlLnRlc3QuZXh0ZXJuMR8wHQYJKoZIhvcNAQkBFhB0ZXN0
QHRlc3QuZXh0ZXJuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDn015lJMsY
N/KvYrV0wNjzZh+82wJY10xliBpg3p63JbUDA3bjL6bv5+Jcas2c0bgZwyNQl6oB
e/1y/fjDAaFXfpBLk/ZQyoJ/c2DFfOloZdoMEJN7veVzU+2m3I6306ADxx8y52MQ
+xD//0zPtasX2ZEdtghS4Arn+fsPQPS+UQIDAQABoAAwDQYJKoZIhvcNAQEFBQAD
gYEAyDDgPv1fTpweDk+N9JKEBgpdlONv2ZHJJ/upxXMW2aUMNXgLNR0IvNC6Q2/K
Bm1oGvtNyqiTDN0VqIfNvnzzSSlYZN85a3G0psHMdybc8TQ2N+RwIqz49+Rw3qrQ
W6c9kruyn17XFCgRC7rxgwIC/T1uWNOxyO28U00pNVJvgjc=
—–END CERTIFICATE REQUEST—–

Das so erstellt Webserver-Zertifikat (als BASE64/DER speichern) kopiert man dann auf den ReverseProxy – z.B. per SCP mit WinSCP. Am Besten ins HomeDirectory des Root-Users – denn dort liegen auch die beiden anderen Dateien (die key- und die csr-Datei).

Danach muss das Zertifikat konvertiert werden:

openssl x509 -inform PEM -in server.cer > server.pem

und kopiert werden:

cp server.pem /etc/ssl/certs/mobile.test.extern.pem
cp server.key /etc/ssl/private/mobile.test.extern.key

4) Apache2 konfigurieren

Wir erstellen jetzt die Exchange-Config-File

vim /etc/apache2/sites-available/exchange.conf

<VirtualHost *:80>

ServerName mobile.test.extern
ServerAlias autodiscover.test.extern
ServerAdmin webmaster@test.extern

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined

Header always set X-Frame-Options SAMEORIGIN

Header set Server Apache

RequestHeader unset Expect early

Header unset X-AspNet-Version
Header unset X-OWA-Version
Header unset X-Powered-By

ProxyRequests Off

RewriteEngine On
RewriteCond %{HTTPS} !=on
RewriteRule ^/owa(.*) https://mobile.test.extern/owa$1 [R,L]
RewriteRule ^/ecp(.*) https://mobile.test.extern/ecp$1 [R,L]
RewriteRule ^/Microsoft-Server-ActiveSync(.*) https://mobile.test.extern/Microsoft-Server-ActiveSync$1 [R,L]

DocumentRoot /var/www

<Directory />
    Order deny,allow
    Deny from all
</Directory>

<Directory /var/www>
    DirectoryIndex index.php index.html
    Options -Indexes +FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>

<Proxy *>
        Order deny,allow
        Allow from all
</Proxy>

</VirtualHost>

### SSL Host ###
<VirtualHost *:443>

ServerName mobile.test.extern
ServerAlias autodiscover.test.extern
ServerAdmin webmaster@test.extern

ErrorLog /var/log/apache2/error.log
CustomLog /var/log/apache2/access.log combined

Header always set X-Frame-Options SAMEORIGIN

Header set Server Apache

Header unset X-AspNet-Version
Header unset X-OWA-Version
Header unset X-Powered-By

RequestHeader unset Expect early

ProxyRequests Off
ProxyPreserveHost On

SSLProxyEngine on
SSLProxyVerify none
SSLProxyCheckPeerCN off
SSLProxyCheckPeerName off
SSLProxyCheckPeerExpire off

# owa
ProxyPass /owa https://10.10.10.1/owa
ProxyPassReverse /owa https://10.10.10.1/owa

# ecp
ProxyPass /ecp https://10.10.10.1/ecp
ProxyPassReverse /ecp https://10.10.10.1/ecp

# Microsoft-Server-ActiveSync
ProxyPass /Microsoft-Server-ActiveSync https://10.10.10.1/Microsoft-Server-ActiveSync
ProxyPassReverse /Microsoft-Server-ActiveSync https://10.10.10.1/Microsoft-Server-ActiveSync

# RPC over http(s) / Outlook Anywhere
OutlookAnywherePassthrough On
ProxyPass /rpc https://10.10.10.1/rpc
ProxyPassReverse /rpc https://10.10.10.1/rpc

DocumentRoot /var/www

<Directory />
    Order deny,allow
    Deny from all
</Directory>

<Directory /var/www>
    DirectoryIndex index.php index.html
    Options -Indexes +FollowSymLinks
    Order allow,deny
    Allow from all
</Directory>

<Proxy *>
        SetEnv proxy-nokeepalive 1
        SetEnv force-proxy-request-1.0 1
        Order deny,allow
        Allow from all
</Proxy>

  SSLEngine on
        SSLCertificateFile    /etc/ssl/certs/mobile.test.extern.pem
        SSLCertificateKeyFile /etc/ssl/private/mobile.test.extern.key

  BrowserMatch "MSIE [2-6]" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0
  # MSIE 7 and newer should be able to use keepalive
  BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

</VirtualHost>

Die IP 10.10.10.1 ist hier der lokale Exchange-Server.

Wer lieber mit Hostname arbeitet muss man unter Umständen den lokale Exchange Server noch in die hosts-Datei eingetragen werden, damit die Namensauflösung funktioniert.

vi /etc/hosts

und dort die Zeile für die IP-Adresse des lokalen Exchange ergänzen:

10.10.10.1 exch2013.test.local

zum Testen kann man einen Ping auf dem Fully-Qualified Domain Name (FQDN) des Exchange absetzten:

ping exch2013.test.local

Jetzt muss nur noch die Konfigurationsdatei „scharf“ geschaltet werden.

Dazu löschen wir die Default-Konfiguration

rm /etc/apache2/sites-enabled/000-default.conf

und linken unsere Exchange-Konfiguration in den sites-enabled-Ordner

ln -s /etc/apache2/sites-enablede/exchange.confg /etc/apache2/sites-enabled/exchange.conf

Jetzt muss nur noch der Apache2-Dienst neugestartet zu werden:

service apache2 restart

fertig 🙂

5) Testen

Unter https://www.testexchangeconnectivity.com kann man die ActiveSync-Funktion testen.

Quellen: www.sturbi.de, znil.net

Manchmal muss bzw. will man alle Ereignisprotokolle auf einem Windows-System löschen.

Am einfachsten geht das mit Hilfe der Powershell.

Einfach eine Powershell als Administrator öffnen und mit

wevtutil el | Foreach-Object {wevtutil cl „$_“}

alle Ereignisprotokolle löschen.

Powershell-Clear-all-EventLogs

Tipp: Will man nur bestimmte Ereignisprotokolle löschen geht das ebenfalls ganz einfach:

Mit

wevtutil el

kann man sich die Namen aller verfügbaren Ereignisprotokolle anzeigen lassen.

Powershell-Clear-all-EventLogs2

und mit

wevtutil cl NAMEdesEREIGNISPROTOLOLLS

löscht man es.

Ein

wevtutil cl application

löscht also das Ereignisprotokoll Anwendung.

Quelle: http://jpwaldin.com/blog/?p=166