logo_header

icon_bubbles Forum

icon_bubbles Wiki

icon_bubbles Planet

RootForum Community » Wiki

FreeBSD Remote Installation

From RootForum Community » Wiki

Jump to:navigation, search

Contents

Einleitung

In diesem HowTo beschreibe ich "step-by-step" die Remote-Installation von FreeBSD in der 64Bit Variante mittels mfsBSD auf einem handelsüblichen dedizierten Mietserver. Weil sich meine Vorgehensweise oft nur geringfügig von einer normalen FreeBSD Remote-Installation unterscheidet und um eine weitere Republikation der offiziellen FreeBSD Dokumentationen zu vermeiden, werde ich in diesem HowTo nicht alle Punkte bis ins Detail erläutern.

Vielen Dank für Dein Vertändnis.


Folgende Punkte sind in diesem HowTo zu beachten:

  • Alle Dienste werden mit einem möglichst minimalen und bewährten Funktionsumfang installiert.
  • Alle Dienste werden mit einer möglichst sicheren und dennoch flexiblen Konfiguration versehen.
  • Alle Konfigurationen sind selbstständig auf notwendige individuelle Anpassungen zu kontrollieren.
  • Alle Passworte werden als !!!SECRET!!! dargestellt und sind selbstständig durch sichere Passworte zu ersetzen.
  • Die Domain der virtuellen Maschine lautet example.org und ist selbstständig durch die eigene Domain zu ersetzen.
  • Der Hostname (FQDN) des Servers lautet devnull.example.org und ist selbstständig durch den eigenen Hostnamen zu ersetzen.
  • Die IP-Adresse der virtuellen Maschine lautet 10.0.2.15 und ist selbstständig durch die eigene IP-Adresse zu ersetzen.
  • Das Default-Gateway der virtuellen Maschine lautet 10.0.2.2 und ist selbstständig durch das eigene Gateway zu ersetzen.
  • Der Nameserver der virtuellen Maschine lautet 10.0.2.2 und ist selbstständig durch den eigenen Nameserver zu ersetzen.


Das Referenzsystem

Als Referenzsystem habe ich mich für eine virtuelle Maschine auf Basis von Oracle VM VirtualBox unter Microsoft Windows 7 Professional in der 64Bit Variante entschieden, da sich so ohne grösseren Aufwand ein handelsüblicher dedizierter Mietserver simulieren lässt. Zudem kann diese virtuelle Maschine später noch als kostengünstiges lokales Testsystem weiter genutzt werden. Leider bringt Microsoft Windows keinen eigenen SSH-Client mit, so dass ich auf das sehr empfehlenswerte PuTTY zurückgreife. Zur Simulation des bei nahezu allen Anbietern dedizierter Mietserver vorhandene RescueSystem wird in diesem HowTo die auf Gentoo Linux basierende SystemRescueCD eingesetzt.

VirtualBox und PuTTY werden jeweils mit den Standardoptionen installiert und sofern noch nicht geschehen, werden ihre Installationspfade der Umgebungvariablen PATH des aktuellen Windows-Users hinzugefügt. Dazu öffnen wir die Eingabeaufforderung und setzen folgende drei Befehle ab:

SET OLDPATH=%PATH%
SETX PATH "%OLDPATH%;%ProgramFiles(x86)%\PuTTY;%VBOX_INSTALL_PATH%"
SET OLDPATH=

Da neue und geänderte Umgebungvariablen in der jeweils aktuellen Eingabeaufforderung noch nicht gültig sind, wird die Eingabeaufforderung nun wieder geschlossen.

Die folgende Registrierungsdatei bitte als putty_virtualbox.reg abspeichern und mittels Doppelklick in die Windowsregistrierung importieren. Dadurch wird PuTTY das vorkonfigurierte Profil Virtualbox hinzugefügt, welches wir für dieses HowTo verwenden werden.

Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Software\SimonTatham\PuTTY\Sessions\Virtualbox]
"Present"=dword:00000001
"HostName"="127.0.0.1"
"LogFileName"="putty.log"
"LogType"=dword:00000000
"LogFileClash"=dword:ffffffff
"LogFlush"=dword:00000001
"SSHLogOmitPasswords"=dword:00000001
"SSHLogOmitData"=dword:00000000
"Protocol"="ssh"
"PortNumber"=dword:000008ae
"CloseOnExit"=dword:00000001
"WarnOnClose"=dword:00000001
"PingInterval"=dword:00000000
"PingIntervalSecs"=dword:00000005
"TCPNoDelay"=dword:00000001
"TCPKeepalives"=dword:00000001
"TerminalType"="xterm"
"TerminalSpeed"="38400,38400"
"TerminalModes"="INTR=A,QUIT=A,ERASE=A,KILL=A,EOF=A,EOL=A,EOL2=A,START=A,STOP=A,SUSP=A,DSUSP=A,REPRINT=A,WERASE=A,LNEXT=A,FLUSH=A,SWTCH=A,STATUS=A,DISCARD=A,IGNPAR=A,PARMRK=A,INPCK=A,ISTRIP=A,INLCR=A,IGNCR=A,ICRNL=A,IUCLC=A,IXON=A,IXANY=A,IXOFF=A,IMAXBEL=A,ISIG=A,ICANON=A,XCASE=A,ECHO=A,ECHOE=A,ECHOK=A,ECHONL=A,NOFLSH=A,TOSTOP=A,IEXTEN=A,ECHOCTL=A,ECHOKE=A,PENDIN=A,OPOST=A,OLCUC=A,ONLCR=A,OCRNL=A,ONOCR=A,ONLRET=A,CS7=A,CS8=A,PARENB=A,PARODD=A,"
"AddressFamily"=dword:00000000
"ProxyExcludeList"=""
"ProxyDNS"=dword:00000001
"ProxyLocalhost"=dword:00000000
"ProxyMethod"=dword:00000000
"ProxyHost"="proxy"
"ProxyPort"=dword:00000050
"ProxyUsername"=""
"ProxyPassword"=""
"ProxyTelnetCommand"="connect %host %port\\n"
"Environment"=""
"UserName"=""
"LocalUserName"=""
"NoPTY"=dword:00000000
"Compression"=dword:00000001
"TryAgent"=dword:00000001
"AgentFwd"=dword:00000001
"ChangeUsername"=dword:00000001
"Cipher"="aes,blowfish,3des,WARN,arcfour,des"
"KEX"="dh-gex-sha1,dh-group14-sha1,dh-group1-sha1,WARN"
"RekeyTime"=dword:0000003c
"RekeyBytes"="1G"
"SshNoAuth"=dword:00000000
"AuthTIS"=dword:00000000
"AuthKI"=dword:00000001
"SshNoShell"=dword:00000000
"SshProt"=dword:00000003
"SSH2DES"=dword:00000000
"PublicKeyFile"=""
"RemoteCommand"=""
"RFCEnviron"=dword:00000000
"PassiveTelnet"=dword:00000000
"BackspaceIsDelete"=dword:00000001
"RXVTHomeEnd"=dword:00000000
"LinuxFunctionKeys"=dword:00000000
"NoApplicationKeys"=dword:00000000
"NoApplicationCursors"=dword:00000000
"NoMouseReporting"=dword:00000000
"NoRemoteResize"=dword:00000000
"NoAltScreen"=dword:00000000
"NoRemoteWinTitle"=dword:00000000
"RemoteQTitleAction"=dword:00000001
"NoDBackspace"=dword:00000000
"NoRemoteCharset"=dword:00000000
"ApplicationCursorKeys"=dword:00000000
"ApplicationKeypad"=dword:00000000
"NetHackKeypad"=dword:00000000
"AltF4"=dword:00000001
"AltSpace"=dword:00000000
"AltOnly"=dword:00000000
"ComposeKey"=dword:00000000
"CtrlAltKeys"=dword:00000001
"TelnetKey"=dword:00000000
"TelnetRet"=dword:00000001
"LocalEcho"=dword:00000002
"LocalEdit"=dword:00000002
"Answerback"="PuTTY"
"AlwaysOnTop"=dword:00000000
"FullScreenOnAltEnter"=dword:00000000
"HideMousePtr"=dword:00000000
"SunkenEdge"=dword:00000000
"WindowBorder"=dword:00000001
"CurType"=dword:00000000
"BlinkCur"=dword:00000000
"Beep"=dword:00000001
"BeepInd"=dword:00000000
"BellWaveFile"=""
"BellOverload"=dword:00000001
"BellOverloadN"=dword:00000005
"BellOverloadT"=dword:000007d0
"BellOverloadS"=dword:00001388
"ScrollbackLines"=dword:00001388
"DECOriginMode"=dword:00000000
"AutoWrapMode"=dword:00000001
"LFImpliesCR"=dword:00000000
"DisableArabicShaping"=dword:00000000
"DisableBidi"=dword:00000000
"WinNameAlways"=dword:00000001
"WinTitle"=""
"TermWidth"=dword:00000078
"TermHeight"=dword:00000028
"Font"="Courier New"
"FontIsBold"=dword:00000000
"FontCharSet"=dword:00000000
"FontHeight"=dword:0000000a
"FontQuality"=dword:00000000
"FontVTMode"=dword:00000004
"UseSystemColours"=dword:00000000
"TryPalette"=dword:00000000
"ANSIColour"=dword:00000001
"Xterm256Colour"=dword:00000001
"BoldAsColour"=dword:00000001
"Colour0"="187,187,187"
"Colour1"="255,255,255"
"Colour2"="0,0,0"
"Colour3"="85,85,85"
"Colour4"="0,0,0"
"Colour5"="0,255,0"
"Colour6"="0,0,0"
"Colour7"="85,85,85"
"Colour8"="187,0,0"
"Colour9"="255,85,85"
"Colour10"="0,187,0"
"Colour11"="85,255,85"
"Colour12"="187,187,0"
"Colour13"="255,255,85"
"Colour14"="0,0,187"
"Colour15"="85,85,255"
"Colour16"="187,0,187"
"Colour17"="255,85,255"
"Colour18"="0,187,187"
"Colour19"="85,255,255"
"Colour20"="187,187,187"
"Colour21"="255,255,255"
"RawCNP"=dword:00000000
"PasteRTF"=dword:00000000
"MouseIsXterm"=dword:00000000
"RectSelect"=dword:00000000
"MouseOverride"=dword:00000001
"Wordness0"="0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0"
"Wordness32"="0,1,2,1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1,1"
"Wordness64"="1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,2"
"Wordness96"="1,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,1,1,1,1"
"Wordness128"="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
"Wordness160"="1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1"
"Wordness192"="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2"
"Wordness224"="2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,2,1,2,2,2,2,2,2,2,2"
"LineCodePage"="UTF-8"
"CJKAmbigWide"=dword:00000000
"UTF8Override"=dword:00000001
"Printer"=""
"CapsLockCyr"=dword:00000000
"ScrollBar"=dword:00000001
"ScrollBarFullScreen"=dword:00000000
"ScrollOnKey"=dword:00000001
"ScrollOnDisp"=dword:00000000
"EraseToScrollback"=dword:00000001
"LockSize"=dword:00000000
"BCE"=dword:00000001
"BlinkText"=dword:00000000
"X11Forward"=dword:00000000
"X11Display"=""
"X11AuthType"=dword:00000001
"LocalPortAcceptAll"=dword:00000000
"RemotePortAcceptAll"=dword:00000000
"PortForwardings"=""
"BugIgnore1"=dword:00000000
"BugPlainPW1"=dword:00000000
"BugRSA1"=dword:00000000
"BugHMAC2"=dword:00000000
"BugDeriveKey2"=dword:00000000
"BugRSAPad2"=dword:00000000
"BugPKSessID2"=dword:00000000
"BugRekey2"=dword:00000000
"StampUtmp"=dword:00000001
"LoginShell"=dword:00000001
"ScrollbarOnLeft"=dword:00000000
"BoldFont"=""
"BoldFontIsBold"=dword:00000001
"BoldFontCharSet"=dword:771f2926
"BoldFontHeight"=dword:0017ff78
"WideFont"=""
"WideFontIsBold"=dword:01000106
"WideFontCharSet"=dword:00000001
"WideFontHeight"=dword:0017fb04
"WideBoldFont"=""
"WideBoldFontIsBold"=dword:026f0770
"WideBoldFontCharSet"=dword:01000106
"WideBoldFontHeight"=dword:000003f8
"ShadowBold"=dword:00000000
"ShadowBoldOffset"=dword:00000001
"SerialLine"="COM1"
"SerialSpeed"=dword:00002580
"SerialDataBits"=dword:00000008
"SerialStopHalfbits"=dword:00000002
"SerialParity"=dword:00000000
"SerialFlowControl"=dword:00000001


Die Virtuelle Maschine

Als Erstes öffnen wir eine neue Eingabeaufforderung und legen manuell eine neue virtuelle Maschine an. Diese virtuelle Maschine bekommt den Namen FreeBSD und wird mit 1024MB RAM, zwei 32GB SATA-Festplatten, einem DVD-Player, sowie einer Intel-Netzwerkkarte ausgestattet. Zudem setzen wir die RTC (Real-Time Clock) der virtuellen Maschine auf UTC (Coordinated Universal Time), schalten den HPET (High Precision Event Timer) ein und die PAE (Physical Address Extension) aus:

VBoxManage createvm --name "FreeBSD" --ostype FreeBSD_64 --register
cd "%USERPROFILE%\VirtualBox VMs\FreeBSD"
VBoxManage createhd --filename "FreeBSD1.vdi" --size 32768
VBoxManage createhd --filename "FreeBSD2.vdi" --size 32768
VBoxManage modifyvm "FreeBSD" --chipset ich9 --memory 1024 --rtcuseutc on --pae off --hpet on
VBoxManage modifyvm "FreeBSD" --boot1 dvd --boot2 disk --boot3 none --boot4 none
VBoxManage storagectl "FreeBSD" --name "IDE Controller" --add ide --controller ICH6
VBoxManage storagectl "FreeBSD" --name "SATA Controller" --add sata --controller IntelAHCI --sataportcount 4
VBoxManage storageattach "FreeBSD" --storagectl "SATA Controller" --port 0 --device 0 --type hdd --medium "FreeBSD1.vdi"
VBoxManage storageattach "FreeBSD" --storagectl "SATA Controller" --port 1 --device 0 --type hdd --medium "FreeBSD2.vdi"

Die virtuelle Maschine, genauer die virtuelle Netzwerkkarte, kann dank NAT zwar problemlos mit der Aussenwelt, aber leider nicht direkt mit dem Hostsystem kommunizieren. Aus diesem Grund richten wir nun für den SSH-Zugang noch ein Portforwarding ein, welches den Port 2222 des Hostsystems auf den Port 22 der virtuellen Maschine weiterleitet.

VBoxManage modifyvm "FreeBSD" --natpf1 SSH,tcp,127.0.0.1,2222,10.0.2.15,22

Nachdem die virtuelle Maschine nun konfiguriert ist, wird es Zeit diese zu booten.


RescueSystem booten

Um unser mfsBSD-Image installieren zu können, müssen wir unsere virtuelle Maschine mit einem RescueSystem booten. Hierzu eignet sich die auf Gentoo Linux basierende SystemRescueCD am Besten. Wir laden uns die SystemRescueCD nun mit Windows-Bordmitteln per FTP auf unseren Windows Host herunter und weisen sie unserer virtuellen Maschine als Bootmedium zu:

cd "%USERPROFILE%\VirtualBox VMs\FreeBSD"

ftp -A ftp.mirrorservice.org
cd sites/download.sourceforge.net/pub/sourceforge/s/project/sy/systemrescuecd/sysresccd-x86/2.0.1
get systemrescuecd-x86-2.0.1.iso
quit

VBoxManage storageattach "FreeBSD" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium "%USERPROFILE%\VirtualBox VMs\FreeBSD\systemrescuecd-x86-2.0.1.iso"

Wir booten das RescueSystem jetzt:

VBoxManage startvm "FreeBSD"

Im Bootscreen wählen wir die Option "64Bit Kernel with default options"

Wer mit dem amerikanischen Tastaturlayout nicht zurechtkommt, sollte während des Bootens die Frage nach der Keymap mit de beantworten.

Ist der Bootvorgang abgeschlossen, wird als Erstes das root-Passwort für das RescueSystem gesetzt:

passwd root

Jetzt sollten wir uns mittels PuTTY als root in das RescueSystem einloggen und mit der Installation unseres mfsBSD-Image beginnen können.

putty -load Virtualbox -l root


mfsBSD installieren

Um unsere umfangreichen Vorbereitungen nun abzuschliessen, müssen wir nur noch unser mfsBSD-Image installieren und booten.

Als Erstes kopieren wir nun das mfsBSD-Image in das RescueSystem:

pscp -load Virtualbox "%USERPROFILE%\VirtualBox VMs\mfsBSD\mfsboot.img" root@127.0.0.1:/tmp/mfsboot.img

Jetzt können wir das mfsBSD-Image mittels dd auf der Festplatte installieren und uns anschliessend wieder ausloggen:

dd if=/dev/zero of=/dev/sda count=50 bs=1M
dd if=/tmp/mfsboot.img of=/dev/sda bs=1M

exit

Abschliessend stoppen wir die virtuelle Maschine wieder und entfernen die SystemRescueCD aus dem virtuellen DVD-Laufwerk:

VBoxManage controlvm "FreeBSD" poweroff
VBoxManage storageattach "FreeBSD" --storagectl "IDE Controller" --port 0 --device 0 --type dvddrive --medium emptydrive

FreeBSD installieren

Nachdem nun alle Vorbereitungen abgeschlossen sind, können wir endlich mit der eigentlichen FreeBSD-Installation beginnen.

VBoxManage startvm "FreeBSD"

Jetzt sollten wir uns mittels PuTTY als root mit dem Passwort mfsbsd in das mfsBSD-Image einloggen und mit der Installation von FreeBSD beginnen können:

putty -load Virtualbox -l root


Partitionieren der Festplatte

Da jeder Administrator andere Präferenzen an sein Partitionslayout stellt und wir andernfalls mit diesem HowTo nicht weiterkommen, verwenden wir im Folgenden ein Standard-Partitionslayout. Fortgeschrittenere FreeBSD-Administratoren können dieses Partitionslayout selbstverständlich an ihre eigenen Bedürfnisse anpassen.

Partition Mountpunkt Filesystem Grösse
/dev/mirror/gm0s1a / UFS2 2048 MB
/dev/mirror/gm0s1b none swap 2048 MB
/dev/mirror/gm0s1d /usr UFS2 16384 MB
/dev/mirror/gm0s1e /var UFS2 8192 MB
/dev/mirror/gm0s1f /tmp UFS2 ~4096 MB

Die Partitionen legen wir nun mittels fdisk und bsdlabel an:

fdisk -p /dev/ad4 > /tmp/fdisk_ad4.txt
fdisk -p /dev/ad6 > /tmp/fdisk_ad6.txt

cat > /tmp/bsdlabel.txt <<"EOF"
8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  a:    2048M       16    4.2BSD     2048 16384     8
  b:    2048M        *      swap
  c:        *        0    unused        0     0         # "raw" part, don't edit
  d:   16384M        *    4.2BSD     2048 16384 28528
  e:    8192M        *    4.2BSD     2048 16384 28528
  f:        *        *    4.2BSD     2048 16384 28528
"EOF"

dd if=/dev/zero of=/dev/ad4 count=2
fdisk -BI /dev/ad4
fdisk -f /tmp/fdisk_ad4.txt /dev/ad4
bsdlabel -wB /dev/ad4s1
bsdlabel -R /dev/ad4s1 /tmp/bsdlabel.txt

dd if=/dev/zero of=/dev/ad6 count=2
fdisk -BI /dev/ad6
fdisk -f /tmp/fdisk_ad6.txt /dev/ad6
bsdlabel -wB /dev/ad6s1
bsdlabel -R /dev/ad6s1 /tmp/bsdlabel.txt

Für eine leicht erhöhte Datensicherheit legen wir nun noch mittels gmirror ein Software-RAID1 an:

gmirror load
gmirror label -v -b round-robin gm0 ad4 ad6


Formatieren der Partitionen

Als Nächstes formatieren wir die frisch angelegten Partitionen mit dem UFS2 Filesystem:

newfs -O2 /dev/mirror/gm0s1a
newfs -O2 -U /dev/mirror/gm0s1d
newfs -O2 -U /dev/mirror/gm0s1e
newfs -O2 -U /dev/mirror/gm0s1f


Mounten der Partitionen

Mounten der Partitionen:

mkdir /mnt/inst
mount /dev/mirror/gm0s1a /mnt/inst
mkdir /mnt/inst/usr /mnt/inst/var /mnt/inst/tmp
chmod 1777 /mnt/inst/tmp
mount /dev/mirror/gm0s1d /mnt/inst/usr
mount /dev/mirror/gm0s1e /mnt/inst/var
mount /dev/mirror/gm0s1f /mnt/inst/tmp


Installation der Chroot-Umgebung

Wir benötigen nun das Image der Installations-CD im virtuellen System, also kopieren wir dieses per PuTTY vom Windows Host in den FreeBSD Guest:

pscp -load Virtualbox "%USERPROFILE%\VirtualBox VMs\mfsBSD\FreeBSD-8.2-RELEASE-amd64-disc1.iso" root@127.0.0.1:/mnt/inst/tmp/FreeBSD-8.2-RELEASE-amd64-disc1.iso

Mounten der Installations-CD:

mkdir /mnt/disc
mdconfig -a -t vnode -u 5 -f /mnt/inst/tmp/FreeBSD-8.2-RELEASE-amd64-disc1.iso
mount_cd9660 /dev/md5 /mnt/disc

Installieren des FreeBSD-Basissystems als Chroot-Umgebung:

setenv DESTDIR /mnt/inst

cd /mnt/disc/8.2-RELEASE/base
./install.sh

cd /mnt/disc/8.2-RELEASE/kernels
./install.sh GENERIC

cd /mnt/disc/8.2-RELEASE/src
./install.sh all

cd /
umount /mnt/disc
mdconfig -d -u 5

rm /mnt/inst/tmp/FreeBSD-8.2-RELEASE-amd64-disc1.iso


Vorbereiten der Chroot-Umgebung

Vor dem Wechsel in die Chroot-Umgebung müssen wir noch die resolv.conf in die Chroot-Umgebung kopieren und das für eine erfolgreiche Installation noch fehlenden Devie-Filesysteme mounten:

cp -L /etc/resolv.conf /mnt/gentoo/etc/resolv.conf

mount -t devfs devfs /mnt/inst/dev


Betreten der Chroot-Umgebung

Beim Betreten der Chroot-Umgebung setzen wir mittels /usr/bin/env -i erstmal alle Environment-Variablen zurück. Andererseits benötigen wir aber die Environment-Variablen HOME und TERM, welche wir manuell auf sinnvolle Defaults setzen.

chroot /mnt/inst /usr/bin/env -i HOME=/root TERM=$TERM /bin/tcsh


Zeitzone und NTP-Synchronisierung einrichten

Dies ist eine der leichtesten Übungen, aber Voraussetzung dafür, dass alle im weiteren Verlauf erläuterten Schritte auch korrekte Ergebnisse liefern:

tzsetup

Die NTP-Synchronisierung kann mit einem einfachen Eintrag in der Crontab bewerkstelligt werden:

echo '*/10    *       *       *       *       root    /usr/sbin/ntpdate -b -s -p 4 -t 0.1 ptbtime1.ptb.de' >> /etc/crontab


Locale einrichten

Auf Servern sollte eine englische locale mit Unicode (UTF-8) verwendet werden. Hierzu muss zunächst eine passende Login-Klasse erzeugt werden, in der die Verwendung einer Unicode-locale festgelegt wird. Wir fügen dazu folgende Zeilen in die Datei /etc/login.conf ein:

cat >> /etc/login.conf <<"EOF"
unicode|Unicode Users Accounts:\
        :charset=UTF-8:\
        :lang=en_US.UTF-8:\
        :tc=default:
"EOF"

Anschliessend muss die Datei in eine Systemdatenbank umgewandelt werden:

cap_mkdb /etc/login.conf

Um diese Login-Klasse für einen User zu aktivieren, können wir das pw-Kommando benutzen:

pw usermod root -L unicode

Nach dem nächsten Login mit diesem User sollte der Befehl locale die folgende Ausgabe liefern:

LANG=en_US.UTF-8
LC_CTYPE="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_ALL=


Shell einrichten

Unter FreeBSD ist die Tenex C Shell (TCSH) die Standard-Shell. Für Bash-gewohnte Linux-User ist diese Shell etwas gewöhnungsbedürftig, und natürlich kann man sie auch gegen eine andere Shell austauschen (im Basis-System ist neben der TCSH auch eine ASH enthalten). Skripte würde ich für die TCSH nicht schreiben, aber für die tägliche Administrationsarbeit ist die TCSH ein sehr brauchbares Werkzeug – wenn man sie erst mal vernünftig konfiguriert hat. Dies tun wir jetzt:

cat > /root/.cshrc <<"EOF"
# $FreeBSD: src/etc/root/dot.cshrc,v 1.30.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#

# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)

setenv  EDITOR  ee
setenv  PAGER   more
setenv  BLOCKSIZE       K

if ($?prompt) then
        # An interactive shell -- set some stuff up
        set prompt = "[%B%n%b@%B%m%b:%B%~%b] %# "
        set filec
        set history = 1000
        set savehist = 1000
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
                bindkey ^[[3~ delete-char
        endif
endif
"EOF"

cat >> /etc/csh.cshrc <<"EOF"
setenv LSCOLORS "Dxfxcxdxbxegedabagacad"
alias h         history 25
alias j         jobs -l
alias l         ls -lha
alias la        ls -a
alias lf        ls -FA
alias ll        ls -lA
alias ls        ls -GF
"EOF"


Systemsicherheit verstärken

Die hier vorgestellten Massnahmen sind äusserst simple Basis-Massnahmen, die auf jedem System aus Hygienegründen selbstverständlich sein sollten. Um ein FreeBSD-System richtig zu härten, kommt man jedoch nicht an komplexeren Methoden wie Security Event Auditing und Mandatory Access Control vorbei. Diese Themen werden im FreeBSD-Handbuch recht ausführlich besprochen; für den Einstieg empfehle ich die Lektüre von Kapitel 14, für die weiterführenden Themen die Kapitel 16 (Mandatory Access Control) und Kapitel 17 (Security Event Auditing).


/etc/sysctl.conf anpassen

cat >> /etc/sysctl.conf <<"EOF"
security.bsd.see_other_uids=0
security.bsd.see_other_gids=0
net.inet.ip.random_id=1
net.inet.tcp.icmp_may_rst=0
net.inet.tcp.blackhole=2
net.inet.udp.blackhole=1
"EOF"


Stärkere Passwort-Hashes verwenden

Wir bearbeiten hierzu in der Datei /etc/login.conf die Klasse default:

default:\
        :passwd_format=blf:\
        :copyright=/etc/COPYRIGHT:\
        ...

Anschliessend muss die Datei in eine Systemdatenbank umgewandelt werden:

cap_mkdb /etc/login.conf

Die neuen Einstellungen werden erst wirksam, wenn das Passwort eines Benutzers geändert wird. Deshalb sollten wir jetzt die Passwörter für root und alle anderen von uns angelegten User ändern.

passwd root

Dann bearbeiten wir noch die Datei /etc/auth.conf:

cat >> /etc/auth.conf <<"EOF"
crypt_default = blf
"EOF"


OpenSSL konfigurieren

Folgende Optionen müssen in der /etc/ssl/openssl.cnf im Abschnitt [ req_distinguished_name ] angepasst beziehungsweise ergänzt werden:

[ req_distinguished_name ]
countryName_default             = DE
stateOrProvinceName_default     = Bundesland
localityName_default            = Stadt
0.organizationName_default      = Example Organization
organizationalUnitName_default  = Administration
commonName_default              = devnull.example.org
emailAddress_default            = admin@example.org


OpenSSL CA

Als nächstes wird ein eigenes CA Zertifikat erstellt und selbst signiert. Dabei verwenden wir devnull.example.org als Common Name und übernehmen ansonsten jeweils die Default-Werte und wählen selbstverständliche sehr sichere Passworte. Die Option A challenge password sollte jedoch leer gelassen werden, andernfalls kann es zu Problemen mit einigen Diensten kommen:

cd /etc/ssl
mkdir -p demoCA
mkdir -p demoCA/certs
mkdir -p demoCA/crl
mkdir -p demoCA/newcerts
mkdir -p demoCA/private
touch demoCA/index.txt

openssl req -new -keyout demoCA/private/cakey.pem -out demoCA/careq.pem
openssl ca -create_serial -out demoCA/cacert.pem -days 3650 -batch -keyfile demoCA/private/cakey.pem -selfsign -extensions v3_ca -infiles demoCA/careq.pem

openssl req -new -keyout devnull.example.org_key.pem -out devnull.example.org_req.pem
openssl ca -policy policy_anything -out devnull.example.org_cert.pem -infiles devnull.example.org_req.pem
openssl rsa -in devnull.example.org_key.pem -out devnull.example.org_keyrsa.pem

cd


Terminals absichern

Um zu verhindern, dass das System im Single User Mode ohne jeglichen Schutz benutzbar ist, ändern wir in der Datei /etc/ttys die Zeile console none... wie folgt ab:

console none                            unknown off insecure

Dadurch wird die Eingabe des root-Kennworts erforderlich, um das System im Single User Mode booten zu können.

Ausserdem können wir in derselben Datei alle auf Servern nicht benötigten Terminals deaktivieren. Dazu setzen wir die Terminals ttyv1 bis ttyv8 auf off. ttyv0 sowie die network-Terminals sollten wir hingegen unverändert lassen.

Zusätzlich können wir veranlassen, dass die Konsole bei jedem Logout gelöscht wird, so dass nicht versehentlich vertrauliche Informationen auf dem Bildschirm sichtbar bleiben. Dazu ändern wir in der Datei /etc/gettytab den Eintrag

P|Pc|Pc console:\
        :ht:np:sp#115200:

wie folgt ab:

P|Pc|Pc console:\
        :ht:np:sp#115200:\
        :cl=\E[H\E[2J:


System konfigurieren

fstab einrichten:

cat > /etc/fstab <<"EOF"
/dev/mirror/gm0s1b    none    swap    sw    0  0
/dev/mirror/gm0s1a    /       ufs     rw    1  1
/dev/mirror/gm0s1d    /usr    ufs     rw    2  2
/dev/mirror/gm0s1e    /var    ufs     rw    2  2
/dev/mirror/gm0s1f    /tmp    ufs     rw    2  2
proc                  /proc   procfs  rw    0  0
"EOF"

rc.conf einrichten:

cat > /etc/rc.conf <<"EOF"
##############################################################
###  Important initial Boot-time options  ####################
##############################################################
fsck_y_enable="YES"

##############################################################
###  Network configuration sub-section  ######################
##############################################################
hostname="devnull.example.org"
defaultrouter="10.0.2.2"
"EOF"

for interface in `ifconfig -l`; do
    if [ "$interface" = "lo0" ]; then
        continue
    fi
    cat >> /etc/rc.conf <<"EOF"
ifconfig_$interface="DHCP"
"EOF"
done

cat >> /etc/rc.conf <<"EOF"
tcp_extensions="YES"
tcp_drop_synfin="YES"
icmp_drop_redirect="YES"
gateway_enable="NO"
rpcbind_enable="NO"
pflog_enable="NO"
pf_enable="NO"
sshd_enable="YES"
ntpdate_enable="YES"
ntpdate_flags="-b -s -p 4 -t 0.1"
ntpdate_hosts="ptbtime1.ptb.de"

##############################################################
###  System console options  #################################
##############################################################
keymap="german.iso"
font8x16="iso-8x16"
font8x14="iso-8x14"
font8x8="iso-8x8"

##############################################################
###  Mail Transfer Agent (MTA) options  ######################
##############################################################
sendmail_enable="NO"
sendmail_submit_enable="NO"
sendmail_outbound_enable="NO"
sendmail_msp_queue_enable="NO"

##############################################################
###  Miscellaneous administrative options  ###################
##############################################################
syslogd_enable="YES"
syslogd_flags="-ss"
cron_flags="$cron_flags -J 15"
clear_tmp_enable="YES"

##############################################################
### Jail Configuration #######################################
##############################################################
#jail_enable="YES"
#jail_sysvipc_allow="NO"
#jail_set_hostname_allow="NO"
#jail_list=""

##############################################################
###  System services options  ################################
##############################################################
"EOF"

sshd_config einrichten:

cat >> /etc/ssh/sshd_config <<"EOF"
AllowGroups wheel
"EOF"

Arbeitsuser anlegen:

pw groupadd users -g 1000
pw groupadd admin -g 1001

pw useradd admin -u 1001 -g admin -G wheel,operator -m -s /bin/tcsh
pw usermod admin -L unicode

chmod 0700 /usr/home/admin

passwd admin

su - admin
umask 0077

cat > .cshrc <<"EOF"
# $FreeBSD: src/share/skel/dot.cshrc,v 1.14.10.1.4.1 2010/06/14 02:09:06 kensmith Exp $
#
# .cshrc - csh resource script, read at beginning of execution by each shell
#
# see also csh(1), environ(7).
#

# A righteous umask
umask 22

set path = (/sbin /bin /usr/sbin /usr/bin /usr/games /usr/local/sbin /usr/local/bin $HOME/bin)

setenv  EDITOR  ee
setenv  PAGER   more
setenv  BLOCKSIZE       K

if ($?prompt) then
        # An interactive shell -- set some stuff up
        set prompt = "[%B%n%b@%B%m%b:%B%~%b] %# "
        set filec
        set history = 1000
        set savehist = 1000
        set mail = (/var/mail/$USER)
        if ( $?tcsh ) then
                bindkey "^W" backward-delete-word
                bindkey -k up history-search-backward
                bindkey -k down history-search-forward
                bindkey ^[[3~ delete-char
        endif
endif
"EOF"

mkdir .ssh
ssh-keygen -t rsa -b 2048
cp -a .ssh/id_rsa.pub .ssh/authorized_keys

exit


Buildsystem konfigurieren

cat > /etc/make.conf <<"EOF"
KERNCONF?=DEVNULL
CPUTYPE?=native
CFLAGS= -O2 -fno-strict-aliasing -pipe
CXXFLAGS+= -fconserve-space
MAKE_SHELL?=sh
COPTFLAGS= -O -pipe
INSTALL=install -C
PRINTERDEVICE=ascii
BOOTWAIT=3000
SUP_UPDATE=
SUP=/usr/bin/csup
SUPFLAGS= -g -L 2
SUPHOST=cvsup.de.FreeBSD.org
SUPFILE=/usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE=/usr/share/examples/cvsup/ports-supfile
DOCSUPFILE=/usr/share/examples/cvsup/doc-supfile
DOC_LANG=en_US.ISO8859-1 de_DE.ISO8859-1
WITHOUT_X11=YES
"EOF"

cat > /etc/src.conf <<"EOF"
WITHOUT_GAMES=YES
WITHOUT_GDB=YES
WITHOUT_GPIB=YES
WITHOUT_GSSAPI=YES
WITHOUT_HTML=YES
WITHOUT_I4B=YES
WITHOUT_IPX=YES
WITHOUT_KERBEROS=YES
WITHOUT_LPR=YES
WITHOUT_NETGRAPH=YES
WITHOUT_PPP=YES
WITHOUT_PROFILE=YES
WITHOUT_SHAREDOCS=YES
WITHOUT_WIRELESS=YES
"EOF"


Kernel konfigurieren

mkdir -p /root/kernels
cp /usr/src/sys/amd64/conf/GENERIC /root/kernels/DEVNULL
cd /usr/src/sys/amd64/conf
ln -s /root/kernels/DEVNULL
cd ~

cat > /root/kernels/DEVNULL <<"EOF"
cpu             HAMMER
ident           DEVNULL
options         SCHED_ULE               # ULE scheduler
options         PREEMPTION              # Enable kernel thread preemption
options         INET                    # InterNETworking
options         INET6                   # IPv6 communications protocols
options         SCTP                    # Stream Control Transmission Protocol
options         FFS                     # Berkeley Fast Filesystem
options         SOFTUPDATES             # Enable FFS soft updates support
options         UFS_ACL                 # Support for access control lists
options         UFS_DIRHASH             # Improve performance on big directories
options         UFS_GJOURNAL            # Enable gjournal-based UFS journaling
options         MD_ROOT                 # MD is a potential root device
options         NFSCLIENT               # Network Filesystem Client
options         NFSSERVER               # Network Filesystem Server
options         NFSLOCKD                # Network Lock Manager
options         NFS_ROOT                # NFS usable as /, requires NFSCLIENT
options         MSDOSFS                 # MSDOS Filesystem
options         CD9660                  # ISO 9660 Filesystem
options         PROCFS                  # Process filesystem (requires PSEUDOFS)
options         PSEUDOFS                # Pseudo-filesystem framework
options         GEOM_PART_GPT           # GUID Partition Tables.
options         GEOM_LABEL              # Provides labelization
options         GEOM_MIRROR             # Disk mirroring.
options         GEOM_ELI
options         COMPAT_43TTY            # BSD 4.3 TTY compat (sgtty)
options         COMPAT_FREEBSD32        # Compatible with i386 binaries
options         COMPAT_FREEBSD4         # Compatible with FreeBSD4
options         COMPAT_FREEBSD5         # Compatible with FreeBSD5
options         COMPAT_FREEBSD6         # Compatible with FreeBSD6
options         COMPAT_FREEBSD7         # Compatible with FreeBSD7
options         SCSI_DELAY=5000         # Delay (in ms) before probing SCSI
options         KTRACE                  # ktrace(1) support
options         STACK                   # stack(9) support
options         SYSVSHM                 # SYSV-style shared memory
options         SYSVMSG                 # SYSV-style message queues
options         SYSVSEM                 # SYSV-style semaphores
options         P1003_1B_SEMAPHORES     # POSIX-style semaphores
options         _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions
options         PRINTF_BUFR_SIZE=128    # Prevent printf output being interspersed.
options         KBD_INSTALL_CDEV        # install a CDEV entry in /dev
options         HWPMC_HOOKS             # Necessary kernel hooks for hwpmc(4)
options         AUDIT                   # Security event auditing
options         MAC                     # TrustedBSD MAC Framework
options         FLOWTABLE               # per-cpu routing cache
#options        KDTRACE_FRAME           # Ensure frames are compiled in
#options        KDTRACE_HOOKS           # Kernel DTrace hooks
options         INCLUDE_CONFIG_FILE     # Include this file in kernel
options         SMP                     # Symmetric MultiProcessor Kernel
device          crypto
device          cpufreq
device          acpi
device          pci
device          ata
device          atadisk         # ATA disk drives
device          ataraid         # ATA RAID drives
options         ATA_STATIC_ID   # Static device numbering
device          scbus           # SCSI bus (required for SCSI)
device          da              # Direct Access (disks)
device          iir             # Intel Integrated RAID
device          twa             # 3ware 9000 series PATA/SATA RAID
device          twe             # 3ware ATA RAID
device          atkbdc          # AT keyboard controller
device          atkbd           # AT keyboard
device          psm             # PS/2 mouse
device          kbdmux          # keyboard multiplexer
device          vga             # VGA video card driver
device          sc
device          agp             # support several AGP chipsets
device          em              # Intel PRO/1000 Gigabit Ethernet Family
device          igb             # Intel PRO/1000 PCIE Server Gigabit Family
device          ixgbe           # Intel PRO/10GbE PCIE Ethernet Family
device          miibus          # MII bus support
device          fxp             # Intel EtherExpress PRO/100B (82557, 82558)
device          re              # RealTek 8139C+/8169/8169S/8110S
device          rl              # RealTek 8129/8139
device          vr              # VIA Rhine, Rhine II
device          loop            # Network loopback
device          random          # Entropy device
device          ether           # Ethernet support
device          vlan            # 802.1Q VLAN support
device          tun             # Packet tunnel.
device          pty             # BSD-style compatibility pseudo ttys
device          md              # Memory "disks"
device          gif             # IPv6 and IPv4 tunneling
device          faith           # IPv6-to-IPv4 relaying (translation)
device          firmware        # firmware assist module
device          bpf             # Berkeley packet filter
device          uhci            # UHCI PCI->USB interface
device          ohci            # OHCI PCI->USB interface
device          ehci            # EHCI PCI->USB interface (USB 2.0)
device          usb             # USB Bus (required)
#device         udbp            # USB Double Bulk Pipe devices
device          uhid            # "Human Interface Devices"
device          ukbd            # Keyboard
device          umass           # Disks/Mass storage - Requires scbus and da
device          ipmi
device          smbios
device          ichwd
device          coretemp
device          cpuctl
options         ENABLE_ALART    # Control alarm on Intel intpm driver
options         LIBALIAS
options         ALTQ
options         ALTQ_CBQ        # Class Based Queueing
options         ALTQ_RED        # Random Early Detection
options         ALTQ_RIO        # RED In/Out
options         ALTQ_HFSC       # Hierarchical Packet Scheduler
options         ALTQ_CDNR       # Traffic conditioner
options         ALTQ_PRIQ       # Priority Queueing
options         ALTQ_NOPCC      # Required if the TSC is unusable
options         ALTQ_DEBUG
device          tap             # Virtual Ethernet driver
device          pf              # PF OpenBSD packet-filter firewall
device          pflog           # logging support interface for PF
device          pfsync          # synchronization interface for PF
options         NULLFS          # NULL filesystem
options         UFS_EXTATTR
options         UFS_EXTATTR_AUTOSTART
device          smbus           # Bus support, required for smb below.
device          ichsmb
device          smb
options         DIRECTIO
options         ACCEPT_FILTER_DATA
options         ACCEPT_FILTER_DNS
options         ACCEPT_FILTER_HTTP
"EOF"


Kernel installieren

cp -a /boot/GENERIC/* /boot/kernel/

cat >> /boot/loader.conf <<"EOF"
geom_mirror_load="YES"
"EOF"


Abschluss der Installation

pscp -load Virtualbox -r root@127.0.0.1:/mnt/inst/home/admin/.ssh "%USERPROFILE%\ssh"


exit

umount /mnt/inst/dev
umount /mnt/inst/tmp
umount /mnt/inst/var
umount /mnt/inst/usr
umount /mnt/inst

shutdown -r now


System aktualisieren

Nach dem Reboot aktualisieren wir das System.


Source Tree auschecken

Am besten funktioniert bei FreeBSD immer noch die Aktualisierung über die System-Sourcen. Auf diesem Wege kann man ein System über viele Release-Generationen hinweg aktuell halten, ohne eine Neuinstallation durchzuführen. Das Verfahren ist zwar etwas zeitaufwändig, aber erprobt und führt bei richtiger Anwendung zu einem sauberen, aktuellen System.

Zunächst wird hierzu das Quellenverzeichnis von FreeBSD benötigt. Glücklicherweise liefert FreeBSD hierzu das Tool csup mit, das diesen Arbeitsschritt stark vereinfacht.

csup -g -L 2 -h cvsup.de.freebsd.org /usr/share/examples/cvsup/standard-supfile


Konfiguration anpassen

In #Buildsystem konfigurieren und #Kernel konfigurieren haben wir uns bereits eine geeignete make.conf und eine individuelle Kernel-Konfiguration erstellt. Dennoch sei an dieser Stelle nochmals auf das FreeBSD-Handbuch verwiesen. Insbesondere Kapitel 8 (Kernel selbst erstellen) und Kapitel 24.6 (Basissystem komplett aktualisieren) seien Jedem ans Herz gelegt.

Ausserdem empfiehlt es sich /usr/src/UPDATING zu lesen. Alle Angaben und Hinweise in dieser Datei sind aktueller und zutreffender als das Handbuch oder gar etwaige Wiki-Artikel und sollten unbedingt befolgt werden.


Vorbereitende Arbeiten

Zunächst müssen eventuell noch vorhandene Object-Dateien gelöscht werden, damit make später wirklich das gesamte System neu erstellt:

cd /usr/obj
chflags -R noschg *
rm -rf *

Für die spätere Installation des Basissystems darf /tmp nicht mit der Option noexec gemounted sein. Da zwischendrin noch mal ein Reboot erfolgt, können wir aber jetzt schon mal die entsprechende Zeile in der fstab anpassen:

#/dev/mirror/gm0s1f    /tmp    ufs     rw,noexec,nosuid    2  2
/dev/mirror/gm0s1f    /tmp    ufs     rw    2  2

Ausserdem sollte mergemaster im Pre-Build-Mode angeworfen werden, damit es während der Aktualisierung nicht zu Fehlern kommt, weil z. B. bestimmte User oder Gruppen noch nicht vorhanden sind:

cd /usr/src/usr.sbin/mergemaster
./mergemaster.sh -p


Basissystem rekompilieren

Dies kann durchaus eine Stunde oder länger dauern:

cd /usr/src
make buildworld


Kernel rekompilieren und installieren

Wenn die eigene Kernel-Konfiguration wie bei uns bereits in make.conf eingetragen ist, wird sie automatisch verwendet (kann durchaus eine Stunde oder länger dauern):

cd /usr/src
make buildkernel
make installkernel

Normalerweise wäre nun ein Reboot in den Single User Mode an der Reihe. Da sich ein Remote-System in diesem Modus ohne KVM-Lösung aber nicht bedienen lässt, begnügen wir uns damit, das System neu zu starten.

shutdown -r now

Wenn wir unser System zu einem späteren Zeitpunkt nochmals aktualisieren, sollten wir stattdessen zuvor alle Dienste ausser OpenSSH, sowie sämtliche Jails in der Datei /etc/rc.conf deaktivieren.


Basissystem installieren

Wir installieren das neue Basissystem:

cd /usr/src
make installworld

Als letzten Schritt müssen nun noch die Neuerungen in den Konfigurationsdateien gemerged werden. Dabei unterstützt uns das Tool mergemaster:

/usr/sbin/mergemaster -i -F

Anschliessend müssen wir noch die für die Installation gegebenenfalls vorgenommenen Änderungen in der fstab sowie rc.conf rückgängig machen und das System nochmals durchstarten.

shutdown -r now


Portstree einrichten

Um unser Basissystem um sinnvolle Programme erweitern zu können, fehlt uns noch der sogenannte Portstree. Diesen laden wir uns nun mittels portsnap herunter (kann durchaus eine Stunde oder länger dauern):

portsnap fetch extract

Damit ist der Portstree einsatzbereit. Um den Tree künftig zu aktualisieren genügt der folgende Befehl:

portsnap fetch update


Software installieren

So ganz ohne komfortablere Tools ist das Basis-System etwas mühselig zu administrieren. Deshalb werden aus den Ports nun einige häufig benötigte Anwendungen installiert.

Perl, portaudit und portmaster werden mit den Default-Optionen installiert:

cd /usr/ports/lang/perl5.12
make config && make config-recursive
make install clean

cd /usr/ports/ports-mgmt/portaudit
make install clean

cd /usr/ports/ports-mgmt/portmaster
make install clean

cd; rehash; portaudit -Fda

Portmaster nimmt uns ab nun etwas Arbeit beim Installieren und später beim Updaten von Ports ab.

Auch die folgenden Ports und deren Dependicies werden mit den Default-Optionen installiert:

portmaster --force-config -dB editors/nano
portmaster --force-config -dB editors/vim-lite
portmaster --force-config -dB ports-mgmt/pkg_cutleaves
portmaster --force-config -dB ports-mgmt/portupgrade
portmaster --force-config -dB sysutils/most
portmaster --force-config -dB sysutils/cpdup
portmaster --force-config -dB sysutils/pwgen2
portmaster --force-config -dB sysutils/smartmontools
portmaster --force-config -dB sysutils/tmux

Für sysinfo aktivieren den dmidecode Support:

portmaster --force-config -dB sysutils/sysinfo

Ein paar Ports müssen wir nun noch konfigurieren:

rehash

echo 'set nomodeline' >> ~/.vimrc
echo 'set nomodeline' >> /home/admin/.vimrc
chown admin:admin /home/admin/.vimrc

sed 's/^DEVICESCAN/#DEVICESCAN/' /usr/local/etc/smartd.conf.sample > /usr/local/etc/smartd.conf
echo '/dev/ad4 -a -o on -S on -s (S/../.././02|L/../../6/03)' >> /usr/local/etc/smartd.conf
echo '/dev/ad6 -a -o on -S on -s (S/../.././02|L/../../6/03)' >> /usr/local/etc/smartd.conf
echo 'daily_status_smart_devices="/dev/ad4 /dev/ad6"' >> /etc/periodic.conf
echo 'smartd_enable="YES"' >> /etc/rc.conf

Wenn wir ein Programm nicht kennen, dann finden wir zu jedem Port eine Datei pkg-descr, die eine kurze Beschreibung sowie (meistens) einen Link zur Projekt-Homepage der Software enthält. Für tmux zum Beispiel würden wir die Beschreibung unter /usr/ports/misc/tmux/pkg-descr finden.


Wie geht es weiter?

Natürlich mit den FreeBSD Tips und Tricks und/oder mit dem FreeBSD Hosting System.

Viel Spass mit dem neuen FreeBSD Basissystem.