FreeBSD 7.0 Installation auf einem Dell SC1435 Server

Vorwort

Vorab eine wichtige Information betreffend des Servers. Ich arbeite mit dem Dell Server SC1435. Dazu gibt es folgendes zu sagen: Im Enterprise-Bereich gibt es bei Dell Abstriche bei den PowerEdge-Servern, wenn ein „SC“ im Produktnamen enthalten ist, denn dieses steht für „Simplified Computing“ und daher ist kein Hardware-Monitoring mit Dell-eigenen Werkzeugen wie dem Dell OpenManage Server Administrator (OMSA), das auf OpenIPMI setzt, möglich. Ein RAID Monitoring ist unter FreeBSD und dieser Dell Serverhardware nicht möglich!

Server Hardware Details

  • HDD: 2 x 750 GB Serial Attached SCSI (SAS) (Seagate Barracuda ES.2)
  • RAID 1 (Spiegelung)
  • 2 x QuadCore CPU

Basis System installieren

Als erstes laden wir die DVD herunter und brennen sie auf eine DVD. Schieb die DVD ein, beim booten wähle 2 (Boot with ACPI disabled) Sollte es mit ACPI disabled hängenbleiben, mit select 1 probieren. Der Dell läuft MIT ACPI (also Default / 1). Wähle
  • Standard Install

Partition Editor

Wenn wir RAID mit 750GB Platten verwenden, kommt hier eine Fehlermeldung von wegen „WARNING: A geometry of 91182/255/63 for da0 is incorrect…..“. In der Regel kann man dies einfach ignorieren, da FreeBSD eigentlich schon die richtigen Zahlen nimmt. Richtig würde man es so aussrechnen:
[..]Bei SCSI-Festplatten hängt die zu verwendende Geometrie davon ab, ob der Extended Translation Support auf Ihrem Controller eingeschaltet ist (oft auch als Unterstützung für DOS-Platten >1GB oder ähnlich bezeichnet). Falls sie ausgeschaltet ist, benutzen Sie N Zylinder, 64 Köpfe und 32 Sektoren/Spur, wobei N die Kapazität der Festplatte in MB ist. Zum Beispiel sollten für eine 2GB Festplatte 2048 Zylinder, 64 Köpfe und 32 Sektoren/Spur angegeben werden. Falls sie eingeschaltet ist (was oft der Fall ist, um bestimmte Einschränkungen von MS-DOS zu umgehen) und die Plattenkapazität mehr als 1GB beträgt, benutzen Sie M Zylinder, 63 Sektoren/Spur (nicht 64) und 255 Köpfe, wobei M der Plattenkapazität in MB, dividiert durch 7,844238 entspricht (!). Also würde unsere 2GB Beispielplatte 261 Zylinder, 63 Sektoren/Spur und 255 Köpfe haben.[..] Original Text
Bei mir traf die zweite Variante zu (sie ist anscheinend eingeschaltet, hab aber keine Ahnung, wie man das nachgucken kann). Gemäss Startup Message von BIOS, hat die HDD eine Kapazität von 698GB. Wenn ich jetzt rechne, komme ich auf folgendes: 698 * 1024 / 7.844238 = 91118.092031373856836062342830495 Die Zahlen, die von FreeBSD ausgerechnet wurden, stimmen also ziemlich gut überein. Mit „G“ könnte man die Geometrie nun anpassen. Wenn ich das aber mache und meine Zahl eingebe, kommt ein Fehler, dass dies nicht stimme und er nimmt wieder automatisch die Zahl, die er selber ausgerechnet hat. Somit lassen wir das und machen so weiter:
  • A – use entire disk
  • Q – to exit and continue

Disklabel Editor

Diese Werte benutze ich bei 750GB C = Create
  • C – 16G – FS – /
  • C – 8G – Swap (wenn 1GB Memory, dann 2G Swap – immer ca. das doppelte von memory)
  • C – 2G – FS – /tmp
  • C – 200G – FS – /backup
  • C – Enter (Restspace) – FS – /usr
Beim alten System habe ich folgende Werte benutzt (dient einfach für mich als nostalgische Referenz 😉 ):
  • / 8GB
  • SWAP 2G
  • /tmp 1G
  • /usr Restspace
  • -> Backup hatte eine separate Festplatte.

Konfiguration

  • Change to disk 1 -> ähm.. wir haben ja diese disc bereits drin? weiss nicht mehr, was das soll… Q – to quit and continue
  • Choose Distribution -> Runterscrollen. A und Bbefinden sich am Schluss der Liste
    • A – Minimal
    • B – Custom
      • base
      • kernels (all)
      • man
      • src (all, ausser games)
      • ports
  •  OK
  • Choose Install Media > CD / DVD
  • YES -> Install
  • Configure Devices
    • Configure Network YES (enable DHCP)
    • Network Gateway NO
    • Inetd NO
    • SSH Yes
    • anonymous FTP No
    • NFS Server No
    • NFS Client NO
    • Configure System Console Settings NO
    • Set Timezone Yes
    • Enable Linux Binary compatibilty Yes
    • * ACPI was disabled during boot. Would you like to disable it permantly? YES
    • Browse Collection? No
    • Add initial user accounts to the system? YES -> User erstellen (siehe unten) und zur bestehenden gruppe wheel hinzufügen
    • set passwd for user root
    • display configuration overview – NO
    • Exit installation
Ab hier (nach Reboot) kann man übrigens bereits per SSH connecten. Das macht die weitere Konfiguration einfacher.

User einrichten

Weitere User lassen sich später jederzeit mit dem Befehl adduser einrichten.
Username: myusername
Full name: Mein Name
Uid (Leave empty for default):
Login group [myusername]:
Login group is myusername. Invite sunci into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh nologin) [sh]:
Home directory [/home/myusername]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : myusername
Password   : *****
Full Name  : Mein Name
Uid        : 1001
Class      :
Groups     : myusername wheel
Home       : /home/myusername
Home Mode  :
Shell      : /bin/sh
Locked     : no
OK? (yes/no):
OK? (yes/no): yes
adduser: INFO: Successfully added (myusername) to the user database.
Add another user? (yes/no): no
Goodbye!

System Konfigurieren

Wir können nun bereits per SSH connecten. Beachte, dass das root Login per Default deaktiviert ist. SSH Client Connection Config ist:
  • Protocol: ssh2
  • Username: zusätzlichen User, den Du vorher eingerichtet hast
  • Auth, Primary: Keyboard Interactive
Also nun machen wir eine SSH Connection, da dies die weiteren Konfigurationen wesentlich vereinfacht. Copy/Paste ist wieder möglich 😉

/etc/rc.conf

Im /etc/rc.conf werden Startoptionen definiert. Falls die Datei noch nicht existiert, kann man sie ruhig erstellen – wird aber mit Sicherheit schon existent sein. Hier mein aktuelles rc.conf:
# — sysinstall generated deltas — # Tue Aug 12 20:17:52 2008 # Created: Tue Aug 12 20:17:52 2008 # Enable network daemons for user convenience. # Please make all changes to this file, not to /etc/defaults/rc.conf. # This file now contains just the overrides from /etc/defaults/rc.conf. hostname=“corky.shoe.org“ ##ifconfig_bge0=“DHCP“ defaultrouter=“80.74.159.1″ ifconfig_bge0=“inet 80.74.159.5 netmask 255.255.255.0″ keymap=“swissgerman.iso.acc“ sshd_enable=“YES“ #———————————————–# # Time Server/Client # #———————————————–# ntpd_enable=“NO“ ntpdate_enable=“YES“ ntpdate_flags=“-b swisstime.ethz.ch 0.ch.pool.ntp.org 1.ch.pool.ntp.org 2.ch.pool.ntp.org“ #———————————————–# # Database Server (MySQL) # #———————————————–# mysql_dbdir=“/www/server/databases“ mysql_enable=“YES“ #———————————————–# # Web Server # #———————————————–# apache22_enable=“YES“ apache22ssl_enable=“YES“ #———————————————–# # FTP Server # #———————————————–# proftpd_enable=“YES“ #———————————————–# # DNS Server # #———————————————–# named_enable=“YES“ #———————————————–# # Mail Server # #———————————————–# # Cyrus cyrus_imapd_enable=“YES“ # Sendmail sendmail_enable=“YES“ # Run the sendmail inbound daemon (YES/NO). sendmail_submit_enable=“YES“ # Start a localhost-only MTA for mail submission #———————————————–# # DomainKeys # #———————————————–# milterdkim_enable=“YES“ milterdkim_domain=“shoe.org“ milterdkim_key=“/var/db/dkim/mail.key.pem“ milterdkim_selector=“mail“ ##milterdkim_flags=“-b s -c simple/simple -D -S rsa-sha1 -i /var/db/dkim/ilist“ # wir versuchen es jetzt mit relaxed/simple. vielleicht gehts dann bei aol… milterdkim_flags=“-b s -c relaxed/simple -D -S rsa-sha1 -i /var/db/dkim/ilist“ #milterdkim_cfgfile=“/etc/mail/dkim-filter.conf“ milterdkim_socket=“local:/var/run/milterdkim/filter“ #———————————————–# # GreyListing # #———————————————–# relaydelay_enable=“YES“ #———————————————–# # MRTG & Nagios Server Monitor # #———————————————–# mrtg_daemon_enable=“YES“ nagios_enable=“YES“ #———————————————–# # Firewall Stuff # #———————————————–# firewall_enable=“YES“ firewall_type=“/etc/ipfw.corky“ firewall_quiet=“YES“ firewall_logging=“YES“ #———————————————–# # BOINC / Seti # #———————————————–# boinc_enable=“YES“ #———————————————–# # DenyHosts / SSHD Honeypot # syslogd should ideally be run with the -c option; this will ensure that # denyhosts notices multiple repeated login attempts. #———————————————–# denyhosts_enable=“YES“ syslogd_flags=“-c“ #muss nicht immer laufen. er startet von selber, wenn nötig. #rsyncd_enable=“YES“ #———————————————–# # FSCK beim Startup # damit er automatisch mit y fsck macht # und wir somit remote reboot weiterhin # benutzen können #———————————————–# fsck_y_enable=“YES“ background_fsck=“NO“ #———————————————–#

fsck nach Remote Reboot

Nach der Ausführung von Remote Reboot fährt das System meistens nicht mehr hoch, weil er möchte, dass fsck manuell ausgeführt wird. Er möchte, dass man fsck -y im SingleMode über die Konsole ausführt. Das kann man automatisch machen lassen mit diesen Zeilen im rc.conf
#-----------------------------------------------#
#       FSCK beim Startup
#       damit er automatisch mit y fsck macht
#       und wir somit remote reboot weiterhin
#       benutzen können
#-----------------------------------------------#
fsck_y_enable="YES"
background_fsck="NO"

/etc/ipfw.corky

Bei der Firewall Config ist unbedingt darauf zu achten, dass man die korrekte Ethernet Schnittstelle reinschreibt. Sonst kommt niemand mehr auf den Server. Die korrekte Bezeichnung findet man mit
ifconfig
kann z.B. eine davon sein:
xl0  -  eth0  -  bge0 - em0
Hier ein Beispiel Config File:
# # $Id: ipfw.corky,v 1.2 2005/09/28 08:37:25 root Exp $ # # keep-state = schreibt in dynamic table rein # dynamic table kann man so anzeigen lassen: # expiry time of rules ist by default 300s # ipfw -d -e list # # output sieht dann etwa so aus: # ## Dynamic rules (2983): # 21000 9 1164 (0s) STATE tcp 220.22.143.6 2052 <-> 81.94.97.82 80 # 21000 1312 54308 (269s) STATE tcp 222.152.152.46 50732 <-> 81.94.97.82 80 # 21000 357 14896 (269s) STATE tcp 85.1.140.112 51826 <-> 81.94.97.82 80 # 21000 849 36135 (259s) STATE tcp 83.78.32.143 49293 <-> 81.94.97.82 80 # 21000 1089 44908 (254s) STATE tcp 72.220.224.34 60192 <-> 81.94.97.82 80 # rule rule expired in 254s # # es gibt auch einen lifetime-patch # http://archives.neohapsis.com/archives/freebsd/2000-07/0147.html # muss aber dafuer kernel neu kompilieren. ist sicher nicht so gescheit. # # # IP RANGES # First segment (8), First two segments (16), First three segments (24) or all segments (32). # das routing kann man aber auch meistens mit whois 84.253.30.125 herausfinden # route: 84.253.0.0/18 # flush # # ——— Full Access To & From ———— table 1 flush # cybernet table 1 add 84.253.0.0/18 table 1 add 83.173.192.0/18 table 1 add 212.90.192.0/19 table 1 add 62.152.192.0/19 # ————————————————— # # ——— Bad Guys ———— table 10 flush # scheint eine dos attacke zu sein. grast alles ab und # macht load von ueber 100! ist ip aus china table 10 add 222.46.18.34/32 # hat es während 2 tagen versucht. einer aus deutschland # SSHD attack versuche # Jun 17 15:24:11 corky sshd[14892]: Failed unknown for illegal user admin from 85.25.10.75 port 54739 ssh2 table 10 add 85.25.10.75/32 table 10 add 200.29.139.0/28 # ————————————————— # this will be removed later add 1 allow ip from any to any # # # catch-all for all state-setups later add 999 check-state # # don’t want no IP options add 1000 deny ip from any to any ipoptions ssrr add 1001 deny ip from any to any ipoptions lsrr # # loopback is always ok add 1002 allow ip from any to any via lo0 add 1100 allow ip from any to 224.0.0.0/4 # # Special Configurations add 1500 allow ip from me to table(1) add 1505 allow ip from table(1) to me # # things to block bad ppl out of me: add 1800 deny ip from table(10) to me # # drop tcp and udp bootps/netbios requests add 2010 deny tcp from any to any 67,68,137,138,139 in via bge0 add 2011 deny udp from any to any 67,68,137,138,139 in via bge0 add 2012 deny tcp from any 67,68,137,138,139 to any in via bge0 add 2013 deny udp from any 67,68,137,138,139 to any in via bge0 # # reject reserved 0/8 add 3030 deny ip from 0.0.0.0/8 to any in via bge0 add 3031 unreach net-prohib log ip from any to 0.0.0.0/8 out via bge0 # # reject reserved 255/8 add 3040 deny log ip from 255.0.0.0/8 to any in via bge0 add 3041 unreach net-prohib log ip from any to 255.0.0.0/8 out via bge0 # # reject tcp ident requests add 5000 unreach filter-prohib tcp from any to any 113 in # # allow icmp (really?) add 6000 allow icmp from me to any add 6001 allow icmp from any to me in icmptypes 0,3,8,11,14 ##add 6001 allow icmp from any to me keep-state # # we don’t talk ospf, igmp add 7000 deny ospf from any to any add 7001 deny igmp from any to any # # ##############################################3 # # SERVER SERVICES # ##############################################3 # ssh server ##add 20000 allow tcp from any to me 22 keep-state in setup add 20000 allow tcp from any to me 22 in setup limit src-addr 1 # standard firewall rule add 21000 allow tcp from any to me 80 in via bge0 setup #add 21010 allow tcp from any to me 443 in via bge0 setup keep-state add 21010 allow tcp from any to me 443 in via bge0 setup limit src-addr 15 # # smtp add 22000 allow tcp from any to me 25,465,587 in setup keep-state # # ftp add 23000 allow tcp from any to me 20,21 in setup keep-state # # pop/imap incl. SSL add 24000 allow tcp from any to me 110,143 in setup keep-state add 24010 allow tcp from any to me 993,995 in setup keep-state # deny sieve explizit add 24500 deny tcp from any to me 2000 # # ftp add 25000 allow tcp from any to me 53 add 25020 allow udp from any to me 53 # # allow me to traceroute outside, as well as other udp based tools like ntp add 41000 allow udp from me to any out via bge0 keep-state add 43000 allow ip from me to any keep-state # deny any any add 60000 deny log ip from any to any # # delete basic temporary setup and re-set counters delete 1 zero

/etc/make.conf

Diverse Optimerungen am besten von Anfang an ins /etc/make.conf reinpacken. Falls die Datei noch nicht existiert, kann man sie ruhig erstellen. (auch hier einfach altes conf einfügen)
vi /etc/make.conf
# CVSUP Informations
SUP_UPDATE =    yes
SUP =           /usr/local/bin/cvsup
SUPFLAGS =      -g -L 2
SUPHOST =       cvsup.ch.FreeBSD.org
SUPFILE =       /usr/share/examples/cvsup/stable-supfile
#SUPFILE = /usr/share/examples/cvsup/standard-supfile
PORTSSUPFILE =  /usr/share/examples/cvsup/ports-supfile
DOCSUPFILE =    /usr/share/examples/cvsup/doc-supfile
Anstelle des cvsup.ch.FreeBSD.org ist es am klügsten, wenn man den nächstgelegensten Mirror nimmt. Mein aktuelles make.conf:
#———————————————–# # Several Informations # #———————————————–# USA_RESIDENT=NO MAKE_IDEA=YES WITH_OPENSSL=yes # z.b. fuer mysql WITH_MYSQL=yes # z.b. fuer proftpd WITHOUT_X11=yes # man will kein X WITHOUT_IPV6=YES NO_GUI=yes # man will kein X WITH_THREADS=yes #wichtig für threaded support!! CFLAGS= -O -pipe COPTFLAGS= -O -pipe #———————————————–# # CVSUP Informations # #———————————————–# SUP_UPDATE= yes SUP= /usr/local/bin/cvsup SUPFLAGS= -g -L 2 SUPHOST= cvsup.ch.FreeBSD.org SUPFILE= /usr/share/examples/cvsup/stable-supfile PORTSSUPFILE= /usr/share/examples/cvsup/ports-supfile DOCSUPFILE= /usr/share/examples/cvsup/doc-supfile #fuer freebsd #USE_NONDEFAULT_X11BASE=yes # added by use.perl 2008-08-12 19:06:58 PERL_VER=5.8.8 PERL_VERSION=5.8.8
 

/boot/loader.conf

Diverse Optimerungen am besten von Anfang an ins /boot/loader.conf reinpacken:
##load_agp="YES"
loader_colour="YES"
autoboot_delay="2"
ipmi_load="YES"
#
# damit sollte diese nachricht von /var/log/messages/ verschwinden
# mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x01 Depth 121
# die taucht dann auf, wenn zu schnell kompiliert bzw. zu schnell auf die platten geschrieben wird.
#hw.mpt.enable_sata_wc=1
# eventuell heisst es auch mpt.enable_sata_wc
hw.ata.wc=0

/etc/ssh/sshd_config

Damit die SSH Connection nicht automatisch nach N Minuten getrennt wird, Config wie folgt anpassen:
vi /etc/ssh/sshd_config
Folgendes anpassen:
ClientAliveInterval 30
ClientAliveCountMax 5
SSHD neu starten:
/etc/rc.d/sshd restart
Stopping sshd.
Waiting for PIDS: 861.
Starting sshd.

Disable root Login

Bevor wir das machen, zuerst einen User einrichten, der zur Gruppe WHEEL gehört! Und natürlich testen, ob’s auch funktioniert 😉
vi /etc/ssh/sshd_config
Setzte
PermitRootLogin no
Restarten
/etc/rc.d/sshd restart

Ports Collection installieren

Wenn wir von der CD installieren, installieren wir die Ports Collection immer automatisch. Sollte die Port Collection nicht vorhanden sein, kann man sie manuell runterladen und installieren. Hier die Original Info:
* http://www.freebsd.org/ports/installing.html
Man kann die Collection direkt ins /usr Verzeichnit entpacken. Es ist mit ports/security etc. aufgebaut. Man kann es aber vorsichtshalber natürlich auch zuerst in ein anderes Verzeichnis entpacken. Man weiss ja nie 😉 Um sicher zu gehen, dass der Content des Tar Files auch die korrekte Verzeichnisstruktur hat, einfach so testen:
tar -tvf ports.tar.gz | more
Denn wenn man das Verzeichnis erst nach dem entpacken moved, dauert das total lange.
cd /usr
fetch ftp://ftp.freebsd.org/pub/FreeBSD/ports/ports/ports.tar.gz
tar zxfv ports.tar.gz
rm ports.tar.gz
chown -R root:wheel ports
So, und das ist GANZ WICHTIG, damit später auch alles richtig läuft:
make fetchindex
So wird der Index der Ports geschrieben. Wenn dieser Fehlt, funktioniert z.b. portdowngrade nicht mehr.

CVSUP Installieren

Da wir CVSUP bereits im make.conf vorkonfiguriert haben, können wir nun cvsup-without-gui installieren.
cd /usr/ports/net/cvsup-without-gui
make install clean
Ein Supfile sieht etwa so aus:
*default host=cvsup.ch.FreeBSD.org
*default base=/var/db
*default prefix=/usr
*default release=cvs tag=RELENG_5
*default delete use-rel-suffix
*default compress
src-all

Portupgrade

Nun gehts weiter mit Portupgrade.

Fehlermeldungen

kernel: mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x20 Depth 122

Mit RAID kann es sein, dass es während der Installation zu Fehlermeldungen kommt wie:
# tail -f /var/log/messages

Aug 12 20:36:37 corky kernel: mpt0: QUEUE FULL EVENT: Bus 0x00 Target 0x20 Depth 122
Dies in der Regel, nachdem viele Daten sehr schnell auf die Platte geschrieben wurden. Das Problem liegt mit grösster Wahrscheinlichkeit an der Firmware des RAID Controllers. Da wir aber bereits die aktuellste Firmware benutzen, können wir sie auch nicht updaten – und unter FreeBSD kann man eh keine Firmware von Dell updaten (anscheinend…).

Workaround

Limitiere die Tags manuell mit camcontrol (ist bereits vor-installiert). Der Fehler entsteht, weil die vordefinierten MaxTags auf 255 eingestellt sind:
# camcontrol tags 0:0:0 -v
(pass0:mpt0:0:0:0): dev_openings 255
(pass0:mpt0:0:0:0): dev_active 0
(pass0:mpt0:0:0:0): devq_openings 255
(pass0:mpt0:0:0:0): devq_queued 0
(pass0:mpt0:0:0:0): held 0
(pass0:mpt0:0:0:0): mintags 2
(pass0:mpt0:0:0:0): maxtags 255
anpassen kann man das nun so:
[root@corky /]# camcontrol tags 0:0:0 -N 119 -v
(pass0:mpt0:0:0:0): tagged openings now 119
(pass0:mpt0:0:0:0): dev_openings 119
(pass0:mpt0:0:0:0): dev_active 0
(pass0:mpt0:0:0:0): devq_openings 119
(pass0:mpt0:0:0:0): devq_queued 0
(pass0:mpt0:0:0:0): held 0
(pass0:mpt0:0:0:0): mintags 2
(pass0:mpt0:0:0:0): maxtags 255
Danach sind die Fehlermeldungen weg. Eventuell ein bisschen pröbeln, was das max Limit ist. Wenn aber um Tag 221 / 222 der Fehler kommt, ist 199 ein guter Wert. Da diese Änderung nach jedem Boot neu gemacht werden muss, installiere noch den Startup Script:
vi /etc/rc.local  (einfach erstellen, falls es das file noch nicht gibt)
paste:
camcontrol tags 0:0:0 -N 119
   
  • *

    Du kannst diese HTML tags verwenden: <a> <abbr> <acronym> <b> <blockquote> <cite> <code> <del> <em> <i> <q> <s> <strike> <strong>

  • Kommentar-Feed für diesen Beitrag
nach oben