Solaris 10 auf einem Strato root-Server
Wir erfüllen uns den Traum eines eigenen root-Servers unter Solaris.
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
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
- 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)
- Ich habe in VirtualBox ein Solaris 10 08/11 aufgesetzt und für die serielle Konsole konfiguriert und mit sys-unconfig unkonfiguriert.
- Parallel dazu habe ich dem Linux ein multiboot mit miniroot konfiguriert für die serielle Konsole untergeschoben und in das Linux-Grub eingebunden.
- 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).
- 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
- Dann via Linux-Grub in den Solaris-Grub der zweiten Platte booten (kaskadiete GRUBs)
- Jetzt wusste ich nicht recht wie ich nativ in das Solaris-Grub boote und ZFS auf beide Platten bekomme.
- danach war mein Solaris im Prinzip fertig.
- 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)
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
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'
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.
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
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