<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>/var/pub/chris_blog</title>
	<atom:link href="http://blog.christian-stankowic.de/?feed=rss2" rel="self" type="application/rss+xml" />
	<link>http://blog.christian-stankowic.de</link>
	<description>Me and Android, VMware and Unix/Linux</description>
	<lastBuildDate>Tue, 18 Jun 2013 11:04:55 +0000</lastBuildDate>
	<language>de-DE</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>Alle CD-Laufwerke eines VMware-Clusters auswerfen</title>
		<link>http://blog.christian-stankowic.de/?p=5509</link>
		<comments>http://blog.christian-stankowic.de/?p=5509#comments</comments>
		<pubDate>Tue, 18 Jun 2013 11:04:55 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[VMware]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[ESXi]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5509</guid>
		<description><![CDATA[Jedes VMware-Administrator kennt es &#8211; der Cluster soll gepacht werden und die einzelnen Nodes müssen nacheinander neugestartet werden. Glücklicherweise besteht für den Endanwender keinerlei Handlungsbedarf, da die virtuellen Maschinen reibungslos zwischen den einzelnen Clusterknoten &#8220;online&#8221; verschoben werden können. Einen kleinen &#8230; <a href="http://blog.christian-stankowic.de/?p=5509">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Jedes VMware-Administrator kennt es &#8211; der Cluster soll gepacht werden und die einzelnen Nodes müssen nacheinander neugestartet werden. Glücklicherweise besteht für den Endanwender keinerlei Handlungsbedarf, da die virtuellen Maschinen reibungslos zwischen den einzelnen Clusterknoten &#8220;<em>online</em>&#8221; verschoben werden können.</p>
<p>Einen kleinen Show-Stopper erlebt man dann, wenn auf den virtuellen Maschinen noch ISO-Abbilder, die nicht auf dem gemeinsamen Cluster-Speicher abgelegt wurden, eingehängt sind (<em>beispielsweise lokale CD-Laufwerke</em>). In diesem Fall lässt sich die VM nicht verschieben und der Clusterknoten wechselt nicht in den Wartungsmodus, manuelle Interaktion ist notwendig.</p>
<p>Das kann, je nach Anzahl der ISOs, die eingehängt wurden, Zeit und Nerven kosten. Abhilfe schafft das folgende kleine PowerShell-Skript, welches ich für diesen Zweck geschrieben habe:</p>
<pre>PowerCLI C:\scripts&gt; vim VMISOs.ps1

#Get all virtual machines with mounted ISOs and dismount (if wanted)
#2013 By Christian Stankowic 

##################################################################

#Get array of all Clusters
$myClusters = Get-Cluster

#Create VMs array
$VMs = @()

Write-Host "Okay - I'm going to check all VMs whether there are mounted ISO files."
Write-Host "This will take some time - get yourself some coffee.. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> "
Write-Host ""

#Get vms of cluster
foreach ($cluster in $myClusters) {
                #Get VMs
                #$thisVMs = Get-VM
                $thisVMs = Get-Cluster $cluster | Get-VM
                $counter=0;

                #Get VM information
                foreach ($vm in $thisVMs) {
                               #Get view
                               $vmView = $vm | Get-View

                               if( (($vm | Get-CDDrive).ISOPath) -or (($vm | Get-CDDrive).RemoteDevice) -or (($vm | Get-CDDrive).HostDevice) )
                               {
                                               #Setup output
                                               $VMInfo = "" | Select "VM","Host","ISO","RemoteDevice","HostDevice"

                                               #Write-Host "VM = $vm | Host = " ($vm | Get-VMHost).name " | ISO = " ($vm | Get-CDDrive).ISOPath " / Remote-Device = " $(vm | Get-CDDrive).RemoteDevice " / HostDevice = " $(vm | Get-CDDrive).HostDevice

                                               #Defining hostname, ESX host and ISO path
                                               $VMInfo."VM" = $vm.Name
                                               $VMInfo."Host" = ($vm | Get-VMHost).Name
                                               $VMInfo."ISO" = ($vm | Get-CDDrive).ISOPath
                                               $VMInfo."RemoteDevice" = ($vm | Get-CDDrive).RemoteDevice
                                               $VMInfo."HostDevice" = ($vm | Get-CDDrive).HostDevice

                                               #Add to array
                                               $VMs += $VMInfo
                               }

                               $counter++;
                               if( $counter % 10 -eq 0 ) {
                               Write-Host "Check $counter of " $thisVMs.length " in " $cluster " so far..."
                               }
                }
}

#sort array by Cluster
$VMs | Sort Cluster

#disconnect
$answer = Read-Host "Found " $VMs.length " mappings - force disconnect now? (y/n)"
if($answer -eq "y")
{
                foreach ($vm in $VMs)
                {
                               Write-Host "Disconnect on " $vm.VM "..."
                               Get-VM $vm.VM | Get-CDDrive | Set-CDDrive -NoMedia -Confirm:$false
                }
}
else { Write-Host "Disconnect aborted by user." }</pre>
<p>Das Skript erfordert eine installierte <strong>PowerShell</strong> und <strong>VMware PowerCLI</strong>. Nachdem eine Verbindung zum <strong>vCenter</strong> hergestellt wurde, fragt das Skript alle Cluster und alle darin hinterlegten virtuellen Maschinen nach eingehängten CD-ROMs/ISOs ab. Anschließend wird eine Liste der betroffenen VMs angezeigt &#8211; nach einer Bestätigung werden die Medien ausgehängt, damit die Administrationsaufgaben ausgeführt werden können.</p>
<pre>PowerCLI C:\scripts&gt; Connect-VIServer TVM-VCENTER

PowerCLI C:\scripts&gt; .\VMISOs.ps1
Okay - I'm going to check all VMs whether there are mounted ISO files.
This will take some time - get yourself some coffee.. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> 

Check 10 of  136  in  Demo-Cluster  so far...
....
VM           : TVM-WEB01
Host         : hypervisor01.localdomain.loc
ISO          :
RemoteDevice : /usr/lib/vmware/isoimages/windows.iso
HostDevice   :

Found  6  mappings - force disconnect now? (y/n): y
Disconnect on  TVM-WEB01 ...
...</pre>
<p>Insbesondere vor Wartungsarbeiten spart mir das Skript viel Zeit. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5509</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Hochverfügbarkeit ad absurdum &#8211; Instant Messenger-Cluster mit DRBD und Finch (Pidgin)</title>
		<link>http://blog.christian-stankowic.de/?p=5429</link>
		<comments>http://blog.christian-stankowic.de/?p=5429#comments</comments>
		<pubDate>Thu, 09 May 2013 21:48:58 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[Debian]]></category>
		<category><![CDATA[Raspberry Pi]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5429</guid>
		<description><![CDATA[Hochverfügbarkeit unter Linux wird oftmals unberechtigterweise für ein bodenloses Fass gehalten. Zugegebenermaßen bedarf der Einstieg einiger Geduld und verlangt auch Einlesungsvermögen &#8211; es ist allerdings machbar und für jeden halbwegs routinierten Administrator (oder jemanden, der es mal sein will) ein &#8230; <a href="http://blog.christian-stankowic.de/?p=5429">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Hochverfügbarkeit unter Linux wird oftmals unberechtigterweise für ein bodenloses Fass gehalten. Zugegebenermaßen bedarf der Einstieg einiger Geduld und verlangt auch Einlesungsvermögen &#8211; es ist allerdings machbar und für jeden halbwegs routinierten Administrator (<em>oder jemanden, der es mal sein will</em>) ein stemmbares Hindernis. Dieses Beispiel soll zeigen, wie simpel der Aufbau eines einfachen 2-Node-Clusters sein kann.</p>
<p>Wenn es darum geht, Daten zwischen mehreren Hosts stets synchron zu halten, ist die Verwendung eines <strong>DRBD</strong>s (<em>Distributed Replicated Block Device</em>) meistens die eleganteste und einfachste Lösung.</p>
<p>So kann man seine Server beispielsweise mit dedizierten LUNs ausstatten und auf diesen die durch den späteren Cluster zu schützende Applikationen ablegen. In Kombination mit <strong>heartbeat</strong>, <strong>Pacemaker</strong> oder ähnlichen HA-Lösungen ergibt DRBD das Herzstück für hochverfügbare Linux-Applikationen.</p>
<p>Das Konzept ist simpel und genial zugleich &#8211; den Möglichkeiten sind hier keine Grenzen gesetzt, wie das folgende, etwas realitätsferne, Beispiel zeigt.</p>
<h1>Hochverfügbarkeit <em>ad absurdum</em></h1>
<p>Wer gerne online soziale Kontakte pflegt, kennt die verschiedensten Instant-Messenger, von denen <strong>Skype</strong>, <strong>ICQ</strong> und <strong>Jabber</strong> nur drei prominente Vertreter sind. Um diese Protokolle auch unter Linux zu verwenden, gibt es Multiprotokoll-Messenger, wie beispielsweise <a title="http://www.pidgin.im/" href="http://www.pidgin.im/" target="_blank"><strong>Pidgin</strong></a>. Von Pidgin existiert eine Variation, die keine grafische Oberfläche verwendet und stattdessen auf eine <strong>curses</strong>-Textoberfläche zurückgreift &#8211; <strong>Finch</strong>. Dieses Tool dient hier als unternehmenskritische Applikation, die mithilfe von <strong>heartbeat </strong>später in einem <strong>Active/Passive Cluster</strong> betrieben wird. Das Resultat ist ein hochverfügbarer Instant-Messenger, der im Fehlerfall auf einen zweiten Node in einem anderen Brandabschnitt wechselt &#8211; ohne dabei seine Konfiguration und Protokolle zu verlieren. Sicherlich werden sich jetzt viele Leser fragen, wie sie bisher ohne eine solche Applikation leben konnten. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/finch_cluster.png" rel="lightbox[5429]"><img class="alignleft size-thumbnail wp-image-5475" alt="Aufbau" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/finch_cluster-150x150.png" width="150" height="150" /></a>In diesem Beispiel gibt es zwei Raspberry Pi, die hinter jeweils einem herkömmlichen DSL-Router betrieben werden. Über eine Portfreigabe, die auf beiden Routern äquivalent einzurichten ist, ist ein Zugriff von &#8220;<em>außen</em>&#8221; (<em>WAN</em>) über SSH auf den Raspberry Pi möglich &#8211; idealerweise nimmt man hier jedoch nicht den Standardport <strong>22</strong>. Über ein Tool namens <a title="http://www.gnu.org/software/screen/" href="http://www.gnu.org/software/screen/" target="_blank"><strong>GNU screen</strong></a> kann eine Terminal-Sitzung mit ausgeführten <strong>finch</strong> jederzeit fortgesetzt werden &#8211; so hat man von jedem Host mit Internetverbindung Zugriff auf die &#8220;<em>Chat-Shell</em>&#8220;. Die beiden Router sind in diesem Beispiel mit einem IPSec-VPN verbunden, die beiden Raspberry Pi können sich also anpingen und über einen verschlüsselten Kanal kommunizieren, obwohl sie sich in unterschiedlichen, voneinander getrennten, Netzwerksegmenten befinden.</p>
<p>Mithilfe eines Tools namens <strong>heartbeat</strong> wird später eine gegenseitige Überprüfung auf Verfügbarkeit durchgeführt (<em>daher das VPN zwischen den Routern; die Clusternodes müssen einander anpingen können &#8211; eine andere Möglichkeit wäre ein Point-to-Point-VPN, beispielsweise mittels OpenVPN</em>). Fällt ein Clusternode aus, bekommt dies der andere Node mit, übernimmt den Zugriff auf die gemeinsame Speicherressource (<em>dazu später mehr!</em>) und startet die Anwendung schnellstmöglich neu (<em>entspricht dem Active/Passive Cluster-Prinzip</em>).</p>
<p>Neben den zwei Raspberry Pi werden noch zwei USB-Sticks benötigt, die in diesem Aufbau das zu replizierende Blockgerät darstellen &#8211; DRBD mag keine <strong>Pseudo-devices</strong>, wie beispielsweise mit <strong>dd</strong> angelegte Dateien. Auf dieser &#8220;<em>Cluster-Disk</em>&#8221; werden die Konfigurations- und Protokolldateien von Finch gespeichert. So verfügt die Applikation stets über die selben Daten &#8211; unabhängig davon, wo sie gerade ausgeführt wird.</p>
<h1>Aufbau und Netzwerk</h1>
<p>Für dieses Beispiel habe ich mir einen <a title="http://www.noip.com/" href="http://www.noip.com/" target="_blank">NoIP</a>-Hostname zugelegt &#8211; nach der Registrierung kann die mit dem dynamischen Hostname verbundene IP über ein NoIP-eigenes Linux-Utility aktualisiert werden. Dieses muss auf den beiden Raspberry Pi übersetzt und installiert werden:</p>
<pre>both-nodes # apt-get install gcc curl
both-nodes # wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
both-nodes # tar xfz noip-duc-linux.tar.gz
both-nodes # cd noip-*
both-nodes # make &amp;&amp; make install
...
Please enter the login/email string for no-ip.com  
Please enter the password for user '...'  ***
...
Please enter an update interval:[30]  44640
...</pre>
<p>Standardmäßig läuft der NoIP-Client im Hintergrund &#8211; genau das wollen wir in diesem Cluster-Setup jedoch nicht. Über <strong>heartbeat</strong> erfolgt später ein geskriptetes Update im Falle eines Failovers. Wenn die Anwendung also von einem Node zum anderen wechselt, wird die IP-Adresse, mit der auf die Chat-Shell zugegriffen wird, aktualsiert. Durch eine manuelle Ausführung kann sichergestellt werden, dass das Tool ordnungsgemäß funktioniert:</p>
<pre>any-node # /usr/local/bin/noip2 -i $(curl --silent http://icanhazip.com)
any-node # ping chat.noip.com</pre>
<p>Für den späteren Clusterbetrieb müssen noch Software-Pakete für <strong>drbd</strong> und <strong>heartbeat</strong> installiert werden:</p>
<pre>both-nodes # apt-get install drbd8-utils heartbeat</pre>
<h1>DRBD</h1>
<p>Bevor der gemeinsame Clusterspeicher eingerichtet wird, ist es notwendig sicherzustellen, dass die beiden Nodes einander finden. Auch bei funktionierendem DNS sollte man hierfür immer einen lokalen Eintrag in der <strong>/etc/hosts</strong> vornehmen (<em>um unabhängig von einem evtl. anfälligen DNS-Service zu sein</em>) und die Nodes anpingen:</p>
<pre>both-nodes # vi /etc/hosts
....

192.168.1.2   hostA.fqdn.dom hostA
192.168.2.2   hostB.fqdn.dom hostB

ESC ZZ

node-a # ping hostA
node-a # ping hostB
node-b # ping hostA
node-b # ping hostB</pre>
<p>Die beiden angeschlossenen USB-Sticks werden neu partitioniert (<em>vorhandene Partitionen werden entfernt</em>), sie erhalten eine Linux-Partition (<em>Typ 83</em>). Anschließend wird die DRBD-Konfigurationsdatei angepasst:</p>
<pre>both-nodes # fdisk /dev/sda &lt;&lt; EOF
d
4
d
3
d
2
d
1

n
p
1

w
EOF

both-nodes # cp /etc/drbd.conf /etc/drbd.conf.initial
both-nodes # vim /etc/drbd.conf
...
resource drbd1 {
  protocol C;

  syncer {
    rate 75K;
    al-extents 257;
  }
  on hostA.fqdn.dom {
    device    /dev/drbd1;
    disk      /dev/sda1;
    address   192.168.1.2:7789;
    meta-disk internal;
  }
  on hostA.fqdn.dom {
    device    /dev/drbd1;
    disk      /dev/sda1;
    address   192.168.2.2:7789;
    meta-disk internal;
  }

}</pre>
<p>Definiert wird hier ein Volume <strong>drbd1</strong>, welches auf den beiden Nodes <strong>hostA.fqdn.com</strong> und <strong>hostB.fqdn.com</strong> jeweils auf dem Gerät <strong>/dev/sda1</strong> synchronisiert wird.</p>
<p>Sehr wichtig ist auch folgende Zeile:</p>
<pre>rate 75K;</pre>
<p>Sie definiert die maximale Synchronisierungsrate in Byte pro Sekunde, hier <strong>75 KB/s</strong>. Die Synchronisierungsgeschwindigkeit ist von vielen Faktoren abhängig und sollte sorgfältig ausgewählt werden. Die Geschwindigkeit sollte beispielsweise nicht höher sein, als der verwendete Speicher es zulässt. Wenn für DRBD und die Applikation das gleiche Netzwerksegment verwendet wird (<em>idealerweise hat man für DRBD ein eigenes Netzwerk</em>), muss auf den üblichen Netzwerktraffic Rücksicht genommen werden.</p>
<p>Eine Faustregel besagt, den Wert der Syncer rate auf das 0.3-fache der effektiv verfügbaren Bandbreite zu setzen &#8211; ein Beispiel findet sich im <a title="http://www.drbd.org/users-guide/s-configure-sync-rate.html" href="http://www.drbd.org/users-guide/s-configure-sync-rate.html" target="_blank">Handbuch von DRBD</a>:</p>
<pre>110 MB/s Bandbreite * 0.3 = 33 MB/s
...
syncer rate = 33M;</pre>
<p>Lässt das Netzwerk die definierte Maximalgeschwindigkeit nicht zu, wird automatisch gedrosselt. Mehr Informationen zur Synchronisation finden sich im Handbuch von DRBD: <a title="http://www.drbd.org/users-guide/s-configure-sync-rate.html" href="http://www.drbd.org/users-guide/s-configure-sync-rate.html" target="_blank">[klick mich!]</a>.</p>
<p>Anschließend wird einem Node das Volume angelegt, aktiviert und formattiert. Danach wird das neue Volume eingehängt:</p>
<pre>node-a # drbdadm create-md drbd1

==&gt; This might destroy existing data! &lt;==
Do you want to proceed? [need to type 'yes' to confirm] yes ...

node-a # drbdadm up drbd1
node-a # drbdadm primary drbd1
node-a # mkfs.ext4 /dev/drbd1
both-nodes # mkdir /finch
node-a # mount /dev/drbd1 /finch</pre>
<p>Auf dem anderen Node werden die Änderungen nachgezogen, was bei der initialien Synchronisierung schon etwas dauern kann (<em>Zeit für einen Kaffee!</em>) &#8211; in meinem Beispiel dauerte die Initialisierung eines <strong>256 MB USB-Sticks</strong> über VPN bei <strong>75 kbit/s</strong> Upload ca. eine Stunde &#8211; der Status kann über die Datei <strong>/proc/drbd</strong> eingesehen werden:</p>
<pre>node-b # drbdadm connect drbd1
node-b # uptime
 16:40:30 up  2:08,  1 user,  load average: 0,20, 0,16, 0,10

both-nodes # cat /proc/drbd
version: 8.3.13 (api:88/proto:86-96)
srcversion: A9694A3AC4D985F53813A23

 1: cs:SyncTarget ro:Secondary/Primary ds:Inconsistent/UpToDate C r-----
    ns:0 nr:104320 dw:104320 dr:0 al:0 bm:6 lo:1 pe:2321 ua:0 ap:0 ep:1 wo:f oos:148564
        [=======&gt;............] sync'ed: 42.0% (148564/252884)K
        finish: 0:32:11 speed: 64 (24) want: 71,680 K/sec</pre>
<p>Sobald die Synchronisation abgeschlossen ist, sollte überprüft werden, ob Änderungen repliziert und Rollen problemslos gewechselt werden. Dazu wird folgendes ausgeführt:</p>
<ul>
<li>Erstellen einer Datei auf dem primären DRBD-Node, MD5-Summe erstellen</li>
<li>Aushängen des Dateisystems, auf sekundäre Rolle herabstufen</li>
<li>Heraufstufen des zweiten DRBD-Nodes, Dateisystem einhängen</li>
<li>Datei finden, MD5-Prüfsumme überprüfen</li>
<li>Datei löschen und weitere anlegen</li>
<li>Zurückstufen der Rollen</li>
</ul>
<p>In diesem Beispiel kann immer nur der primäre Node exklusiv auf das Volume zugreifen, der sekundäre Node hat keinen Zugriff auf das Volume. Soll ein Volume von beiden Nodes zeitgleich aktiv eingesetzt werden können (<em>beispielsweise, weil ein Active/Active Cluster implementiert wird</em>), ist <strong>ext4</strong> hier das falsche Dateisystem. In einem solchen Fall muss ein Cluster-Dateisystem, wie <strong>GFS</strong> oder <strong>OCFS2</strong>, verwendet werden. Diese Dateisysteme bieten spezielle Locking-Mechanismen, die die Zugriffe der einzelnen Nodes auf das Volume regeln.</p>
<pre>node-a # dd if=/dev/zero of=/finch/bla.bin bs=1024k count=1
node-a # md5sum /finch/bla.bin &gt; /finch/bla.bin.md5sum
node-a # umount /finch
node-a # drbdadm secondary drbd1

node-b # drbdadm primary drbd1
node-b # mount /dev/drbd1 /finch
node-b # ls /finch
lost+found    bla.bin    bla.bin.md5sum
node-b # md5sum -c /finch/bla.bin.md5sum
/finch/bla.bin: OK
node-b # rm /finch/bla.bin*
node-b # dd if=/dev/zero of=/finch/foo.bin bs=1024k count=1
node-b # md5sum /finch/foo.bin &gt; /finch/foo.bin.md5sum
node-b # umount /finch
node-b # drbdadm secondary drbd1

node-a # drbdadm primary drbd1
node-a # mount /dev/drbd1 /finch
node-a # ls /finch
lost+found    foo.bin    foo.bin.md5sum
node-a # md5sum -c /finch/foo.bin.md5sum
/finch/foo.bin: OK</pre>
<p>Scheint wunderbar zu funktionieren! <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Finch</h1>
<p>Wie vorhin erwähnt, dient der Multiprotokoll-Messenger <strong>Finch</strong> (<em>Pidgin</em>) in diesem Fall als unternehmenskritische Applikation. Wie es sich für eine solche Applikation gehört, bekommt sie einen Serviceuser mit einer einheitlichen UID verpasst, damit das Tool nachher über <strong>heartbeat</strong> auf den Nodes geskriptet gestartet werden kann. Hierzu wird <strong><a title="http://www.gnu.org/software/screen/" href="http://www.gnu.org/software/screen/" target="_blank">GNU Screen</a></strong> als Terminal-Multiplexer verwendet, um das Tool im Hintergrund zu starten und die Möglichkeit zu schaffen, <em>remote</em> auf die Sitzung zuzugreifen.</p>
<pre>both-nodes # apt-get install screen finch
both-nodes # useradd -u 1337 -m -d /finch/home su-finch
both-nodes # gpasswd -a su-finch tty
both-nodes # passwd su-finch</pre>
<p>Die Hinzufügen von <strong>su-finch</strong> in die Gruppe <strong>tty</strong> ist übrigens notwendig, damit <strong>GNU screen</strong> später auf das Terminal zugreifen kann, wenn es über den <strong>su</strong>-Mechanismus gestartet wird.</p>
<p>Vorab kann man <strong>finch</strong> allerdings schon mal konfigurieren und ein Instant Messenger-Konto seiner Wahl hinzufügen:</p>
<pre>node-a # su - su-finch
node-a # screen
node-a # finch</pre>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/finch.jpg" rel="lightbox[5429]"><img class="alignright size-thumbnail wp-image-5471" alt="finch (curses)" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/finch-150x150.jpg" width="150" height="150" /></a>Wer schon einmal Pidgin benutzt hat, wird die Buddy-Liste und Chat-Fenster wiedererkennen.</p>
<p>Die Fenster werden in der Regel mittels Tastenkombinationen gewechselt, in Kombination mit <strong>GNU screen</strong> besteht jedoch auch die <a title="https://developer.pidgin.im/wiki/Using%20Finch#mouse-in-screen" href="https://developer.pidgin.im/wiki/Using%20Finch#mouse-in-screen" target="_blank">Möglichkeit der Maussteuerung</a>. Einige wichtige vordefinierte Tastenkombinationen:</p>
<ul>
<li>nächstes Fenster: <strong>ALT + N</strong></li>
<li>vorheriges Fenster: <strong>ALT + P</strong></li>
<li>markiertes Fenster schließen: <strong>ALT + C</strong></li>
<li>Kontextmenü aufrufen: <strong>F11</strong></li>
<li>Aktionsmenü aufrufen: <strong>ALT + A</strong></li>
<li>Menü des aktuellen Fensters aufrufen: <strong>STRG + P</strong></li>
</ul>
<h1>heartbeat &#8211; Computer, lebst Du noch?</h1>
<p><strong>heartbeat</strong> dient primär, wie der Name vermuten lässt, zur Kommunikation von Clusternodes, um deren Verfügbarkeit zu gewährleisten. Das Tool kommuniziert mit benachbarten Clusternodes regelmäßig über einen verschlüsselten Tunnel und kann so schnell auf Ausfälle reagieren. Tritt ein solcher Ausfall ein, starten vorher definierte Skripte, um diesen zu kompensieren. In diesem Beispiel werden zwei Cluster-Resourcen auf dem nächsten Node neugestartet: der gemeinsame DRBD-Speicher und der Dienst <strong>finch</strong>.</p>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/stonith.jpg" rel="lightbox[5429]"><img class="alignleft size-thumbnail wp-image-5468" alt="STONITH" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/stonith-150x150.jpg" width="150" height="150" /></a>Im Cluster-Betrieb kann es, je nach Größe und Applikation, erforderlich sein, sicherzustellen, dass fehlerhafte Nodes an der Wiederaufnahme ihrer Dienste gehindert werden. Dieser Mechanismus wird als <strong>STONITH</strong> (<em>Shoot the other node in the head</em>) bezeichnet. Es gibt zahlreiche Schnittstellen, um das &#8220;<em>Liegenbleiben</em>&#8221; des fehlerhaften Clusternodes zu bewerkstelligen, beispielsweise:</p>
<ul>
<li>Remote-Interface des Servers (<em>iLO, DRAC, LOM,&#8230;</em>)</li>
<li><strong>USV</strong>, an der der Server angeschlossen ist</li>
<li><strong>PDU</strong> (<em>Power Distribution Unit</em>), über welche der Clusternode mit Strom versorgt wird</li>
<li>Blade-Enclosure Management-Schnittstelle</li>
</ul>
<p>Wird kein <strong>STONITH</strong> angewandt, kann es im Extremfall zu Datenkorruptionen kommen, wenn beide Clusternodes (<em>beispielsweise aufgrund eines Netzwerkausfalls</em>) der Meinung sind, der einzig aktive Node zu sein und ihre Applikation ausführen. Implementieren lässt sich <strong>STONITH</strong> auch unter Linux &#8211; unter anderem mit <strong>heartbeat</strong> oder <strong>Pacemaker</strong>. In diesem Beispiel würde das jedoch den Rahmen der Übersichtlichkeit sprengen. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<p>Anwendungen lassen sich mit <strong>heartbeat</strong> sehr einfach im Cluster betreiben, da zur Dienst-Steuerung auf herkömmliche Init-Skripte zurückgegriffen wird. Im Idealfall kann man einfach mit symbolischen Links arbeiten, um einen Dienst in das Cluster zu integrieren.</p>
<p>In diesem Beispiel wird ein benutzerdefiniertes Init-Skript angelegt, welches Finch startet und anschließend den NoIP-Hostname aktualisiert.</p>
<p>Zuerst wird eine clusterweite Konfigurationsdatei (<strong>/etc/ha.d/ha.cf</strong>) angelegt, in ihr werden grundlegende Parameter, wie Logdateien und Schwellwerte definiert:</p>
<pre>node-a # vi /etc/ha.d/ha.cf
debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 10
deadtime 30
warntime 20
initdead 60
ucast eth0 192.168.2.2
udpport 694
auto_failback off
node hostA.fqdn.dom
node hostB.fqdn.dom

ESC ZZ

node-b # vi /etc/ha.d/ha.cf
...
ucast eth0 192.168.1.2
...

ESC ZZ</pre>
<p>Die Datei unterscheidet sich je Node in einer Zeile (<strong>ucast</strong>) &#8211; hier ist jeweils die IP-Adresse des anderen Nodes einzutragen.</p>
<p>Zu den einzelnen Parametern:</p>
<ul>
<li><strong>debugfile</strong> / <strong>logfile</strong> / <strong>logfacility</strong> &#8211; Debug-Log und herkömmliches Log; zu verwendende Syslog-Facility</li>
<li><strong>keepalive</strong> &#8211; Zeitabstände in Sekunden, in denen Keepalives versendet werden</li>
<li><strong>warntime</strong> &#8211; Zeitspanne, ab wann ein Node zu verfallen droht</li>
<li><strong>deadtime</strong> &#8211; Zeitspanne, ab wann ein Node tot zu sein scheint</li>
<li><strong>initdead</strong> &#8211; Zeitpunkt, ab wann ein Node aus dem Cluster entfernt wird</li>
<li><strong>ucast</strong> &#8211; IP-Adresse, an welche über Unicast Heartbeat-Pakete versendet werden</li>
<li><strong>udpport</strong> &#8211; UDP-Port</li>
<li><strong>auto_failback</strong> &#8211; definiert, ob nach Wiedereintritt eines Clusternodes die Ressourcen zurückverschoben werden sollen (<em>sofern dieser Clusternode ein präferierter Node für bestimmte Ressourcen war</em>)</li>
<li><strong>node</strong> &#8211; definiert die vorhandenen Clusternodes nacheinander</li>
</ul>
<p>Da die Clusterkommunikation verschlüsselt abläuft, muss auf beiden Clusternodes eine Datei unter <strong>/etc/ha.d/authkeys</strong> angelegt werden:</p>
<pre>both-nodes # vi /etc/ha.d/authkeys
auth 1
1 sha1 superlangesundsicherespasswort08151337666</pre>
<p>Anschließend erfolgt eine Zuteilung der jeweiligen Cluster-Ressourcen &#8211; in der Datei <strong>/etc/ha.d/haresources</strong>:</p>
<pre>both-nodes # vi /etc/ha.d/haresources
hostA.fqdn.dom
hostB.fqdn.dom  drbddisk::drbd1 Filesystem::/dev/drbd1::/finch::ext4    finch</pre>
<p>Die Datei listet zunächst einmal alle Clusternodes und &#8211; durch einen Tab abgetrennt &#8211; deren primäre Ressourcen auf. In diesem Beispiel gibt es zwei Hosts, wovon der zweite der primäre Clusternode für folgende Ressourcen ist:</p>
<ul>
<li>exklusiv verwendetes DRBD-Volume <strong>drbd1</strong></li>
<li><strong>ext4</strong>-Dateisystem auf <strong>/dev/drbd1</strong>, welches unter <strong>/finch</strong> eingehängt wird</li>
<li>Den Dienst <strong>finch</strong> (<em>/etc/init.d/finch</em>)</li>
</ul>
<p>Das bedeutet: sofern beide Clusternodes zur Verfügung stehen, werden die oben genannten Ressourcen immer auf <strong>Node 2</strong> (<em>hostB.fqdn.dom</em>) gestartet. Steht der Node nicht zur Verfügung, werden die Ressourcen auf <strong>Node 1</strong> (<em>hostA.fqdn.dom</em>) gestartet. Ein automatisches &#8220;<em>Zurückverschieben</em>&#8221; der Ressourcen erfolgt aufgrund der Einstellung &#8220;<strong>auto_failback off</strong>&#8221; (<em>in /etc/ha.d/ha.cf</em>) <strong>nicht</strong>.</p>
<p>Zuletzt fehlt noch das Initskript zum Starten und Stoppen des Finch-Dienstes &#8211; wie bei herkömmlichen Diensten, wird das Skript unter <strong>/etc/init.d/finch</strong> abgelegt:</p>
<pre># vi /etc/init.d/finch
#!/bin/bash
#
# finch        Startup script for finch including noip update
#

start() {
        /usr/local/bin/noip2 -i $(curl --silent http://icanhazip.com) &gt;/dev/null 2&gt;&amp;1
        chmod g+rw $(tty)
        su -c "screen -d -m" su-finch
        RESULT=$?
        return $RESULT
}
stop() {
        /usr/bin/killall -u su-finch
        RESULT=$?
        return $RESULT
}
status() {
        su -c "screen -ls" su-finch
        cat /proc/drbd
        dig +short foo.noip.com
        RESULT=$?
        return $RESULT
}

case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  status)
        status
        ;;
  *)
        echo $"Usage: finch {start|stop|status}"
        exit 1
esac

exit $RESULT</pre>
<p>Das eben erwähnte Initskript kennt die Parameter <strong>start</strong>, <strong>stop</strong> und <strong>status</strong> &#8211; und dürfte damit sogar schon fast LSB-kompatibel sein. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Je nach Parameter wird eine <strong>GNU screen</strong>-Sitzung unter dem Benutzerkonto von <strong>su-finch</strong> (<em>Servicebenutzer</em>) gestartet oder beendet &#8211; bei der Verwendung des <strong>status</strong>-Parameters werden aktuelle DRBD- und IP-Zuordnungen inklusive offener Sitzungen angezeigt.</p>
<p>Wenn <strong>heartbeat</strong> <strong>finch</strong>-Ressourcen startet oder stoppt, wird dieses Skript verwendet.</p>
<h1>Funktionstest</h1>
<p>Schön, das war jetzt viel Theorie &#8211; doch wie sieht&#8217;s in der Praxis aus? Funktioniert das überhaupt?</p>
<p>Natürlich &#8211; und das zeigt das folgende Beweisvideo am Besten:</p>
<p><iframe src="http://player.vimeo.com/video/65824569" width="600" height="380" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe></p>
<p> <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<h1>Monitoring</h1>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/icinga_finch.jpg" rel="lightbox[5429]"><img class="alignright size-thumbnail wp-image-5465" alt="Clusternode-Überwachung mit Icinga" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/icinga_finch-150x150.jpg" width="150" height="150" /></a>Wie es sich für unternehmenskritische Anwendungen gehört, darf ein entsprechendes Monitoring nicht fehlen. Neben der Verfügbarkeit der einzelnen Nodes ist der DRBD- und heartbeat-Status von Interesse. Während sich die Verfügbarkeit des <strong>heartbeat</strong>-Dienstes kinderleicht mit dem altbekannten <strong>check_procs</strong> Nagios-/Icinga-Plugins überprüfen lässt, gibt es für DRBD auf der Webseite von <a title="https://www.monitoringexchange.org/" href="https://www.monitoringexchange.org/" target="_blank">MonitoringExchange</a> ein Shell-Skript zum kostenfreien Download: <a title="https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/check_drbd" href="https://www.monitoringexchange.org/inventory/Check-Plugins/Operating-Systems/Linux/check_drbd" target="_blank">[klick mich!]</a></p>
<p>Dieses Skript lässt sich ohne Probleme in Nagios bzw. Icinga einbinden und verwenden, hier beispielsweise auf einer passiven Icinga-Instanz:</p>
<pre># cat /etc/icinga/commands.cfg
...
# 'check_drbd' command definition
define command{
        command_name    check_drbd
        command_line    $USER2$/check_drbd -d $ARG1$ -e "Connected" -o "UpToDate" -w "SyncingAll" -c "Inconsistent"
}

# cat /etc/icinga/objects/hostA.cfg
...
define service{
        use                             generic-service
        host_name                       hostA
        service_description             HW: drbd1
        check_command                   check_drbd!1
        }</pre>
<p>Im oben zu sehenden Beispiel wird überprüft, ob das drbd-Volume <strong>/dev/drbd1</strong> zur Verfügung steht. Sofern die Plugin-Antwort (<em>auf Basis der Datei /proc/drbd</em>) nicht &#8220;<strong>Connected/UpToDate</strong>&#8221; lautet, liegt ein Fehler vor. Bei aktiver Synchronisation (<em>SyncingAll</em>) wird eine Warnung ausgegeben, ein inkonsistentes Volume (<em>Inconsistent</em>) ergibt einen Fehler.</p>
<h1>Fazit</h1>
<p>Zweifelsfrei ist dieses Anwendungsbeispiel eher realitätsfern und belustigend. Ich wollte damit zeigen, wie einfach die Implementation von Hochverfügbarkeit unter Linux sein kann. Es gibt viele Wege, die zum Ziel führen &#8211; mit <strong>heartbeat </strong>und <strong>DRBD</strong> ist hier nur eine von vielen HA-Konstellationen genannt. Die Thematik ist bei weitem nicht so komplex, wie oftmals fälschlicherweise angenommen. Ob nun eine Datenbank oder ein Instant-Messenger über <strong>heartbeat</strong> &#8220;<em>geclustert</em>&#8221; wird, ist erstmal irrelevant &#8211; der Implementationsaufwand ist überschaubar.</p>
<p><strong>heartbeat</strong> gilt eher als veraltetes Tool, mit <strong>Pacemaker </strong>und <strong>OpenAIS/Corosync </strong>gibt es zwei modernere Programme, mit denen sich in Kombination mit DRBD weitaus komplexere und umfangreichere HA-Szenarien bewerkstelligen lassen.</p>
<p>Prinzipiell sollte man vor der Implementation von Software HA-Lösungen zuerst die Hardware-Komponenten redundant auslegen &#8211; in diesem Beispiel gibt es einige Architekturfehler, die man im Praxisfall idealerweise beheben sollte:</p>
<ul>
<li>kein dediziertes Netzwerk für Node-Kommunikation (<em>Heartbeat-Netzwerk</em>)</li>
<li>kein redundanter Speicher für den Clusterspeicher (<em>RAID-Volume</em>)</li>
<li>Netzwerkadapter sind nicht redundant gehalten (<em>keine doppelten NICs und entsprechend verbundenen Switches; LACP?</em>)</li>
<li>keine redundante Stromversorgung</li>
</ul>
<p>Immerhin wurden hier verschiedene Brandabschnitte gewählt (<em>die Raspberry Pi stehen in zwei verschiedenen Wohnungen</em>)! <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wer jedoch Interesse daran hat, seinen Instant-Messenger redundant zu halten, weiß ja nun, wie es geht. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5429</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Über Programmiersprachen, Stipendien und ObjectiveCeeds</title>
		<link>http://blog.christian-stankowic.de/?p=5420</link>
		<comments>http://blog.christian-stankowic.de/?p=5420#comments</comments>
		<pubDate>Fri, 03 May 2013 20:29:42 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Programmieren]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[Objective-C]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5420</guid>
		<description><![CDATA[Mein Interesse gilt schon seit meiner Kindheit den grauen Kisten, die einem helfen Probleme zu lösen, die man ohne sie nicht gehabt hätte. Im Laufe der Jahre habe ich nicht nur verschiedene Betriebssysteme, sondern auch zahlreiche Programmiersprachen kennengelernt. Ich erinnere &#8230; <a href="http://blog.christian-stankowic.de/?p=5420">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Mein Interesse gilt schon seit meiner Kindheit den grauen Kisten, die einem helfen Probleme zu lösen, die man ohne sie nicht gehabt hätte. Im Laufe der Jahre habe ich nicht nur verschiedene Betriebssysteme, sondern auch zahlreiche Programmiersprachen kennengelernt.</p>
<p>Ich erinnere mich noch genau an meinen ersten eigenen Rechner, der seinen Dienst mit <strong>MS-DOS</strong> verrichtete &#8211; hier habe ich erste Programmier-Erfahrungen mit <a title="http://de.wikipedia.org/wiki/QBasic" href="http://de.wikipedia.org/wiki/QBasic" target="_blank"><strong>Microsoft QBasic</strong></a> sammeln können. Später folgten <strong>Microsoft Visual Basic</strong> und <strong>Borland Delphi</strong>. Bevor ich mit <strong>PHP</strong> und <strong>Java</strong> zwei Programmiersprachen entdeckt habe, die mich bisher am stärksten interessierten, beschäftigte ich mich oberflächlich mit <strong>C</strong> und <strong>C++</strong>.</p>
<p>Im Laufe der letzten Jahre habe ich immer wieder gelegentlich programmiert &#8211; nicht zuletzt, um Lösungen für persönliche, recht spezielle Anwendungsanforderungen zu implementieren und zu veröffentlichen &#8211; beispielsweise <a title="http://checkform.stankowic-development.net/" href="http://checkform.stankowic-development.net/" target="_blank">checkform</a> und <a title="http://jtrainer.stankowic-development.net/" href="http://jtrainer.stankowic-development.net/" target="_blank">JTrainer</a>.</p>
<p>Mit dem ersten Android-Smartphone vor zwei Jahren entstand Interesse an der Programmierung von &#8220;<em>Apps</em>&#8220;. Da ich schon Erfahrungen mit modernen Web-Schnittstellen und Java hatte, konnte ich schnell an vorhandenes Wissen anknüpfen. Schon nach kurzer Zeit entstand meine erste Android-App &#8211; <a title="http://jtrainer.stankowic-development.net/media.html" href="http://jtrainer.stankowic-development.net/media.html" target="_blank">JTrainer für Android</a>.</p>
<h1>Weiterbildungsstipendium</h1>
<p>Vor zwei Jahren, als ich meine Ausbildung zum Fachinformatiker absolvierte, hatte ich das Glück von der durch die <a title="http://www.ihk24.de" href="http://www.ihk24.de" target="_blank">IHK</a> beworbenen <strong>Begabtenförderung</strong> (<em>ugs. Weiterbildungsstipendium</em>) der <strong>SBB</strong> (<em>Stiftung Begabtenförderung berufliche Bildung</em>) zu profitieren.</p>
<p>Einmal im Jahr werden, je nach Kammer, zwischen <strong>30</strong> und <strong>50</strong> Plätze verteilt &#8211; über die Verteilung entscheidet ein Ausschuss, bei welchem man sich idealerweise mit einem interessanten Projekt oder einer gut durchdachten beruflichen Zukunftsvision bewirbt. Ich selbst habe mich mit einem Projekt, über das ich noch nicht zu viel verraten möchte, beworben &#8211; und hatte das Glück ausgewählt zu werden. Jedem Stipendat stehen über drei Jahre lang bis zu maximal <strong>6.000 EUR</strong> insgesamt für förderfähige Leistungen, wie beispielsweise Schulungen oder Lernmaterialien, zur Verfügung.</p>
<p>Ich kann nur jedem, der prinzipiell für das Stipendium infrage kommt, nahelegen, sich zu bewerben! Die Chancen einen Platz zu bekommen sind höher, als man sich vorstellt. Ich habe mich letztendlich einfach auf &#8220;<em>gut Glück</em>&#8221; beworben und hatte nicht wirklich damit gerechnet, ernsthaft davon profitieren zu können. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Weitere Informationen zum Weiterbildungsstipendium gibt es auf der Homepage der <strong>SBB</strong>: <a title="http://www.sbb-stipendien.de/" href="http://www.sbb-stipendien.de/" target="_blank">http://www.sbb-stipendien.de</a></p>
<h1>Objective-C Schulungen &#8211; die Qual der Wahl</h1>
<p>Natürlich sprangen mir gleich zahlreiche Ideen in den Kopf, die Förderleistungen des Staats in Anspruch zu nehmen &#8211; eine geplante Schulung sollte sich um die Entwicklung von Anwendungen für Apple Smartphones und Tablets drehen.</p>
<p><strong>Fakt ist</strong> &#8211; wer mit einem Online-Projekt und mobilen Apps erfolgreich sein will, kommt um eine native iOS-Anwendung nicht herum. Auch wenn die Verbreitung von iPhones und iPads durch immer stärkere Android-Konkurrenten gelitten hat, sind die mobilen Gerätschaften aus Cupertino weiterhin sehr beliebt.</p>
<p>Ich habe nach einer entsprechenden Schulung gesucht &#8211; und entdeckt, dass der Markt hier recht groß ist. iOS und Objective-C Schulungen gibt es mittlerweile von vielen Anbietern &#8211; den Überblick zu behalten fällt hier schwer. Ich habe primär nach einer bezahlbaren Schulung gesucht, die in meiner Nähe stattfindet und über eine möglichst breite Agenda verfügt. Viele der gefundenen Schulungen waren sehr teuer und bedienten sich dabei lediglich sehr oberflächlicher Gliederungen (<em>&#8220;Was ist iOS? Was ist Objective-C? Hello World, danke und Tschüß!&#8221;</em>).</p>
<h1>ObjectiveCeeds &#8211; development and training made in Baden-Würtemberg</h1>
<p>In einem Blog-Artikel (<em>den ich jetzt leider nicht mehr finde</em>) habe ich vom IT-Freiberufler <a title="http://www.objectiveceeds.com" href="http://www.objectiveceeds.com" target="_blank"><strong>Manfred Kreß</strong></a> erfahren. Unter dem Namen <a title="http://www.objectiveceeds.com" href="http://www.objectiveceeds.com" target="_blank"><strong>ObjectiveCeeds</strong> </a>bietet er Schulungen rund um die Themen <strong>Objective-C</strong>, <strong>OS X</strong> und <strong>iOS</strong> an. Als erfahrener Software-Entwickler und freiberuflicher IT-Dozent beschäftigt sich Manfred Kreß stets mit den aktuellen Errungenschaften der Apple-Programmierung und gibt diese pädagogisch wertvoll weiter.</p>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/1-Platz.jpg" rel="lightbox[5420]"><img class="size-thumbnail wp-image-5441 alignleft" alt="Bonsai Zentrum Heidelberg" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/1-Platz-150x150.jpg" width="150" height="150" /></a></p>
<p>Mir ist sofort die umfassende Agenda, die neben Grundlagen in Objective-C auch ein breites Spektrum an iOS-relevanten Themen enthielt, aufgefallen &#8211; das konnte ich bisher in keiner anderen Schulung in der selben Preiskategorie finden.</p>
<p>Ein absolutes Highlight ist der äußerst ausgefallene und exklusive Seminarort &#8211; das <strong><a title="http://www.bonsai-heidelberg.de/" href="http://www.bonsai-heidelberg.de/" target="_blank">Bonsai Zentrum Heidelberg</a></strong>. Ich habe ja schon an einigen Schulungen teilgenommen, aber so eine geniale Location war bisher noch nicht dabei! <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_biggrin.gif' alt=':D' class='wp-smiley' /> </p>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/2-NotebookBonsai.jpg" rel="lightbox[5420]"><img class="size-thumbnail wp-image-5442 alignright" alt="MacBook und Bonsai" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/2-NotebookBonsai-150x150.jpg" width="150" height="150" /></a></p>
<p>Zwischen <strong>formschönen Bonsais</strong> wird munter programmiert und entwickelt &#8211; in den Pausen gibt es neben den zahlreichen Schalen-Bäumen auch viele <strong>farbenfrohe Kois</strong> zu beguachten. Eine angenehmere Seminaratmosphäre habe ich bis dato nicht erlebt. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Da die Teilnehmergruppen meist nicht größer als 6, 7 sind, bleibt immer Zeit für Zwischenfragen und Troubleshooting am Teilnehmer-Notebook. Um an der Schulung teilzunehmen, ist es übrigens nicht notwendig, ein MacBook sein Eigen zu nennen &#8211; es besteht die Möglichkeit, für drei Tage Schulung ein MacBook Pro zu leihen.</p>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/3-Bonsai.jpg" rel="lightbox[5420]"><img class="size-thumbnail wp-image-5443 alignleft" alt="Bonsai" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/3-Bonsai-150x150.jpg" width="150" height="150" /></a></p>
<p>Mir hat die Schulung sehr viel Spaß gemacht. Neben der Vielfalt der Bonsai-Kunst sind mir nun auch die Grundlagen der Objective-C und iOS-Programmierung bekannt &#8211; Ziel erreicht. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Wenn sich in den nächsten Jahren etwas an meinem akuten Zeitmangel ändert, weiß ich, welche Kunst ein interessantes Hobby für mich wäre &#8211; die Bonsai-Kunst. Ich habe mich bisher nie damit beschäftigt und war verdutzt, wie spannend dieses Hobby doch eigentlich ist. Wer sich für Botanik oder speziell Bonsai interessiert, sollte unbedingt mal das <a title="http://www.bonsai-heidelberg.de/" href="http://www.bonsai-heidelberg.de/" target="_blank">Bonsai Zentrum Heidelberg</a> besuchen. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<h1>Résumé</h1>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/4-Bonsai.jpg" rel="lightbox[5420]"><img class="size-thumbnail wp-image-5444 alignright" alt="Rote Ahorn Bonsai" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/4-Bonsai-150x150.jpg" width="150" height="150" /></a></p>
<p>Wer sich ernsthaft mit Objective-C- und iOS-Programmierung beschäftigen möchte und nach einer Schulung mit einem fairen Preis-/Leistungsverhältnis sucht, sollte sich die Seminarangebote von ObjectiveCeeds näher anschauen.</p>
<p>Ich war sehr zufrieden mit der angenehmen Seminaratmosphäre, der inhaltlichen Agenda und dem locker-lustigen Schulungssstil von Manfred Kreß.</p>
<p>Ich hatte mich schon vor einiger Zeit mit Buch und Mac Mini in den Dschungel der Apple-Programmierung begeben. Viele Dinge sind einfach unverständlich geblieben &#8211; das hat sich mit dieser Schulung geändert.</p>
<p>Wer mehr über das Angebot von ObjectiveCeeds erfahren möchte, sollte sich die Webseite von Manfred Kreß anschauen: <a title="http://www.objectiveceeds.com" href="http://www.objectiveceeds.com" target="_blank">http://www.objectiveceeds.com</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5420</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS und IPCop/IPFire OpenVPN</title>
		<link>http://blog.christian-stankowic.de/?p=5417</link>
		<comments>http://blog.christian-stankowic.de/?p=5417#comments</comments>
		<pubDate>Thu, 02 May 2013 21:12:10 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[IPCop]]></category>
		<category><![CDATA[OpenVPN]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5417</guid>
		<description><![CDATA[Mit OpenVPN Connect gibt es einen guten OpenVPN-Client für iOS-Geräte ab der Version 5.0. Mithilfe der App können ganz komfortabel mehrere VPN-Tunnel verwaltet und verwendet werden. Die jeweiligen OpenVPN-Konfigurationsdateien lassen sich jedoch nicht direkt am iPhone, iPod oder iPad anpassen, &#8230; <a href="http://blog.christian-stankowic.de/?p=5417">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<div id="attachment_5434" class="wp-caption alignleft" style="width: 160px"><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/1-Profile.jpg" rel="lightbox[5417]"><img class="size-thumbnail wp-image-5434" alt="OpenVPN-Profile" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/1-Profile-150x150.jpg" width="150" height="150" /></a><p class="wp-caption-text">OpenVPN-Profile</p></div>
<p>Mit <a title="https://itunes.apple.com/app/openvpn-connect/id590379981" href="https://itunes.apple.com/app/openvpn-connect/id590379981" target="_blank">OpenVPN Connect</a> gibt es einen guten OpenVPN-Client für iOS-Geräte ab der Version 5.0.</p>
<p>Mithilfe der App können ganz komfortabel mehrere VPN-Tunnel verwaltet und verwendet werden. Die jeweiligen OpenVPN-Konfigurationsdateien lassen sich jedoch nicht direkt am iPhone, iPod oder iPad anpassen, wie man das beispielsweise von der Android-App kennt. Die erste Einrichtung gestaltet sich demnach also etwas anspruchsvoller, da man die Konfigurationsdateien am Rechner anpassen und anschließend mittels iTunes übertragen muss.</p>
<p>Darüber hinaus gibt es noch einige weitere Einschränkungen:</p>
<ul>
<li>Zertifikate müssen in die OpenVPN-Konfigurationsdatei integriert werden</li>
<li>TAP-Devices werden derzeit nicht unterstützt</li>
<li>Fehlermeldungen bei der Zertifikatverwaltung sind nicht scrollbar, passen im vertikalen Modus nicht auf den Bildschirm</li>
</ul>
<p>Die jeweilige iOS OpenVPN-Konfiguration variiert je nach Serverkonfiguration. Wie bereits erwähnt werden TAP-Konfigurationen derzeit nicht unterstützt.</p>
<p>Ich verwende OpenVPN in Verbindung eines IPCop-Routers. Dieser verwendet standardmäßig TUN und Zertifikate für Benutzer- und CA. In dieser Konstellation ist es erforderlich, die einzelnen Zertifikate (<em>Benutzer, CA</em>) zu extrahieren (<em>benötigt ein installiertes OpenSSL</em>) damit sie anschließend in die OpenVPN-Konfiguration integriert werden können:</p>
<pre># openssl pkcs12 -in name.p12 -nocerts -nodes -out keys.pem
Enter Import Password:
MAC verified OK
# openssl pkcs12 -in name.p12 -cacerts -nodes -out ca.pem
Enter Import Password:
MAC verified OK
# openssl pkcs12 -in name.p12 -out name.pem
Enter Import Password:
MAC verified OK
Enter PEM pass phrase:</pre>
<p>Das von IPCop / IPFire erzeugte Client-ZIP enthält eine fertige Konfigurationsdatei, die noch angepasst werden muss. Das vermerkte Krypto-Archiv (<strong>pkcs12</strong>) wird entfernt oder auskommentiert &#8211; die jeweiligen, vorher extrahierten Zertifikate, werden im XML-Syntax angehängt:</p>
<pre>#OpenVPN Server conf
tls-client
client
dev tun
proto udp
tun-mtu 1400
remote HOSTNAME PORT
#pkcs12 name.p12
cipher BF-CBC
verb 3
ns-cert-type server

#ca.pem
&lt;ca&gt;
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
&lt;/ca&gt;
#name.pem
&lt;cert&gt;
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
&lt;/cert&gt;
#keys.pem
&lt;key&gt;
-----BEGIN PRIVATE KEY-----
...
-----END PRIVATE KEY-----
&lt;/key&gt;</pre>
<p>Anschließend wird die OpenVPN-Konfiguration gespeichert und mittels iTunes auf das iOS-Gerät übertragen. Hierfür sollte nach der Installation von <a title="https://itunes.apple.com/app/openvpn-connect/id590379981" href="https://itunes.apple.com/app/openvpn-connect/id590379981" target="_blank">OpenVPN Connect</a> eine entsprechende Registerkarte (<em>nach unten scrollen!</em>) existieren.</p>
<div id="attachment_5435" class="wp-caption alignright" style="width: 160px"><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/2-Log.jpg" rel="lightbox[5417]"><img class="size-thumbnail wp-image-5435" alt="OpenVPN-Log" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/05/2-Log-150x150.jpg" width="150" height="150" /></a><p class="wp-caption-text">OpenVPN-Log</p></div>
<p>Mittels Drag &amp; Drop kann die Datei komfortabel übertragen werden. Auf dem iOS-Gerät wird das neue Profil erkannt und kann anschließend importiert werden.</p>
<p>Verbindungsaufbauten werden automatisch mitgeloggt &#8211; im Fehlerfall kann man also nachlesen, warum die Verbindung nicht zustandekommt. Aktive VPN-Verbindungen werden, wie IPSec- und PPTP-Tunnel mit einem VPN-Icon angezeigt. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5417</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Standard-Route wird unter RHEL / CentOS 5.3 ignoriert</title>
		<link>http://blog.christian-stankowic.de/?p=5413</link>
		<comments>http://blog.christian-stankowic.de/?p=5413#comments</comments>
		<pubDate>Tue, 23 Apr 2013 16:05:43 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[RHEL / CentOS]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[Centos]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5413</guid>
		<description><![CDATA[Bei RHEL bzw. CentOS 5.3 kann es vorkommen, dass eine vermerkte Standard-Route ignoriert wird. In einem solchen Fall ist enthält die Routing-Tabelle keinen entsprechenden Eintrag&#8230; # netstat -r&#124;grep default &#8230;obwohl ein entsprechendes Gateway sowohl in der Netzwerk-Hauptkonfiguration&#8230; # cat /etc/sysconfig/network &#8230; <a href="http://blog.christian-stankowic.de/?p=5413">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Bei RHEL bzw. CentOS 5.3 kann es vorkommen, dass eine vermerkte Standard-Route ignoriert wird. In einem solchen Fall ist enthält die Routing-Tabelle keinen entsprechenden Eintrag&#8230;</p>
<pre># netstat -r|grep default</pre>
<p>&#8230;obwohl ein entsprechendes Gateway sowohl in der Netzwerk-Hauptkonfiguration&#8230;</p>
<pre># cat /etc/sysconfig/network
...
GATEWAY=10.24.36.1</pre>
<p>&#8230;als auch in der Schnittstellen-Konfiguration vermerkt wurde:</p>
<pre># cat /etc/sysconfig/network-scripts/ifcfg-eth0
...
GATEWAY=10.24.36.1</pre>
<p>Abhilfe schafft hier folgender Eintrag in einer noch anzulegenden Routing-Datei:</p>
<pre># vi /etc/sysconfig/network-scripts/route-eth0
default via 10.24.36.1 dev eth0 onlink</pre>
<p>Nach einem Neustart des Netzwerkes wird die Standard-Route vermerkt:</p>
<pre># service network restart
# netstat -r|grep default
default       10.24.36.1     0.0.0.0     UG    0 0     0 eth0</pre>
<p> <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5413</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>CDE unter Debian Squeeze</title>
		<link>http://blog.christian-stankowic.de/?p=5402</link>
		<comments>http://blog.christian-stankowic.de/?p=5402#comments</comments>
		<pubDate>Mon, 15 Apr 2013 18:24:37 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[CDE]]></category>
		<category><![CDATA[HP-UX]]></category>
		<category><![CDATA[OpenVMS]]></category>
		<category><![CDATA[Solaris]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5402</guid>
		<description><![CDATA[Das Common Desktop Environment (kurz CDE) dürfte einigen Administratoren oder IT-Interessierten aus älteren UNIX-Tagen noch bekannt vorkommen. 1993 eingeführt, war er über 10 Jahre lang der Standard-Desktop der bekannten Unix-Betriebssysteme HP-UX, IBM AIX, Sun Solaris und Tru64. Während sich Solaris &#8230; <a href="http://blog.christian-stankowic.de/?p=5402">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Das <strong>Common Desktop Environment</strong> (<em>kurz CDE</em>) dürfte einigen Administratoren oder IT-Interessierten aus älteren UNIX-Tagen noch bekannt vorkommen. <strong>1993</strong> eingeführt, war er über 10 Jahre lang der Standard-Desktop der bekannten Unix-Betriebssysteme HP-UX, IBM AIX, Sun Solaris und Tru64. Während sich Solaris vor 3 Jahren endgültig von CDE trennte, findet der stark angestaubte Desktop immer noch unter HP-UX, AIX und OpenVMS Verwendung.</p>
<p>2006 wurde eine Petition gestartet &#8211; Inhalt dieser war die Freilegung des CDE-Programmcodes. Nach 6 Jahren wurde der lang ersehnte Quellcode im September 2012 veröffentlicht. CDE steht seitdem in einer Alpha-Version für Linux zur Verfügung.</p>
<p><a title="http://sourceforge.net/p/cdesktopenv/wiki/SupportedPlatforms/" href="http://sourceforge.net/p/cdesktopenv/wiki/SupportedPlatforms/" target="_blank">Zur Liste der derzeit unterstützten Linux-Distributionen</a> gehört auch Debian Squeeze &#8211; Zeit, sich das Ganze auch mal anzuschauen, oder? <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h1>Vorbereitung</h1>
<p>Sofern noch nicht vorhanden, müssen HAL, DBUS und die X-Server Kernkomponenten installiert werden:</p>
<pre># apt-get install xserver-xorg-core xinit dbus hal xserver-xorg-input-kbd xserver-xorg-input-mouse xserver-xorg-input-vmmouse</pre>
<p>CDE benötigt noch einige Entwicklerwerkzeuge und -bibliotheken, die ebenfalls nachinstalliert werden müssen:</p>
<pre># apt-get install git libxp-dev libxt-dev libxmu-dev libxft-dev libxaw7-dev libx11-dev libjpeg-dev libjpeg62-dev libfreetype6-dev lesstif2 x11-xserver-utils ksh m4 ncompress xfonts-100dpi* rpcbind bison xbitmaps libmotif* x11-xserver-utils tcl-dev lprng</pre>
<h1>Übersetzung</h1>
<p>Der Quellcode kann entweder über den GIT-Mirror oder über einen aktuellen Tar-Snapshot bezogen werden. Anschließend werden X-Server Header verlinkt und CDE übersetzt. Nach erfolgreicher Übersetzung werden Installations- und Konfigurationsskripte ausgeführt und ein Spool-Directory für die Kalender-Anwendung angelegt.</p>
<p>Weitere Informationen finden sich in der offiziellen Installationsanleitung: <a title="http://sourceforge.net/p/cdesktopenv/wiki/LinuxBuild/" href="http://sourceforge.net/p/cdesktopenv/wiki/LinuxBuild/" target="_blank">[klick mich!]</a></p>
<pre># w3m http://downloads.sourceforge.net/project/cdesktopenv/src/cde-src-2.2.0c-alpha.tar.gz
# tar xfz cde-src-2.2.0c-alpha.tar.gz
# cd cdesktopenv-code/cde
# mkdir -p imports/x11/include
# cd imports/x11/include
# ln -s /usr/include/X11 .
# cd cdesktopenv-code/cde
# make World
# admin/IntegTools/dbTools/installCDE -s /path-to-cdesktopenv-code/cde/
# admin/IntegTools/post_install/linux/configRun -e
# chmod -R a+rwx /var/dt
# mkdir -p /usr/spool/calendar</pre>
<h1>Display-Manager</h1>
<p>Man kann entweder den ebenfalls auf Motif basierenden <strong>dtlogin</strong> Display-Manager verwenden&#8230;</p>
<pre># export PATH=$PATH:/usr/dt/bin
# LANG=C /usr/dt/bin/dtlogin</pre>
<p>&#8230;oder einen neueren Display-Manager, wie beispielsweise <a title="http://slim.berlios.de/" href="http://slim.berlios.de/" target="_blank">SLiM</a>, dahingehend konfigurieren, dass er CDE startet:</p>
<pre># apt-get install slim
# vi /etc/slim.conf
...
#login_cmd           exec /bin/bash -login /etc/X11/Xsession %session
login_cmd        exec /bin/bash -login /usr/dt/bin/startxsession.sh

ESC ZZ

# vi /usr/dt/bin/startxsession.sh
#!/bin/sh
export PATH=$PATH:/usr/dt/bin
export LANG=C
/usr/dt/bin/Xsession

ESC ZZ

# service slim start</pre>
<h1>Galerie</h1>
<p>Anbei natürlich noch einige Screenshots des Retro-Desktops:</p>

<a href='http://blog.christian-stankowic.de/?attachment_id=5403' title='dtlogin'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/1-dtlogin-150x150.jpg" class="attachment-thumbnail" alt="dtlogin" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5404' title='Desktop'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/2-Desktop-150x150.jpg" class="attachment-thumbnail" alt="Desktop" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5405' title='Anwendungen'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/3-Anwendungen-150x150.jpg" class="attachment-thumbnail" alt="Anwendungen" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5406' title='Kalender'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/4-Kalender-150x150.jpg" class="attachment-thumbnail" alt="Kalender" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5407' title='Mail'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/5-Mail-150x150.jpg" class="attachment-thumbnail" alt="Mail" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5408' title='Hilfe / Screensaver'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/6-ScreensaverHelp-150x150.jpg" class="attachment-thumbnail" alt="Hilfe / Screensaver" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5402</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Unterschiede zwischen Spacewalk, Red Hat Network Satellite und SUSE Manager</title>
		<link>http://blog.christian-stankowic.de/?p=5378</link>
		<comments>http://blog.christian-stankowic.de/?p=5378#comments</comments>
		<pubDate>Mon, 15 Apr 2013 08:50:56 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[RHEL / CentOS]]></category>
		<category><![CDATA[SuSE]]></category>
		<category><![CDATA[Red Hat]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5378</guid>
		<description><![CDATA[Mit Red Hat Network Satellite und SUSE Manager gibt es zwei Management-Suiten für die Linux Enterprise-Distributionen Red Hat Enterprise Linux und SUSE Linux Enterprise Server. Auf den ersten Blick sehen die beiden Produkte gleich aus und auch aus technischer Sicht &#8230; <a href="http://blog.christian-stankowic.de/?p=5378">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Mit <strong>Red Hat Network Satellite</strong> und <strong>SUSE Manager</strong> gibt es zwei Management-Suiten für die Linux Enterprise-Distributionen <strong>Red Hat Enterprise Linux</strong> und <strong>SUSE Linux Enterprise Server</strong>.</p>
<p>Auf den ersten Blick sehen die beiden Produkte gleich aus und auch aus technischer Sicht gibt es starke Ähnlichkeiten, da die Produkte beide auf der selben quelloffenen Software-Kernkomponenten aufbauen: <strong>Red Hat Spacewalk</strong>. Red Hat Spacewalk wurde 2008 durch Red Hat als Open-Source freigegeben und bildet die Basis für den kommerziellen Satellite Server.</p>
<p>Wo genauen liegen also die Unterschiede zwischen den Produkten? Die folgende Tabelle zeigt die Gemeinsamkeiten und Detailunterschiede:</p>
<table>
<tbody>
<tr>
<td></td>
<td><strong><span style="color: #808080;">Spacewalk</span></strong></td>
<td><strong><span style="color: #cc292b;">RHN Satellite</span></strong></td>
<td><strong><span style="color: #439239;">SUSE Manager</span></strong></td>
</tr>
<tr>
<td>Version</td>
<td> 1.9</td>
<td>5.5</td>
<td>1.7</td>
</tr>
<tr>
<td>Link</td>
<td><a title="http://spacewalk.redhat.com" href="http://spacewalk.redhat.com" target="_blank"> [klick mich!]</a></td>
<td><a title="http://www.redhat.com/products/enterprise-linux/rhn-satellite/" href="http://www.redhat.com/products/enterprise-linux/rhn-satellite/" target="_blank">[klick mich!]</a></td>
<td><a title="https://www.suse.com/products/suse-manager" href="https://www.suse.com/products/suse-manager" target="_blank">[klick mich!]</a></td>
</tr>
<tr>
<td>Preismodell</td>
<td>kostenlos</td>
<td style="text-align: center;" colspan="2">Subscription/Module</td>
</tr>
<tr>
<td>Verwaltung von</td>
<td>Fedora, CentOS, SUSE, Debian</td>
<td>RHEL, Solaris</td>
<td>SUSE, RHEL* (siehe unten)</td>
</tr>
<tr>
<td>Architekturen</td>
<td>i386, x86_64</td>
<td>i386, x86_64, s390x</td>
<td>i386, x86_64, ia64, s390x, ppc, ppc64</td>
</tr>
<tr>
<td>Datenbank</td>
<td>Postgres, Oracle</td>
<td>Oracle 10gR2/11g</td>
<td>Postgres, Oracle 10gR2/11g</td>
</tr>
<tr>
<td style="vertical-align: top;">Funktionen<br />
(gekürzt)</td>
<td colspan="3">
<ul>
<li>Logische Gruppierung von Hosts und Software-Kanälen</li>
<li>Software-/Patch-Management, bereitstellen von Distributor- und Eigenbau-Software</li>
<li>Provisioning von physischen und virtuellen Hosts</li>
<li>rudimentäres Host-Monitoring</li>
<li>Compliance-Reporting und Alerting</li>
<li>Proxy-Server, verwaltete Hosts benötigen keine direkte Internet-Verbindung mehr</li>
</ul>
</td>
</tr>
</tbody>
</table>
<h1>Zentrale Verwaltung von RHEL- und SLES-Systemen mit einer Suite?</h1>
<p>Was für Möglichkeiten bestehen für den Fall, dass RHEL- und SLES-Systeme parallel betrieben und zentral verwaltet werden sollen?</p>
<p>Genau die Frage habe ich mir auch gestellt, im Internet recherchiert und <a title="https://twitter.com/dmacvicar/status/313019931400744960" href="https://twitter.com/dmacvicar/status/313019931400744960" target="_blank">über Twitter einen Kontakt zu SUSE geknüpft</a>.</p>
<p>Letztendlich gibt es zwei denkbare Möglichkeiten &#8211; ob diese praktikabel sind, liegt im eigenen Ermessen des Administrators.</p>
<h2>1.Möglichkeit &#8211; SUSE Expanded Support</h2>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/SUSEExpSup.jpg" rel="lightbox[5378]"><img class="size-thumbnail wp-image-5385 alignleft" alt="SUSE Expanded Support" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/SUSEExpSup-150x150.jpg" width="150" height="150" /></a>Im Rahmen des &#8220;<strong>SUSE Expanded Support&#8221;</strong> bietet SUSE neben den eigenen SLES-Patches auch digitale Flicken für RHEL. Das Ganze ist für langwierige Migrationen gedacht und soll den Red Hat Support überflüssig machen, da Patches nicht mehr direkt über das Red Hat Network bezogen werden. Die Patches kommen direkt von SUSE, wo sie aus den von Red Hat veröffentlichten Quellcodes übersetzt werden. Letztendlich sollte die Qualität der Software-Pakete die selbe sein, da sie ja dem gleichen Quellcode entspringen &#8211; ich persönlich würde es jedoch bevorzugen, meine Distributionspatches auch vom ursprünglichen Distributor zu erhalten.</p>
<p>Wenn man nicht gerade eine Migration plant und lediglich beabsichtigt, das Beste aus beiden &#8220;<em>Welten</em>&#8221; zu kombinieren, ist dieser Lösungsansatz meiner Meinung nach nicht der Beste.</p>
<h2>2.Möglichkeit &#8211; mrepo</h2>
<p><a href="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/SUSEmRepo.jpg" rel="lightbox[5378]"><img class="size-thumbnail wp-image-5386 alignright" alt="SUSE Manager + mrepo" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/SUSEmRepo-150x150.jpg" width="150" height="150" /></a>Eine andere Möglichkeit wäre die Verwendung eines Tools namens <strong>mrepo</strong>. Dieses Programm legt einen Spiegel eines YUM-Repositories an und stellt so die jeweiligen RPM-Pakete lokal zur Verfügung &#8211; laut Webseite soll das auch mit RHN-Kanälen möglich sein. Ich kann mir nur schwer vorstellen, dass diese Lösung lizenzrechtlich unbedenklich ist, da das lokale Vorhalten von RPM-Paketen aus dem RHN ja bewusst erschwert wird. In aller Regel soll das lokale Cachen nur über den RHN Satellite Server erfolgen.</p>
<p>Für Testzwecke wäre das sicherlich eine denkbare Lösung, in produktiven Umgebungen, in welchen ein sauberer Support-Status stets gegeben sein muss, würde ich von diesem Ansatz jedoch Abstand nehmen.</p>
<h2>Fazit</h2>
<p>Letztendlich handelt es sich bei RHN Satellite und SUSE Manager um identische Produkte (<em>quasi &#8220;das Selbe in grün&#8221;  <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_razz.gif' alt=':-P' class='wp-smiley' /> </em>) &#8211; an eine unkomplizierte Kombination von beiden &#8220;<em>Welten</em>&#8221; ist jedoch leider nicht zu denken.</p>
<p>Das Problem ist dabei weniger technischer, sondern lizenzrechtlicher Natur, wie ich kürzlich in einem Gespräch mit einem SUSE-Mitarbeiter erfahren habe. Die Gründe sind natürlich auch nachvollziehbar &#8211; die Hersteller wollen natürlich in erster Linie ihr eigenes Produkt &#8220;<em>an den Mann bringen</em>&#8220;, um konkurrenzfähig zu bleiben.</p>
<p>Wenn man beide Produkte verwendet und eine zentrale Management-Suite sucht, muss man sich meiner Meinung nach entweder für eine Migration der anderen Systemlandschaft entscheiden oder mehr Geld in die Hand nehmen, um beide Produkte parallel zu betreiben. Alternativ kann man sich auch eines Tricks bedienen, um RPM-Pakete aus dem Red Hat Network zwischenzuspeichern und zu verteilen. Wenn es keine Rolle spielt, woher die zu installierenden RHEL-Patches stammen, kann man auch auf den &#8220;<strong>SUSE Expanded Support</strong>&#8221; zurückgreifen.</p>
<p>Ich persönlich lege großen Wert auf lückenlosen Support durch den ursprünglichen Distributor und würde mich daher in jedem Fall für die Implementation beider Management-Produkte entscheiden.</p>
<h1>Galerie</h1>
<p>Anbei noch einige Screenshots der einzelnen Management-Suiten.</p>

<a href='http://blog.christian-stankowic.de/?attachment_id=5391' title='Spacewalk'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/1-Spacewalk-150x150.jpg" class="attachment-thumbnail" alt="Spacewalk" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5392' title='RHN Satellite (hosted)'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/2-RHNHosted-150x150.jpg" class="attachment-thumbnail" alt="RHN Satellite (hosted)" /></a>
<a href='http://blog.christian-stankowic.de/?attachment_id=5393' title='SUSE Manager'><img width="150" height="150" src="http://blog.christian-stankowic.de/wp-content/uploads/2013/04/3-SUSEManager-150x150.jpg" class="attachment-thumbnail" alt="SUSE Manager" /></a>

]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5378</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Veraltete Tools: nslookup &amp; ifconfig</title>
		<link>http://blog.christian-stankowic.de/?p=5319</link>
		<comments>http://blog.christian-stankowic.de/?p=5319#comments</comments>
		<pubDate>Sun, 07 Apr 2013 15:32:55 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[UNIX]]></category>
		<category><![CDATA[XING]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5319</guid>
		<description><![CDATA[Mit nslookup und ifconfig gibt es zwei wohlbekannte Tools, die dazu dienen das Netzwerk eines Unix/Linux-Hosts zu konfigurieren und DNS zu testen. ifconfig war 1983 das erste Mal Bestandteil der 4.2BSD-Distribution und entwickelte sich rasch zum Standard-Tool zur Netzwerkkonfiguration unter &#8230; <a href="http://blog.christian-stankowic.de/?p=5319">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Mit <strong>nslookup</strong> und <strong>ifconfig</strong> gibt es zwei wohlbekannte Tools, die dazu dienen das Netzwerk eines Unix/Linux-Hosts zu konfigurieren und DNS zu testen.</p>
<p><strong>ifconfig</strong> war 1983 das erste Mal Bestandteil der 4.2BSD-Distribution und entwickelte sich rasch zum Standard-Tool zur Netzwerkkonfiguration unter Linux &#8211; auch in kommerziellen Unices, wie Solaris oder HP-UX nahm das Programm Einzug.</p>
<p>Einige Linux-Distributionen setzen <strong>ifconfig</strong> nicht mehr ein (<em>z.B. ArchLinux</em>) &#8211; andere Distributionen (<em>z.B. SuSE/SLES und Fedora</em>) weisen darauf hin, dass das Tool bald nicht mehr zur Verfügung stehen wird:</p>
<pre># man ifconfig
...
       WARNING: Ifconfig is obsolete on system with Linux  kernel  newer  than
       2.0.  On  this  system  you  should  use ip. See the ip manual page for
       details
...
NOTE
       This program is obsolete! For replacement check ip addr and ip link.
       For statistics use ip -s link.</pre>
<p>Unter Solaris gibt es seit Version <strong>11</strong> dafür das Kommando <a title="http://www.oracle.com/technetwork/articles/servers-storage-admin/s11-network-config-1632927.html" href="http://www.oracle.com/technetwork/articles/servers-storage-admin/s11-network-config-1632927.html" target="_blank"><strong>ipadm</strong> </a>(<a title="http://blog.christian-stankowic.de/?p=5319&amp;cpage=1#comment-9181" href="http://blog.christian-stankowic.de/?p=5319&amp;cpage=1#comment-9181" target="_blank"><em>danke für den Tipp, Prometheus!</em></a>).</p>
<p><strong>ip</strong> funktioniert ab Linux 2.2. Es ist moderner und vereint darüber hinaus u.a. die Funktionen der Tools <strong>route</strong> und <strong>arp</strong>.</p>
<p>Anbei einige der wohl meist verwendeten <strong>ifconfig</strong>-/<strong>route</strong>-Aufrufe und deren <strong>ip</strong>-Pendants:</p>
<table>
<tbody>
<tr>
<td><strong>Aufgabe</strong></td>
<td><strong>ifconfig/route</strong></td>
<td><strong>ip</strong></td>
</tr>
<tr>
<td>Alle NICs anzeigen</td>
<td>
<pre>ifconfig</pre>
</td>
<td>
<pre>ip addr show</pre>
</td>
</tr>
<tr>
<td>Bestimmte NICS anzeigen</td>
<td>
<pre>ifconfig eth0</pre>
</td>
<td>
<pre>ip addr show eth0</pre>
</td>
</tr>
<tr>
<td>NIC deaktivieren</td>
<td>
<pre>ifconfig eth0 down</pre>
</td>
<td>
<pre>ip link set eth0 down</pre>
</td>
</tr>
<tr>
<td>NIC aktivieren</td>
<td>
<pre>ifconfig eth0 up</pre>
</td>
<td>
<pre>ip link set eth0 up</pre>
</td>
</tr>
<tr>
<td>IP zuweisen</td>
<td>
<pre>ifconfig eth0 [IP] netmask [NM]</pre>
</td>
<td>
<pre>ip addr [IP]/[CIDR] dev eth0</pre>
</td>
</tr>
<tr>
<td>Routing-Tabelle anzeigen</td>
<td>
<pre>route
netstat -r</pre>
</td>
<td>
<pre>ip route</pre>
</td>
</tr>
<tr>
<td>Standard-Route setzen</td>
<td>
<pre>route add default gw [IP] eth0</pre>
</td>
<td>
<pre>ip route add default via [IP]</pre>
</td>
</tr>
</tbody>
</table>
<p><strong>ip</strong> kann natürlich noch eine Menge mehr &#8211; um mal ein paar Beispiele zu nennen:</p>
<ul>
<li>MTU und Promiscuous Mode aktivieren/deaktivieren</li>
<li>Multicasting und VLANs konfigurieren</li>
<li>ARP-Tabellen verwalten</li>
</ul>
<p>Ähnlich ist es mit <strong>nslookup</strong>, da schon seit geraumer Zeit obsolet ist. Mit <strong>host</strong> und <strong>dig</strong> gibt es zwei Nachfolger-Tools, die einiges mehr beherrschen. Der quelloffene DNS-Server <strong>bind</strong> rät vom Einsatz von <strong>nslookup</strong> ab (<em><a title="https://www.isc.org/software/bind/documentation/arm95#id2547410" href="https://www.isc.org/software/bind/documentation/arm95#id2547410" target="_blank">Quelle</a></em>):</p>
<blockquote><p>Due to its arcane user interface and frequently inconsistent<br />
behavior, we do not recommend the use of nslookup.<br />
Use dig instead.</p></blockquote>
<p>Anbei einige geläufige <strong>nslookup</strong>-Befehle und deren <strong>dig</strong>-Pendants.</p>
<table>
<tbody>
<tr>
<td><strong>Aufgabe</strong></td>
<td><strong>nslookup</strong></td>
<td><strong>dig</strong></td>
</tr>
<tr>
<td>Forward-Lookup</td>
<td>
<pre>nslookup google.de</pre>
</td>
<td>
<pre>dig google.de
dig +short google.de</pre>
</td>
</tr>
<tr>
<td>Reverse-Lookup</td>
<td>
<pre>nslookup [IP]</pre>
</td>
<td>
<pre>dig -x [IP]
dig +short -x [IP]</pre>
</td>
</tr>
<tr>
<td>Bestimmten DNS-Server verwenden</td>
<td>
<pre>nslookup google.de [DNS]</pre>
</td>
<td>
<pre>dig @[DNS] google.de
dig @[DNS] +short google.de</pre>
</td>
</tr>
<tr>
<td>MX-Records erfragen</td>
<td>
<pre>nslookup -query=mx google.de</pre>
</td>
<td>
<pre>dig google.de MX
dig +short google.de MX</pre>
</td>
</tr>
<tr>
<td>Benutzerdefinierter Timeout</td>
<td>
<pre>nslookup -timeout=42 google.de</pre>
</td>
<td>
<pre>dig google.de +time=42
dig +short google.de +time=42</pre>
</td>
</tr>
</tbody>
</table>
<p>Die Option <strong>+short</strong> ist recht nützlich, wenn man einfach nur eine IP, bzw. einen Hostname erhalten will. Standardmäßig gibt <strong>dig</strong> noch zahlreiche Zusatzinformationen, wie beispielsweise die IP des verwendeten DNS-Servers und dessen Antwortzeit, aus:</p>
<pre>; &lt;&lt;&gt;&gt; DiG 9.9.2-P2 &lt;&lt;&gt;&gt; google.de
;; global options: +cmd
;; Got answer:
;; -&gt;&gt;HEADER&lt;&lt;- opcode: QUERY, status: NOERROR, id: 33883
;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 16384
;; QUESTION SECTION:
;google.de.                     IN      A

;; ANSWER SECTION:
google.de.              300     IN      A       173.194.44.56
google.de.              300     IN      A       173.194.44.55
google.de.              300     IN      A       173.194.44.63

;; Query time: 66 msec
;; SERVER: 208.67.222.222#53(208.67.222.222)
;; WHEN: Sun Apr  7 17:18:22 2013
;; MSG SIZE  rcvd: 86

# dig +short google.de
173.194.44.55
173.194.44.56
173.194.44.63</pre>
<p>Auch hier lohnt sich ein Blick in die Manpage von <strong>dig</strong>, da das Tool weitaus mehr Features, als die eben kurz angesprochenen, bietet. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5319</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>CRUX-ARM 2.8 auf dem Raspberry Pi</title>
		<link>http://blog.christian-stankowic.de/?p=5360</link>
		<comments>http://blog.christian-stankowic.de/?p=5360#comments</comments>
		<pubDate>Wed, 03 Apr 2013 18:14:46 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[CRUX]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[XING]]></category>
		<category><![CDATA[Raspberry Pi]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5360</guid>
		<description><![CDATA[Für den Raspberry Pi gibt es mittlerweile eine große Auswahl an Betriebssystemen &#8211; darunter auch eine ARM-Variante der quellbasierten Linux-Distribution CRUX. Wer also gerne bastelt oder Raspbian &#8220;zu Mainstream&#8221; findet, kann mit einer SD-Speicherkarte mit mindestens 1 GB Speicher und &#8230; <a href="http://blog.christian-stankowic.de/?p=5360">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Für den Raspberry Pi gibt es mittlerweile eine große Auswahl an Betriebssystemen &#8211; darunter auch eine ARM-Variante der quellbasierten Linux-Distribution <a title="http://crux-arm.nu/" href="http://crux-arm.nu/" target="_blank">CRUX</a>.</p>
<p>Wer also gerne bastelt oder Raspbian &#8220;<em>zu Mainstream</em>&#8221; findet, kann mit einer SD-Speicherkarte mit mindestens 1 GB Speicher und einer Kanne Kaffee jede Menge Spaß haben. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h1>Partitionierung und Einhängen</h1>
<p>Die folgenden Partitionen müssen auf der SD-Karte angelegt werden:</p>
<ul>
<li>1.Partition, später /dev/mmcblk0p1 &#8211; <strong>/boot</strong>, VFAT, mindestens 100 MB</li>
<li>2.Partition, später /dev/mmcblk0p2 &#8211; <strong>/</strong>, ext3, mindestens 512 MB</li>
<li>3.Partition, später /dev/mmcblk0p3 &#8211; <strong>swap</strong>, idealerweise 100-512 MB</li>
</ul>
<p>Idealerweise macht man das unter Linux, da im Anschluss noch Archive im neuen Dateisystem entpackt werden müssen:</p>
<pre># fdisk /dev/sdX
...
# mkfs.vfat /dev/sdX1
# mkfs.ext3 /dev/sdX2
# mkswap /dev/sdX3
# mkdir -p /mnt/{b,r}oot
# mount /dev/sdX2 /mnt/root
# mount /dev/sdX1 /mnt/boot</pre>
<h1>Kopieren und Konfigurieren</h1>
<p>Auf die FAT-Partition werden nun die folgenden Dateien kopiert:</p>
<ul>
<li>alle Dateien (<em>mit Ausnahme von <strong>kernel_emergency.img</strong></em>) aus dem folgenden GIT-Tree: <a title="https://github.com/raspberrypi/firmware/tree/master/boot" href="https://github.com/raspberrypi/firmware/tree/master/boot" target="_blank">https://github.com/raspberrypi/firmware/tree/master/boot</a></li>
<li>Angepasster Kernel: <a title="http://crux-arm.nu/files/devices/raspberrypi/current/kernel.img" href="http://crux-arm.nu/files/devices/raspberrypi/current/kernel.img" target="_blank">http://crux-arm.nu/files/devices/raspberrypi/current/kernel.img</a></li>
<li>RAMDisk: <a title="http://crux-arm.nu/files/devices/raspberrypi/current/initrd.gz" href="http://crux-arm.nu/files/devices/raspberrypi/current/initrd.gz" target="_blank">http://crux-arm.nu/files/devices/raspberrypi/current/initrd.gz</a></li>
<li>Boot-Konfigurationsdatei: <a title="http://crux-arm.nu/files/devices/raspberrypi/cmdline-ramdisk.txt" href="http://crux-arm.nu/files/devices/raspberrypi/cmdline-ramdisk.txt" target="_blank">http://crux-arm.nu/files/devices/raspberrypi/cmdline-ramdisk.txt</a> &#8211; <strong>bitte als cmdline.txt speichern</strong></li>
<li>Kernel-Module: <a title="http://crux-arm.nu/files/devices/raspberrypi/current/modules-3.6.1-raspberrypi_20130305.tar.xz" href="http://crux-arm.nu/files/devices/raspberrypi/current/modules-3.6.1-raspberrypi_20130305.tar.xz" target="_blank">http://crux-arm.nu/files/devices/raspberrypi/current/modules-3.6.1-raspberrypi_20130305.tar.xz</a></li>
<li>CRUX-ARM 2.8 Root-Dateisystem für den Raspberry Pi: <a title="http://crux-arm.nu/releases/2.8/crux-arm-rootfs-2.8-hardfp-raspberrypi.tar.xz" href="http://crux-arm.nu/releases/2.8/crux-arm-rootfs-2.8-hardfp-raspberrypi.tar.xz" target="_blank">http://crux-arm.nu/releases/2.8/crux-arm-rootfs-2.8-hardfp-raspberrypi.tar.xz</a></li>
</ul>
<p>Nachdem alle Dateien kopiert wurden, werden das Root-Dateisystem und die Kernel-Module entpackt:</p>
<pre># tar -pxf /mnt/boot/crux-arm-rootfs-2.8-hardfp-raspberrypi.tar.xz -C /mnt/root
# tar -pxf /mnt/boot/modules-3.6.1-raspberrypi_20130305.tar.xz -C /mnt/root</pre>
<p>Anschließend werden noch einige Zeilen der <strong>/etc/fstab</strong> angepasst:</p>
<pre># vi /mnt/root/etc/fstab
...#/dev/#REISERFS_ROOT#  /         reiserfs  defaults               0      0
/dev/mmcblk0p2    /         ext3      defaults               0      1
/dev/mmcblk0p1          /boot   vfat    defaults        0       2
...
#/dev/#XFS_ROOT#       /         xfs       defaults               0      0
/dev/mmcblk0p3           swap      swap      defaults               0      0
...

ESC ZZ</pre>
<p>Die Datei <strong>cmdline.txt</strong> muss noch wie folgt angepasst werden:</p>
<pre># vi /mnt/boot/cmdline.txt
smsc95xx.turbo_mode=N dwc_otg.lpm_enable=0 console=tty0 root=/dev/mmcblk0p2 rootfstype=ext3 rootwait

ESC ZZ</pre>
<p>Nach sicherem Aushängen der SD-Karte sollte CRUX-ARM 2.8 bootfähig sein:</p>
<pre># cd
# umount /mnt/{b,r}oot
# eject /dev/sdX</pre>
<p> <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h1>Netzwerkkonfiguration</h1>
<p>Die Netzwerkkonfiguration muss noch angepasst werden. Standardmäßig wird eine statische IP (<em>192.168.1.100/24</em>) vergeben, was wohl in einigen Fällen nicht passen dürfte &#8211; z.B., wenn man DHCP verwendet:</p>
<pre># vi /etc/rc.d/net
...
start)
        # loopback
        /sbin/ip addr add 127.0.0.1/8 dev lo broadcast + scope host
        /sbin/ip link set lo up
        # ethernet
        /sbin/ip link set eth0 up
        /sbin/dhcpcd eth0
        ;;
stop)
        /usr/bin/killall dhcpcd
        /sbin/ip route del default
        /sbin/ip link set eth0 down
        /sbin/ip link set lo down
        /sbin/ip addr del 127.0.0.1/8 dev lo
        ;;

ESC ZZ</pre>
<p>Nach einem Neustart des Netzwerk-Dienstes sollte das Netzwerk funktionieren:</p>
<pre># /etc/rc.d/net restart
# ping google.de</pre>
<p>Wenn nicht, einfach mal einen Blick auf die Fehlermeldung werfen.</p>
<h2>Updates</h2>
<p>Seit der Erstellung des CRUX-ARM 2.8 Raspberry Pi-Images wurden einige Updates veröffentlicht &#8211; diese kann (<em>und sollte!</em>) man installieren. Wichtig ist dabei, erstmal das richtige Datum/die richtige Uhrzeit zu setzen, da ansonsten die Übersetzung mit einem Fehler abbricht:</p>
<pre># date --set="3 Apr 2013 19:50:00"     # bitte ersetzen!
# ports -u
# echo "Updates: $(ports -d|tail -n+2|wc -l)"
# prt-get sysup
...</pre>
<p>Hier unbedingt Zeit und/oder Zeit mitbringen. Der Raspberry Pi darf jetzt sämtliche verfügbare Aktualisierungen übersetzen &#8211; und das dauert (<em>im Anbetracht der verbauten CPU</em>) natürlich etwas.. <img src='http://blog.christian-stankowic.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' /> </p>
<h2>Tools</h2>
<p>Im Minimal-Image von CRUX-ARM 2.8 fehlen noch einige rudimentäre Tools, wie beispielsweise GNU screen, elinks und ntp:</p>
<pre># useradd ntp; groupadd ntp
# prt-get depinst screen ntp elinks python</pre>
<p>Bitte auch hier etwas Geduld mitbringen &#8211; der Winzling ist natürlich nicht der schnellste und braucht für das Übersetzen der einzelnen Quellcodes ein wenig Zeit.</p>
<h1>Tweaks</h1>
<p>Wer möchte, kann den Raspberry Pi noch ein wenig &#8220;<em>tunen</em>&#8221; und ihn übertakten, Overscaling deaktivieren, etc.:</p>
<pre># vi /boot/config.txt
disable_overscan=1
arm_freq=950
gpu_mem=16
core_freq=250
sdram_freq=450

ESC ZZ</pre>
<p>Diese Einstellungen entsprechen weitestgehend der Raspbian &#8220;<em>High</em>&#8220;-Einstellung und übertakten die CPU auf <strong>950 Mhz</strong>, Core auf <strong>250 Mhz</strong> und den RAM auf<strong> 450 Mhz</strong>. Overscan wird deaktiviert und für die GPU werden 16 MB Speicher reserviert &#8211; ideal, wenn man den Raspberry Pi als Server einsetzen möchte.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5360</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Neue Strategieziele für Ubuntu: eigener Kernel, exklusive Hardware und die Cloud?</title>
		<link>http://blog.christian-stankowic.de/?p=5333</link>
		<comments>http://blog.christian-stankowic.de/?p=5333#comments</comments>
		<pubDate>Sun, 31 Mar 2013 22:10:30 +0000</pubDate>
		<dc:creator>Christian</dc:creator>
				<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSBN/Systemhelden]]></category>
		<category><![CDATA[Ubuntu]]></category>

		<guid isPermaLink="false">http://blog.christian-stankowic.de/?p=5333</guid>
		<description><![CDATA[Zweifelsfrei ist Ubuntu eine der innovativsten Linux-Distributionen &#8211; nicht unbegründet verschaffte sie dem Linux-Desktop in den letzten Jahren mehr Benutzerfreundlichkeit und &#8211; daraus resultierend &#8211; auch eine höhere Akzeptanz beim Endanwender. Aktuell brodelt wieder die Gerüchteküche &#8211; einigen verlässlichen Quellen &#8230; <a href="http://blog.christian-stankowic.de/?p=5333">Weiterlesen <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Zweifelsfrei ist Ubuntu eine der innovativsten Linux-Distributionen &#8211; nicht unbegründet verschaffte sie dem Linux-Desktop in den letzten Jahren mehr Benutzerfreundlichkeit und &#8211; daraus resultierend &#8211; auch eine höhere Akzeptanz beim Endanwender.</p>
<p>Aktuell brodelt wieder die Gerüchteküche &#8211; einigen verlässlichen Quellen zufolge sollen der Distribution zukünftig einige große Strategieänderungen &#8211; auf die ich in diesem Artikel eingehen möchte &#8211; widerfahren.</p>
<h1>Neuer Unterbau: Fokus auf ARM &#8211; erstmals kein GNU/Linux?</h1>
<p>Insider-Informationen zufolge soll mittelfristig der Umzug auf eine neue Kernel-Plattform erfolgen. In der Vergangenheit hat sich die Pflege des Linux-Kernels als sehr zeitaufwändig und komplex erwiesen. Spezielle Ubuntu-Anpassungen müssen nachträglich angewandt werden und neue Geräte-Treiber sind oftmals unreif, was die Begeisterung beim Kunden mindert.</p>
<p>Laut internen Analysen sind diese Probleme vorwiegend auf das nicht mehr zeitgemäße monolithische Design des Linux-Kernels zurückzuführen. Um dieses Problem mittelfristig zu lösen, finden bereits erste Tests auf alternativen Kernel-Architekturen statt. Sehr angetan ist man offensichtlich von einem nicht näher benannten unixoiden Hybrid-Kernel, der auf dem Mach-Prinzip aufbaut und über einzelne monolithische Elemente verfügt.</p>
<p>Ein weiteres Ziel ist es, den Hardware-Support auf einige exklusive Hersteller zu beschränken &#8211; diese sollen dann aber zu 100% unterstützt werden. Als potentielle Vertragspartner werden drei Computer-Hersteller aus Round Rock, Raleigh und Cupertino vermutet. Der Endanwender müsste sich so keine Gedanken mehr über Treibersupport machen und könnte aus dem breiten Produktportfolio der drei Hersteller auswählen.</p>
<p>Die klassische 32bit-Architektur <strong>i686</strong> ist zukünfig nicht mehr von Interesse und soll einschlägigen Andeutungen zufolge mit dem kommenden Release &#8220;<strong>13.10 Sloppy Seagul</strong>&#8221; eingestellt werden. Mittelfristig soll voraussichtlich auch die 64bit-Architektur <strong>x86_64</strong> weichen &#8211; man möchte sich offensichtlich auf die Unterstützung von <strong>ARM</strong>-Geräten konzentrieren, da diese für den Consumer-Markt von größerem Interesse sind. Repräsentativen Studien und Marktanalysen zufolge sollen 2014 die Verkaufszahlen von Tablets und Smartphones <strong>viermal so hoch</strong> wie die konventioneller <strong>Personal Computer</strong> sein. Auf diesen Trend möchte man sich offensichtlich vorbereiten und alle technischen Strukturierungsmaßnahmen einleiten.</p>
<p>Die Ausrichtung auf den Consumer-Markt hat auch Auswirkungen auf die Pflege des <strong>Ubuntu Servers</strong> &#8211; er soll ab 2014 lediglich für ARM-basierte Server angeboten werden. Die Unterstützung für die i686- und x86_64-Architekturen wird vermutlich zeitgleich mit der Unterstützung der Desktop-Releases eingestellt.</p>
<h1>Neue Release-Zyklen und Update-Mechanismen</h1>
<p>Der übliche 6 monatige Release-Zyklus mit zusätzlichen 1,5 bis 2 Jahren Update-Pflege soll einem neuen als &#8220;<strong>Short Term Support (STS)</strong>&#8221; bezeichneten System weichen. Zukünftige Releases werden bis zu 6 Monate lang mit Sicherheitsupdates versorgt.</p>
<p>Primärziel dieser Umstrukturierung ist es, immer die neueste Software anbieten zu können. Durch die Einsparung von Arbeitszeit für erweiterten Hardware-Support (<em>siehe oben</em>) steht mehr Man-Power zur Verfügung, um neueste Software unter verschiedenen Aspekten zu testen und (<em>falls notwendig</em>) zu patchen.</p>
<p>Updates und zusätzliche Anwendungen sollen zukünftig nicht mehr über <strong>apt</strong> oder <strong>aptitude</strong> bezogen werden können, hier soll ein Subskiptionsprinzip, welches sich bei zahlreichen Enterprise Linux-Distributionen etabliert hat, zum Tragen kommen. Diese Subskriptionen sollen über einen eigenen Multimedia-Store, der auch Filme und Bücher anbietet, erworben werden können. Zusätzliche Anwendungen werden als separate käufliche &#8220;<em>Apps</em>&#8221; angeboten.</p>
<h1>Software-Vereinheitlichung</h1>
<p>Neben der Kernel-Wartung hat sich ein weiteres Ziel herauskristallisiert: die Standardisierung des umfangreichen Software-Portfolios von Ubuntu.</p>
<p>Aktuell gibt es für Ubuntu zahlreiche Desktop-Umgebungen, unter anderem GNOME, KDE und LXDE. Diese Programm-Vielfalt entspricht nicht mehr der ursprünglichen Ubuntu-Faustregel, für jede Aufgabe eine Anwendung zur Verfügung zu stellen.</p>
<p>Die oben erwähnten Desktop-Umgebungen verfolgen jeweils eigene Ziele und haben allesamt Vor- und Nachteile, die es zu vereinen gilt.</p>
<p><a title="http://www.heise.de/open/meldung/Ubuntu-Mir-statt-Wayland-und-Unity-zukuenftig-mit-Qt-1816015.html" href="http://www.heise.de/open/meldung/Ubuntu-Mir-statt-Wayland-und-Unity-zukuenftig-mit-Qt-1816015.html" target="_blank">Nachdem im März 2013 die Arbeit an <strong>Mir</strong>, einem eigenen Display-Server, bekannt gegeben wurde</a>, will man zukünftig noch einen Schritt weiter gehen &#8211; die Entwicklung einer <span style="text-decoration: underline;">eigenen Desktop-Umgebung</span>. Sie soll den Namen <strong>Ubuntu Desktop Environment (UDE)</strong> tragen und mit einem aufgeräumten Erscheinungsbild überzeugen. Eine Steuerung mit Maus und externer Tastatur ist nicht vorgesehen &#8211; stattdessen soll eine sehr ausgereifte Spracherkennung, die in Zusammenarbeit mit <strong>hessischen</strong> und <strong>schwäbischen</strong> Universitäten entstand, zum Einsatz kommen. Zahlreiche interne Tests verliefen sehr zufriedenstellend und versprechen eine globale Anwender-Begeisterung.</p>
<p>Anwendungen sollen zukünftig ausschließlich im Vollbild-Modus ausgeführt werden &#8211; ein Prinzip, das man schon heute von Smartphones und Tablets kennt. Wegfallen soll der Support von Multitasking, da Benutzer &#8211; laut eigenen Analysen &#8211; in der Regel ohnehin nie mehr als eine Anwendung gleichzeitig bedienen.</p>
<h1>Ab in die Cloud: komplette Ubuntu One-Anbindung</h1>
<p>Nachdem 2009 mit Ubuntu One erstmals Cloudspeicher zur Verfügung gestellt wurde, möchte man zukünftig offensichtlich das Ganze toppen und lokale Benutzerkonten aus dem Funktionsumfang des freien Betriebssystems entfernen.</p>
<p>Benutzerkonten sollen zukünftig über das populäre soziale Netzwerk <strong>Facebook</strong> implementiert werden. Da persönliche Daten zukünftig nicht mehr auf einer dedizierten <strong>/home</strong>-Partition sondern ausschließlich auf Ubuntu One gesichert werden sollen, ergibt sich für den Benutzer der Vorteil der wegfallenden (<em>aufwändigen</em>) Datensynchronisation. Anwender können sich auf jedem Ubuntu-Endgerät mit <strong>Gesichtserkennung</strong> oder einem <strong>dreistelligen Sicherheitscode</strong> einloggen und auf ihre sensiblen Daten zugreifen.</p>
<p>Angeschlossene USB-Datenspeicher sollen automatisch in die Cloud aufgenommen werden. Vorhandenes Musik- oder Filmmaterial soll automatisiert mit eingeschlägigen Internet-Portalen synchronisiert werden.</p>
<h1>Ausblick: erste Screenshots und neue Release-Namen</h1>
<p>Nachdem man früher die Namen zukünftiger Releases eher kurzfristig entschied und bekanntgab, wurden nun erstmal im Voraus zahlreiche Namen festgelegt. Hier bleibt man beim altbewährten System und verwendet weiterhin Tiernamen in Kombination mit Adjektiven als Codenamen:</p>
<table>
<tbody>
<tr>
<td><strong>Release</strong></td>
<td><strong>Codename + Übersetzung<br />
</strong></td>
</tr>
<tr>
<td>13.10</td>
<td>Sloppy Seagull &#8211; schlampige Seemöwe</td>
</tr>
<tr>
<td>14.04</td>
<td>Trendy Turkey &#8211; modischer Truthahn</td>
</tr>
<tr>
<td>14.10</td>
<td>Ubiquitous Unicorn &#8211; allgegenwärtiges Einhorn</td>
</tr>
<tr>
<td>15.04</td>
<td>Violet Vulture &#8211; violetter Geier</td>
</tr>
<tr>
<td>15.10</td>
<td>Wretched Worm &#8211; erbärmlicher Wurm</td>
</tr>
</tbody>
</table>
<p>Erste geheime Screenshots der zukünftigen Benutzeroberfläche &#8220;<strong>Ubuntu Desktop Environment (UDE)</strong>&#8221; haben bereits den Weg ins weltweite Netz gefunden &#8211; sie sind hier zu finden: <a title="http://blog.christian-stankowic.de/wp-content/uploads/2013/03/ubuntu_uce-screenshot.jpg" href="http://blog.christian-stankowic.de/wp-content/uploads/2013/03/ubuntu_uce-screenshot.jpg" target="_blank" rel="lightbox[5333]"><strong>[klick mich!]</strong></a></p>
<p>Ein Video von UDE in Aktion gibt es hier: <strong><a title="http://www.youtube.com/watch?v=oHg5SJYRHA0" href="http://www.youtube.com/watch?v=oHg5SJYRHA0" target="_blank">[klick mich!]</a></strong></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.christian-stankowic.de/?feed=rss2&#038;p=5333</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
