(Gelöst) Vanilla-Kernel selbst kompilieren

Status
Für weitere Antworten geschlossen.

Ministry

Member
Hi,

ich hab mich heute mal ans Kernel kompilieren getraut.
Nachdem ich ca. 1h lang mit dem configmenü verbracht habe, und der Kernel jetzt schon ne halbe stunde am "bauen" ist, hätt ich da mal ne Frage fürs nächste Mal:
Gibt es nicht irgeneine Möglichkeit, das Ganze zu beschleunigen?
Muss der mich wirklich jeden verdammten Treiber abfragen, der im Kernel-Paket vorhanden ist?
Ich hab irgendwo über Google gefunden, dass die .config da hilfreich sein könnte, aber nicht wie.
 

Ministry

Member
AW: Kernel kompilieren

Aaaaalso....
System ist gebootet mit dem neuen Kernel und 256³ Fehlermeldungen
Code:
FATAL: Module ip_tables not found.
iptables v1.3.3: can't initialize iptables table `filter': iptables who? (do you need to insmod?)
Perhaps iptables or your kernel needs to be upgraded.
iptables 1.3.3 sind aber natürlich installiert.
Kann ich die meldung ignorieren (ich denke mal nicht).
Ansonsten war das Kompilieren weit weniger schlimm, als ich dachte.
Code:
uname -r
2.6.17.13
Passt soweit!
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

Nein kann man nicht ignorieren.

Bei 2.6.17 hat sich AFAIR die Konfiguration von netfilter/iptables geändert.

Code:
cat .config|grep -i netfilter #==> Logischerweise im Verzeichnis der entpackten Quellen ausgeführt

cat .config|grep -i tables
Ausgaben posten.

Ich tippe mal, die neuen Einstellungen wurden nicht gesetzt, bei make cloneconfig werden nicht mehr vorhandene Einstellungen verworfen, bei make oldconfig werden zumindest die neuen Einstellungen abgefragt.

Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

cat .config|grep -i netfilter
Code:
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y
# Core Netfilter Configuration
# CONFIG_NETFILTER_NETLINK is not set
# CONFIG_NETFILTER_XTABLES is not set
# IP: Netfilter Configuration
# IPv6: Netfilter Configuration (EXPERIMENTAL)
# DECnet: Netfilter Configuration
# Bridge: Netfilter Configuration
cat .config|grep -i tables
Code:
CONFIG_IP_MULTIPLE_TABLES=y
# CONFIG_NETFILTER_XTABLES is not set
CONFIG_BRIDGE_NF_EBTABLES=m
Büdde sag jetzt nicht "neu komplilieren"
Ich mag irgenwann heut doch noch mal ins Bett.
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

Ministry schrieb:
Code:
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y
# Core Netfilter Configuration
# CONFIG_NETFILTER_NETLINK is not set
[B]# CONFIG_NETFILTER_XTABLES is not set[/B]
# IP: Netfilter Configuration
# IPv6: Netfilter Configuration (EXPERIMENTAL)
# DECnet: Netfilter Configuration
# Bridge: Netfilter Configuration
Server:/usr/src/linux # cat .config|grep -i tables
CONFIG_IP_MULTIPLE_TABLES=y
[B]# CONFIG_NETFILTER_XTABLES is not set[/B]
CONFIG_BRIDGE_NF_EBTABLES=m
Da haben wir den Übeltäter.

Code:
make menuconfig

Networking  --->

Networking options  --->

[*] Network packet filtering (replaces ipchains)  --->

#==>  Falls das leer ist, dann unbedingt so lange auf Leertaste drücken, 
bis ein "*" erscheint.

Core Netfilter Configuration  --->   

[B]<*> Netfilter Xtables support (required for ip_tables) [/B]    (siehe OBEN "*")
So sieht das bei mir aus:
Code:
M> Netfilter netlink interface                                      │ │
  │ │<M>   Netfilter NFQUEUE over NFNETLINK interface                     │ │
  │ │<M>   Netfilter LOG over NFNETLINK interface                         │ │
  │ │<*> Netfilter Xtables support (required for ip_tables)               │ │
  │ │<M>   "CLASSIFY" target support                                      │ │
  │ │< >   "CONNMARK" target support                                      │ │
  │ │<M>   "MARK" target support                                          │ │
  │ │<M>   "NFQUEUE" target Support                                       │ │
  │ │< >   "NOTRACK" target support                                       │ │
  │ │< >   "SECMARK" target support
Mit "/" kann man übrigens nach einer Einstellung suchen lassen.

make menuconfig schrieb:
────────────────────── Linux Kernel Configuration ───────────────
│ Arrow keys navigate the menu. <Enter> selects submenus --->. │
│ Highlighted letters are hotkeys. Pressing <Y> includes, <N> excludes, │
│ <M> modularizes features. Press <Esc><Esc> to exit, <?> for Help, </>
for Search. Legend: [*] built-in [ ] excluded <M> module < > │

Code:
Linux Kernel v2.6.18 Configuration
 ──────────────────────────────────────────────────────────────────────────────





  ┌──────────────────── Search Configuration Parameter ─────────────────────┐
  │        Enter CONFIG_ (sub)string to search for (omit CONFIG_)           │
  │ ┌─────────────────────────────────────────────────────────────────────┐ │
  │ │                                                                     │ │
  │ └─────────────────────────────────────────────────────────────────────┘ │
  │                                                                         │
  │                                                                         │
  ├─────────────────────────────────────────────────────────────────────────┤
  │                         <  Ok  >      < Help >                          │
  └─────────────────────────────────────────────────────────────────────────┘
"XTABLES" eingetippt:

Code:
Linux Kernel v2.6.18 Configuration
 ──────────────────────────────────────────────────────────────────────────────
  ┌──────────────────────────── Search Results ─────────────────────────────┐
  │ Symbol: NETFILTER_XTABLES [=y]                                          │
  │ Prompt: Netfilter Xtables support (required for ip_tables)              │
  │   Defined at net/netfilter/Kconfig:117                                  │
  │   Depends on: NET && NETFILTER                                          │
  │   Location:                                                             │
  │     -> Networking                                                       │
  │       -> Networking support (NET [=y])                                  │
  │         -> Networking options                                           │
  │           -> Network packet filtering (replaces ipchains) (NETFILTER [= │
  │             -> Core Netfilter Configuration                             │
  │                                                                         │
  │                                                                         │
  │                                                                         │
  │                                                                         │
  │                                                                         │
  │                                                                         │
  ├─────────────────────────────────────────────────────────────────(100%)──┤
  │                                < Exit >                                 │
  └─────────────────────────────────────────────────────────────────────────┘
"Und der Weg ward ihm gewiesen" (Amen *g*).

Ministry schrieb:
Büdde sag jetzt nicht "neu komplilieren"
Was denn sonst? Alles was "Y" gesetzt ist, wird fest in den Kernel reinkompiliert, deshalb muß der Kernel selbst auch neu kompiliert werden.
Das "make" selbst dauert sicher nicht lange (vielleicht 10-15 Minuten).

Allerdings dürfte das
Code:
make modules
was erfahrungsgemäß deutlich länger dauert, nur noch ein paar Minuten dauern, wenn überhaupt, da (IIRC) nur die Änderungen neu kompiliert werden.

Ministry schrieb:
Ich mag irgenwann heut doch noch mal ins Bett.
Niemand zwingt Dich dazu, aber mit dem Kernel ist es wie mit der Million, die erste ist immer die schwerste. :D

Der 2.6.18er, der hier läuft, war keine 15 Minuten "Arbeit".

Code:
make oldconfig
Etwa 50-60 Änderungen, die meisten einfach mit <ENTER> auf den vorgeschlagenen Werten gelassen (5 Minuten), dann
Code:
make && make modules
10 Sekunden eintippen ==> Kaffee Trinken gegangen.
Code:
su

make modules_install
wieder 10 Sekunden eintippen ==> Kleine Zigarettenpause.

Kernel kopieren, INITRD schreiben, GRUB anpassen (vielleicht 5 Minuten).

Neustart und schön die Meldungen angeschaut (3 Minuten).

Code:
uname -a
Linux Adamantan 2.6.18 #1 SMP PREEMPT Wed Sep 20 12:23:27 CEST 2006 i686 GNU/Linux
==> Läuft.

Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

soderle...
Ich bin jetzt zum dritten Mal heute dabei, das make durchlaufen zu lassen.
Ich hoffe, dass sich das Problem danach erledigt hat.
Nun noch ne ganz andere Frage :
Inwieweit bringt es Performance-Gewinn, wenn ich sachen, die ich nicht brauche (ISDN, USB, usw) komplett aus dem Kernel entferne?
Auf meinem kleinem Testserver brauch ich wirklich keine Sound-Unterstützung, ne ISDN-Karte hat er nicht, und die USB-Ports werden nie genutzt.
Aber lohnt sich das? (Aufwand vs. Nutzen)
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

In den meisten Fällen bringt das wenig bis nichts, da Hardware, welche nicht unbedingt zum Start des Systems benötigt wird, über Kernelmodule angesprochen wird, welche dann eh nur zur Laufzeit geladen werden, also dann, wenn benötigt.

Wenn man da was rausholen will, muß man meist sehr gut über die eigene Hardware und die Kernelkonfiguration bescheid wissen.

Wenn Deine Hardware vom mitgelieferten Distributionskernel unterstützt wird, dann lohnt es sich meist eh nicht.

Performancegewinn lässt sich sehr viel besser durch das gezielte Abschalten nicht benötigter Systemdienste erzielen, Stichwort Runlevel-Editor.

Außerdem sind SuSE-Kernel meist recht stark gepatcht und ich habe mir gestern den Spaß gemacht, mal einen mit "make oldconfig" aus den aktuellen Quellen des 2.6.18er einen Kernel für meine 10.1 zu basteln.

AppArmor wird z.B. nicht unterstützt (bzw. einige Module wie "securityfs"), der Automounter scheint bei mir auch Probleme zu machen und schneller läuft der neue Kernel auch nicht.

Einen eigenen Kernel zu bauen ist zumindest in den meisten Fällen nur ein Testgelände zum Üben und "Linux lernen".

Auf meinem (K)Ubuntu hingegen kommt der Vanilla-Kernel besser klar, wahrscheinlich sind dort weniger oder zumindest andere Patches eingepflegt worden, so daß es zu keinen Ausfällen kommt (AppArmor gibt es da z.B. gar nicht, eigentlich logisch, ist ja auch eine Novell/SuSE-Entwicklung).

Warum allerdings der Automounter besser funktioniert als mit einem Vanilla-Kernel unter SuSE 10.1 kann ich jetzt auch nicht sagen, da müsste ich mal genauer nachforschen.

Ein weiterer Grund auf einem SERVER einen eigenen Kernel zu bauen, ist das Einbauen von Sicherheitsoptionen wie z.B. "Selinux" o.ä., dazu braucht man aber wirklich gute Kenntnisse.

Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

Naja...im Prinzip ist mein "Test-Server" ja nix anderes als ein Übungsgelände.
Ich hab deshalb das Kernelupdate "geübt", weil ich mal ein bischen mit debian rumspielen wollte und deshalb einen VServer anlegen wollte....
Alles spielereien, die aber hoffentlich helfen Linux an sich besser zu kapieren, weil doch viel Konsolenarbeit nötig ist.
Code:
  CC [M]  drivers/net/irda/ali-ircc.o
drivers/net/irda/ali-ircc.c: In function 'ali_ircc_cleanup':
drivers/net/irda/ali-ircc.c:232: warning: 'pm_unregister_all' is deprecated (declared at include/linux/pm_legacy.h:21)
drivers/net/irda/ali-ircc.c: In function 'ali_ircc_open':
drivers/net/irda/ali-ircc.c:361: warning: 'pm_register' is deprecated (declared at include/linux/pm_legacy.h:16)
  CC [M]  drivers/net/irda/vlsi_ir.o
Das sind aktuell meine Fehlermeldungen beim Kompilieren...wobei ich sowieso nix mit Infrarot am Hut hab. Zumindest sowas könnte man dann doch "rausschmeissen".
Und zu welchem Zweck ich Tokenring-Adapter unterstützen soll, ist mir auch rätselhaft.

Der letzte Kernel hat übrigens auch wieder Fehlermeldungen gebracht:
Code:
FATAL: Module ip6table_mangle not fund
und
Code:
iptables: No chain/target/match by that name
Mal gucken was nach diesem Durchlauf ist.
Sollte jetzt hoffentlich funktionieren.
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

Nur zur Klärung:

Code:
CC [M]  drivers/net/irda/ali-ircc.o
drivers/net/irda/ali-ircc.c: In function 'ali_ircc_cleanup':
drivers/net/irda/ali-ircc.c:232: warning: 'pm_unregister_all' is deprecated (declared at include/linux/pm_legacy.h:21)
drivers/net/irda/ali-ircc.c: In function 'ali_ircc_open':
drivers/net/irda/ali-ircc.c:361: warning: 'pm_register' is deprecated (declared at include/linux/pm_legacy.h:16)
  CC [M]  drivers/net/irda/vlsi_ir.o
Ministry schrieb:
Das sind aktuell meine Fehlermeldungen beim Kompilieren...
Falsch, das sind nur "Warnings", wahrscheinlich weil eine c-Funktion in der Datei "ali-ircc.c" veraltet ist und nicht mehr verwendet wird, aber immer noch im Quellcode der Datei vorhanden ist. Das ist ganz normal, ein Kompiliervorgang OHNE Warnings würde mich eher stutzig machen.

Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

Code:
Starting Firewall Initialization (phase 2 of 2) SuSEfirewall2: Warning: ip6tables does not support state matching. Extended IPv6 support disabled.
FATAL: Module ip_tables not found.
done
So...
Das wäre die letzte Fehlermeldung, und erscheint auch nur einmal.
Aber warum wird das Modul am Anfang gefunden und dann nicht mehr?
Vorher hatt ich immer 256³ Fehlermeldungen...diesmal nur eine.
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

Code:
find /lib/modules/[B]VersionDeinesKernels[/B] -name *tables*

cat /Pfad_Zu_Deinen/Kernelquellen/.config|grep -i tables

cat /Pfad_Zu_Deinen/Kernelquellen/.config|grep -i ip6

cat /Pfad_Zu_Deinen/Kernelquellen/.config|grep -i netfilter
Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

1.
Code:
/lib/modules/2.6.17.13-default/kernel/net/ipv6/netfilter/ip6_tables.ko
/lib/modules/2.6.17.13-default/kernel/net/bridge/netfilter/ebtables.ko
2.
Code:
CONFIG_IP_MULTIPLE_TABLES=y
CONFIG_NETFILTER_XTABLES=y
CONFIG_IP_NF_IPTABLES=y
CONFIG_IP_NF_ARPTABLES=y
CONFIG_IP6_NF_IPTABLES=m
CONFIG_BRIDGE_NF_EBTABLES=m
3.
Code:
CONFIG_IP6_NF_QUEUE=m
CONFIG_IP6_NF_IPTABLES=m
CONFIG_IP6_NF_MATCH_RT=m
CONFIG_IP6_NF_MATCH_OPTS=m
CONFIG_IP6_NF_MATCH_FRAG=m
CONFIG_IP6_NF_MATCH_HL=m
CONFIG_IP6_NF_MATCH_OWNER=m
CONFIG_IP6_NF_MATCH_IPV6HEADER=m
CONFIG_IP6_NF_MATCH_AH=m
CONFIG_IP6_NF_MATCH_EUI64=m
CONFIG_IP6_NF_FILTER=m
CONFIG_IP6_NF_TARGET_LOG=m
CONFIG_IP6_NF_TARGET_REJECT=m
CONFIG_IP6_NF_MANGLE=m
CONFIG_IP6_NF_TARGET_HL=m
CONFIG_IP6_NF_RAW=m
CONFIG_SLIP_MODE_SLIP6=y
4.
Code:
CONFIG_NETFILTER=y
# CONFIG_NETFILTER_DEBUG is not set
CONFIG_BRIDGE_NETFILTER=y
# Core Netfilter Configuration
CONFIG_NETFILTER_NETLINK=m
CONFIG_NETFILTER_NETLINK_QUEUE=m
CONFIG_NETFILTER_NETLINK_LOG=m
CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=m
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_MARK=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=m
CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
CONFIG_NETFILTER_XT_MATCH_COMMENT=m
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
CONFIG_NETFILTER_XT_MATCH_DCCP=m
CONFIG_NETFILTER_XT_MATCH_ESP=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=m
CONFIG_NETFILTER_XT_MATCH_LIMIT=m
CONFIG_NETFILTER_XT_MATCH_MAC=m
CONFIG_NETFILTER_XT_MATCH_MARK=m
CONFIG_NETFILTER_XT_MATCH_POLICY=m
CONFIG_NETFILTER_XT_MATCH_MULTIPORT=m
CONFIG_NETFILTER_XT_MATCH_PHYSDEV=m
CONFIG_NETFILTER_XT_MATCH_PKTTYPE=m
CONFIG_NETFILTER_XT_MATCH_REALM=m
CONFIG_NETFILTER_XT_MATCH_SCTP=m
CONFIG_NETFILTER_XT_MATCH_STATE=m
CONFIG_NETFILTER_XT_MATCH_STRING=m
CONFIG_NETFILTER_XT_MATCH_TCPMSS=m
# IP: Netfilter Configuration
# IPv6: Netfilter Configuration (EXPERIMENTAL)
# DECnet: Netfilter Configuration
# Bridge: Netfilter Configuration
Ist vielleicht ein bischen viel, ich habe mit jedem neukompilieren immer ein wenig mehr reingesetzt und so siehts jetzt aus.
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

OK, das ist klar:

Code:
CONFIG_IP_NF_IPTABLES=y
Du hast Die ip_tables-Unterstützung fest in den Kernel kompiliert, deshalb findet er das Modul "ip_tables" nicht.

Es sollte allerdings trotzdem funktionieren, wenn nicht, dann setze
Code:
CONFIG_IP_NF_IPTABLES=m
und auf ein Neues.

Greetz,

RM
 

Ministry

Member
AW: Kernel kompilieren

soderle...
Ich habs gerichtet.
Allerdings dachte ich eigentlich, dass man "thoretisch" alles fest einkompilieren kann?

Und mal wieder ein grosses DANKESCHÖN an dich :)
 

Rain_Maker

Administrator
Teammitglied
AW: Kernel kompilieren

Ministry schrieb:
soderle...
Ich habs gerichtet.
Allerdings dachte ich eigentlich, dass man "thoretisch" alles fest einkompilieren kann?
Theoretisch ja, die Frage ist nur, ob es sinnvoll ist.

Man kann den gesamten ip_tables-Support fest einkompilieren, das macht auf einem Webserver vielleicht sogar Sinn, einen monolithischen Kernel zu haben (also keinerlei Module), aber dann muß man wirklich GENAU wissen, was man braucht und den Rest auch weglassen, sonst wird der Kernel zu "fett".
Wenn man allerdings etwas fest in den Kernel einkompiliert, dann müsste man auch die ensprechenden Verweise in den Startscripten (hier das Script der SuSEfirewall2) entfernen, damit keine Fehlermeldungen kommen, weil ein Modul geladen werden soll, das gar nicht vorhanden ist, weil das Feature fest im Kernel drin ist.

Die entscheidende Frage in dem Fall wäre gewesen, ob die SFW2 dann auch funktioniert, oder ob sie -weil sie das Modul eben nicht findet- den Dienst verweigert, obwohl der laufende Kernel sehr wohl geeignet wäre einen IPTABLES-Paketfilter zu verwenden.

Möglich ist da fast alles, die Frage ist nur wieviel Aufwand man betreiben möchte und wie gut man sich damit auskennt.

Kleiner Tipp:

Ich würde mir die jetzt aktuelle Datei ".config" an einem guten Platz aufbewahren, denn solltest Du irgendwann wieder einen neueren Kernel kompilieren wollen (z.B. einen 2.6.18er ) würde bei "make mrproper" die Datei gelöscht.

Dan einfach wieder als ".config" in die Quellen des neuen Kernels reinpacken und mit "make oldconfig" zunächst nur die Änderungen anzeigen lassen und übernehmen bzw. ablehnen. Dann passiert das Missgeschick mit den IPTABLES wahrscheinlich nicht mehr.
Das ist alles beim ersten Mal eine Fülle von Eindrücken und Informationen, die einen schier erschlägt, aber irgendwann merkt man, daß ein logisches Konzept dahinter steckt und vor allem lernt man, wie man Probleme erkennt und behebt.

Und mal wieder ein grosses DANKESCHÖN an dich :)
Keine Ursache.

Greetz,

RM

==> Closed.
 
Status
Für weitere Antworten geschlossen.
Oben