Wenn Server nach einem Neustart die Netzwerkkarten vertauscht haben

Ich hatte letztlich das Problem, dass sich Netzwerkkarten bei Linux und Windows nach einem Neustart immer wieder vertauschten. Da die Server dadurch über Netzwerk nicht mehr erreichbar sind und ausfallen, ist das natürlich sehr ärgerlich. Da ich jetzt gerade eine neuen Firewall auf Basis von Ubuntu Linux mit 9 Netzwerkkarten und 100 VPN-Tunneln eingerichtet habe, wollte ich das Problem auf jeden Fall verhindern. Deshalb habe ich das Problem noch mal genauer untersuch und viel Doku dazu gelesen. Jetzt ist mir klar warum das Problem auftritt und ich kann es zukünftig verhindern.

Ursache: Da die Betriebssysteme zum schnellen Booten alles parallel starten, kommt es beim Booten regelmäßig dazu, dass die Hardwaretreiber in anderer Reihenfolge geladen werden. Wenn man im Server zwei Netzwerkkarten mit unterschiedlichen Treibern hat, kann dabei die Reihenfolge vertauscht werden, in der die Treiber geladen werden. Da bei älteren Windows- und Linuxservern die Netzwerkkarten einfach nur anhand der Startreihenfolge durchnummeriert werden, kann es somit vorkommen, dass die IP-Konfiguratiuonen der Karten durcheinander gewürfelt werden.

Lösung bei neueren Betriebssystemen: Bei neueren Betriebssystemen wird das Vertauschen der Karten verhindert. Windows merkt sich inzwischen für welche Karte eine Konfiguration war und zählt bei neuen Karten einfach immer weiter hoch. Es bindet (vermutlich anhand der Mac-Adresse oder Seriennummer) die Konfiguration fest an eine Netzwerkkarte und vergibt eine bereits vergebene Nummer kein zweites mal. Deshalb hat man bei Windows auch machmal einen Netzwerkadapter 5 oder 6, obwohl aktuell nur eine Karte im Betriebssystem steckt. Bei Linux wird der Steckplatz der Karte mit in den Namen der Netzwerkkarte aufgenommen. Eine Netzwerkkarte auf PCI-Slot 2 heißt dann z.B. p2p1, wobei das p2 dann für den PCI-Slot 2 und das p1 für den ersten Port der Karte steht. Theoretisch kann man bei Linux also eine neue Karte in den gleichen Slot stecken und die Konfiguration sollte noch funktionieren.

Probleme bei der Virtualisierung mit Ubuntu 14.04 LTS und KVM

Nachdem Ubuntu 14.04 LTS jetzt schon über zwei Monate alt ist, habe ich die ersten Server migriert. Ich hatte gehofft, dass die meisten schlimmen Fehler inzwischen behoben sind und man das System ohne größere Probleme betreiben kann.

Als ich den ersten Server für Virtualisierung migrierte, erwies sich meine Annahme aber leider als falsch. Zunächst liefen die Gast-Betriebsysteme ohne Probleme und dank der Technik Hyper V von Microsoft auch viel schneller als vorher. Je nach Auslastung wurden sie aber zunehmend langsamer und stürzten nach 3 bis 12 Stunden ganz ab. Die Windows-Gäste standen dann im Bluescreen und die Linux-Gäste hatten eine Kernelpanik.

Wie sich zeigte gibt es im Linux-Kernel 3.13 von Ubuntu 14.04 wohl noch einige Bugs, die früher oder später für einen Absturz der Gast-Betriebssysteme sorgen:

Nach diversen erfolglosen Versuchen das Problem in den Griff zu bekommen, stieß ich auf einen Blog-Post von Peter Kieser. Dieser machte den Vorschlag, den erprobten Linux-Kenel 3.10 mit Langzeitsupport für Ubuntu 14.04 zu kompilieren. Dieser Kernel wird auch bei RedHat Enterprise Linux verwendet, ist für Virtualisierung erprobt und er löste alle meine Probleme! Und dies geht wie folgt (ggf. kann man natürlich auch einen neueren Patchlevel des 3.10er Kerbels verwenden):

apt-get -y install build-essential
cd /usr/local/src
wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.46.tar.xz
tar -Jxf linux-3.10.46.tar.xz
cd linux-3.10.46
cp /boot/config-`uname -r` .config
make olddefconfig
make -j`nproc` INSTALL_MOD_STRIP=1 deb-pkg
dpkg -i ../*.deb
apt-mark hold linux-libc-dev

Außerdem machte Peter Kieser noch einige Tuning Vorschläge, die er auch durch den Vergleich mit RedHat Enterprise Linux gefunden hatte. Ich habe mir davon die Verwendung des e1000 Netzwerkkartentreibers bei den Windows-Gästen, die Einträge für Hyper V in der Konfig der Windows-Gäste, die Anpassung von Grub und die Einträge in der /etc/sysctl.conf abgeschaut.

Einträge für Hyper V in der Konfig der Windows-Gäste

In die Konfig der Windows-Gäste müssen – sofern noch nicht vorhanden – die folgenden Zeilen in den Abschnitt „features“ eingetragen werden:

  <hyperv>
    <relaxed state='on'/>
    <vapic state='on'/>
    <spinlocks state='on' retries='4096'/>
  </hyperv>

In die Konfig der Windows-Gäste gelangt man am einfachsten, wenn man in der virsh

edit <Name der virtuellen Maschine>

eingibt. Man landet dann mit einem vi in der Konfig und wenn man den vi beendet, wird die Konfig auch gleich richtig gespeichert.

Die Datei sollte nach den Änderungen etwa wie folgt aussehen:

<domain type='kvm'>
  <name>WKSNUE01</name>
  <uuid>cce892d2-8fee-3add-f25d-6a46b1f14268</uuid>
  <memory unit='KiB'>4194304</memory>
  <currentMemory unit='KiB'>4194304</currentMemory>
  <vcpu placement='static'>1</vcpu>
  <os>
    <type arch='x86_64' machine='pc-1.0'>hvm</type>
    <boot dev='hd'/>
  </os>
  <features>
    <acpi/>
    <apic/>
    <pae/>
    <hyperv>
      <relaxed state='on'/>
      <vapic state='on'/>
    </hyperv>
  </features>
  <clock offset='localtime'/>
  <on_poweroff>destroy</on_poweroff>
  <on_reboot>restart</on_reboot>
  <on_crash>restart</on_crash>
  <devices>
    <emulator>/usr/bin/kvm</emulator>
    <disk type='file' device='disk'>
      <driver name='qemu' type='qcow2'/>
      <source file='/daten/images/WKSNUE01.img'/>
      <target dev='hda' bus='ide'/>
      <address type='drive' controller='0' bus='0' target='0' unit='0'/>
    </disk>
    <controller type='ide' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/>
    </controller>
    <controller type='usb' index='0'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/>
    </controller>
    <controller type='pci' index='0' model='pci-root'/>
    <interface type='network'>
      <mac address='52:54:00:14:8c:a5'/>
      <source network='default'/>
      <model type='rtl8139'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x03' function='0x0'/>
    </interface>
    <serial type='pty'>
      <target port='0'/>
    </serial>
    <console type='pty'>
      <target type='serial' port='0'/>
    </console>
    <input type='tablet' bus='usb'/>
    <input type='mouse' bus='ps2'/>
    <input type='keyboard' bus='ps2'/>
    <graphics type='vnc' port='-1' autoport='yes'/>
    <sound model='ich6'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x04' function='0x0'/>
    </sound>
    <video>
      <model type='vga' vram='9216' heads='1'/>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/>
    </video>
    <memballoon model='virtio'>
      <address type='pci' domain='0x0000' bus='0x00' slot='0x05' function='0x0'/>
    </memballoon>
  </devices>
</domain>

Anpassung von Grub

In der Datei „/etc/default/grub“ sollten für den Linux-Kernel „Headline scheduler“, and „transparent hugepages“ eingeschaltet werden. Dies macht macht man in der Variable „GRUB_CMDLINE_LINUX_DEFAULT“. Die Zeile mit der Variable sollte dazu wie folgt aussehen.

GRUB_CMDLINE_LINUX_DEFAULT="elevator=deadline transparent_hugepage=always"

Damit die Anpassung aktiv wird muss man noch den folgenden Befehl eingeben.

update-grub

Einträge für die Datei /etc/sysctl.conf

kernel.sched_min_granularity_ns=10000000
kernel.sched_wakeup_granularity_ns=15000000
vm.dirty_ratio=10
vm.dirty_background_ratio=5
vm.swappiness=10

Das Tunneln von X11 über SSH bei Ubuntu 14.04 geht nicht

Zu meiner Überraschung funktionierte das Tunneln von X11 über ssh auf einem Ubuntu 14.04 Server nicht mehr. Schon beim Login über den Befehl

ssh -X <Hostname>

gibt es den Fehler „X11 forwarding request failed on channel 0“,
obwohl in der /etc/ssh/sshd_config der Eintrag „X11Forwarding yes“ gesetzt ist.

Auch eine Installation der der XServer Utils

apt-get install x11-xserver-utils

brachte keine Lösung und nicht einmal xclock lief.

Nach ein bisschen Suchen stellt ich fest, dass das Paket xauth fehlt. Wenn man dieses nachinstalliert funktioniert auch das Tunneln von X11 über SSH wieder.

apt-get install xauth

Weitere Kundendatenbank in OTRS einbinden

Bei Help Desk Software ist es oft sinnvoll auf mehrere Kundendatenbanken zuzugreifen. Dies ermöglicht einem z.B. die Kunden aus dem hauseigenen ERP-System zu verwenden, ohne dazu doppelte Datenhaltung zu betreiben oder komplizierte Replikation-Mechanismen zu verwenden. Die flexible Help Desk Software und IT-Service Management-Lösung OTRS bietet einem deshalb in der aktuellen Version 3.2 die Möglichkeit bis zu zehn weitere Kundendatenbanken anzuschließen.

Um eine weitere Kundendatenbank anzubinden braucht man in der Datei Kernel/Config.pm nur ein Objekt $Self->{CustomerUser2} anlegen und in diesem die nötigen Einstellungen für den Zugriff auf die weitere Datenbank vornehmen. Nähere Informationen dazu sind in der Dokumentation auf der Webseite http://doc.otrs.org zu finden. Im folgenden eine Beispielkonfiguration für eine Anbindung einer MySQL-Datenbank mit einem iso-8859-1 Zeichensatz. (Achtung! Bei Verwendung müssen hier natürlich mindestens Host, Datenbank, Tabelle, Benutzer und Passwort angepasst werden.)

# CustomerUser (customer database backend and settings)
$Self->{CustomerUser2} = {
    Name => 'Database Datasource Kunden2',
    Module => 'Kernel::System::CustomerUser::DB',
    Params => {
            DSN => 'DBI:mysql:database=customerdb;host=customerdbhost',
            User => 'dbbenutzer',
            Password => 'dbpasswort',
            Table => 'customer_user',
            SourceCharset => 'iso-8859-1',
            DestCharset => 'utf-8',
            CaseSensitive => 0,
        },
# customer unique id
CustomerKey => 'login',
 
# customer #
CustomerID => 'customer_id',
CustomerValid => 'valid_id',
    CustomerUserListFields => ['first_name', 'last_name', 'email'],
    CustomerUserSearchFields => ['login', 'last_name', 'customer_id'],
    CustomerUserSearchPrefix => '',
    CustomerUserSearchSuffix => '*',
    CustomerUserSearchListLimit => 250,
    CustomerUserPostMasterSearchFields => ['email'],
    CustomerUserNameFields => ['title','first_name','last_name'],
    CustomerUserEmailUniqCheck => 1,
#    # show not own tickets in customer panel, CompanyTickets
#    CustomerUserExcludePrimaryCustomerID => 0,
#    # generate auto logins
#    AutoLoginCreation => 0,
#    AutoLoginCreationPrefix => 'auto',
#    # admin can change customer preferences
#    AdminSetPreferences => 1,
#    # cache time to live in sec. - cache any database queries
#    CacheTTL => 0,
#    # just a read only source
#    ReadOnly => 1,
    Map => [
        # note: Login, Email and CustomerID needed!
        # var, frontend, storage, shown (1=always,2=lite), required, storage-type, http-link, readonly, http-link-target
        [ 'UserTitle',      'Title',      'title',      1, 0, 'var', '', 0 ],
        [ 'UserFirstname',  'Firstname',  'first_name', 1, 1, 'var', '', 0 ],
        [ 'UserLastname',   'Lastname',   'last_name',  1, 1, 'var', '', 0 ],
        [ 'UserLogin',      'Username',   'login',      1, 1, 'var', '', 0 ],
        [ 'UserPassword',   'Password',   'pw',         0, 0, 'var', '', 0 ],
        [ 'UserEmail',      'Email',      'email',      1, 1, 'var', '', 0 ],
 
#        [ 'UserEmail',      'Email', 'email',           1, 1, 'var', '$Env{"CGIHandle"}?Action=AgentTicketCompose&ResponseID=1&TicketID=$Data{"TicketID"}&ArticleID=$Data{"ArticleID"}', 0 ],
        [ 'UserCustomerID', 'CustomerID', 'customer_id', 0, 1, 'var', '', 0 ],
 
#        [ 'UserCustomerIDs', 'CustomerIDs', 'customer_ids', 1, 0, 'var', '', 0 ],
        [ 'UserPhone',        'Phone',       'phone',        1, 0, 'var', '', 0 ],
        [ 'UserFax',          'Fax',         'fax',          1, 0, 'var', '', 0 ],
        [ 'UserMobile',       'Mobile',      'mobile',       1, 0, 'var', '', 0 ],
        [ 'UserStreet',       'Street',      'street',       1, 0, 'var', '', 0 ],
        [ 'UserZip',          'Zip',         'zip',          1, 0, 'var', '', 0 ],
        [ 'UserCity',         'City',        'city',         1, 0, 'var', '', 0 ],
        [ 'UserCountry',      'Country',     'country',      1, 0, 'var', '', 0 ],
        [ 'UserComment',      'Comment',     'comments',     1, 0, 'var', '', 0 ],
        [ 'ValidID',          'Valid',       'valid_id',     0, 1, 'int', '', 0 ],
    ],
    # default selections
    Selections => {
        UserTitle => {
            'Mr.' => 'Mr.',
            'Mrs.' => 'Mrs.',
        },
    },
};

Mehrere E-Mail-Adressen für einen Account bei Apple Mail benutzen

Ich musste heute etwas suchen, um herauszufinden, wie man bei Apple Mail mehrere E-Mail-Adressen für einen Account einstellen kann. Das ist nämlich so einfach, dass man nicht gleich drauf kommt. Und laut Google haben lustiger Weise viele das Problem.

Die Lösung ist: Man trägt einfach alle E-Mail-Adressen kommasepariert bei den Account-Informationen im Feld E-Mail-Adresse ein. Anschliessend kann man diese E-Mail-Adressen beim Verfassen über das Drop-Down Accounts auswählen, bzw. Mail wählt selbständig beim Antworten die korrekte Alias-Adresse aus.

Excel 2011 kann 500.000 Zeilen

Excel 500tWie ich gerade feststelle, kann man in Excel 2011 von Microsoft selbst bei fast einer halben Million Zeilen noch mit Pivot-Tabellen arbeiten. Ich habe so etwas in Excel schon länger nicht mehr probiert und hatte auch keine große Hoffnung das es klappt. Bei den älteren Excel-Versionen war schon bei 32.000 Zeilen bzw. bei 64.000 Zeilen Schluss. Da hätte ich jetzt erwartet das es bis vielleicht bis 128.000 oder 254.000 geht.

Alleine die Datei ist schon 100 MB groß und das öffnen der selben dauert auf meinem super schnelle Computer (core 7i mit SSD und 8 GB RAM) fast eine Minute. Aber wenn die Datei geladen ist kann man halbwegs damit arbeiten.

Überwachung eines LSI SAS2 Controllers (SAS2008) mit Nagios

Der LSI SAS Controller wird durch das Kernel-Modul mpt2sas betrieben. Für das anzeigen des Status wird ein CLI Tool mit dem Namen sas2ircu benötigt. Aktuelle Debian bzw. Ubuntu Pakete sind auf der Webseite http://hwraid.le-vert.net/wiki/DebianPackages#no1 zu finden.

Damit man die Ausgabe dieses CLI Tools mit Nagios überwachen kann, benötigt man das Nagios-Plugin check_sas2ircu.

Damit das Nagios-Plugin funktionierte, muss es natürlich mit sudo gestartet werden. Damit dies funktioniert, muss man in die Datei /etc/sudoers noch die folgende Zeile eintragen:

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_sas2ircu

Überwachung des 3ware Controllers SAS9750-8i mit Nagios

Um den Status eines RAID bei einem 3ware Controller abzufragen, gibt es ein CLI Tool mit dem Namen tw_cli. Jonas Genannt war so nett und hat dazu ein paar Debian-Pakete gebaut, die auch unter Ubuntu laufen. Diese findet man auf der Webseite http://jonas.genannt.name/.

Die Ausgabe dieses CLI Tools kann man dann wiederum mit Nagios überwachen. Dadurch bekommt man sofort mit, wenn eine Festplatte ausfällt. Ich habe dazu das Nagios-Plugin check_3ware_raid_1_1 verwendet. Es gibt aber auch noch diverse andere.

Damit das Nagios-Plugin funktionierte, musste ich allerdings einen Softlink für das tw_cli im Verzeichnis der Nagios-Plugins anlegen und das Nagios Plugin mit sudo starten. Damit dies funktioniert, muss man in die Datei /etc/sudoers natürlich noch die folgende Zeile eintragen:

nagios ALL=(ALL) NOPASSWD: /usr/lib/nagios/plugins/check_3ware_raid_1_1

ISPConfig: Upgrade von Ubuntu 10.04 auf 12.04

Ich habe heute mal einige Server die ich mit ISPConfig (aktuell Version 3.0.5.2) verwalte auf Ubuntu 12.04 aktualisiert. Nachdem Ubuntu 12.04 nun ziemlich genau ein Jahr draußen ist, war die Zeit nach meiner Meinung reif für ein Upgrade.

Das Upgrade lief auch ohne größere Probleme durch. Ich habe aber bei MySQL aus Kompatibilitätsgründen wieder MyISAM als Standard-Tabellentyp eingestellt. Dies kann mit der Zeile

default-storage-engine = MyISAM

in der Datei /etc/mysql/my.cnf bewerkstelligt werden.

Des weiteren hat Postfix ein bisschen rumgezickt. Beim starten hat es einige Zeilen in der main.cf und master.cf angemaul, die nicht mehr unterstützt werden. Diese kann man aber einfach auskommentieren. Außerdem lief die SASL-Authentifizierung von Postfix nicht mehr. Deshalb konnte man keine E-Mails per Authentifizierung verschicken. Die Lösung des Problems wird im Launchpad unter der folgenden URL aber schon beschrieben: https://bugs.launchpad.net/ubuntu/+source/cyrus-sasl2/+bug/875440/comments/34. Offensichtlich hat sich hier in der Schreibweise einiger Parameter etwas geändert. Wenn man die Datei /etc/postfix/sasl/smtpd.conf wie folgt abändert, läuft es wieder:

pwcheck_method: saslauthd
mech_list: plain login pam
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: [entfernt]
sql_passwd: [entfernt]
sql_database: dbispconfig
sql_select: select password from mail_user where login = '%u@%r'

AHCI nachträglich bei Windows 7 oder Vista aktivieren

Als ich Vorgestern ein Image eines Windows 7 Computers auf neue Hardware übertrug stellte ich überrascht fest, dass der Bootvorgang mit einem Bluescreen durch einen stop 0x0000007B error beendet wurde. Dieser Fehler kommt, wenn Windows auf seine Bootfestplatte nicht zugreifen kann. Wenn er nach einem Hardwarewechsel auftaucht, hat man meistens einen falschen oder nicht vorhandenen Treiber für den neuen Festplattencontroller. In meinem Fall hatte das Windows 7 aber den normalen IDE Treiber von Microsoft, der mit den meisten Controllern zurecht kommt.

Nach längeren Tests fand ich dann heraus, dass Windows ohne Probleme bootete, wenn man im BIOS den Controller von AHCI auf IDE umstellte. Windows kann also nicht mit AHCI umgehen, wenn man es mit IDE installiert hat.

Nach dem lesen von diversen KB-Artikeln von Microsoft habe ich aber eine Lösung gefunden. Man kann nämlich in der Registry einstellen, dass die AHCI-Treiber von Windows beim Booten geladen werden. Danach bootet Windows auch mit einem AHCI-Controller. Im folgenden nun eine kleine Anleitung dafür (sie funktioniert zumindest bei Intel-Controllern):

  1. Den Controller im BIOS auf IDE stellen, damit Windows startet
  2. regedit starten
  3. In den beiden Schlüsseln HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\iastorv und HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\msahci den Wert Start auf 0 setzen (das heißt er soll den Treiber gleich beim booten laden)
  4. Neustart von Windows und umstellen des Controllers im BIOS auf AHCI