Freebsd/sparc64-zfs-root-ufs-boot

aus PUG, der Penguin User Group
Wechseln zu: Navigation, Suche

FreeBSD 9 auf SPARC64

Um FreeBSD9 (Zur Zeit RC-1) auf einer SPARC T245 zu installieren, bedarf es einiger Vorarbeiten, da sich die Installation doch sehr von einer auf Intel basierender Installationsanleitung unterscheidet. Daher habe ich aus zig verschiedenen Anleitungen und Mails das hier zusammengeschrieben, um zu einem FreeBSD9 mit ZFS für den Root Baum (/) zu kommen. Eines sei gleich erwähnt: /boot wird nach wie vor auf einem UFS installiert, da der Bootloader kein ZFS unterstützt. Des weiteren wird die Installation über das Netzwerk, per NFS/TFTP erfolgen, da in meiner SPARC kein CD-Rom verbaut ist. Die Steuerung erfolgt über das ALOM (serielle Konsole).

Als NFS/DHCP Server kommt ein Debian Squeeze zum Einsatz.


Vorarbeiten Debian

Als erstes wird der Server vorbereitet:

Notwendige Pakete

Debian-term.png
 # aptitude install nfs-kernel-server ethtool tcpdump rarpd tftpd openbsd-inetd
  • isc-dhcp-server - DHCP Server. Alternativ dnsmasq
  • nfs-kernel-server - Für den NFS Server
  • tcpdump - Goldwert beim debuggen
  • ethtool - ist die Netzwerkkarte aktiv
  • rarpd - Teilt der Sun ihre MAC Adresse mit / bzw. löst IP darauf auf
  • tftpd - TFTP Server
  • openbsd-inetd - Für den TFTP Server. Alternativ geht auch xinetd

Netzwerk

  • In diesem Fall ist die Sparc mit der Netzwerkkarte 3 (bge2 / boot net3) direkt mit dem Linux Server (eth2) verbunden
  • /etc/network/interfaces
Ascii.png
auto eth2
iface eth2 inet static
        address 192.168.1.1
        netmask 255.255.255.0
Debian-term.png
 # ifup eth2
 # ethtool eth2

ethtool eth2
Settings for eth2:
	Supported ports: [ TP ]
[...]
	Link detected: yes

DHCP Server

  • Einrichtung des DHCP Servers

Hier die Konfigurationsdatei:

  • /etc/dhcp/dhcpd.conf
Ascii.png
ddns-update-style none;
option domain-name "domain.foo";
option domain-name-servers 130.83.160.60;
default-lease-time 600;
max-lease-time 7200;
log-facility local7;

subnet 192.168.1.0 netmask 255.255.255.0 {
  range 192.168.1.5 192.168.1.10;
  option broadcast-address 192.168.1.255;
  option routers 192.168.1.1;
  option subnet-mask 255.255.255.0;
  next-server 192.168.1.1;
  default-lease-time 600;
  max-lease-time 7200;
}

host freebsd {
  hardware ethernet 00:11:22:33:44:55:66;
  option host-name "freebsd.domain.foo";
  fixed-address 192.168.1.5;
  always-reply-rfc1048 on;
  filename "kernel";
  option root-path "192.168.1.1:/media/freebsd9-nfs";
  option routers 192.168.1.1;
}

Der DHCP Server soll nur an der eth2 lauschen, und sonst nirgends:

  • /etc/default/isc-dhcp-server
Ascii.png
INTERFACES="eth2"
  • DHCP Starten:
Debian-term.png
 # /etc/init.d/isc-dhcp-server restart

RARPd Server

  • Einrichtung des RARPd Servers

Der RARPd Server dient dazu der SPARC ihre IP Adresse auf Bootebene mitzuteilen. Dies entspricht in etwa dem PXE/DHCP Verfahren. Dazu muss die Datei /etc/ethers angelegt und befüllt werden:

  • /etc/ethers
Ascii.png
11:22:33:44:55:66 192.168.1.5

Die MAC Adresse entspricht der Netzwerkkarte der SPARC. Entweder kann sie im Alom abgefragt werden, oder zB. auch über tcpdump

  • RARPD starten:
Debian-term.png
 # /etc/init.d/rarpd restart

Alternativ

Als Alternative zu RARPD der Service Console (OBP) mitteilen, sie möchte DHCP verwenden. Siehe dazu hier

TFTPD Server

  • Einrichtung des TFTPD Servers

Für die Einrichtung ist nicht mehr viel notwendig. Einzig eine kleine Anpassung an der inetd.conf Datei:

  • /etc/inetd.conf
Ascii.png
tftp		dgram	udp	wait	nobody	/usr/sbin/tcpd	/usr/sbin/in.tftpd /media/freebsd9-nfs

Der Standardpfad wäre /srv/tftp.

Debian-term.png
 # /etc/init.d/openbsd-inetd restart

NFS Server

  • Einrichtung des NFS Servers

Die Hauptaufgabe des NFS Servers besteht darin, das Root System für die Installation bereitzustellen. Dazu wird die FreeBSD9 (derzeit RC2) DVD heruntergeladen (z.B hier) und über /media/freebsd9-nfs bereitgestellt. Auch um einige Arbeiten zu erleichtern, ist es sinnvoll die Möglichkeit zu haben, schreiben zu können. Damit erspart man sich die Einrichtung eines Ram Laufwerks.

ISO Image
  • ISO Image bereitstellen
Debian-term.png
 # mkdir /media/(iso,freebsd9,freebsd9-nfs) ; cd /media/iso
 # wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/sparc64/sparc64/ISO-IMAGES/9.0/FreeBSD-9.0-RC2-sparc64-dvd1.iso
 # wget ftp://ftp.freebsd.org/pub/FreeBSD/releases/sparc64/sparc64/ISO-IMAGES/9.0/CHECKSUM.SHA256
 # sha256sum < FreeBSD-9.0-RC2-sparc64-dvd1.iso 
   f53810ff78e4015833e0ac9e81865c1abd93c622607d14aa2a74b918d2bc469c  -

 # grep dvd1  CHECKSUM.SHA256 | cut -d' ' -f 4
   f53810ff78e4015833e0ac9e81865c1abd93c622607d14aa2a74b918d2bc469c

 # mount -o loop /media/iso/FreeBSD-9.0-RC2-sparc64-dvd1.iso /media/freebsd9
Basis System
  • Basis System bereitstellen

An dieser Stelle gäbe es mehrere Möglichkeiten, bzw. direkt das Startsystem von dem ISO Image zu beziehen. In diesem Fall jedoch extrahiere ich die Dateien /media/freebsd9/usr/freebsd-dist/* nach /media/freebsd9-nfs, um eigene Anpassungen zu ermöglichen.

Debian-term.png
 # cd /media/freebsd9-nfs
 # for i in $(ls /media/freebsd9/usr/freebsd-dist/*.txz); do tar Jxf $i ; done
 # mkdir /media/freebsd9-nfs/usr/freebsd-dist
 # cp /media/freebsd9/usr/freebsd-dist/*.txz /media/freebsd9-nfs/usr/freebsd-dist/

Die Meldungen von Tar "tar: Ignoring unknown extended header keyword" können - wie es schon darsteht - ignoriert werden. Am Ende hat man ein Basissystem, welches sich hervorragend auch als Rescue System eignet. Der Kopierbefehl am Schluss ist wichtig, um das Basissystem auf die ZFS Volumes entpacken zu können.

Exports
  • NFS Export einrichten

Nun werden die passenden Verzeichnisse exportiert:

  • /etc/exports
Ascii.png
/media/freebsd9-nfs	192.168.1.0/24(rw,async,no_subtree_check,no_root_squash)
  • NFS Server neustarten
Debian-term.png
 # /etc/init.d/nfs-kernel-server restart
Loader Link
  • Loader Link erstellen

Die SPARC wird beim Starten eine Datei anfordern, die heißt, wie die vergebene IP Adresse, allerdings in HEX. Folgende Zeile hilft beim Umrechnen:

Debian-term.png
 # IP_ADDR='192.168.1.5'; printf '%02X' ${IP_ADDR//./ }; echo

C0A80105

Dann wird der Link zum Bootloader erzeugt (nicht notwendig, wenn per OBP boot net3:dhcp verwendet wird):

Debian-term.png
 # cd /media/freebsd-nfs/boot
 # ln -s loader C0A80105

In diesem Fall ist auch sehr hilfreich mittels TCPdump den Verkehr zu beobachten:

Debian-term.png
 # tcpdump -i eth2 -n
[...]

Start / Test

Sind all diese Aufgaben erledigt, steht einem Test nichts mehr im Wege. Dazu wird über das Alom Interface bzw. Keyboard das Stop Signal gesendet:

  • Hier ein Auszug von einer T245:
Gnome-terminal.png

sc> break

Are you sure you want to send a break to the system [y/n]? y
sc
SC Alert: SC Request to send Break to host.

> console -f

Warning: User <auto> currently has write permission to this console and forcibly removing them will terminate any current write actions and all work will be lost.  Would you like to continue? [y/n]y
Enter #. to return to ALOM.

{1} ok boot net3

Probing system devices
Probing memory
Probing I/O buses
screen not found.
keyboard not found.
Keyboard not present.  Using ttya for input and output.
Probing system devices
Probing memory
Probing I/O buses

Sun Fire V245, No Keyboard
Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
OpenBoot 4.22.33, 4096 MB memory installed, Serial #78666804.
Ethernet address 0:14:4f:b0:5c:34, Host ID: 84b05c34.


Rebooting with command: boot net3
[...]   

Die jeweiligen Befehle sind die abgesetzten Zeilen. In diesem Fall wird von der vierten Netzwerkkarte gebootet. Klappt alles, so wird der FreeBSD Loader gestartet und am Ende steht der Login des Live Systems. Mittel root und ohne Kennwort ist der Login möglich.

Eventuell kann es auch der Linux Seite noch Hilfreich sein, NAT und IP Forwarding zu aktivieren, um dem Rechner aus, über die Linux IP Adresse ins Netzwerk / Internet zu kommen:

Wenn man sich RARPD sparen möchte, so kann man auch einfach der OBP sagen, dass DHCP verwenden werden soll:

Gnome-terminal.png
[...]
{1} ok boot net3:dhcp


Debian-term.png
 # iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
 # echo 1 > /proc/sys/net/ipv4/ip_forward

Statt eth0 muss natürlich die jeweils passende Netzwerkkarte eingesetzt werden, über die der Linux Rechner ins Internet / Netzwerk kommt.

FreeBSD Installieren

Kommen wir nun zum eigentlichen Teil, dem installieren des Systems selbst. Die Festplatten im System heißen da0 und da1. Die Bootpartition wird über Geom gespielt und die Root Partition übernimmt ZFS Mirror.

Partitionen

Mittels gpart werden die passenden Partitionen angelegt bzw. die alten vorher gelöscht. Unter www.wonkity.com findet sich einge Übersicht der gängigsten Befehle von Gpart.


  • Partitionen löschen
Freebsd-term.png
 # gpart delete -i 1 da0
 # gpart delete -i 2 da0  
 # gpart delete -i 3 da0
 ...
 # gpart delete -i 1 da1
 # gpart delete -i 2 da1  
 # gpart delete -i 3 da1
 ... 

War auf dem System zuvor ein Solaris, sollte die Partitionstabelle bereits ein VTOC8 sein, wenn nicht:

Freebsd-term.png
 # gpart destroy da0
 # gpart create -s vtoc8 da0
 # gpart destroy da1
 # gpart create -s vtoc8 da1


  • Partitionen anlegen
Freebsd-term.png
 # gpart add -s 1G -t freebsd-ufs da0
 # gpart add -s 1G -t freebsd-ufs da1
 # gpart add -s 4G -t freebsd-swap da0
 # gpart add -s 4G -t freebsd-swap da1
 # gpart add -t freebsd-zfs da0
 # gpart add -t freebsd-zfs da1

 # gpart show da0
 # gpart show da1


  • Bootloader installieren
Freebsd-term.png
 # /sbin/gpart bootcode -p /boot/boot1 da0
 # /sbin/gpart bootcode -p /boot/boot1 da1

Sollte es aber eine Meldung geben: "operation not permitted", kann man folgendes vorher probieren:

Freebsd-term.png
 # sysctl kern.geom.debugflags=0x10

Sollte der Befehl immer noch nicht funktionieren, geht auch das veraltete Programm sunlabel

Freebsd-term.png
 # sunlabel -B da0 
 # sunlabel -B da1 

ZFS Pool Basics

Nun kommt der ZFS Teil:

  • ZFS Pool anlegen
Freebsd-term.png
 # kldload opensolaris.ko
 # kldload zfs.ko
 # zpool create zroot mirror /dev/da0d /dev/da1d
 # zpool set bootfs=zroot zroot
 # mkdir /zroot/bootdir
 # newfs /dev/da0a
 # mount /dev/da0a /zroot/bootdir

Das Verzeichnis bootdir wird später verschoben.

ZFS Verzeichnisse

Folgt die BSD Struktur

  • ZFS Volumes anlegen
Freebsd-term.png
 # zfs set checksum=fletcher4 zroot
 # zfs create -o compression=on -o exec=on -o setuid=off zroot/tmp
 # chmod 1777 /zroot/tmp
 # zfs create zroot/usr
 # zfs create zroot/usr/home
 # cd /zroot ; ln -s /usr/home home
 # zfs create -o compression=lzjb -o setuid=off zroot/usr/ports
 # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/distfiles
 # zfs create -o compression=off -o exec=off -o setuid=off zroot/usr/ports/packages
 # zfs create -o compression=lzjb  -o exec=off     -o setuid=off   zroot/usr/src
 # zfs create zroot/var
 # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/crash
 # zfs create -o exec=off -o setuid=off zroot/var/db
 # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/db/pkg
 # zfs create -o exec=off -o setuid=off zroot/var/empty
 # zfs create -o compression=lzjb -o exec=off -o setuid=off zroot/var/log
 # zfs create -o compression=gzip -o exec=off -o setuid=off zroot/var/mail
 # zfs create -o exec=off -o setuid=off zroot/var/run
 # zfs create -o compression=lzjb -o exec=on -o setuid=off zroot/var/tmp
 # chmod 1777 /zroot/var/tmp

FreeBSD Installation

Nun folgt die FreeBSD Installation. Dazu wird im Prinzip das selbe System kopiert, wie auch schon beim NFS Livesystem:

  • FreeBSD Basis
Freebsd-term.png
 # cd /zroot
 # /bin/sh
 # for i in $(ls /usr/freebsd-dist/*.txz); do tar xf $i ; done
 # zfs set readonly=on zroot/var/empty


  • Basis Einstellungen:
Freebsd-term.png
 # chroot /zroot
 # echo 'zfs_enable="YES"' > /etc/rc.conf
 # echo 'hostname="foo.domain.local"' >> /etc/rc.conf
 # echo 'ifconfig_bge0="inet 192.168.1.5 netmask 255.255.255.0"' >> /etc/rc.conf
 # echo 'defaultrouter="192.168.1.1"' >> /etc/rc.conf
 # echo 'nameserver 192.168.1.1' >> /etc/resolv.conf
 # echo 'zfs_load="YES"' > /boot/loader.conf
 # echo 'vfs.root.mountfrom="zfs:zroot"' >> /boot/loader.conf
 # echo 'geom_mirror_load="YES"' >> /boot/loader.conf
  • Root Passwort, Zeitzone und aliases
Freebsd-term.png
 # passwd
...
 # tzsetup
...
 # cd /etc/mail
 # make aliases
 # exit

Nicht das exit vergessen, da die Chroot Umgebung verlassen wird.

  • Muss noch die Cache Datei vom ZFS an den passenden Ort kopiert werden:
Freebsd-term.png
# cp /boot/zfs/zpool.cache /zroot/boot/zfs/zpool.cache

FreeBSD Abschluss der Installation

  • Boot Verzeichnis verschieben
Freebsd-term.png
 # cd /zroot
 # mv boot bootdir/
 # ln -s bootdir/boot /zroot/boot
 # chflags -h sunlink /zroot/boot


Geom Spiegel für /bootdir

Als letztes Erfolgt die Spiegelung des neu installierten Systems.

  • Geom einrichten
Freebsd-term.png
 # kldload geom_mirror
 # sysctl kern.geom.debugflags=16
 # gmirror label -vb round-robin gm0 da0a
 # gmirror insert gm0 da1a
 # gmirror status
  • /etc/fstab erzeugen
Freebsd-term.png
 # cat << EOF > /zroot/etc/fstab
 /dev/mirror/gm0 /bootdir ufs   rw,noauto  0 0
 /dev/da0b none   swap    sw  0 0
 /dev/da1b none   swap    sw  0 0
 EOF


  • Aufräumarbeiten
Freebsd-term.png
 # cd /
 # umount /zroot/bootdir
 # zfs unmount -a
 # zfs set mountpoint=legacy zroot
 # zfs set mountpoint=/tmp zroot/tmp
 # zfs set mountpoint=/usr zroot/usr
 # zfs set mountpoint=/var zroot/var

Nun kann das System wieder mittels Alom (> boot disk) (hoffentlich) gestartet werden. :-)

Folgearbeiten

Nachfolgend eine Liste von Aufgaben, die als nächstes getan werden können:

  • Root Login in /etc/ssh/sshd_config erlauben
  • Überflüssige Terminals (ttyv1-8) deaktivieren in /etc/ttys

Hinweise

Ist das System gestartet, sollte man sich als nächstes folgende Seite anschauen: http://www.surlyjake.com/2009/03/how-to-update-my-sparc-freebsd-install/

Dort wird aufgeführt, wie unter SPARC das System aktuell gehalten wird.

Quellen