Neben Platform-as-a-Services wie Cloud Foundry, Force.com, Google App Engine oder Red Hat OpenShift sollte man einen Service nicht vergessen: Windows Azure. Microsoft verfügt historisch bedingt über eine weltweit riesige Entwicklergemeinde, die nicht unterschätzt werden sollte. Die Microsoft Windows Azure Plattform wurde 2008 angekündigt und 2010 veröffentlicht. Seitdem hat Microsoft sein PaaS Angebot stetig um neue Funktionen erweitert.
Die Windows Azure Referenzarchitektur
Die Windows Azure Plattform wurde speziell für Entwickler konzipiert, um Anwendungen auf Basis von Microsoft Technologien wie bspw. .NET zu entwickeln. Dennoch können auch Java, PHP oder Node.js Entwickler die Umgebung für ihre Zwecke nutzen. Dazu bietet Microsoft ausreichend Tools und Plugins für Eclipse und anderer bekannter Entwicklungsumgebungen, um dieses zu ermöglichen.
Zunächst werden die einzelnen Komponenten der Windows Azure Platform betrachtet. Im Anschluss folgen dann ein paar Szenarien, wofür Azure genutzt werden kann.
Windows Azure
Bei Windows Azure handelt es sich um Herz und Seele der gesamten Azure Plattform. Es ist das Betriebssystem, dass auf jedem Server innerhalb der weltweit verteilten Rechenzentren der Azure Cloud läuft. Anders als die anderen Windows Versionen kann Windows Azure nicht käuflich erworben werden und ist speziell auf die Bedürfnisse der Cloud Infrastrukturen von Microsoft abgestimmt. Windows Azure abstrahiert dabei die darunterliegende Hardware und suggeriert somit, dass es sich dabei um lediglich eine Instanz des Betriebssystems handelt. Da das Betriebssystem über mehrere physikalische Server hinweg operiert, sorgt eine spezielle Schicht für die Koordination und Ausführung der jeweiligen Prozesse. Diese Schicht wird auch Fabric bezeichnet. Zwischen der Fabric und dem Windows Azure Betriebssystem befinden sich die virtuellen Maschinen (VM), auf denen der eigentliche Quellcode und die Anwendungen ausgeführt werden. Entwickler sehen jedoch nur zwei Services dieses Stacks, Windows Azure Compute und Windows Azure Storage.
Windows Azure Compute
Windows Azure Compute wird bspw. genutzt, wenn eine Anwendung auf Windows Azure ausgerollt werden soll. Dazu werden Anwendungen in drei möglichen Rollen ausgeführt, Web Role, Worker Role oder VM Role. Die Web Role wird genutzt um typische ASP.NET Web Anwendungen oder jede andere Art von CGI Web Anwendungen zu betreiben. Die Worker Role wird benötigt um langlaufende Prozesse, die über keine Benutzeroberfläche verfügen, auszuführen. Eine Web Role könnte in diesem Zusammenhang z.B. ein IIS Container und eine Worker Role ein Windows Service sein. Beide können auf mehreren Wegen miteinander kommunizieren, wobei der Quellcode innerhalb der Worker Role jedoch unabhängig von der Web Role läuft. Über die Worker Role können dann sowohl .NET Anwendungen als auch native COM Anwendungen auf Windows Azure portiert werden. Über die Worker Role unterstützt Windows Azure zudem Microsoft fremde Umgebungen wie PHP, Java und Node.js. Die VM Role ermöglicht es schlussendlich, Anwendungen innerhalb eines angepassten Windows Server 2008 Image auszuführen. Damit sind Unternehmen in der Lage Anwendungen auf Windows Azure zu portieren, die z.B. Abhängigkeiten zu Komponenten von Drittanbietern haben.
Windows Azure Storage
Um eine Anwendung ausführen zu lassen wird auf jedenfall Speicherplatz für die Konfiguration und weiterer Daten benötigt. Windows Azure Storage bietet hier drei unterschiedliche Möglichkeiten: Blobs, Tables und Queues.
Blobs sind dafür geeignet, um große binäre Objekte wie Bilder und Videos, Dokumente usw. zu speichern. Tables bietet einen skalierbaren Key/ Value basierten Speicher. Queues werden genutzt, um Nachrichten zuverlässig zwischen einzelnen Anwendungen zu übertragen. Daher sind Queues die beste Lösung, um eine Web Role und Worker Role miteinander kommunizieren zu lassen. Der Zugriff auf die Daten in Windows Azure Storage erfolgt per HTTP und REST.
Windows Azure Service Bus
Der Windows Azure Service Bus sorgt für eine nahtlose Integration von Services die sich innerhalb eines Unternehmens hinter einer Firewall und einem Service in der Cloud befinden. Damit wird quasi eine sicherer Brücke zwischen den klassischen on-Premise Anwendungen im Unternehmen und den Cloud Services hergestellt. Dazu werden die Services die sich hinter der Firewall oder dem NAT befinden bei dem Service Bus registriert, wodurch ein Cloud Service diese anschließend aufrufen kann. Der Service Bus abstrahiert den physikalischen Ort des Service, indem er eine URI bereitstellt, die jeder für den Aufruf nutzen kann.
Access Control Service
Bei dem Access Control Service handelt es sich um einen Mechanismus, der für die Absicherung der Cloud Services und Anwendungen genutzt wird. Dazu können auf eine sehr deklarative Art und Weise Regeln definiert werden, mit denen bestimmt wird, wie ein Cloud Service aufgerufen werden darf. Dabei werden eine Vielfalt von unterschiedlichen Identity-Management Infrastrukturen unterstützt. Der Access Control Service ermöglicht es bspw. Unternehmen ihre on-Premise Sicherheitsmechanismen der Active Directory mit den Cloud basierten Authentifizierung zu integrieren.
Windows Azure Caching
Windows Azure Caching stellt Anwendungen, die auf Windows Azure gehosted werden, einen In-Memory Caching Service zur Verfügung. Dieser vermeidet die Schreib/- und Lesezugriffe auf die Festplatte und ermöglicht den Anwendungen einen schnellen Zugriff auf die Daten aus einem High-Speed Cache. Der Cache kann mehrere Arten von Daten speichern, darunter XML, Binärdaten oder serialisierte CLR Objekte. Web Anwendungen die häufig nur lesende Zugriffe benötigen, können den Cache nutzen, um die Geschwindigkeit zu erhöhen.
SQL Azure
SQL Azure ist der Microsoft SQL Server in der Cloud. Anders als Azure Storage, das für das Speichern von unstrukturierten Daten genutzt wird, handelt es sich bei SQL Azure um eine vollständige Relationale Datenbank Engine. Sie basiert auf der selben Datenbank Engine wie der MS SQL Server und kann per T-SQL abgefragt werden. Auf Grund der Nähe zu MS SQL können on-Premise Anwendungen ohne weiteres auf SQL Azure zurückgreifen. Entwickler können mit ADO.NET oder ODBC API auf SQL Azure zugreifen. PHP Entwickler nutzen dazu die PHP API. Mit Microsoft SQL Azure Data Sync können Daten zwischen dem on-Premise SQL Server und SQL Azure synchronisiert werden. Dabei handelt es sich um eine sehr mächtige Funktion, um Datenknoten innerhalb der Cloud aufzubauen, die ständig mit den lokalen on-Premise Datenbanken synchronisiert werden. SQL Azure kann zudem exakt so behandelt werden wie ein gewöhnlicher Datenbank Server im eigenen Rechenzentrum. Da Microsoft hier allerdings für die Installation, Wartung und Verfügbarkeit des Datenbank Service zuständig ist, können sich Unternehmen darauf konzentrieren, den Service einfach nur zu nutzen.
Nun folgen ein paar Szenarien, die Ideal für die Nutzung der Microsoft Windows Azure Plattform sind.
Skalierbare Web Anwendungen
Da die Windows Azure Plattform auf den bekannten .NET und ASP.NET Plattformen basiert, ist es für Entwickler dieser Technologien einfach zu wechseln und Web Anwendungen kostengünstig auf Windows Azure zu betreiben. Damit erhalten Sie die Möglichkeit die Skalierbarkeit ihrer Web Anwendungen deutlich zu erhöhen ohne sich Gedanken über die dafür
notwendige Infrastruktur zu machen. Selbst PHP, Java oder Node.js Entwickler können von Azure profitieren.
Rechenintensive Anwendungen
Die Windows Azure Plattform kann für sehr prozess- und rechenintensive Anwendungen genutzt werden die gelegentlich eine große Menge an Rechenressourcen benötigen. Durch die Nutzung der Worker Role können Entwickler ihren Quellcode über mehrere Instanzen parallel ausführen lassen. Die entweder durch die Web Role oder der on-Premise Anwendung generierten Daten können anschließend der Worker Role via Azure Storage zugeteilt werden.
Zentraler Zugriff auf Daten
Wenn Daten für eine Vielzahl von Anwendungen, den Zugriff durch mehrere Browser, Computer und mobile Endgeräte zugänglich gemacht werden sollen, macht es Sinn, diese an einem zentralen Ort zu speichern. Windows Azure Storage ist hier eine gute Lösung, um Daten zentral zu speichern und zu pflegen sowie Desktop Anwendungen, Silverlight, Flash und AJAX basierten Web Anwendungen oder mobilen Applikationen bereitzustellen.
Hybride Anwendungen – verteilt in der Cloud und on-Premise
Es kann Bedingungen für die Erweiterung eines Teils einer Anwendung für die Cloud oder den Aufbau einer Cloud-Oberfläche für eine bestehende Anwendung geben. Durch die Nutzung des Service Bus und Access Control können on-Premise Anwendungen nathlos und sicher um bzw. in die Cloud erweitert werden. Dazu kann der Service Bus sowie eine weitere Technologie – Azure Direct Connect – dabei helfen, ein hybrides Cloud Szenario aufzubauen.
Cloud basierte Datenknoten
Mit Hilfe von SQL Azure können Unternehmen Datenknoten aufbauen, die den Zugriff durch externe Partner oder mobile Mitarbeiter ermöglichen. So könnte bspw. ein Unternehmen einen Teil seiner Daten in der Cloud bereitstellen, die ständig mit der lokalen Datenbank synchronisiert werden. Die Datenbank in der Cloud wird dann für B2B Partner für Abfragen und Bestellungen geöffnet. Hier helfen SQL Azure und SQL Azure Data Sync bei der Umsetzung so eines Szenarios.
Microsoft ist aktuell bei der Evaluation einer Malware Schutzfunktion für virtuelle Maschinen unter Windows Azure. Mit dem Plugin sollen die Endpunkte bestmöglich abgesichert werden.
Mit der Microsoft Endpoint Protection (MEP) for Windows Azure hat Microsoft einen ersten technologischen Einblick in eine neue Sicherheitslösung gegeben, mit der Entwickler und Administratoren ihre virtuelle Maschinen innerhalb von Azure vor Malware schützen können.
Laut Microsoft meldet sich das MEP Plugin, sobald eine Malware, Spyware oder eine andere Art von Software versucht, sich auf der virtuellen Maschine zu installieren. Zudem verfügt es über einen zeitlich gesteuerten Scanner für Malware, Viren und Spyware sowie das Löschen und Sperren von Malware, Signatur-Updates und weiteren Funktionen.
Unter dem Codenamen Antares arbeitet Microsoft anscheinend an einer neuen Hosting Plattform für Web Applikationen, das berichtet ZDNet als Reaktion auf einen Tweet und Aussagen von Microsoft Verantwortlichen während des Microsoft Hosting Summit 2012.
Microsofts Azure App Plattform Team, unter der Leitung von Corporate Vice President Scott Guthrie, arbeitet demnach an einem Hosting Framework für Web Anwendungen, das sowohl für Windows Azure als auch für Private Clouds eingesetzt werden kann. Der aktuelle Arbeitstitel lautet noch “Antares”, wurde in Tweets während des Microsoft Hosting Summits 2012 aber scheinbar als offizielles Microsoft Web Hosting Framework angekündigt.
ZDNet war der Codename “Antares” bereits vor einiger Zeit in einer Stellenbeschreibung von Microsoft aufgefallen, in der von einem symmetrischen Azure und On-Premise Framework gesprochen wurde:
“The Antares team is changing the game by introducing a symmetrical Azure and on-prem hosting framework for many web applications created in many languages and stacks. We are poised to offer developers a quick and painless Azure onramp experience as well as enable our partner to quickly setup a fully managed, secure, multi-tenant hosting environment on public or private clouds. If this is intriguing, talk to us in the Azure Application Platform team. We are building the Microsoft Web Hosting Framework, a world class offering allowing for massive scale website lifecycle management on the Microsoft platform.”
Über den offiziellen GCloud Twitter Account @G_Cloud_UK, informierte die Regierung um 12:11 Uhr britischer Zeit, über den Ausfall: “Power outage on microsoft azure means #cloudstore is temporarily unavailable. Patch being applied so will update when normal service resumed.”.
In einem weiteren Tweet, ca. 3 Stunden später, kam dann die Meldung, dass der CloudStore durch Microsoft auf eine andere Azure Umgebung umgezogen wurde: “Microsoft are moving us to a different azure install and are confident we’ll be up and running again by 4pm.”
Auf Grund eines schweren Ausfalls der Cloud-Plattform Microsoft Azure am vergangenen Dienstag, waren eine Vielzahl von Kunden nicht in der Lage auf Teile der Kernbereiche des Service für mehr als 12 Stunden zuzugreifen. Das Problem soll auf den Schalttag (29.Februar) zurückzuführen sein, das zu einem Problem mit der Sicherheits-Zertifizierung führte.
Wie Data Center Knowledge und andere Quellen Microsoft zitieren, war der Grund des Ausfalls ein Zertifizierungsproblem, dass mit dem 29.02.2012 in Verbindung steht. Das führt natürlich zu vielen Spekulationen. In einer direkten Stellungnahme von Microsoft wurde zwar darauf hingewiesen, dass die meisten Kunden wieder wie gewohnt arbeiten können, macht aber keinen Verweis auf ein Zertifikatsproblem.
On February 28th, 2012 at 5:45 PM PST Microsoft became aware of an issue impacting Windows Azure service management in a number of regions. Windows Azure engineering teams developed, validated and deployed a fix that resolved the issue for the majority of our customers. Some customers in 3 sub regions – North Central US, South Central US and North Europe – remain affected. Engineering teams are actively working to resolve the issue as soon as possible We will update the Service Dashboard, at http://www.windowsazure.com/en-us/support/service-dashboard/, hourly until this incident is resolved.
Apple’s iCloud ist ein Tool, um Kontakte, den Kalender und andere Daten zwischen dem iPhone, iPad und anderen Apple Produkten zu synchronisieren. iCloud ist also in erster Linie auf Apple bzw. das iOS ausgerichtet. Aber auch die Synchronisation mit Microsoft Windows und Outlook ist möglich.
Dazu stellt Apple das iCloud Control Panel for Windows zur Verfügung. Das Tool ist ca. 40 MB groß und wird in die Windows Systemsteuerung integriert. Über Start >> Systemsteuerung >> iCloud kann im Anschluss an die Installation der iCloud Account verwaltet werden und es ist zu sehen welche Daten zwischen iCloud und dem Windows PC bzw. Microsoft Outlook synchronisiert sind.
Über fünf Kontrollkästchen kann entschieden werden, welche Daten zwischen der iCloud und dem Windows PC synchronisiert werden sollen, darunter E-Mail, Kontakte, Kalender und Aufgaben, Lesezeichen und Photos. Unterhalb der Kontrollkästchen befindet sich ein Feld welches den aktuell genutzten iCloud Speicherplatz anzeigt. Über ein weiteres Kontrollkästchen am Ende kann man iCloud in die Taskleiste von Windows verschwinden lassen.
Sollen E-Mails, Kontakte und Kalender mit iCloud synchronisiert werden, wird dazu in Outlook ein weiterer Account eingerichtet. So ist es anschließend möglich, über das iPad oder per Siri auf dem iPhone neue Kontakte oder Termine anzulegen, die im Anschluss mit Outlook sychronisiert werden.
Die Synchronisation der Bookmarks funktioniert – bisher – nur mit dem Internet Explorer bzw. Apple Safari Browser. Firefox und Chrome Nutzer gehen leer aus. Über die Fotostream Optionen kann zudem bestimmt werden, wo die Bilder gespeichert und synchronisiert werden sollen.
Die iCloud Integration in Windows/ Outlook ist nun ganz klar keine Innovation, Google bietet diese Funktion per Google Apps Sync for Microsoft Outlook bereits seit Jahren an, aber hey, es ist Apple! 😉
Dieses Tutorial zeigt Schritt für Schritt, wie eine openQRM Cloud auf CentOS 5.5 so eingerichtet wird, dass damit anschließend physikalische Windows Systeme deployed werden können. Für dieses Tutorial werden dazu zwei physikalische Systeme benötigt.
1. Los geht es mit einer neuen CentOS 5.5 Installation
Während der Installation des Systems nehmen wir eine manuelle Partitionierung vor und erstellen 3 Partitionen:
1. primary ext3 mounted at / (the rootfs)
2. primary swap
3. primary “lvm” (wird zum Speichern des Server-Image benötigt)
An dieser Stelle ist es wichtig zu beachten, ein benutzerspezifisches Partitionsschema zu wählen und eine dedizierte Partition zu erstellen, auf der später die Server-Images gespeichert werden. (/dev/hda3). Bei der Paketauswahl selektieren wird zudem das “Gnome Desktop Environment”. Weitere Software wird nicht benötigt.
Wichtig: SELinux und die Firewall müssen deaktiviert werden!
Wenn die Installation abgeschlossen ist, starten wir das System neu und melden uns an.
Die folgende Konsolenausgabe zeigt die exakte CentOS Version. Alle Konsolenbefehle in diesem Tutorial werden des Weiteren mit “root” ausgeführt.
Um die Änderungen zu übernehmen, starten wir das Netzwerk neu.
[root@cloud network-scripts]# /etc/init.d/network restart
Shutting down interface eth0: [ OK ]
Shutting down loopback interface: [ OK ]
Bringing up loopback interface: [ OK ]
Bringing up interface eth0:
[ OK ]
[root@cloud network-scripts]#
Nun hinterlegen wir die statische IP-Adresse (in unserem Fall “192.168.88.6″) und den Hostname (in unserem Fall “cloud”) in der /etc/hosts. Der Hostname darf hierbei nicht in der ersten Zeile zusammen mit 127.0.0.1 stehen!
[root@cloud ~]# cat /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 localhost.localdomain localhost
192.168.88.6 cloud
::1 localhost6.localdomain6 localhost6
[root@cloud ~]#
3. Vorbereiten des Speicherplatz für die Server-Images
Nun bereiten wir die dedizierte Partition so vor, dass sie zusammen mit lvm genutzt werden kann. Anschließend erstellen wir eine Logical Volume Group “vol”.
Nach der Installation starten wir den mysqld service.
[root@cloud ~]# /etc/init.d/mysqld start
Initializing MySQL database: Installing MySQL system tables...
100521 14:44:53 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
100521 14:44:53 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK
Filling help tables...
100521 14:44:53 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
100521 14:44:53 [Warning] option 'max_join_size': unsigned value 18446744073709551615 adjusted to 4294967295
OK
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !
To do so, start the server, then issue the following commands:
/usr/bin/mysqladmin -u root password 'new-password'
/usr/bin/mysqladmin -u root -h cloud password 'new-password'
Alternatively you can run:
/usr/bin/mysql_secure_installation
which will also give you the option of removing the test
databases and anonymous user created by default. This is
strongly recommended for production servers.
See the manual for more instructions.
You can start the MySQL daemon with:
cd /usr ; /usr/bin/mysqld_safe &
You can test the MySQL daemon with mysql-test-run.pl
cd mysql-test ; perl mysql-test-run.pl
Please report any problems with the /usr/bin/mysqlbug script!
The latest information about MySQL is available on the web at
http://www.mysql.com
Support MySQL by buying support/licenses at http://shop.mysql.com
[ OK ]
Starting MySQL: [ OK ]
[root@cloud ~]#
Nun prüfen wir, dass wir uns mit der Datenbank verbinden können.
[root@cloud ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.0.77 Source distribution
Type 'help;' or 'h' for help. Type 'c' to clear the buffer.
mysql> quit
Bye
[root@cloud ~]#
Und fügen mysqld zu den init Startskripten mittels chkconfig hinzu.
openQRM wird in diesem Tutorial aus den Sourcen erstellt. Diese sind in dem Subversion Repository des openQRM Projects verfügbar. Für die Installation sind hier lediglich ein Subversion Client und “make” notwendig. Diese sollten also installiert werden.
Nun müssen die openQRM Sourcen aus dem SVN Repository ausgecheckt werden.
[root@cloud ~]# svn co https://openqrm.svn.sourceforge.net/svnroot/openqrm openqrm
....
A openqrm/trunk/src/rpm/README
A openqrm/trunk/src/rpm/openqrm-entire.spec
A openqrm/branches
A openqrm/tags
Checked out revision 1996.
[root@cloud ~]#
Wir wechseln in das src/ Verzeichnis.
[root@cloud ~]# cd openqrm/trunk/src/
[root@cloud src]#
Alle Ergebnisse der Kompilierung werden vom openQRM-Build System automatisch gecached. Um sicherzustellen, dass alle Komponenten richtig erstellt wurden, kann “make” einfach erneut ausgeführt werden.
[root@cloud src]# make
Checking requirements for the compilation phase
openqrm-server requires: make, gcc, portmap, rsync, zlib-devel, wget, tar, bzip2, unzip, patch
found make installed
found gcc installed
found portmap installed
found rsync installed
found zlib-devel installed
found wget installed
found tar installed
found bzip2 installed
found unzip installed
found patch installed
openqrm-plugin-aoe-storage requires:
openqrm-plugin-aws requires:
openqrm-plugin-citrix requires:
openqrm-plugin-cloud requires:
openqrm-plugin-collectd requires:
openqrm-plugin-dhcpd requires:
openqrm-plugin-dns requires:
openqrm-plugin-equallogic-storage requires:
openqrm-plugin-highavailability requires:
openqrm-plugin-image-shelf requires:
openqrm-plugin-iscsi-storage requires:
openqrm-plugin-kvm requires:
openqrm-plugin-kvm-storage requires:
openqrm-plugin-linux-vserver requires:
openqrm-plugin-linuxcoe requires:
openqrm-plugin-local-server requires:
openqrm-plugin-local-storage requires:
openqrm-plugin-lvm-storage requires:
openqrm-plugin-nagios2 requires:
openqrm-plugin-nagios3 requires:
openqrm-plugin-netapp-storage requires:
openqrm-plugin-nfs-storage requires:
openqrm-plugin-puppet requires:
openqrm-plugin-sanboot-storage requires:
openqrm-plugin-solx86 requires:
openqrm-plugin-sshterm requires:
openqrm-plugin-tftpd requires:
openqrm-plugin-tmpfs-storage requires:
openqrm-plugin-vbox requires:
openqrm-plugin-vmware-esx requires:
openqrm-plugin-vmware-server requires:
openqrm-plugin-vmware-server2 requires:
openqrm-plugin-windows requires:
openqrm-plugin-xen requires:
openqrm-plugin-xen-storage requires:
openqrm-plugin-zabbix requires:
openqrm-plugin-zfs-storage requires:
Checking for required components to compile openQRM finished successfully
if [ -d ./thirdparty ]; then mkdir -p ../buildtmp; cp -aR ./thirdparty/* ../buildtmp/; fi
-> found component gpxe (undionly.kpxe.0.9.9.tgz) already downloaded
-> found component kvm-nic-bios (kvm-nic-bios-1.1.tgz) already downloaded
-> found component openqrm-client.windows (openQRM-Client-4.6.1-setup.exe) already downloaded
-> found component sshterm-component (openqrm-plugin-sshterm-components-1.0.tgz) already downloaded
Creating the default initrd-template
-> found component busybox (busybox-1.14.2.tar.bz2) already downloaded
-> Found busybox-1.14.2/_install/bin/busybox already in the build-cache
-> Skipping compilation, taking the ready built component from the cache
-> found component pciutils (pciutils-3.1.4.tar.gz) already downloaded
-> Found pciutils-3.1.4/pcimodules already in the build-cache
-> Skipping compilation, taking the ready built component from the cache
-> found component dropbear (dropbear-0.52.tar.gz) already downloaded
-> Found dropbear-0.52/dropbear already in the build-cache
-> Skipping compilation, taking the ready built component from the cache
Adding /sbin/portmap to default initrd-template
Adding /sbin/rpc.statd to default initrd-template
Adding /bin/bash to default initrd-template
Adding /usr/bin/rsync to default initrd-template
Adding /usr/bin/wget to default initrd-template
Adding /sbin/modprobe to default initrd-template
Adding /sbin/depmod to default initrd-template
Adding /sbin/insmod to default initrd-template
Adding /sbin/lsmod to default initrd-template
Adding /sbin/mke2fs to default initrd-template
Adding /sbin/sfdisk to default initrd-template
Adding /sbin/udevd to default initrd-template
Adding /lib/udev/vol_id to default initrd-template
-> found component gpxe (undionly.kpxe.0.9.9.tgz) already downloaded
-> found component kvm-nic-bios (kvm-nic-bios-1.1.tgz) already downloaded
-> found component openqrm-client.windows (openQRM-Client-4.6.1-setup.exe) already downloaded
-> found component sshterm-component (openqrm-plugin-sshterm-components-1.0.tgz) already downloaded
-> found component adodb (adodb498.tgz) already downloaded
-> found component jquery (jquery-1.3.2.tgz) already downloaded
-> found component js-interface (interface_1.2.zip) already downloaded
-> found component openqrm-client.centos.i386 (openqrm-client.4.6.1.centos.i386.tgz) already downloaded
-> found component openqrm-client.centos.x86_64 (openqrm-client.4.6.1.centos.x86_64.tgz) already downloaded
-> found component openqrm-client.debian.i386 (openqrm-client.4.6.1.debian.i386.tgz) already downloaded
-> found component openqrm-client.debian.x86_64 (openqrm-client.4.6.1.debian.x86_64.tgz) already downloaded
-> found component openqrm-client.ubuntu.i386 (openqrm-client.4.6.1.ubuntu.i386.tgz) already downloaded
-> found component openqrm-client.ubuntu.x86_64 (openqrm-client.4.6.1.ubuntu.x86_64.tgz) already downloaded
-> found component openqrm-initrd-template.centos.i386 (openqrm-initrd-template.4.6.1.centos.i386.tgz) already downloaded
-> found component openqrm-initrd-template.centos.x86_64 (openqrm-initrd-template.4.6.1.centos.x86_64.tgz) already download
-> found component openqrm-initrd-template.debian.i386 (openqrm-initrd-template.4.6.1.debian.i386.tgz) already downloaded
-> found component openqrm-initrd-template.debian.x86_64 (openqrm-initrd-template.4.6.1.debian.x86_64.tgz) already download
-> found component openqrm-initrd-template.ubuntu.i386 (openqrm-initrd-template.4.6.1.ubuntu.i386.tgz) already downloaded
-> found component openqrm-initrd-template.ubuntu.x86_64 (openqrm-initrd-template.4.6.1.ubuntu.x86_64.tgz) already download
[root@cloud src]#
Nun führen wir “make install” aus.
[root@cloud src]# make install
include/
include/openqrm-plugin-local-storage-functions
bin/
....
Creating the openqrm-client boot-service package
[root@cloud src]#
Am Ende initialisieren und starten wir openQRM mittels “sudo make start”.
[root@cloud src]# make start
Checking the requirements for RedHat based systems ...
openqrm-server requires: httpd, php, php-mysql, php-soap, mysql, syslinux, screen, procmail, openssl
-> found httpd installed
NOTICE: Trying to automatically install php ...
Loaded plugins: fastestmirror
....
Checking for required components finished successfully
Starting httpd: httpd: Could not reliably determine the server's fully qualified domain name, using 192.168.88.6 for Server
[ OK ]
First startup detected. Running initialization.
Looking for syslinux/pxelinux.0...found: /usr/lib/syslinux/pxelinux.0
Creating custom apache config.../etc/httpd/conf.d/openqrm-httpd.conf
Checking /usr/share/openqrm/etc/openqrm-server.conf for OP[ OK ]B_PROTOCOL=https..Reloading httpd:
Adding password for user openqrm
Initializing dropbear...
Will output 1024 bit rsa secret key to '/usr/share/openqrm/etc/dropbear/dropbear_rsa_host_key'
Generating key, this may take a while...
Public key portion is:
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAAAgmOa49UMeOPqid06cR96yfRD/SQ98J1REpLKyyJ518iFFQyGKb9j2quZD+8FfKYt6rgFgS6
kGw95qJf6lqYc/rIH5ezcl4bVCn0Zo9pQkTyF496+iAp6AbPOX9KfBivu+5KWc7sfxOiDWGErPhzTGSkvjxwDAu2PkXAvTjUHMhhXxLk= root@cloud
Fingerprint: md5 de:cc:34:cb:2b:e5:b1:3d:50:dd:cc:f0:b5:ca:e9:e5
Adding public key to /root/.ssh/authorized_keys...
Starting the openQRM-server ver. 4.6.
Initialization complete. Please configure your openQRM Server at: http://192.168.88.6/openqrm/
-> User: openqrm -> Password: openqrm
[root@cloud src]#
“make start” führt zusätzlich eine Check-Routine aus, die überprüft, dass alle Abhängigkeiten für die Einwandfreie Nutzung von openQRM vorhanden sind. Ggf. nicht vorhandene Pakete werden automatisch installiert.
Während des ersten Starts wird der openQRM Server initialisiert. Nachdem openQRM vollständig installiert wurde, kann nun die Konfiguration mittels der Weboberfläche vorgenommen werden.
7. Konfiguration von openQRM
Wir melden uns am openQRM Server per http://ip-adresse/openqrm an. Der Benutzer und das Passwort sind jeweils “openqrm”. Nach der Konfiguration sollten diese Daten geändert werden.
Als erstes wählen wir als Netzwerkkarte die Bridge Schnittstelle für das openQRM Management.
Als Datenbank für das openQRM Backend wählen wir “myslq”.
Anschließend konfigurieren wir die Verbindungsinformationen für die Datenbank.
openQRM ist nun vollständig konfiguriert.
Wir werden automatisch zum Datacenter Dashboard weitergeleitet.
8. Erstellen eines Windows Image
Mit dem Plugin-Manager müssen wir als nächstes die folgenden Plugins aktivieren und starten:
dhcpd
tftpd
sanboot-storage
windows
cloud
Anschließend wechseln wir nach Base >> Components >> Create >> Storage. Dort erstellen wir einen neuen Speicher vom Typ “Sanboot-Storage (iSCSI)” und wählen den openQRM Server als Ressource.
Wir geben dem Storage Server einen Namen und speichern diesen.
Die Liste der verfügbaren Speicher sind nun wie folgt aus.
Wir klicken auf den “Mgmt” Button des neu erstellten “sanboot” Storage Server.
Hier wählen wir die Volume Group “vol”.
Nun erstellen wir ein neues Volume mit dem Namen “windowsxp″. Die Größe muss etwas größer sein als die der lokalen Festplatte des Systems, das verwendet wird, um das Image zu erstellen.
In unserem Tutorial verwenden wir eine 40 GB große lokale Festplatte, um ein Windows System zu installieren und zu einem LUN auf ein iSCSI-Target zu übertragen. Das Volume das wir erstellen hat eine Größe von 41GB und ist damit ein wenig Größer als die eigentliche physikalische Festplatte.
Mittels der Konsole würden wir wie folgt vorgehen:
Installation von Windows auf der lokalen Festplatte des zweiten Systems
In diesem Tutorial verwenden wir Windows XP Professional und nutzen exakt die GPXE Anweisungen von http://etherboot.org/wiki/sanboot/winxp. Wir nutzen dazu eine frische Windows Installation und nehmen keine Partitionierung der Festplatte vor.
Achtung:
Es wird “Install local + Transfer to iSCSI Lun” verwendet, da Windows XP es nicht unterstützt, direkt auf einem iSCSI-Target installiert zu werden. Neuere Windows Version wie bspw. Windows 7 können dagegen direkt auf einem iSCSI-Target installiert werden, siehe dazu http://etherboot.org/wiki/sanboot/iscsi_install
Nachdem Windows installiert wurde, fügen wir die “iSCSI Boot” Unterstützung hinzu. Dazu gehen wir auf die Webseite http://etherboot.org/wiki/sanboot/winnt_iscsi und laden dort die für Windows passende “Initiator 2.x boot-buildxxx-arch/lang.exe” herunter. In unserem Fall i386/X86 EN.
Wir speichern die Datei auf unserem Desktop.
Wir führen die Datei aus und folgen den Anweisungen.
Nun laden wir den Windows SAN Boot Configuration Driver von http://etherboot.org/wiki/sanboot/winnt_sanbootconf herunter.
Die ZIp-Datei beinhaltet den SAN Boot Treiber. Wir entpacken den Inhalt auf unseren Desktop.
Nun starten wir den sanbootconf Installer und folgen den Anweisungen.
Nach der Windows Installation starten wir das System neu und konfigurieren den Systemstart im BIOS so, dass das System vom Netzwerk aus (pxe-boot) gestartet werden kann. Anschließend wird das System nun innerhalb von openQRM als neue “idle” Ressource vom Typ “Physical System” gestartet.
Wenn sich das System im Status “idle” befindet müssen wir die folgenden Schritte vornehmen, um den Festplatteninhalt des physikalischen Windows Systems auf das iSCSI LUN zu übertragen:
1. Starten eines nc Listener auf dem logischen Windows Volume
[root@cloud ~]# ls /dev/mapper/vol-windowsxp
/dev/mapper/vol-windowsxp
[root@cloud ~]# nc -l 12345 | dd of=/dev/mapper/vol-windowsxp
# this command won't return but listen on port 12345 to submit data
# which it reads bitwise from the network port to /dev/mapper/vol-windowsxp
2. Mittels des “openqrm login” Befehl anmelden
Here the syntax of the “openqrm login” comand:
Wir müssen hierbei beachten, dass die Shell in diesem Fall über keine PATH Umgebung verfügt. Die Befehle müssen daher unter der Angabe des vollständigen Pfads ausgeführt werden.
Der folgende Befehl dient dazu, die lokale Festplatte der Windows Installation zu identifizieren.
bash-3.2# cat /proc/partitions
major minor #blocks name
8 0 39082680 sda
8 1 39070048 sda1
bash-3.2# /sbin/fdisk -l /dev/sda
Disk /dev/sda: 40.0 GB, 40020664320 bytes
255 heads, 63 sectors/track, 4865 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 4864 39070048+ 7 HPFS/NTFS
bash-3.2#
3. dd und nc gemeinsam nutzen
Um den Festplatteninhalt remote auf das logische Volume zu übertragen, nutzen wir die Kombination von dd und nc.
Abhängig von der Größe der Festplatte und der Geschwindigkeit des Netzwerks, kann dieser Vorgang ein Weile dauern.
Auf dem openQRM Server kann der Befehl “kill -USR1 [pid-of-dd-process]” genutzt werden, um zu sehen, wie viele Bytes dd bereits übertragen hat.
..
78165360+0 records in
78165360+0 records out
40020664320 bytes (40 GB) copied, 6322.11 seconds, 6.3 MB/s
[root@cloud ~]#
Nun führen für “sync” aus, um sicherzustellen, dass alle Bits auf das logische Volume übertragen wurden.
[root@cloud ~]# sync
[root@cloud ~]#
9. Vorbereiten des Windows Image
Wir schalten die Ressource die sich im Zustand “idle” befindet herunter (die Windows Installation auf der lokalen Festplatte), entfernen die Festplatte und starten sie über das Netzwerk neu.
Es sollte darauf geachtet werden, das die Bootreihenfolge auf “Network Boot only” steht.
Wenn das System neu gestartet ist und sich im Status “idle” befindet, erstellen wir erneut in logisches “Image” in openQRM.
Wir wechseln dazu nach Base >> Components >> Create >> Image und wählen den “Sanboot” Storage Server.
Anschließend geben wir dem Image einen Namen und wählen das “windowsxp″ Volume als das Root-Device.
Die Liste der verfügbaren Images sind nun wie folgt aus.
Nun erstellen wir eine “Appliance”. Dazu wechseln wir zu Base >> Appliance >> Create und wählen die Ressource “idle”.
Wir nennen die “Appliance” windowsxp, wählen den “default” kernel und das “windowsxp” Image und speichern die Appliance.
Wir starten die “Appliance”.
Das folgende Video auf YouTube zeigt den Systemstart des Windows Systems von dem iSCSI Storage Server.
Das Windows Image ist damit nun deployed und funktionsfähig. Nun müssen wir das Image so konfigurieren, damit es mittels openQRM verwaltet werden kann.
Dazu erstellen wir auf dem Windows Image im ersten Schritt einen Windows Benutzer mit dem Namen “root”.
Als nächstes muss der openQRM Client auf dem Windows Image installiert werden. Dazu öffnen wir einen Web-Browser und melden uns an den openQRM Server an.
Anschließend gehen wir zu Plugins >> Deployment >> Windows >> About
Hier laden wir den Windows openQRM-Client herunter.
Wir starten die openQRM-Client Installationsroutine und folgen den Anweisungen.
Now please run “gpedit.msc” and add the permission to “remote shutdown” to user “root”.
Wichtig: Sollte die Windows Firewall aktiviert sein, muss der TCP Port 22 geöffnet werden.
10. openQRM Cloud Konfiguration
Nun wechseln wir nach Plugins >> Cloud >> Configuration >> Main Config und konfigurieren die folgenden Punkte:
cloud_admin_email > eine valide E-Mail Adresse
auto_provision → true
external_portal_url → (optional) externe URL zu einem Cloud Portal
request_physical_systems → false
auto_give_ccus → 100
show_disk_resize → (optional) true
show_private_image → true
cloud_currency → (optional) auf US oder Euro setzen
cloud_1000_ccus → Wie viele 1000 CCUs wie viel US/Euro entsprechen
Für alle weiteren Konfigurationspunkte können die Standardwerte genommen werden. Speichern nicht vergessen!
Der folgende Screenshot zeigt die Hauptseite zur Konfiguration der Cloud.
Als nächstes müssen die Cloud Produkte mittels des “Cloud-Selector” konfiguriert werden.
Dazu gehen wir nach Plugins >> Cloud >> Configuration >> Products >> Kernel und erstellen ein neues “Windows” Kernel Produkt.
Das sieht dann wie im folgenden Screenshot aus.
Nun erstellen wir ein “Memory” Produkt. Dieses muss den exakt verfügbaren Speicher aufweisen, das auf dem zweiten physikalischen System verfügbar ist. (Das System, welches das Windows Image deployed.) In diesem Tutorial verwenden wir ein System mit 3008 MB physikalischen Arbeitsspeicher. Dieser muss entsprechend angepasst werden.
Das sieht dann wie im folgenden Screenshot aus.
Nun erstellen wir ein “Physical System”.
Das sieht dann wie im folgenden Screenshot aus.
Der nächste Schritt besteht darin, der Cloud mitzuteilen, welche Images den Cloud Benutzern angezeigt werden sollen. Dazu wechseln wir nach Plugins >> Cloud >> Configuration >> Private Images und wählen in den Checkboxen “All” für das “windowsxp ” Image.
Nun erstellen wir einen oder mehrere Cloud Benutzer. Hierfür gehen wir nach Plugins >> Cloud >> User und fügen einen neuen Benutzer inkl. einer gültigen E-Mail Adresse hinzu. Als Cloud Administrator kann man sich mit jedem beliebigen Cloud Benutzer anmelden, indem man auf den Namen des Cloud Benutzers klickt.
Die Liste der Cloud Benutzer sieht im Anschluss wie folgt aus.
Das openQRM Portal sieht nach einem erfolgreichen Login dann wie folgt aus.
Wir klicken auf den 2ten Tab mit dem Namen “Visual Cloud Designer”.
Der Virtual Cloud Designer zeigt alle verfügbaren Komponenten innerhalb der Cloud an. Mittels Drag and Drop kann nun eine eigene Cloud Appliance konstruiert werden.
Anschließend sollten die Kosten (stündlich, täglich, moantlich) für die Appliance betrachtet werden.
Mit einem einzigen Klick kann die Appliance der Cloud hinzugefügt werden.
Für das Cloud Deployment erstellt openQRM automatisch ein LVM Snapshot für das ursprüngliche Windows Image. Das bedeutet, dass es sich bei der (remote) Festplatte des Windows Image eigentlich um ein LVM Snapshot handelt. Im Storage Manager ist das Cloud Volume daher mit einem “s” (Snapshot) gekennzeichnet.
Auf der Konsole verwendet man dazu den folgenden Befehl:
Dieses Tutorial beschreibt das Einrichten einer virtuellen Instanz mit einem Windows Server 2008 AMI (Amazon Machine Image) auf Basis der Amazon Elastic Compute Cloud (Amazon EC2). Dazu gehören die vollständige Einrichtung der Instanz und der anschließende Zugriff per Remote Desktop Verbindung von einem Windows 7 Computer.
Voraussetzungen
Amazon Web Service Account
Amazon EC2 ist für den Account bereits aktiviert
RDP Client
Auswahl, Einrichten und Starten der Instanz
Zuerst öffnen wir die Webseite der Amazon Web Services und melden uns dort an.
Anschließend starten wir die AWS Management Console für EC2.
Hier klicken wir auf Launch Instance.
Ein weiteres Fenster öffnet sich, in dem bereits fertig vor-konfigurierte Amazon Machine Images (AMIs) von Amazon angezeigt werden. Hier wählen wir das erste AMI – Getting Started on Microsoft Windows Server 2008 (AMI Id: ami-a4698bcd)
Nun wählen wir folgende Konfiguration:
Number of Instances: 1
Availability Zone: No Preference
Instance Type: Small (m1.small 1.7 GB)
Als erweiterte Konfiguration wählen wir:
Kernel ID: Use Default
RAM Disk ID: Use Default
Monitoring: Nein
Anschließend erstellen wir ein Schlüsselpaar, hier mit dem Namen clouduser_key und speichern es auf unserem Rechner.
Im nächsten Schritt konfigurieren wir die Firewall, indem wir für unsere AMI eine Security Group erstellen. Die Standardvorgabe ist der externe Zugriff auf die Ports 3389 (RDP), MS SQL Server (1433) und 80 (HTTP). Die Freigaben für den Port 80 und 1433 habe ich entfernt, da wir sie in diesem Fall nicht benötigen. Wir geben der Security Group einen Namen, hier Security_Group_2 und eine Beschreibung, hier RDP_Only und wählen continue.
Danach erhalten wir eine Zusammenfassung unserer Konfiguration, wo wir mittels Launch unsere Instanz starten.
Über Your instances are now launching kommen wir zur Console zurück.
Dort sehen wir, dass unsere soeben erstellte Instanz aktiv ist und wir uns nun mit ihr verbinden können. Dazu notieren wir uns zunächst den Namen in der Spalte Public DNS.
Verbinden mit der Instanz
Um uns mit der Instanz zu verbinden öffnen wir zunächst die Datei mit unserem erstellten Private Key und kopieren den gesamten Inhalt inkl. der Kommentare —–BEGIN RSA PRIVATE KEY—– und —–END RSA PRIVATE KEY—–.
Nun gehen wir zurück zur AWS Management Console, klicken mit der rechten Maustaste auf die Instanz und wählen Get Windows Password
In das Feld Private Key* fügen wir den privaten Schlüssel inkl. der Kommentare —–BEGIN RSA PRIVATE KEY—– und —–END RSA PRIVATE KEY—– ein.
Nach dem Klick auf Decrypt Password wird uns der Benutzername und das Passwort für die Anmeldung an unserer Instanz angezeigt.
Jetzt öffnen wir die Remote Desktop Verbindung und tragen dort den Public DNS Namen ein.
Nach dem Klick auf Verbinden geben wir den Benutzernamen und das Passwort, das wir oben erhalten haben, ein.
Die Verbindung wird hergestellt.
Nun müssen wir noch das Zertifikat unserer Instanz akzeptieren.
Wir sind mit unserer Instanz verbunden.
Beenden der Instanz
Um die Instanz wieder zu beenden gehen wir zurück zu der AWS Management Console klicken mit der rechten Maustaste auf die Instanz und wählen Terminate.
Nach dem Bestätigen wird die Instanz beendet.
In der AWS Management Console ist am gelben Punkt zu sehen, dass die Instanz beendet wird. Das benötigt ein wenig Zeit.