Mittwoch Apr 04, 2012

Folien von den Solaris Tech Days

Mehr ein "oeffentlicher Bookmark" als ein eigener Beitrag:  Die Folien von den deutschen "Solaris Tech Days" sind hier zu finden.  Die Agenda und eine Sammlung von Links zum Thema Solaris 11 als Antwort auf diverse Nachfragen gibt es im Solarium.

Dienstag Mrz 13, 2012

Ein lokaler AI Server - mit Solaris 11 mal eben aufgesetzt

Solaris 11 macht vieles neu, unter anderem auch den Installserver.  Wer, wie ich, seit (gefuehlten) 200 Jahren Jumpstart kennt, muss hier umlernen.  Dabei ist das ganze gar nicht so kompliziert.  Nur eben neu.

Mein Ziel war es, einen AI-Server zu bauen, den ich fuer Demo-Zwecke auch mal im Zug benutzen kann.  Damit sind auch die Hardware-Voraussetzungen klar: Tragbar sollte es schon sein.  Aber schoen der Reihe nach.

Als Erstes braucht man natuerlich ein OS-Image.  Das heisst in der neuen Solaris 11 Welt jetzt Repository.  Das Original dafuer kann man sich von der Solaris 11 Seite bei Oracle herunterladen.  Man braucht dazu das zweiteilige "Oracle Solaris 11 11/11 Repository Image", das man sich dann natuerlich mit cat zusammensetzt.  Die MD5 Pruefsummen gibt es uebrigens ebenfalls auf dieser Seite, nur etwas weiter oben.

Damit ist nun das Repository ganz schnell gemacht:

# zfs create -o mountpoint=/export/repo rpool/ai/repo
# zfs create rpool/ai/repo/sol11
# mount -o ro -F hsfs /tmp/sol-11-1111-repo-full.iso /mnt
# rsync -aP /mnt/repo /export/repo/sol11
# umount /mnt
# pkgrepo rebuild -s /export/repo/sol11/repo
# zfs snapshot rpool/ai/repo/sol11@fcs
# pkgrepo info -s  /export/repo/sol11/repo
PUBLISHER PACKAGES STATUS           UPDATED
solaris   4292     online           2012-03-12T20:47:15.378639Z
Und schon ist das Repository fertig. Zur Sicherheit gleich einen Snapshot anlegen, man weiss nie, wozu der noch gut ist. Um das Repository zu verwenden, koennte man es nun als Publisher auf Dateibasis eintragen:
# pkg set-publisher -g file:///export/repo/sol11/repo solaris
Falls ich das Repository spaeter auch per (virtuellem) Netzwerk verwenden moechte, jetzt noch schnell den Repository-Server aktiviert:
# svccfg -s application/pkg/server \
setprop pkg/inst_root=/export/repo/sol11/repo
# svccfg -s application/pkg/server setprop pkg/readonly=true
# svcadm refresh application/pkg/server
# svcadm enable application/pkg/server

Und schon kann man mit dem Browser auf http://localhost/ einen huebschen Repository-Server bewundern. Schritt 1 ist geschafft.  Das alles ist uebrigens in einem README, das im Repository-Image enthalten ist, gut beschrieben. 

Inzwischen gibt es natuerlich Updates, zu finden in MOS im Oracle Solaris 11 Support Repository Updates (SRU) Index.  Je nach Bedarf kann man diese Updates einfach in das bestehende Repository einpflegen oder sie als eigenstaendige Repositories betreiben.  Diese Updates sind jeweils selbststaendig, d.h. SRU4 enthaelt auch die Updates aus SRU2 und SRU3.  Mit einem kleinen ZFS-Trick kann man auch beides bekommen: Ein Gesamt-Repository und gleichzeitig fuer jedes Update ein eigenes:

# mount -o ro -F hsfs /tmp/sol-11-1111-sru4-05-incr-repo.iso /mnt
# pkgrecv -s /mnt/repo -d /export/repo/sol11/repo '*'
# umount /mnt
# pkgrepo rebuild -s /export/repo/sol11/repo
# zfs snapshot rpool/ai/repo/sol11@sru4
# zfs set snapdir=visible rpool/ai/repo/sol11
# svcadm restart svc:/application/pkg/server:default
Damit ist das normale Repository jetzt auf dem Stand von SRU4. Gleichzeitig gibt es dank der ZFS Snapshots in /export/repo/sol11/.zfs/snapshot/fcs ein gueltiges Repository ohne den Update. Wer moechte, kann dazu natuerlich auch einen zweiten Repository-Service auf einem zusaetzlichen Port betreiben.

Jetzt aber zum Installserver.  Mit nur wenig Lektuere der entsprechenden Dokumentation wird klar, dass man hierzu einen DHCP-Server betreiben muss.  Da ich vermeiden wollte, dass dieser meinem bereits bestehenden DHCP-Server (Teil meiner SunRay Installation) in die Quere kommt, und weil das fuer einen solchen Service sowieso eine gute Idee ist, soll er in einer eigenen Zone installiert werden.  Also erst mal schnell eine Zone erzeugen:

# zfs create -o mountpoint=/export/install rpool/ai/install
# zfs create -o mountpoint=/zones rpool/zones
# zonecfg -z ai-server
zonecfg:ai-server> create
create: Using system default template 'SYSdefault'
zonecfg:ai-server> set zonepath=/zones/ai-server
zonecfg:ai-server> add dataset
zonecfg:ai-server:dataset> set name=rpool/ai/install
zonecfg:ai-server:dataset> set alias=install
zonecfg:ai-server:dataset> end
zonecfg:ai-server> commit
zonecfg:ai-server> exit
# zoneadm -z ai-server install
# zoneadm -z ai-server boot ; zlogin -C ai-server
Beim ersten Boot dann einen Hostnamen und IP-Adresse vergeben, fertig ist die Zone.  Als Publisher fuer Solaris Pakete wie z.B. die AI Pakete verwendet sie dabei zwingend den Publisher der Global Zone. Das Filesystem /export/install ist natuerlich fuer den Installserver gedacht. Diesen gilt es jetzt aufzusetzen:
#zlogin ai-server
root@ai-server:~# pkg install install/installadm
root@ai-server:~# installadm create-service -n x86-fcs -a i386 \
-s pkg://solaris/install-image/solaris-auto-install@5.11,5.11-0.175.0.0.0.2.1482 \
-d /export/install/fcs -i 192.168.2.20 -c 3

Damit ist der Installserver selbst eigentlich schon fertig. Was ist hier passiert? Nun, natuerlich muss man erst einmal die notwendige Software installieren. Mit IPS ist das einfach, ggf. wird auch gleich der benoetigte DHCP-Server mit installiert. Achtung, es gibt zwei verschiedene DHCP-Server in Solaris 11, den aus Solaris 10 und frueher bekannten, und den von ISC. Letzterer wird fuer AI gebraucht. Die SMF-Namen der beiden unterscheiden sich nur wenig, der "alte" DHCP-Server heisst in SMF "svc:/network/dhcp-server:default". Der ISC-Server bringt verschiedene SMF-Services mit. Davon brauchen wir mindestens den Service "svc:/network/dhcp/server:ipv4". Mit dem Kommando "installadm create-service" wird nun ein Installations-Service aufgebaut. Er hat den Namen "x86-fcs", bedient die Architektur "i386" und bezieht sein Boot-Image aus dem Repository des System-Publishers in der Version 5.11,5.11-0.175.0.0.0.2.1482, das entspricht Solaris 11 11/11.  (Die Option "-a i386" in diesem Beispiel ist optional, da der Installserver auf einer x86-Maschine laeuft.) Die Boot-Umgebung fuer die Clients wird in /export/install/fcs angelegt, und der DHCP-Server wird fuer 3 IP-Adressen ab 192.168.2.20 konfiguriert.  Diese Konfiguration findet man in leicht verstaendlicher Form in /etc/inet/dhcpd4.conf.  Auf die gleiche Weise koennte man nun noch einen Service fuer SPARC Systeme aufsetzen.

Jetzt koennte man bereits den ersten Client registrieren und installieren.  Er bekaeme den Standard "solaris-large-server" mit dem Publisher "http://pkg.oracle.com/solaris/release" installiert und wuerde nach dem ersten Booten seine Konfiguration interaktiv abfragen.  Damit wird klar:  Der AI-Server ist eigentlich nur ein Boot-Server, die eigentliche Quelle fuer Pakete kann eine andere sein.  Da ich das so jedoch nicht haben moechte, konfiguriere ich mir meinen Client erst noch ein wenig zurecht.

Die Konfiguration von Install-Clients wird ueber sogenannte Manifeste und Profile gesteuert.  Dabei enthaelt das Manifest Informationen ueber zu installierende Pakete und Dateisystem-Konfiguration (und entspricht damit ein wenig der "rules.ok" Datei von Jumpstart).  Die Profile enthalten darueber hinausgehende Konfigurations-Angaben wie bspw. Root-PW, Primaerer User, IP-Adresse, Tastatur-Layout etc. und entsprechend damit in etwa der alten sysid.cfg. 

Am einfachsten kommt man an ein Template fuer ein Manifest, indem man sich das Default-Manifest vom Installserver geben laesst, dieses modifiziert und das Ergebnis dem Installserver bekannt gibt:

root@ai-server:~# mkdir -p /export/install/configs/manifests
root@ai-server:~# cd /export/install/configs/manifests
root@ai-server:~# installadm export -n x86-fcs -m orig_default \
-o orig_default.xml
root@ai-server:~# cp orig_default.xml s11-fcs.small.local.xml
root@ai-server:~# vi s11-fcs.small.local.xml
root@ai-server:~# more s11-fcs.small.local.xml
<!DOCTYPE auto_install SYSTEM "file:///usr/share/install/ai.dtd.1">
<auto_install>
  <ai_instance name="S11 Small fcs local">
    <target>
      <logical>
        <zpool name="rpool" is_root="true">
          <filesystem name="export" mountpoint="/export"/>
          <filesystem name="export/home"/>
          <be name="solaris"/>
        </zpool>
      </logical>
    </target>
    <software type="IPS">
      <destination>
        <image>
          <!-- Specify locales to install -->
          <facet set="false">facet.locale.*</facet>
          <facet set="true">facet.locale.de</facet>
          <facet set="true">facet.locale.de_DE</facet>
          <facet set="true">facet.locale.en</facet>
          <facet set="true">facet.locale.en_US</facet>
        </image>
      </destination>
      <source>
        <publisher name="solaris">
          <origin name="http://192.168.2.12/"/>
        </publisher>
      </source>
      <!--
        By default the latest build available, in the specified IPS
        repository, is installed.  If another build is required, the
        build number has to be appended to the 'entire' package in the
        following form:

            <name>pkg:/entire@0.5.11-0.build#</name>
      -->
      <software_data action="install">
        <name>pkg:/entire@0.5.11,5.11-0.175.0.0.0.2.0</name>
        <name>pkg:/group/system/solaris-small-server</name>
      </software_data>
    </software>
  </ai_instance>
</auto_install>

root@ai-server:~# installadm create-manifest -n x86-fcs -d \
-f ./s11-fcs.small.local.xml 
root@ai-server:~# installadm list -m -n x86-fcs
Manifest             Status    Criteria 
--------             ------    -------- 
S11 Small fcs local  Default   None
orig_default         Inactive  None

Die wesentlichen Punkte in diesem Manifest sind:

  • Es wird "solaris-small-server" installiert
  • Es gibt ein paar Locales weniger (die ich nicht haben wollte)
  • Als Publisher wird mein in der GZ laufender Package Service auf Adresse 192.168.2.12 verwendet
  • Von dort wird die FCS-Version von Solaris 11 installiert:  pkg:/entire@0.5.11,5.11-0.175.0.0.0.2.0

Auf ganz aehnliche Weise wird jetzt aus einem interaktiv erzeugten Default-Profil eine kleine Menge von Profil-Schnipseln erzeugt, was die Konfiguration von mehreren Clients spaeter leichter macht:

root@ai-server:~# mkdir -p /export/install/configs/profiles
root@ai-server:~# cd /export/install/configs/profiles
root@ai-server:~# sysconfig create-profile -o default.xml
root@ai-server:~# cp default.xml general.xml; cp default.xml mars.xml
root@ai-server:~# cp default.xml user.xml
root@ai-server:~# vi general.xml mars.xml user.xml
root@ai-server:~# more general.xml mars.xml user.xml
::::::::::::::
general.xml
::::::::::::::
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="profile" name="sysconfig">
  <service version="1" type="service" name="system/timezone">
    <instance enabled="true" name="default">
      <property_group type="application" name="timezone">
        <propval type="astring" name="localtime" value="Europe/Berlin"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/environment">
    <instance enabled="true" name="init">
      <property_group type="application" name="environment">
        <propval type="astring" name="LANG" value="C"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/keymap">
    <instance enabled="true" name="default">
      <property_group type="system" name="keymap">
        <propval type="astring" name="layout" value="US-English"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/console-login">
    <instance enabled="true" name="default">
      <property_group type="application" name="ttymon">
        <propval type="astring" name="terminal_type" value="vt100"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="network/physical">
    <instance enabled="true" name="default">
      <property_group type="application" name="netcfg">
        <propval type="astring" name="active_ncp" value="DefaultFixed"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/name-service/switch">
    <property_group type="application" name="config">
      <propval type="astring" name="default" value="files"/>
      <propval type="astring" name="host" value="files dns"/>
      <propval type="astring" name="printer" value="user files"/>
    </property_group>
    <instance enabled="true" name="default"/>
  </service>
  <service version="1" type="service" name="system/name-service/cache">
    <instance enabled="true" name="default"/>
  </service>
  <service version="1" type="service" name="network/dns/client">
    <property_group type="application" name="config">
      <property type="net_address" name="nameserver">
        <net_address_list>
          <value_node value="192.168.2.1"/>
        </net_address_list>
      </property>
    </property_group>
    <instance enabled="true" name="default"/>
  </service>
</service_bundle>
::::::::::::::
mars.xml
::::::::::::::
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="profile" name="sysconfig">
  <service version="1" type="service" name="network/install">
    <instance enabled="true" name="default">
      <property_group type="application" name="install_ipv4_interface">
        <propval type="astring" name="address_type" value="static"/>
        <propval type="net_address_v4" name="static_address" 
                 value="192.168.2.100/24"/>
        <propval type="astring" name="name" value="net0/v4"/>
        <propval type="net_address_v4" name="default_route" 
                 value="192.168.2.1"/>
      </property_group>
      <property_group type="application" name="install_ipv6_interface">
        <propval type="astring" name="stateful" value="yes"/>
        <propval type="astring" name="stateless" value="yes"/>
        <propval type="astring" name="address_type" value="addrconf"/>
        <propval type="astring" name="name" value="net0/v6"/>
      </property_group>
    </instance>
  </service>
  <service version="1" type="service" name="system/identity">
    <instance enabled="true" name="node">
      <property_group type="application" name="config">
        <propval type="astring" name="nodename" value="mars"/>
      </property_group>
    </instance>
  </service>
</service_bundle>
::::::::::::::
user.xml
::::::::::::::
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type="profile" name="sysconfig">
  <service version="1" type="service" name="system/config-user">
    <instance enabled="true" name="default">
      <property_group type="application" name="root_account">
        <propval type="astring" name="login" value="root"/>
        <propval type="astring" name="password" 
                 value="noIWillNotTellYouMyPasswordNotEvenEncrypted"/>
        <propval type="astring" name="type" value="role"/>
      </property_group>
      <property_group type="application" name="user_account">
        <propval type="astring" name="login" value="stefan"/>
        <propval type="astring" name="password" 
                 value="noIWillNotTellYouMyPasswordNotEvenEncrypted"/>
        <propval type="astring" name="type" value="normal"/>
        <propval type="astring" name="description" value="Stefan Hinker"/>
        <propval type="count" name="uid" value="12345"/>
        <propval type="count" name="gid" value="10"/>
        <propval type="astring" name="shell" value="/usr/bin/bash"/>
        <propval type="astring" name="roles" value="root"/>
        <propval type="astring" name="profiles" value="System Administrator"/>
        <propval type="astring" name="sudoers" value="ALL=(ALL) ALL"/>
      </property_group>
    </instance>
  </service>
</service_bundle>
root@ai-server:~# installadm create-profile -n x86-fcs -f general.xml
root@ai-server:~# installadm create-profile -n x86-fcs -f user.xml
root@ai-server:~# installadm create-profile -n x86-fcs -f mars.xml \
-c ipv4=192.168.2.100
root@ai-server:~# installadm list -p

Service Name  Profile     
------------  -------     
x86-fcs       general.xml
              mars.xml
              user.xml

root@ai-server:~# installadm list -n x86-fcs -p

Profile      Criteria 
-------      -------- 
general.xml  None
mars.xml     ipv4 = 192.168.2.100
user.xml     None
In "general.xml" sind fuer viele Clients gueltige Einstellungen wie bspw. DNS-Server festgelegt. In "user.xml" die User, die einzutragen sind. Beide Profile gelten jedoch erst einmal ohne weitere Kriterien, also fuer alle Clients. Anders mars.xml, in dem die IP-Adresse fuer den Client mars festgelegt wird. Dieses Profil gilt nur fuer Install-Clients, die vom DHCP-Server die passende IP-Adresse bekommen haben. Damit das klappt, nun der letzte Schritt:
root@ai-server:~# installadm create-client -e 08:00:27:AA:3D:B1 -n x86-fcs
root@ai-server:~# vi /etc/inet/dhcpd4.conf
root@ai-server:~# tail -5 /etc/inet/dhcpd4.conf
host 080027AA3DB1 {
  hardware ethernet 08:00:27:AA:3D:B1;
  fixed-address 192.168.2.100;
  filename "01080027AA3DB1";
}

Damit ist der Client nun auch fertig vorbereitet. Damit der DHCP-Server keine Dummheiten macht, habe ich den Host-Eintrag in /etc/inet/dhcpd4.conf noch um die IP-Adresse fuer diesen Client ergaenzt. Damit bekommt dann nur dieser Install-Client diese Adresse, und nicht etwa ein unschuldiger anderer Rechner in diesem Netz...

Bemerkung: Das obige Beispiel zeigt die Konfiguration fuer ein x86-System.  Bei einem SPARC-System sieht die DHCP-Konfiguration etwas anders aus.  Hier wieder ein Beispiel mit kleinen manuellen Aenderungen, damit der DHCP-Server mir keine Sorgen macht ;-)

subnet 192.168.2.0 netmask 255.255.255.0 {
  range 192.168.2.200 192.168.2.201
  option broadcast-address 192.168.2.255;
  option routers 192.168.2.1;
  next-server 192.168.2.13;
}

class "SPARC" {
  match if not (substring(option vendor-class-identifier, 0, 9) = "PXEClient");
  filename "http://192.168.2.13:5555/cgi-bin/wanboot-cgi";
}

host sparcy {
   hardware ethernet 00:14:4f:fb:52:3c ;
   fixed-address 192.168.2.202 ;
}

 

Da die Installation aber natuerlich wirklich "Hands Off" ablaufen soll, muss nun noch das Boot-Menue fuer den Client leicht modifiziert werden.  Es steht in /etc/netboot.  Dort wird fuer jeden Client ein eigenes, ueber die MAC-Adresse identifiertes menu.lst angelegt.  Das Template dafuer steht in einem Verzeichnis, das den Namen des Install-Service traegt, in meinem Fall als in /etc/netboot/x86-fcs.  Wer das Boot-Menue also nicht fuer jeden Client einzeln aendern moechte, kann auch das Template selbst anfassen.
root@ai-server:~# cd /etc/netboot
root@ai-server:~# cp menu.lst.01080027AA3DB1 menu.lst.01080027AA3DB1.org
root@ai-server:~# vi menu.lst.01080027AA3DB1
root@ai-server:~# diff menu.lst.01080027AA3DB1 menu.lst.01080027AA3DB1.org
1,2c1,2
< default=1
< timeout=10
---
> default=0
> timeout=30
root@ai-server:~# more menu.lst.01080027AA3DB1
default=1
timeout=10
min_mem64=0

title Oracle Solaris 11 11/11 Text Installer and command line
	kernel$ /x86-fcs/platform/i86pc/kernel/$ISADIR/unix -B install_media=htt
p://$serverIP:5555//export/install/fcs,install_service=x86-fcs,install_svc_addre
ss=$serverIP:5555
	module$ /x86-fcs/platform/i86pc/$ISADIR/boot_archive

title Oracle Solaris 11 11/11 Automated Install
	kernel$ /x86-fcs/platform/i86pc/kernel/$ISADIR/unix -B install=true,inst
all_media=http://$serverIP:5555//export/install/fcs,install_service=x86-fcs,inst
all_svc_address=$serverIP:5555,livemode=text
	module$ /x86-fcs/platform/i86pc/$ISADIR/boot_archive

Einer Installation (mittels PXE-Boot) steht damit nichts mehr im Wege. Fuer meine Demo-Zwecke ist das natuerlich ein Client aus der Virtualbox. Bei einem SPARC-System wuerde man statt dessen das bekannte "boot net:dhcp - install" am OK Prompt eingeben und dann genuesslich der Installation zusehen.

Und auch, wenn dieser Blogeintrag ein wenig laenger ist - so schwer ist das nun auch wieder nicht ;-)

Donnerstag Mrz 01, 2012

Die Solaris Fingerprint Database - Neuauflage in Solaris 11

Einige erinnern sich sicher an die Solaris Fingerprint Database. Sie war eine hervoragende Moeglichkeit, um die Integritaet eines Solaris Binaries zu pruefen.  Leider wurde sie zusammen mit dem Rest von Sunsolve abgeschaltet und im Nachfolger "My Oracle Support" nicht wieder in Betrieb genommen.  Die gute Nachricht nun ist:   In Solaris 11 gibt es sie wieder, und besser als jemals zuvor!

Um die alte Datenbank zu benutzen, musste man den MD5 Fingerprint eines Binaries auf der Webseite der Datenbank eingeben und pruefen.  Es gab zwar ein Tool fuer die Massenpruefung, aber umstaendlich war das allemal.

In Solaris 11 ist alles das in den Paket-Manifesten von IPS integriert.  Diese Manifeste enthalten u.A. die SHA1 and ggf. ELF Hashes aller Binaries und Scripte, die in dem jeweiligen Paket enthalten sind.  Damit ist eine manuelle Pruefung bereits moeglich.  IPS geht aber weiter und stellt auch eine Methode zur Verfuegung, mit der die Integritaet der gesamten Installation geprueft werden kann.  Hier einige Beispiele, was damit moeglich ist:

  • Was ist der SHA1 Fingerprint eines Binaries?
    digest -a sha1 /usr/bin/vim
  • Aus welchem Paket stammt es?
    pkg search -f $(digest -a sha1 /usr/bin/vim)
    (Die Option "-f" braucht man, damit das Paket auch dann gefunden wird, wenn das Binary aus einer aelteren Version stammt.)
  • Gibt es noch mehr Details?
    pkg info -r $(pkg search -f -H -o pkg.fmri $(digest -a sha1 /usr/bin/vim))

Falls das alles funktioniert hat, ist das die Bestaetigung, dass das Binary, in diesem Fall "vim" gueltig ist und aus dem Paket "vim-core" stammt.

Die Daten fuer diese Pruefungen liefert der im System konfigurierte Publisher.  Welcher das ist, kann mit dem Kommando "pkg publisher" nachgesehen werden.  Eine typische Ausgabe waere dabei:

PUBLISHER TYPE STATUS URI
solaris origin online https://pkg.oracle.com/solaris/support/

Natuerlich kann man einen einzelnen SHA1 Digest auch direkt auf der Webseite des Publishers nachschlagen.  Das geht direkt im Browser auf der URL des Publishers.  Ganz aehnlich hatte das auch mit der alten Fingerprint Database funktioniert.  IPS kann allerdings noch sehr viel mehr als das:

Mit dem Kommando "pkg verify" kann man jedes einzelne installierte Paket gegen das entsprechende Repository pruefen lassen.  Je nachdem, um was fuer Dateien es sich handelt (Binary, Script, Konfigurationsdatei), werden dabei unterschiedliche Verfahren angewandt:

  • Binaries werden mittels eines ELF Hashes geprueft.
  • Scripts dagegen mit ihrem SHA1 Hash.
  • Konfigurationsdateien koennen, ihrem Wesen entsprechend, nicht geprueft werden.  Sie sind ja gerade dazu gedacht, von einem Administrator veraendert zu werden.
  • Darueber hinaus werden auch Besitzer, Gruppe und Rechte aller Dateien geprueft.

Die Ausgabe von "pkg verify" wird jede Abweichung von den Vorgaben aus dem Paket-Manifest melden.  Damit werden z.B. veraenderte Scripte oder Binaries oder geaenderte Ausfuehrungsrechte aufgedeckt.  Diese Pruefung kann man gegen die gesamte Installation, aber auch fuer ein einzelnes Paket durchfuehren lassen.  Je nach Ergebnis kann man dann entscheiden, wie weiter verfahren werden soll:

  • Nichts tun
  • Abweichungen von Hand reparieren, bspw. weil man weiss, wie sie zustande gekommen sind.
  • Die Abweichungen automatisch durch das Paketsystem reparieren lassen.

Diese letzte Moeglichkeit ist in diesem Zusammenhang das eigentliche "Power Feature" von IPS.  Da das Paketsystem genau weiss, wie die Dinge sein sollten kann man es auffordern, diesen definierten Zustand wieder herzustellen.  Im Vergleich zu den Moeglichkeiten von BART und der Fingerprint Database ein enormer Fortschritt.

Insgesamt kann IPS damit eine bestehende Installation mit den Originaldaten des verwendeten Repositories vergleichen.  Die Integritaet des Repositories selbst muss jedoch zusaetzlich gesichert werden.  Beim "Master Repository" wird dies durch Oracle sichergestellt.  Die Pakete selbst, genauso wie die Binaries, sind kryptographisch signiert.  Bei einem eigenen, lokalen Repository sollte man das ISO-Image mittels der bereitgestellten SHA1/MD5 Fingerprints pruefen, bevor man das Repository aufbaut.  Fuer den Schutz desselben ist man dann selbst zustaendig - BART hilft hier ggf. weiter.

Zum Schluss noch ein kleines Beispiel fuer all die erwaehnten Dinge:

 root@benjaminchen:/usr/bin# ls -l vim

-r-xr-xr-x   1 root     bin      2225532 Feb 23 14:31 vim
root@benjaminchen:/usr/bin# digest -a sha1 vim
f2495fa19fcc4b8a403e0bd4fef809d031296c68
root@benjaminchen:/usr/bin# pkg search -f f2495fa19fcc4b8a403e0bd4fef809d031296c68
INDEX                                    ACTION VALUE       PACKAGE
f2495fa19fcc4b8a403e0bd4fef809d031296c68 file   usr/bin/vim pkg:/editor/vim/vim-core@7.3.254-0.175.0.0.0.2.537
root@benjaminchen:/usr/bin# pkg verify -v vim-core
PACKAGE                                                                                                    STATUS
pkg://solaris/editor/vim/vim-core                                           OK
root@benjaminchen:/usr/bin# cp vim vim.org
root@benjaminchen:/usr/bin# cp ls vim
root@benjaminchen:/usr/bin# pkg verify -v vim-core
PACKAGE                                                                 STATUS 
pkg://solaris/editor/vim/vim-core                                        ERROR
    file: usr/bin/vim
        Elfhash: 20acbb006d5331660dc026483533c29137318673 should be f301bd9d798c4bdd8edebb001fbf4317380383a9
root@benjaminchen:/usr/bin# pkg fix --accept vim-core
Verifying: pkg://solaris/editor/vim/vim-core                    ERROR          
    file: usr/bin/vim
        Elfhash: 20acbb006d5331660dc026483533c29137318673 should be f301bd9d798c4bdd8edebb001fbf4317380383a9
Created ZFS snapshot: 2012-02-29-09:27:49
Repairing:
 pkg://solaris/editor/vim/vim-core                 
                                                                             
DOWNLOAD                                  PKGS       FILES    XFER (MB)
Completed                                  1/1         1/1      0.8/0.8
PHASE                                        ACTIONS
Update Phase                                     1/1 
PHASE                                          ITEMS
Image State Update Phase                         2/2 
 root@benjaminchen:/usr/bin# ls -l vim vim.org
-r-xr-xr-x   1 root     bin      2225532 Feb 29 10:28 vim
-r-xr-xr-x   1 root     root     2225532 Feb 29 10:27 vim.org
root@benjaminchen:/usr/bin# digest -a sha1 vim
f2495fa19fcc4b8a403e0bd4fef809d031296c68

Montag Feb 20, 2012

Solaris 11 fuer EAL4+ Zertifizierung eingereicht

Solaris 11 wurde offiziell zur Zertifizierung nach dem Canadian Common Criteria Scheme im Level EAL4+ eingereicht. Geprueft wird auf das Protection Profile "Operating System Protection Profile (OS PP)" sowie die Erweiterungen

  • Advanced Management (AM)
  • Extended Identification and Authentication (EIA)
  • Labeled Security (LS)
  • Virtualization (VIRT)

EAL4+ ist die hoechste typischerweise fuer kommerzielle Software erreichbare Ebene und gleichzeitig die hoechste Ebene, die von insg. 26 Laendern, darunter Deutschland, gegenseitig anerkannt wird. Wann die Zertifizierung abgeschlossen sein wird, liegt in den Haenden der Zertifizierungsstelle.

Den aktuellen Stand dieser Zertifizierung (und auch weiterer zertifizierter Oracle Software) findet man auf der Seite Oracle Security Evaluations.

Mittwoch Dez 21, 2011

Welche IO-Karten passen in welchen Server?

Wer schon immer mal wissen wollte, welche IO-Karten es fuer welchen Server gibt, wird jetzt auf wikis.oracle.com  fuendig.  Hier wird eine vollstaendige Liste aller IO-Optionen gepflegt, einschliesslich der Angabe, wie viele dieser Karten jeweils supported werden.  Aufgefuehrt sind alle lieferbaren Server.  Fuer alle, auch die aelteren Modelle, findet man diese Informationen im System Handbook.

(Fuer die alten Hasen:  Dies ist der Nachfolger fuer das alte "Cross Platform IO Wiki", das es nun nicht mehr gibt.)

Montag Dez 05, 2011

Hard Partitioning!

Gute Nachrichten fuer alle Nutzer von Oracle VM Server fuer SPARC (aka LDoms) mit Oracle Software:  Seit 2. Dezember gelten LDoms als "Hard Partitioning".  Damit ist es moeglich, nur die tatsaechlich benoetigten Kerne eines Servers fuer Oracle-Software zu lizenzieren.  Auskunft ueber die Details bekommt man bei License Management Services.

Freitag Nov 11, 2011

Einstieg in Solaris 11

Fuer alle die, die jetzt mit Solaris 11 anfangen wollen, gibt es eine gute Zusammenfassung der Neuerungen und Aenderungen gegenueber Solaris 10.  Zu finden als Support Dokument 1313405.1.

Auch in OTN gibt es ein ganzes Portal zu Solaris 11.  Besonders hervorheben moechte ich hier die umfangreiche "How-To" Sammlung. Und nicht zuletzt gibt es natuerlich die "ganz normalen" Admin Guides.

Montag Nov 07, 2011

Oracle TDE und Hardwarebeschleunigte Verschluesselung

Endlich gibt es sie, die kurze, knappe Beschreibung, mit welcher Kombination aus Hardware und Software man mit Oracle TDE in den Genuss von Hardwarebeschleunigung fuer die Verschluesselung  kommt.  Hier die Zusammenfassung der Zusammenfassung ;-)

  • SPARC T4 oder Intel CPU mit AES-NI
  • Solaris 11 oder Linux (ein Patch fuer Solaris 10 ist in Arbeit)
  • Oracle 11.2.0.3
    • Unter Linux geht es auch mit 11.2.0.2 und Patch 10296641

Die Langfassung der Zusammenfassung gibt es in MOS-Note 1365021.1

Frohes Verschluesseln!

Freitag Okt 07, 2011

Solaris 11 Launch

Schon lange wird geraetselt und gefragt, wann Solaris 11 angekuendigt wird.  Jetzt ist es soweit: Am

9. November 2011
um 19:00 Uhr Deutscher Zeit

wird es einen Webcast zur Ankuendigung von Solaris 11 geben. 

Herzliche Einladung zur Teilnahme!

(Neuigkeiten von der OpenWorld, insb. alles um T4, werde ich hoffentlich auch bald hier zusammenfassen...)

Donnerstag Sep 08, 2011

Core Factor fuer T4 veroeffentlicht

Oracle hat eine neue Version der Processor Core Factor Table veroeffentlicht, in der fuer die (noch nicht angekuendigte) T4 CPU ein Core Faktor von 0.5 angegeben wird.  Damit bleiben die Lizenzkosten pro Sockel im Vergleich zum Vorgaenger T3 gleich.  T4 spielt offenbar in der gleichen Liga wie SPARC64 VII+ und alle aktuellen x86 CPUs.  Fuer Performance-Angaben muessen wir bis zur offiziellen Ankuendigung warten.  Aber dieser Core Faktor (der allerdings keineswegs eine Bewertung der CPU-Performance ist!) scheint zu bestaetigen, was die wenigen anderen verfuegbaren Hinweise bereits andeuten:  T4 wird liefern, was Oracle versprochen hat.

Montag Aug 01, 2011

Oracle Solaris Studio 12.3 Beta Program

Das Beta-Programm fuer Oracle Solaris Studio 12.3 ist jetzt verfuegbar.  Offen fuer jeden, kann man hier den neuesten Compiler testen.  Man darf in vielen Faellen einen Performance-Vorsprung gegenueber aelteren Versionen und auch gegenueber GCC erwarten.

Viel Spass beim Testen!

Donnerstag Jul 28, 2011

Sag noch einer wir haetten keinen Humor

Nur fuer den Fall dass wir alle schon vergessen haben, dass Unix-Menschen immer auch viel Humor haben:

OTN ID 1172413.1: How to make a grilled cheese sandwich

Dienstag Jul 05, 2011

Ein paar Gedanken zur aktuellen SPARC Roadmap

Inzwischen duerfte die aktuelle Roadmap fuer SPARC Server ja allgemein bekannt sein.  Roadmaps sind, wie das Papier, geduldige Dinge, und wir alle wissen wie sich die Zeiten im Lauf der Dinge verschieben... Daher stellt sich die Frage, was diese Roadmap wert ist.

Als Oracle Sun gekauft hat, gab es einige grosse Versprechen bzgl. verstaerktem Engagement fuer SPARC und Solaris. Die ersten dieser Versprechen wurden ja auch bereits eingeloest:

  • Die SPARC T3 CPU hat den Durchsatz pro Sockel verdoppelt.
  • Mit Solaris 11 Express gibt es eine Vorschau auf das naechste Solaris - einschl. Support!
  • Die M-Serie erhielt erneut einen Performance-Schub von bis zu 20%

Alle diese Dinge sind in der aktuellen Roadmap mit huebschen roten Haeckchen markiert. Und all das war bereits mehr oder weniger fertig, als Sun gekauft wurde. Auch wenn T3 durch das verstaerkte Investment von Oracle deutlich schneller auf den Markt kam.  Die wirkliche Bewaehrungsprobe wird jedoch das naechste Versprechen der Roadmap sein. Dort heisst es: "3x Single Strand" fuer eine T-Serie CPU.  Inzwischen wissen wir ja alle, dass diese CPU vermutlich "T4" heissen wird.  Rick Hetherington erzaehlte uns vor einer Weile, dass der Chip 8 Kerne haben wird und single thread Lasten bis zu 5 mal schneller ausfuehren wird als T3.  Das waehre dann noch schneller als die versprochenen 3x der Roadmap.  Die einzige Frage die bleibt ist: Wird Oracle liefern?

Natuerlich kann das keiner sagen, bevor die CPU und Systeme nicht angekuendigt sind. Die Chancen dafuer stehen jedoch gut.  Warum sonst sollte Oracle seine Kunden einladen, an einem T4 Beta Programm teilzunehmen?

Zurueck zur ersten Frage:  Was ist diese Roadmap wert?  Nun, betrachtet man das bisher versprochene und gelieferte als Grundlage, dann steht der Roadmap-Pfeil auf einem festen Fundament. Oracle hat geliefert, und das sogar puenktlich. Das ist mehr, als manch anderer von sich behaupten kann.

Ein kleiner Disclaimer, damit alle zufrieden sind und bleiben: Dies ist meine persoenliche Meinung und keinesfalls die von Oracle.

Donnerstag Jun 09, 2011

OVM Server for SPARC 2.1 ist da!

Die neueste Version von OVM Server for SPARC aka LDoms ist da!  Hier die Presse-Meldung...

Was, schon wieder eine neue Version?  Na ja, das am meisten vermisste Feature in den bisherigen Versionen wurde fertig, und da war ein Release einfach unumgänglich ;-)  In der neuen Version 2.1 wird aus "Warm Migration" endlich "Live Migration".  Was es sonst noch an Neuerungen gibt, steht in "What's New".  Weitere Details zur Live Migration werden sicherlich auch bald bekannt und ggf. auch hier erwähnt werden.  Den Download gibt es bei eDelivery, die Dokumentation wie immer auf OTN.

Mittwoch Jun 08, 2011

Platten richtig und sicher löschen

Eigentlich ist sowohl die Frage als auch die Antwort schon alt und lange bekannt.  Aber da solche Dinge auch wieder in Vergessenheit geraten und deswegen immer wieder gefragt werden, hier eine Auffrischung:

Eine Platte so zu löschen, dass die Daten auch mit aufwendigen Methoden nicht wieder herzustellen sind, ist unter Solaris ganz einfach.  Das Kommando format (1M) kennt als Unterkommando "analyze/purge".  Damit wird der gewählte Plattenbereich (idR. natürlich s2) insgesamt vier mal mit unterschiedlichen Bitmustern überschrieben.  Das dauert je nach Plattengröße zwar so seine Zeit, ist dafür aber so sicher, dass es den Vorschriften des amerikanischen Verteidigungsministeriums zum sicheren Löschen entspricht. 

Details finden sich hier:

Wichtig zu wissen ist, dass diese Methode u.A. nicht für SSDs aller Art geeignet ist!  Und wer das Risiko, daß seine Daten auf der Platte mitsamt der Platte abhanden kommen könnten von vorneherein ausschliessen möchte, darf natürlich auch verschlüsseln.  Das geht z.B. mit ZFS oder Oracle TDE ganz einfach :-)

About

Neuigkeiten, Tipps und Wissenswertes rund um SPARC, CMT, Performance und ihre Analyse sowie Erfahrungen mit Solaris auf dem Server und dem Laptop.

This is a bilingual blog (most of the time). Please select your prefered language:
.
The views expressed on this blog are my own and do not necessarily reflect the views of Oracle.

Search

Categories
Archives
« April 2014
MoDiMiDoFrSaSo
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
    
       
Heute