Mrz
06
2008
3

Solaris Zone clonen

In Verbindung mit ZFS, kann man eine Solaris Zone schnell und komfortabel clonen. Dies ist insbesondere dann hilfreich, wenn man mehrere identische Zonen auf dem System installieren muss. Im folgenden Beispiel wird die bereits installierte Zone am5 nach ps4 geclont.

Als erstes erstellen wir einen Snaphot der Zone mit ZFS. Dafür sollte die Zone ihr eigenes Filesystem haben und Zone sollte vor dem erstellen des Snapshots herunter gefahren werden.

root@orange2:~# zfs snapshot pool0/zones/am5@ReadyToClone

Von diesem Snapshot aus, kann das neue Filesystem gelcont werden.

root@orange2:/etc/zones# zfs clone pool0/zones/am5@ReadyToClone pool0/zones/ps4

Als nächstes wird das config File der Zone erstellt. Dafür wird das config File der Zone am4 kopiert. Die Files befinden sich im Verzeichnis /etc/zones.

root@orange2:/etc/zones# cp am5.xml ps4.xml

Das ps4.xml muss wie folgt geändert werden.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE zone PUBLIC "-//Sun Microsystems Inc//DTD Zones//EN" "file:///usr/share/lib/xml/dtd/zonecfg.dtd.1">
<!--
    DO NOT EDIT THIS FILE.  Use zonecfg(1M) instead.
-->
<zone name="ps4" zonepath="/zones/ps4" autoboot="true">
  <network address="192.168.48.153" physical="e1000g0"/>
</zone>

Danach muss man im File index, welches ebenfalls in /etc/zones ist, die neue Zone eingetragen werden.

am5:installed:/zones/am5:5c11a907-3b20-6e69-9b28-f4517f5a81bc
ps4:installed:/zones/ps4:5c11a907-3b20-6e69-9b28-f4517f5a81bc

Die ID der Zone kann dabei ebenfalls kopiert werden. Wer möchte, kann der neuen Zone auch eine neue ID geben, ist aber nicht notwendig.

Nachdem der Eintrag gemacht wurde, sollte die Zone Sichtbar sein.

root@orange2:/etc/zones# zoneadm list -cv
  ID NAME             STATUS     PATH                           BRAND    IP
   0 global           running    /                              native   shared
   1 am5              running    /zones/am5                     native   shared
   2 am4              running    /zones/am4                     native   shared
   - ps4              installed  /zones/ps4                     native   shared

Bevor man die Zone bootet, muss man im Verzeichnis /zones/ps5/root/etc in den Files hosts und nodename den Hostnamen entsprechen anpassen. Nach diesen Änderungen kann man die Zone gebootet werden.

Written by ihsan in: Solaris | Schlagwörter:, ,
Dez
20
2007
2

Solaris Zone mit separatem IP Stack

Bis an hin wurde der IP Stack einer Zone immer mit der globalen Zone geteilt, was, je nach Anwendungszweck, zu gewissen Problemen geführt hat. Beispielsweise ist es mit einem shared IP Stack das benutzen von snoop oder das betreiben eines NFS Servers innerhalb einer Zone nicht möglich. Seit Solaris 10 8/07 (Update 4) ist es nun möglich, dass eine Zone einen getrennten IP Stack hat, welcher nur von dieser Zone benutzt wird und nicht mit anderen Zonen geteilt wird.

Für einen exklusiven IP Stack muss man im Moment der Zone ein separates Interface zuweisen, welches einen GLD basierenden Treiber haben muss. Neuere Netzwerkkarten wie das bge oder die e1000g sind GLD basierend; ältere wie z.B. ce oder eri nicht. In zukünftigen Releases wird die ein Interface pro Zone Einschränkung wegfallen, da Sun im Moment an einer vNIC Implementation arbeitet.

Die Konfiguration ist denkbar einfach. Zu beachten ist nur, dass man mit zonecfg der Zone keine IP Adresse mehr zuweisen muss.

zonecfg:test0> set ip-type=exclusive
zonecfg:test0> add net
zonecfg:test0:net> set physical=e1000g1
zonecfg:test0:net> end

Beim ersten Booten der Zone wird man dann nach den gleichen Netzwerkeinstellungen gefragt wie bei einer regulären Solaris Instalaltion.

Wie man sehen kann, fühlt sich das so an, als wäre man in der globlen Zone:

# ifconfig -a
lo0: flags=2001000849<UP,LOOPBACK,RUNNING,MULTICAST,IPv4,VIRTUAL> mtu 8232 index 1
        inet 127.0.0.1 netmask ff000000
e1000g1: flags=1000843<UP,BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 2
        inet 172.16.192.140 netmask ffffff00 broadcast 172.16.192.255
        ether 0:c:29:a3:a5:7f

Das Interface e1000g1 ist unter der Kontrolle der lokalen Zone und wird mit ifconfig nicht in der globalen Zone angezeigt. Es wird ganz normal über die /etc/hostname.e1000g1 konfiguriert. Tools wie snoop funktionieren in der lokalen Zone, es können andere Routen als in der globalen Zone gesetzt werden und man kann endlich in einer Zone einen NFS Server betreiben.

Written by ihsan in: Solaris | Schlagwörter:,
Dez
14
2007
2

Zonen ohne physische Interfaces miteinander verbinden

Solaris bietet leider von Haus aus keine Möglichkeit lokale Zonen miteinander zu verbinden, ohne das man ein physisches Interfaces benutzt. Je nach den Anforderungen der Sicherheit oder dem vorhanden sein von Hardware, kann es wünschenswert sein, Zonen mit virtuellen Interfaces miteinander zu verbinden.

Der TAP Treiber emuliert ein Ethernet Interface, welches normalerweise für VPNs benutzt wird. Man kann allerdings den TAP Treiber auch zum verbinden von mehreren Zonen missbrauchen.

Nachdem man den TUN Treiber geladen hat, muss als erstes mit tunctl ein  neues Interface erzeugen und plumben:

# tunctl -t tap0
# ifconfig tap0 plumb

Das sieht dann so aus:

# ifconfig tap0
tap0: flags=1000842<BROADCAST,RUNNING,MULTICAST,IPv4> mtu 1500 index 3
        inet 0.0.0.0 netmask 0
        ether a:0:20:b3:d0:84

Beim für das Interface benutzten Mac Adresse aus dem a:0:20 Range, handelt es sich um eine Adresse für den privaten Gebrauch, wie man es von den IP Adressen her kenn.

Mit zonecfg muss man dann nur noch das Netzwerkinterface der Zone auf tap0 legen und schon sind die Zonen mit einem virtuellen Ethernet Interface verbunden.

# zonecfg -z test0 info net
net:
        address: 192.168.123.1
        physical: tap0
# zonecfg -z test1 info net
net:
        address: 192.168.123.2
        physical: tap0

WICHTIG: Das ganze funktioniert nicht mit einem exklusiven IP Stack.

Written by ihsan in: Solaris | Schlagwörter:, ,

Template: TheBuckmaker.com Themes for WordPress