Sysadmin > SolarisAtStrato

Solaris 10 auf einem Strato root-Server

Wir erfüllen uns den Traum eines eigenen root-Servers unter Solaris.

ALERT! Solaris ist auf Strato root-Servern nicht supportet!

Daher gibt es keinerlei Gewähr für Funktion oder Hilfe bei Datenverlust; wenn etwas schief geht, seid ihr auf euch allein gestellt!

Update Feb 2013:

Die Anleitung versucht mit Solaris 10 1/13 und Strato Root Server Linux Level 2 (v1209.1.38) zu verifizieren. Mit Solaris 10 08/11 auf Strato Root Server Linux Level 2 (v1209.1.38) ging es nach wie vor.

Inhaltsverzeichnis

Vorüberlegungen

Ich habe zuerst diverse Hoster verglichen, wobei mir unter den gewünschten Randbedingungen Strato am günstigsten erschien.

Wichtig war mir (Stand Sep 2011):
  • Serielle Konsole
  • Zuverlässiger Provider
  • Halbwegs günstiger Preis
  • mindestens vier Cores
  • mindestens 4 GB RAM
  • zwei Festplatten (für ZFS-RAID)
  • Option auf 1GBit Bandbreite
  • Option auf mehrere IPs
  • Solaris mit ZFS, Dtrace, Zones

Stand Feb 2011:
  • im Wesentlichen sind meine Anforderungen geblieben, allerdings bekommt man inzwischen für weniger Geld mehr Cores und RAM

wip Evtl. habe ich mit der ein oder anderen Sache mehr als nötig gemacht, aber in der Summe hat es geklappt. Ich bin gerade noch dabei Teilschritte auszuprobieren, was von meinen Schritten wirklich nötig war und was warum nicht ging.

Überblick

  1. Wichtig; Alle wichtigen Netzwerkparameter vorher unter Linux aufschreiben (IP, Mask, Gateway, DNS, hostname, domain, ntp), gerade weil die dhcp-Konfiguration von Strato die meisten OSe nicht verstehen (classless static routes rfc3442)
  2. Ich habe in VirtualBox ein Solaris 10 08/11 aufgesetzt und für die serielle Konsole konfiguriert und mit sys-unconfig unkonfiguriert.
  3. Parallel dazu habe ich dem Linux ein multiboot mit miniroot konfiguriert für die serielle Konsole untergeschoben und in das Linux-Grub eingebunden.
  4. Dann habe ich das VirtualBox-Image via dd auf die zweite Platte des Strato-Linux-Servers geschoben (dabei das Linux-Software-RAID auf einer Platte zerstört).
  5. Dann in den failsafe Modus von Solaris (Linux-Platte) gebootet, ZFS der zweiten Platte nach /a gemountet und die serielle Konfiguration, die mir sys-unconfig zurückgesetzt hat wieder geradegiegen
  6. Dann via Linux-Grub in den Solaris-Grub der zweiten Platte booten (kaskadiete GRUBs)
  7. Jetzt wusste ich nicht recht wie ich nativ in das Solaris-Grub boote und ZFS auf beide Platten bekomme.
  8. danach war mein Solaris im Prinzip fertig.
  9. Jetzt musste ich nur noch die etwas vertrakte Strato-Netzkonfig hingekommen.

Die Schritte im Einzelnen am Beispiel eines Strato root-Server HighQ-Server SR-7 (v11.2)

alert Bestehende Netzparameter notieren

Alle wichtigen Netzwerkparameter vorher unter Linux aufschreiben, gerade weil die dhcp-Konfiguration von Strato die meisten OSe nicht verstehen (classless static routes rfc3442)

  • IP-Adress
  • Netmask (vermutlich 255.255.255.255)
  • Gateway (vermutlich IP ausserhalb des lokalen Netzes)
  • DNS-Server
  • Hostname
  • Domain
  • NTP-Server

Solaris 10 08/11 in VirtualBox installieren

Hier habe ich mehr oder weniger die Standardwerte von VirtualBox übernommen

  • Solaris 10 64bit
  • 2Gig Memory
  • 16 Gig dynamische VirtualBox disk (schadet nichts, da wir das image komprimieren)

  • normale Installation von Solaris 10

miniroot extrahieren und anpassen

Von der Installations-DVD x86.miniroot kopieren

cp /cdrom/sol_10_113_x86/boot/x86.miniroot /tmp
cp /cdrom/sol_10_113_x86/boot/multiboot /tmp

Quelle: http://newsgroups.derkeiler.com/Archive/De/de.comp.os.unix.misc/2007-09/msg00006.html

gzip -dc x86.miniroot > /tmp/x86.miniroot.unpacked
lofiadm -a /tmp/x86.miniroot.unpacked
mount /dev/lofi/1 /mnt 

/mnt/boot/solaris/bootenv.rc anpassen
  setprop console ttya
  setprop ttya-mode 57600,8,n,1,-

umount /mnt
lofiadm -d /dev/lofi/1
gzip -c /tmp/x86.miniroot.unpacked > x86.miniroot

x86.miniroot und multiboot auf einen Rechner packen, der später von dem Strato root-Server via ssh erreichbar ist.

serielle Konsole konfigurieren

file /boot/solaris/bootenv.rc

[...]
setprop ttya-mode 57600,8,n,1,-
setprop console 'ttya'

file /rpool/boot/grub/menu.lst

default 0
timeout 10
serial --unit=0 --speed=57600
terminal serial
# splashimage /boot/grub/splash.xpm.gz
[...]
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Oracle Solaris 10 8/11 s10x_u10wos_17b X86
findroot (pool_rpool,0,a)
kernel$ /platform/i86pc/multiboot -B $ZFS-BOOTFS,console=ttya,ttya-mode="57600,8,n,1,-"
module /platform/i86pc/boot_archive
#---------------------END BOOTADM--------------------
#---------- ADDED BY BOOTADM - DO NOT EDIT ----------
title Solaris failsafe
findroot (pool_rpool,0,a)
kernel /boot/multiboot -s -B console=ttya,ttya-mode="57600,8,n,1,-"
module /boot/amd64/x86.miniroot-safe
#---------------------END BOOTADM--------------------

file /etc/ttydefs

In dieser Datei für console 57600 statt 9600 einstellen.

[...]
console:57600 hupcl opost onlcr:57600::console
[...]
contty:57600 hupcl opost onlcr:57600 sane::contty1
[...]

Danach alles ins boot-Archiv schreiben
bootadm update-archive
und das System für eine neue Hardware vorbereiten
touch /reconfigure

evtl . noch ???
sys-unconfig

Evtl. kann man hier auch die /etc/path_to_inst leer machen, das müsste später den Zwischenschritt mit dem Solaris failsafe aus Linux heraus ersparen.

echo "" > /etc/path_to_inst

dump des VirtualBox-Images ziehen

Maschine stoppen und mit VBoxManage clonehd 8c4843da-2ced-4702-8cf0-d6599ce2d8fa ~/sol10.dd --format RAW ein disk image ziehen. Vorher mit VBoxManage list hdds schauen welche UUID (der lange hex-code) man braucht. Dieses Image mit gzip komprimieren und auf einen Server ins Netz schieben, der von Strato aus erreichbar ist.

Solaris failsafe aus Linux heraus booten

x86.miniroot und multiboot zu Gast bei Linux

x86.miniroot und multiboot auf das Linux-System bringen (meistens /boot). In meinem Fall habe ich den Strato-Server mit Debian 64bit installiert.

GRUB-Eintrag anlegen in /boot/grub/menu.lst anlegen (wenn beides in /boot/ Platz hat).
title Solaris failsafe
root (hd0,<partition>)
kernel /multiboot kernel/unix -B console=ttya
module /x86.miniroot

Jetzt kann man in Grub in Solaris failsafe booten und kann ggf. auch erkannte ZFS-Partitionen nach /a mounten.

mechanics Genereller Tip: Machmal scheint die serielle Konsole bei Strato zu "klemmen", d.h. wenn ich die Konsole offen lasse, sehe ich nach einem Reboot keine serielle Ausgabe. Wenn ich die Verbindung zu seriellen Konsole unterbreche und neu aufbaue, sehe seriellen Output.

Unter Linux GRUB um einen Solaris-Eintrag erweitern

title Solaris
   rootnoverify (hd1,0)
   makeactive
   chainloader +1
im grub bzw menu.lst unter /boot/grub.

Dieser Eintrag geht erst, wenn wir das Solaris-Image auf die zweite Platte kopiert haben.

Solaris-Image auf die zweite Platte kopieren

In diesem Fall läuft auf dem Strato root-Server Debian mit einem Software-Mirror auf zwei Platten. Man kann nun die zweite Platte überschreiben und Debian weiter normal booten (dann halt ohne Mirror).

Aus dem RecoveryManager > Rescue 64Bit 2.6Kernel kopiert man den Solaris-Image auf die zweite Platte.

ssh user@164.44.11.12 cat "<" sol10.dd.gz | gunzip | dd of=/dev/sdb

Serielle Konfig geradebiegen bzw. bestaetigen

Solaris failsafe unter Linux booten und zpool nach /a mounten.
SunOS Release 5.10 Version Generic_147148-26 32-bit
Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
Configuring devices.
Searching for installed OS instances...

ROOT/s10x_u11wos_24a was found on rpool.
Do you wish to have it mounted read-write on /a? [y,n,?] y

Wie unter VirtualBox die seriellen Parameter kontrolliert und die Dateien nochmal mit touch auf das aktuelle Datum setzen.

evtl. muss man sich erstmal die TERM Variable setzen
# TERM=vt100
# export TERM

# vi /a/boot/solaris/bootenv.rc
# vi /a/rpool/boot/grub/menu.lst
# vi /a/etc/ttydefs

touch /a/reconfigure
bootadm update-archive -R /a
installgrub /a/boot/grub/stage1 /a/boot/grub/stage2 /dev/rdsk/c1d0s0

Das erste Mal Solaris richtig booten

und die Systemkonfig durcharbeiten mit der Besonderheit, dass mein Netz an e1000g2 angeschlossen ist und erstmal statisch konfiguriert werden sollte.

Die zweite Platte in den ZFS-Mirror aufnehmen

bekomme ich nicht mehr zusammen, weil ich soviel ausprobiert und wieder verworfen habe. ZFS erkennt nur die Plattengroesse, die im Label steht, daher war meine Platte 16G (so groß war das VirtualBox-Image) groß. Ich habe die erste Platte vom Solaris aus mit installgrub versehen und eine Partition dem zpool zugefügt. Ab da konnte ich nativ von der ersten Platte im Solaris-Grub booten, allerdings war die Platte immer noch 16G groß. Dann habe ich die zweite Platte aus dem zpool rausgenommen, damit war meine Platte so groß wie die physische Platte. Ich hatte dann allerdings Mühe die zweite Platte wieder auf die volle Große zu bringen, so dass Solaris nicht denkt sie sei 16G groß. Und ich wusste nicht so recht wie ich das ZFS auf der zweite Platte clean mache, damit sich Solaris nicht weigert die zweite Platte in voller Größe dem zpool hinzuzufügen oder ein schon vorhandenen ZFS nicht zu überschreiben.

Merker!
fdisk /dev/rdsk/c7d1s2  (confirm that you want a 100% Solaris partition)
prtvtoc /dev/rdsk/c7d0s2 | fmthard -s - /dev/rdsk/c7d1s2
or use format

format > select disk > partition > root, wm,3c,maxc,label
format 
zpool attach [-f] rpool c7d0s0 c7d1s0 (maybe use "-f" flag)
zpool status
installgrub /boot/grub/stage1 /boot/grub/stage2 /dev/rdsk/c7d1s0

sicherheitshalber
bootadm update-archive
touch /reconfigure

vergleiche auch http://serverfault.com/questions/365027/solaris-10-zfs-boot-how-to-add-mirror-of-boot-drive

smile

Nacharbeiten

Spezielle Adressvergabe von Strato via DHCP mit der Subnetzmaske 255.255.255.255 (classless static routes rfc3442)

Hier habe ich /etc/inet/netmasks auf die Maske 255.255.255.255 korrigiert (geht unter sysconfig nicht, daher hatte ich nur 255.255.255.0 eingestellt). Und erstmal unsauber, aber funktionierend die Routen reingeschrieben: cat /etc/rc2.d/S75staticroutes
#!/bin/sh
route add -host 85.214.192.1 85.214.240.123 -interface
route add default 85.214.192.1

Fehler

Fehler nach einem Kernel-Update

Nachdem das System lief hatte ich nochmal das Problem, daß nach einem Update (vermutl. 147441-02) ich folgende Fehlermeldung bekam:

SunOS Release 5.10 Version Generic_147441-02 64-bit
Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.
NOTICE: Can not read the pool label from '/pci@0,0/pci-ide@12/ide@0/cmdk@0,0:a'
NOTICE: spa_import_rootpool: error 5
Cannot mount root on /pci@0,0/pci-ide@12/ide@0/cmdk@0,0:a fstype zfs

panic[cpu0]/thread=fffffffffbc283a0: vfs_mountroot: cannot mount root

fffffffffbc6ad70 genunix:vfs_mountroot+2a2 ()
fffffffffbc6adb0 genunix:main+11d ()
fffffffffbc6adc0 unix:_start+9d ()

skipping system dump - no dump device configured
rebooting...

Und ich das auch mit einem reconfigure und bootadm update-archive nicht hinbekam. Scheinbar wird ein umfangreicheres /etc/path_to_inst neu geschrieben, mit dem mein System nicht zurecht kommt.

Nach einem patchrm der letzten Patches und zurückspielen der alten path_to_inst tut mein System wieder.

Loesung via LifeUpgrade

Ich konnte das Problem lösen, indem ich die Updates deinstalliert habe und danach via LifeUpgrade die patches nochmal eingespielt habe.

Fehler beim direkten booten ins miniroot des Solaris Images

Wenn ich versuche ohne über den Umweg des Solaris miniroot auf Linux direkt in das Solaris miniroot des kopierten Diskimages zu booten, bekomme ich folgende Fehlermeldung:


SunOS Release 5.10 Version Generic_147441-01 32-bit
Copyright (c) 1983, 2011, Oracle and/or its affiliates. All rights reserved.

panic[cpu0]/thread=fec208a0: boot_mapin(): No pp for pfnum = 0

fec3912c unix:boot_mapin+68 (dadd8000, 302000)
fec39144 unix:boot_alloc+59 (dadd8000, 302000, 1)
fec39160 unix:segkmem_alloc_vn+80 (fec6bf68, 302000, 0)
fec39178 unix:segkmem_alloc+16 (fec6bf68, 302000, 0)
fec391c4 genunix:vmem_xalloc+3b4 (da804690, 301800, 1)
fec39200 genunix:vmem_alloc+135 (da804690, 301800, 0)
fec3921c genunix:kmem_alloc+40 (301800, 0)
fec39244 genunix:errorq_create+f9 (fea410a0, fe91187c,)
fec39278 genunix:errorq_nvcreate+2e (fea410a0, fe91187c,)
fec3929c genunix:fm_init+80 (fec392ac, fe827652,)
fec392a4 genunix:setup_ddi+26 (fec392b4, fe82601a,)
fec392ac unix:startup_modules+130 (fec392c4, fe934968,)
fec392b4 unix:startup+2d (fe800000, 1010800, )
fec392c4 genunix:main+2d ()

skipping system dump - no dump device configured
rebooting...

Loesung wie bisher ueber den Umweg von Linux in das Solaris failsave booten

Evtl. reicht es ein generisches /etc/path_to_inst zu nutzen

Neben den Konfigurationen fuer eine Serielle Konsole, ist es ein Versuch Wert ein blanko /etc/path_to_inst in das VirtualBoxImage zu schreiben (das von der Installations CD).

rm -rf /a/dev/*
rm -rf a/devices/*
init 6
...
SunOS Release 5.10 Version Generic_147441-11 64-bit
Copyright (c) 1983, 2012, Orcale and/or its affiliates. All rights reserved.
WARNING: /etc/path_to_inst empty or not found
NOTICE: rebuilding device instance data

Hostname: foo

Das funktioniert bei mir

Der Vollstaendigkeit halber noch andere Rezepte, die ich gefunden habe.

echo "#path_to_inst_bootstrap_1" > /etc/path_to_inst
uses a tmp /tmp/root/etc/path_to_inst

followed by boot -r

oder

devfsadm -C -r /a -p /a/etc/path_to_inst

Fehler beim booten in die Solaris failsafe Umgebung unter Linux (Debian 6.0 64bit)

Grub Error

  Booting 'Solaris failsafe'

root        (hd0,0)
 Filesystem type is ext2fs, partition type 0xfd
kernel      multiboot kernel/unix -B console=ttya

Error 1: Filename must be either an absolute pathname or blocklist

Press any key to continue...

Lösung

Man muss in /boot/grub/menu.lst für den Solaris-Eintrag ein / vor das multiboot und x86.miniboot packen, da grub den absoluten Pfad in relation zu /boot haben will.

Fehler beim booten direkt in das Solaris-Image ohne via failsafe die Einstellungen anzupassen

SunOS Release 5.10 Version Generic_147148-26 64-bit
Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
NOTICE: Can not read the pool label from '/pci@0,0/pci8086,2829@d/disk@0,0:a'
NOTICE: spa_import_rootpool: error 5
Cannot mount root on /pci@0,0/pci8086,2829@d/disk@0,0:a fstype zfs

panic[cpu0]/thread=fffffffffbc29a40: vfs_mountroot: cannot mount root

fffffffffbc5e3f0 genunix:vfs_mountroot+2a2 ()
fffffffffbc5e430 genunix:main+11d ()
fffffffffbc5e440 unix:_start+9d ()

skipping system dump - no dump device configured
rebooting...

Lösung

Wie unter Serielle Konfig geradebiegen bzw. bestätigen nochmal in die Solaris failsafe Umgebung booten und die Konfiguration kontrollieren.

Solaris 11

Solaris 11 auf einem Strato-Server zu probieren ist auch noch ein Todo.

smf ipadm

Kommentare