Unified Communication

Auch in der Telefonie bleibt die Digitalisierung nicht stehen, dabei sticht das Asterisk Tool Kit als eine interessante alternative zu kommerziellen Telefonielösungen hervor.

Asterisk ist eine Open Source basierte Telefonanlagen Software für den Einsatz einer IP PBX unter Linux, lauffähig auf unterschiedlichen Rechner Plattformen. Asterisk beinhaltet  umfangreiche CTI Funktionalitäten, sowie eine API Schnittstelle AMI zur Integration von CTI Anwendungen. Unterstützt werden IP-Telefonie (VoIP) mit unterschiedlichen Protokollen wie SIP/SSIP, IAX und Fax T.38, mittels Hardware wird auch ISDN und POTS unterstützt, so können Endgeräte mit analog Telefonanschluss genutzt werden.

Mark Spencer hat Asterisk ursprünglich bei der Firma Digium entwickelt. Mittlerweile haben sich noch weitere Entwickler der Asterisk-Gemeinde angeschlossen und so stammen viele Erweiterungen und Applikationen auch von anderen Contributoren. Der Name beruht auf der Bezeichnung des Sternsymbol, dieses als Wahlfunktion die Steuerung der Telefonie regelt, wie beispielsweise *72 für die Weiterleitung.

Asterisk funktioniert auf einer Reihe unterschiedlicher Systeme. Neben Personal Computern mit x86-Prozessor läuft Asterisk auch auf dem Raspberry Pi und Router die OpenWrt unterstützen, ebenfalls werden Installationen auf Embedded Systeme mit Flash Speicher angeboten, wie dem ALIX Board von PC Engines.

Unified Communication

Bei der Portierung auf ARM Prozessoren kommen auch kommerzielle Asterisk basierte Telefonie Lösungen auf den Markt, eine davon ist die UCM6202 von Grandstream, diese für rund 220 EURO erhältlich ist.

Hybrid IP PBX mit 1 GB RAM und 4 GB Flash, ein NAT Router mit WAN und LAN Port, diese in Switch Mode geschalten werden können. Für analog Anschlüsse gibt es je 2 FXS und FXO Ports. Ein 2 Zeilen Display mit IP Adresse und Schnittstellen Mode.

Die Unified Communication UCM6202 beinhaltet umfangreiche CTI Funktionalitäten, in der neusten Firmware (1.0.15.16) wird Asterisk 13 und ein komfortables AJAX unterstütztes WebUI geboten.

Benutzer haben Kontrolle über ein WebUI und können Einstellungen vornehmen. Anrufe und Präsenz Status können im Benutzerpanel überwacht werden. Gemeinsame Telefonbücher sind über LDAP aus Active Directory abrufbar.

Die UCM6202 bietet dem Teilnehmer Information über laufende, verpasste und abgehaltene Verbindungen, sowie Sprachnachrichten. FollowMe und Weiterleitungen können aktiviert werden, Konferenzen abgehalten und geplant werden, dazu Einladungen per Email versenden, mit Integrierbarkeit externer Kalender, wie Google Kalender.

Funktionen

Die UCM6202 unterstützt bis zu 500 registrierte Nutzer, 50 SIP Trunks und 30 parallele Gespräche, ohne Beschränkung wie etwa für anzahl von Lizenzen. Für Grandstream SIP Endgeräte ist eine Zero Configuration Provisionierung möglich. Es wird größtmögliche Sicherheit durch die Anwendung von SRTP, TLS und HTTPS ermöglicht. Zwei Gigabit Netzwerkanschlüsse mit integrierter PoE Stromversorgung. Interaktive Sprachansagen (IVR) bis max. 5-Stufen (Interactive Voice Response). Integrierter Server zur Sprachaufzeichnung, Zugang und Abruf über die Web-Schnittstelle. Mehrfach Zeitgesteuerte Regeln für Ansagen von Bürozeiten und Feiertage. Anruf-Warteschlange für mehr Effizienz bei hohem Gesprächsvolumen. Integrierte Anruf Aufzeichnung (CDR) mit vielen Details wie Zeit, Datum, Nebenstelle, genutzte Leitung usw. Mehrsprachige Ansagen zur effizienten Verteilung ankommender Gespräche. Integriertes LDAP und XML Telefonbuch, flexible Dial-Pläne. Unterstützung für alle SIP-Video-Endgeräte, sofern diese H.264, H.263 oder H.263+ Codecs nutzen. Anrufbeantworter und Fax zu E-Mail Weiterleitung. Virtuelle Konferenzräume, WebRTC, PMS System mit Hotel Mini-Bar, Room Reservation und CTI Server. API Schnittstellen und Integration für Salesforce und SugarCRM. Backup Automatisierung mit Möglichkeit für externe Speicher. Firewall zur Steuerung von Zugang und Fail2ban für abwehr von Brute-Force und DDoS Angriffe. Syslog Protokollierung auf Remote Host zur Überprüfung und Fehlersuche. Asterisk Tool Kit und Linux Open Source basierend (ohne Lizenzkosten).

Grandstream App für Video anrufe auf iOS und Android Smartphone.

      

Die Mobile App Wave von Grandstream mit Möglichkeit für Nachrichten, Konferenz, Transfer und Video Verbindungen.

Abbildung: GXP1625, UCM6202
Mit Grandstream IP Telefone wird Zero Config Provisionierung mit automatischer Konfiguration über TR069 und XML möglich. die Geräte werden mit IP oder MAC Adresse gescannt, Geräte anderer Hersteller sind einsetzbar, mit herkömmlicher Provisionierung über TFTP Server oder das TR069 Protokoll, falls vom Hersteller vorgesehen, ansonsten gibt es die manuelle Einrichtung.

Hersteller Quelle:
Grandstream UCM6202 IP PBX Series
Open Source Asterisk Toolkit

 

Python Loops mit Break- Continue- Pass


 for- und while-Loops auf effiziente Weise für zyklische und automatisierte Aufgaben nutzen.

Synopsis

Manchmal bestimmen externe Faktoren wie Schleifen in einem Programm durchlaufen werden. Wenn dies eintrifft, möchte man möglicherweise dass die Schleife in einer Routine vollständig beendet wird, oder einen Teil der Schleife überspringt, bevor sie fortfährt, oder es soll ein externer Faktor ignorieren werden. Diese Aktionen können mit der Anweisung breakcontinue und pass durchgeführt werden.

Anweisung break

In Python bietet die break Anweisung die Möglichkeit, eine Schleife zu verlassen, wenn eine externe Bedingung ausgelöst wird. Hierzu setzen wir die break Anweisung in den Codeblock unterhalb der Schleife, normalerweise nach einer bedingten if-Anweisung.

Schauen wir uns ein Beispiel an, das die break Anweisung in einer for-Schleife anwendet:

In diesem kleinen Programm wird die Variable zahl auf 0 initialisiert. Dann wird eine for-Anweisung in die Schleife gelegt, diese durchläuft solange die Variable zahl kleiner als 10 ist.

Innerhalb der for-Schleife erhöht sich die Zahl bei jedem Durchlauf bedingt um inkrementell 1 zahl = zahl + 1.

Dann bei der if-Anweisung die den Zustand zeigt, wenn die Variable zahl der ganzen Zahl 5 entspricht, wird die Schleife abgebrochen.

Innerhalb der Schleife befindet sich auch eine print() Anweisung, die bei jeder Iteration der for-Schleife ausgeführt wird, bis die Schleife bei der break Anweisung abbricht.

Um zu sehen, wann wir außerhalb der Schleife sind, haben wir eine abschließende print() Ausgabe außerhalb der for-Schleife eingefügt.

Wenn wir diesen Code ausführen, erscheint unsere Ausgabe wie folgt:

Es zeigt sich, sobald die Ganzzahl zahl als äquivalent zu 5 bewertet wurde, die Schleife abbricht, da das Programm dies durch die break-Anweisung tun soll.

Die break-Anweisung bewirkt also, dass ein Programm aus einer Schleife ausbricht.

Anweisung continue

Die continue-Anweisung gibt uns die Möglichkeit, den Teil einer Schleife zu überspringen, in diesem eine externe Bedingung ausgelöst wird, aber bis zum Rest der Schleife beendet wird. Das heißt, die aktuelle Iteration der Schleife wird unterbrochen, aber das Programm kehrt zum Anfang der Schleife zurück.

Die continue-Anweisung befindet sich innerhalb des Codeblocks unter der Schleifenanweisung, normalerweise nach einer bedingten if-Anweisung.

Wenn wir das selbe in einem for-Loop wie oben mit der Break-Anweisung anwenden, verwenden wir einfach eine continue-Anweisung anstelle der break-Anweisung:

Der Unterschied bei der Verwendung der continue-Anweisung anstelle einer break-Anweisung besteht darin, dass unser Code trotz der Störung weiter durchläuft, wenn die Variable zahl gleich 5 bewertet wird. Schauen wir uns unsere Ausgabe an:

Hier sehen wir, dass die Linie „Zahl ist 5“ nie in der Ausgabe erscheint, aber die Schleife fährt nach diesem Punkt fort, und die Zahlen 6-10 werden ausgegeben, bevor die Schleife verlassen wird.

Mit der continue-Anweisung können in tief verschachtelten Code Fehler vermeiden werden, auch könne hierdurch Loops optimiert werden, indem man häufig auftretende Fälle, die man ablehnen möchten, eliminiert.

Die continue-Anweisung bewirkt, dass ein Programm bestimmte Faktoren überspringt, die innerhalb einer Schleife auftreten, und dann den Rest der Schleife fortsetzt.

Anweisung pass

Wenn eine externe Bedingung ausgelöst wird, kann mit der pass-Anweisung die Bedingung verarbeitet werden, ohne dass die Schleife in irgendeiner Weise beeinträchtigt wird. Der gesamte Code wird weiterhin gelesen, sofern keine break oder eine andere Anweisung auftritt.

Wie bei den anderen Anweisungen befindet sich die pass-Anweisung innerhalb des Codeblocks unter der Schleifenanweisung, normalerweise nach einer bedingten if-Anweisung.

Verwenden wir den gleichen Codeblock wie oben, ersetzen jedoch die Anweisung break oder continue durch eine pass-Anweisung:

Die pass-Anweisung, die nach der if-bedingten Anweisung auftritt, teilt dem Programm mit, die Schleife weiterhin auszuführen und ignoriert die Tatsache, dass die Variable zahl während einer ihrer Iterationen als äquivalent zu 5 bewertet wird.

Wir werden das Programm ausführen und uns die Ausgabe ansehen:

Bei Verwendung der pass-Anweisung in diesem Programm stellen wir fest, dass das Programm genauso ausgeführt wird, als wenn es keine bedingte Anweisung im Programm gäbe. Die pass-Anweisung weist das Programm an, diese Bedingung zu ignorieren und das Programm wie gewohnt weiter auszuführen.

Die pass-Anweisung kann minimale Klassen erstellen oder als Platzhalter fungieren, wenn an neuem Code gearbeitet wird und auf einer algorithmischen Ebene gedacht wird, bevor Details herausgearbeitet werden.

Fazit

Durch die break, continue und pass-Aussagen in Python ermöglicht es uns, for– und while-Loops im Code effektiver anwenden zu können.

 

Zugriff auf Virtuellen Festplatten

Manchmal kann es nützlich sein, Daten von virtuellen Festplatten zu lesen oder Dateien von einer virtuellen Partition in eine andere zu kopieren, ohne das virtuelle Betriebssystem zu booten. In diesem Fall wird es erforderlich, die virtuelle Festplatte zu öffnen um den Inhalt zu lesen. Außerdem können Dateien auch gelöscht, verschoben oder zu einer virtuellen Maschine hinzufügt werden, um beispielsweise ein nicht mehr Boot fähiges System zu reparieren oder Offline-Windows-Updates auszuführen.

Eine weitere Möglichkeit ergibt sich zur Wiederherstellung von Daten aus einer Snapshot Sicherung, beispielsweise bei VMware Consolidated Backup durch ghettoVCB.

Es gibt viele verschiedene Möglichkeiten, wie auf den Inhalt eines virtuellen Laufwerks zugegriffen werden kann, ohne das virtuelle Betriebssystem selbst zu booten. Hier wird die recht einfache Lösungen mit 7-Zip vorgestellt.

7-Zip ist wahrscheinlich das beliebteste kostenlose Archiv-Tool, dieses auch die Möglichkeit bietet, VHD-, VDI- und VMDK-Disk-Images zu öffnen. Es können benötigte Dateien einfach aus der virtuellen Maschine extrahiert werden, oder aber das Archive wird über die Schaltfläche Extrahieren in ein Ordner kopiert.

Abbildung: 7-Zip Kontextmenu Flat VMDK öffnen.

Um ein virtuelles Laufwerk zu öffnen, klicken man mit der rechten Maustaste auf die Flat VMDK oder VHD Datei um die virtuelle Festplatte über das 7-Zip-Kontextmenü zu öffnen. Es werden nur Single-Volume-VDIs unterstützt, wenn es mehr als eine Partition gibt, wird kein Root- Verzeichnis geöffnet. Multi-Volume-VHD und VMDK-Dateien werden aber unterstützt, dabei werden die Partitionen nummeriert angezeigt, 0 ist oft die Reserved Boot-Partition, 1 ist die Haupt-Windows-Partition und 2 ist die Partition für das Laufwerk D.

 

OpenSSH in Windows 10

Im aktuellen Windows-10-Build ist der OpenSSH-Client als Beta-Feature enthalten. Mit

dem Build 1709 „Fall Creators Update“ hat Windows 10 auch ein paar versteckte Features eingeführt, die für Linux Admins und Poweruser interessant sind. Das beste für Linux- und Unix-Anwender ist vermutlich die Integration des SSH-Client und Server, wie bereits vor zwei Jahren angekündigt, der auf OpenSSH basierte SSH-Client.

Windows 10 SSH-Client

Um den SSH-Client auf Windows 10 zu aktivieren, gib man in der Eingabeaufforderung folgendes Command ein.

Anschließend kann der Client, der unter dem Pfad  „C:\WINDOWS\System32\OpenSSH“ installiert wurde, aus dem CLI wie von der Linux Shell gewohnt genutzt werden, beispielsweise auch ein lokales und Remote-Port-Forwarding steht zur Verfügung.

Die Windows-native OpenSSH-Implementierung, die Remote-Sitzungen in der Eingabeaufforderung „cmd“ und in der PowerShell ermöglicht, erlaubt nun ohne SSH-Tools auszukommen, wie es das Windows-Subsystem für Linux (WSL) mit bash on Windows, PuTTY oder KiTTY und dergleichen wäre.

Sollen Dienstprogrammen wie vi, top, man, multitail und weitere verwendet werden, macht man die besten Erfahrungen, in dem man die Windows SSH-Client Verbindung mit einem * nix-Server hat, das Terminal für einen xterm-ähnlichen Rendering-Modus konfiguriert.

TTY Support in Windows OpenSSH

Öffne hierzu die Eingabeaufforderung (cmd) und klicke mit der rechten Maustaste im Fenster oben links auf das kleine Icon    dann unten auf Eigenschaften.

Abbildung: Eigenschaften von Eingabeaufforderung

Stelle sicher dass Legacykonsole (erfordert Neustart) nicht deaktiviert ist.

Des Terminal Fenster sollte eine probate Größe haben, entsprechend zum gewählten Font und dessen Größe.

Abbildung: Eigenschaften von Eingabeaufforderung – Layout

Im Register Layout die Fensterbreite und Buffergrösse auf 110 setzen.

Für TTY und PTY wird der VT100 Terminal Emulator unterstützt, dazu benötigt es die Umgebungsvariable XTERM diese in der Windows MMC-Konsole mit +R  control sysdm.cpl,,3 gesetzt werden kann.

Unten auf Umgebungsvariablen klicken und im Abschnitt Systemvariablen auf Neu klicken und die Variable TERM=xterm eintragen.

Das Fenster schließen und wieder öffnen, nun ist das TTY Terminal in einer SSH Verbindung anwendbar.

Hinweis zur Implementierung

Windows verfügt über keine integrierte Unterstützung für ein Pseudoterminal.

Die Windows-Version des OpenSSH-Servers implementiert einen VT100 PTY, indem Windows Console-Ereignisse abgefangen werden. Dies ist in ssh-shellhost.exe implementiert, verbunden mit sshd über stdout input/output. Auf einer high-level Ebene fungiert ssh-shellhost.exe als Vermittler zwischen sshd und einer Windows-Konsole, die Folgendes ausführt:

Interpretiert eingehende VT100, Prozesse und Aufrufe von Windows Console IO.

Verarbeitet die Ereigniswarteschlange der Windows-Konsole (Ausgabe), übersetzt sie in VT100 und gibt sie auf stdout aus.

 

Docker DevOps Continuous Delivery

Docker im DevOps und Continuous Delivery Umfeld wird ein zunehmend wichtiger Bestandteil. Docker ist eine Virtualisierungslösung, die ohne Hypervisor auskommt, es wird Operating-system-level Virtualization mit Linux-Containern verwendet. Im Backend verlässt Docker sich ausschließlich auf LXC. Diese Container sind unabhängig voneinander, aber verwenden Teile des Linux-Kernels als Abstraktion gemeinsam. Dadurch ist die Effizienz wesentlich höher als bei anderen Virtualisierungslösungen.

Auf Operating-system-level Virtualization basierende Lösungen sind die bekanntesten Vertreter dieser Technik die Linux-Container. Dabei ist Docker weit verbreitet. Docker konkurriert mit dem auf App Container (appc) basierendem Rocket (rkt). Die Open Container Initiative (OCI) strebt eine Vereinheitlichung und gemeinsame Standards für Container-Formate und Container-Laufzeitumgebungen an.

Das Docker Prinzip

Nicht wie Hypervisoren zur Virtualisierung bietet Docker keine vollständige Virtualisierung von virtuellen Maschinen, vielmehr handelt es sich um Linux-Container (LXC oder Libcontainer, und chroot, Namespaces, Cgroups). Diese Container sind unabhängig voneinander, aber verwenden Teile des Linux-Kernels gemeinsam. Dadurch ist die Effizienz wesentlich höher als bei anderen Virtualisierungslösungen. Auf einer Hardware können wesentlich mehr Docker-Container betrieben werden als VMs.

Diagramm: Virtual Machines und Containers

Als Hypervisor basierte Lösung war Docker bis April 2016 auf Linux Host Systeme angewiesen. Auf Windows und Mac OS X konnte es nur mit einem zusätzlichen Linux-Layer installiert werden, beispielsweise über Docker Toolbox (beinhaltet Boot2Docker und Oracle VirtualBox). Ähnliches gilt für das Gast-Betriebssystem wo nur Linux möglich ist. Der Gast verwendet den Linux-Kernel des Host Systems.

Seit April 2016 gibt es Beta-Versionen von Docker for Mac and Docker for Windows, die als native Anwendungen laufen und ohne VirtualBox auskommen. Die Docker-Engine läuft unter einem Alpine-Linux auf einer virtuellen Maschine (Hyper-V bei Windows und xhyve in OS X).

Die Docker Machine

Die Boot2docker Machine unter Windows 10 wird als Virtuelle Linux Machine in VirtualBox ausgeführt. DevOps die beim deployen mit ESXi Hypervisoren arbeiten, benutzen oft die VMware Workstation, diese performanter ist als die VirtualBox, bevor die VMware Workstation aber genutzt werden kann, wird der Treiber von pecigonzalo benötigt, die Treiberdatei Docker Machine VMware Workstation Driver wird in das Programm Verzeichnis, Docker Toolbox kopiert.

  Docker Machine VMware Workstation Driver

Dieses Plugin für Docker Machine erstellt Docker-Hosts lokal auf einer VMware Workstation.

Abbildung: boot2docker shell

Ducker – Up and Running: von Karl Matthias bei O’REILLY