Kernel für neue Hardware zu alt - Fremdkernel nutzen

    Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

    • Kernel für neue Hardware zu alt - Fremdkernel nutzen

      Problem:
      Der Kernel der Installations-CD ist zu alt und erkennt die neuere Hardware (RAID-Controller, Chipsatz, etc.) des neuen Servers nicht. Installation endet in einer Endlosschleife der Hardwareerkennung...

      In dem hier beschriebenen Fall handelt es sich um die 2.2 RC3 Version mit integriertem Kernel 2.6.22.19-72.Endian15.
      Ziel-Hardware:
      • Mainboard: Supermicro SMCI-X7DCLi, Chipsatz Intel 5100, 2x LAN 1GBit Intel 82573V/L
      • Prozessor: Intel Xeon E5405
      • Arbeitsspeicher: 2 GB ECC
      • RAID-Controller: 3Ware Escalade 9650SE-2LP, PCI-e, RAID1 mit 2x160GB

      Lösung:
      Klappt das Booten mit einer Live-CD einer anderen Linux-Distribution, die einen neueren Kernel verwendet, und kann diese die Hardware auch erkennen und ansprechen, kann man eine bestehende EFW mit dem neuen Kernel nachrüsten.

      Vorraussetzung
      : EFW muss bereits auf einem anderen Rechner installiert sein.

      Ablauf:
      1. Fremdkernel installieren, hier: Debian-basierter Kernel:

      [list]debian-Installation (hier: Debian 5.0, Kernel 2.6.26 i386/686), expert-installation
      • Partitionierung (Beispiel 160 GB), 4 Partitionen:

        Quellcode

        1. 1: /boot, 100 MB
        2. 2: swap, 4 GB
        3. 3: /, 55,9 GB
        4. 4: /var, 100 GB

      • Grundsystem installieren
      • Kernel installieren (einen auswählen, hier 2.6.26-2-686) (alle Treiber)
      • Grub in den MBR installieren lassen (nicht Grub V2 (experimental))
      [/list]

      2. Kernel sichern und Platte neu formatieren:

      • Knoppix starten (Bootparameter knoppix 2)
        Kerneldaten auf einen Stick oder anderes Medium kopieren (hier: /tmp)

        Quellcode

        1. mount /media/sda1
        2. mount /media/sda3
        3. rsync -av /media/sda1/* /tmp/boot
        4. rmdir /tmp/boot/lost+found/
        5. rsync -av /media/sda3/lib/modules/* /tmp/modules
        /media/sda1 (Bootpartition), /media/sda3 (Systempartition)

      • Partitionen neu formatieren

        Quellcode

        1. umount /media/sda1
        2. umount /media/sda3
        3. mkfs.ext3 -m 1 /dev/sda1
        4. mkfs.ext3 -m 0.3 /dev/sda3
        5. mkfs.ext3 -m 0.2 /dev/sda4
        Parameter m = Prozentualer Anteil der reservierten Blöcke für Superuser


      3. Endian Firewall kopieren:

      [list]

      Quellcode

      1. rsync -avz -e ssh remoteuser@remotehost:/remote/dir /this/dir/
      remoteuser=root, remotehost=Servername der Quelle, /remote/dir=die jeweiligen Verzeichnisse, /this/dir=die Zielpartition

      Quellcode

      1. mount /media/sda1
      2. mount /media/sda3
      3. mount /media/sda4
      4. rsync -av -e ssh root@remotehost:/boot/* /media/sda1
      5. for I in bin etc home lib mnt opt root sbin tmp usr; do rsync -avz -e ssh root@remotehost:/$I /media/sda3; done
      6. rsync -av -e ssh root@remotehost:/var/* /media/sda4
      [/list]

      4. Links erstellen und neue Kernel-Dateien kopieren:

      • mount-Verzeichnisse und System-Verzeichnisse:

        Quellcode

        1. mkdir /media/sda3/boot /media/sda3/var /media/sda3/dev /media/sda3/proc /media/sda3/sys
        2. cp /tmp/boot/*-2.6.26-2-686 /media/sda1


      • für alte Dateien in /media/sda1 Sicherungen erstellen und anschließend neue verlinken:
        • a) als bash-Schleife:

          Quellcode

          1. cd /media/sda1
          2. ls -1 *2.6.22* | while read I; do mv $I $I.old; NEU=`ls -1 ${I:0:5}*-2.6.26*`; ln -s $NEU $I; done

        • b) als Einzel-Befehle:

          Quellcode

          1. cd /media/sda1
          2. mv config-2.6.22.19-72.endian15 config-2.6.22.19-72.endian15.old
          3. mv initrd-2.6.22.19-72.endian15.img initrd-2.6.22.19-72.endian15.img.old
          4. mv System.map-2.6.22.19-72.endian15 System.map-2.6.22.19-72.endian15.old
          5. mv vmlinuz-2.6.22.19-72.endian15 vmlinuz-2.6.22.19-72.endian15.old
          6. ln -s config-2.6.26-2-686 config-2.6.22.19-72.endian15
          7. ln -s initrd.img-2.6.26-2-686 initrd-2.6.22.19-72.endian15.img
          8. ln -s System.map-2.6.26-2-686 System.map-2.6.22.19-72.endian15
          9. ln -s vmlinuz-2.6.26-2-686 vmlinuz-2.6.22.19-72.endian15

      • altes Kernelmodul-Verzeichnis in /media/sda3/lib/modules sichern und neuere Dateien des neuen Modules kopieren:
        [list]

        Quellcode

        1. rsync -av /tmp/modules/* /media/sda3/lib/modules
        2. cd /media/sda3/lib/modules
        3. mv 2.6.22.19-72.endian15 2.6.22.19-72.endian15.old
        4. ln -s 2.6.26-2-686 2.6.22.19-72.endian15
        [/list]


      5. Grub installieren: (optional!)

      [list]Zunächst sollte man probieren, ob der bereits durch Debian installierte Grub noch funktioniert - einfach neu ohne CD booten ;)

      Falls man die Knoppix-CD zum installieren des grub-loaders verwenden möchte, so hat Knoppix einen Bug, den es vor dem "chrooten" zu berücksichtigen gilt (siehe: knoppix.net/wiki/Dev_null_permission_denied

      Also bei mir musste ich in der Simulation in einer virtuellen Maschinenumgebung den Grub neu installieren. Bei der echten Installation brauchte ich es nicht.[/list]

      Die gesamte Firewall wurde nun geklont und läuft auf dem Server mit dem Kernel 2.6.26-2-686.

      :?: Selbstbeantwortete Fragen: :!:

      • Warum nicht gleich den (viel neueren) Kernel von Knoppix 2.6.28?
        Bei Knoppix habe ich keine Boot-Ramdisk (initrd) im /boot gefunden. Es geistert zwar eine minird.gz herum, aber ob die die richtigen Module enthält habe ich nicht überprüft.
      • Warum erst Debian installieren nur um an den Kernel heranzukommen - kann man den nicht von irgendeiner anderen Maschine schon kopieren?
        Man kann nicht sicher sein, ob auch die Treiber/Module für den Zielserver dabei sind. In der manuellen (expert-install) Installation, kann man beispielsweise alles mögliche schon für den Zielserver hereinladen lassen.
        Man kann natürlich auch sich den Kernel erst auf einer anderen Maschine bauen, aber ich habe bisher immer kein Erfolg dabei gehabt.
      • Wie sieht es mit 64Bit-Kerneln aus?
        Endian selbst ist ja 32Bit. Da weiß ich nicht, wie die alten gcc-kompillierten Bibliotheken aus /lib mit den neueren Modulen zusammenarbeiten. Was man auf jeden Fall nicht machen sollte, die älteren lib-Dateien mit den neueren Überschreiben - und da beginnt das Dilemma: bei 64Bit gibt es /lib, /lib32 (verlinkt nach /emul/ia32-linux/lib) und /lib64. Da ist bei dem Versuch einiges daneben gegangen.
        Falls es bei Endian auch mal eine 64Bit-Version gibt, dürfte dann wohl auch ein 64Bit-Fremdkernel auch möglich sein.



      -----------------------------------------
      Edit (30.04.2009):
      Also bei mir läuft das Ganze jetzt seit 1 Woche auf einem Produktiv-System ohne Ausfälle und ohne andere Probleme. Einzige Ausnahme: Ich kann über das Webfrontend die Passwörter für den Zugriff nicht ändern.

      -----------------------------------------
      Edit (30.04.2009):
      Ok, es liefen auch die anderen cgi-Scripte nicht vernünftig zum Ändern :cry: . Das Problem war, dass der User "nobody" in der alten Version die ID 65534 hatte und somit die FW keinen Schreibzugriff mehr darauf hatte.
      Ein Ändern aller 65534:nobody - Dateien auf nobody:nobody brachte Abhilfe und nun kann auch das Webfrontend-PAsswort geändert werden :D

      Quellcode

      1. cd /
      2. find . -user 65534 -exec chown nobody:nobody {} \;

      Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von ProfessorG ()

    • Kernel für Hardware nicht kompatibel - Fremdkernel nutzen

      Tja, leider gilt dieses Workarround nicht mehr für die 2.3-Version:
      Bei mir war es so, dass zwar der Treiber für den Controller (3Ware 9650SE) im endian2.3-Kernel enthalten war, aber nach der Installation der Boot-Vorgang immer mit Kernel-Panic abbrach.
      Mit dem Debian-Kernel konnte zwar gebootet werden, aber das Netzwerk funktionierte nicht über dem Browser (ping und ssh funktionierte). Ursache scheint eine engere Zusammenarbeit einiger neuerer (notwendiger?) endian-Pakete mit dem spezifischen Kernel zu sein :twisted: - Offenbar mag Endian es nicht, dass man in der Community in ihren OpenSource-Paketen hackt :evil:

      Lösung
      Da endian sich eher an redhat-Paketen (centOS, Fedora) orientiert probierte ich es nun mit einem CentOS-Kernel. Obwohl dieser älter ist, konnten alle Module für die Hardware des Servers eingeladen werden.
      Die Installation von endian erkannte die Platte, so dass ich nun anders an die Sache heranging:

      Ablauf

      1. Fremdkernel installieren:

      [list]
      Cent-OS 5.4 (32Bit) Installation, minimale Auswahl
      [/list]

      2. Kernel sichern:

      • Mit knoppix booten (knoppix 2 als Bootparameter)
      • Sicherung auf einen anderen PC

        Quellcode

        1. mount /media/sda1
        2. rsync -av /media/sda1/lib/modules root@gastrechner:/tmp/endian/lib
        3. rsync -av /media/sda1/boot root@gastrechner:/tmp/endian


      3. endian installieren:

      [list]
      Standard-Installation
      [/list]

      4. Kernel kopieren:

      • Mit knoppix booten (knoppix 2 als Bootparameter)
      • Auf dem anderen PC das CentOS-grub entfernen

        Quellcode

        1. ssh root@gastrechner mv /tmp/endian/boot/grub /tmp/endian/boot/grub.centos

      • Kopieren von einem anderen PC

        Quellcode

        1. mount /media/sda1
        2. rsync -av root@gastrechner:/tmp/endian/lib/modules /media/sda1/lib
        3. rsync -av root@gastrechner:/tmp/endian/boot /media/sda1

      • endian-Kernel sichern und fremden Kernel verlinken:

        Quellcode

        1. cd /media/sda1/lib/modules
        2. mv 2.6.22.19-72.e18 2.6.22.19-72.e18.old
        3. ln -s 2.6.18-164.el5 2.6.22.19-72.e18
        4. cd /media/sda1/boot
        5. ls -1 *2.6.22* | while read I; do mv $I $I.old; NEU=`ls -1 ${I:0:5}*-2.6.18*`; ln -s $NEU $I; done


      Beim booten gibt es allerdings noch ein SWAP-Resume-Hänger, der aber nur den boot-Prozess um 1 Minute verlängert ;)

      Das wars und die efw ist nun auch im Webinterface aufrufbar. Ich hoffe nur, dass Endian sich wieder etwas mehr der Community öffnet und nicht in der nächsten Version wieder neue Hürden einbaut :evil:, die einen nach Alternativen ausprobieren lassen.