Schlagwort-Archive: kernel

Grubgefummel

Weil wireguard mit dem heute gekommenen Kernel für Ubuntu 18.04 nicht durch den Compiler ging

Unpacking wireguard-dkms (1.0.20200520-0ppa1~18.04) over (1.0.20200520-0ppa1~18.04) ...
Setting up wireguard-dkms (1.0.20200520-0ppa1~18.04) ...
Loading new wireguard-1.0.20200520 DKMS files...
Building for 4.15.0-106-generic
Building initial module for 4.15.0-106-generic
Error! Bad return status for module build on kernel: 4.15.0-106-generic (x86_64)
Consult /var/lib/dkms/wireguard/1.0.20200520/build/make.log for more information.
Setting up wireguard (1.0.20200513-1~18.04) ...

und dann in /var/lib/dkms/wireguard/1.0.20200520/build/make.log Derartiges hinterließ

DKMS make.log for wireguard-1.0.20200520 for kernel 4.15.0-106-generic (x86_64)
Wed Jun 10 07:49:21 CEST 2020
make: Entering directory '/usr/src/linux-headers-4.15.0-106-generic'
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/main.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/noise.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/device.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/peer.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/timers.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/queueing.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/send.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/receive.o
  CC [M]  /var/lib/dkms/wireguard/1.0.20200520/build/socket.o
In file included from <command-line>:0:0:
/var/lib/dkms/wireguard/1.0.20200520/build/socket.c: In function ‘send6’:
/var/lib/dkms/wireguard/1.0.20200520/build/compat/compat.h:102:42: error: ‘const struct ipv6_stub’ has no member named ‘ipv6_dst_lookup’; did you mean ‘ipv6_dst_lookup_flow’?
 #define ipv6_dst_lookup_flow(a, b, c, d) ipv6_dst_lookup(a, b, &dst, c) + (void *)0 ?: dst
                                          ^
/var/lib/dkms/wireguard/1.0.20200520/build/socket.c:139:20: note: in expansion of macro ‘ipv6_dst_lookup_flow’
   dst = ipv6_stub->ipv6_dst_lookup_flow(sock_net(sock), sock, &fl,
                    ^~~~~~~~~~~~~~~~~~~~
scripts/Makefile.build:330: recipe for target '/var/lib/dkms/wireguard/1.0.20200520/build/socket.o' failed
make[1]: *** [/var/lib/dkms/wireguard/1.0.20200520/build/socket.o] Error 1
Makefile:1577: recipe for target '_module_/var/lib/dkms/wireguard/1.0.20200520/build' failed
make: *** [_module_/var/lib/dkms/wireguard/1.0.20200520/build] Error 2
make: Leaving directory '/usr/src/linux-headers-4.15.0-106-generic'

wollte ich prüfen, ob ich um den Bug herumkomme, wenn ich den Server mit dem alten Kernel starte.

Ich dachte, das geht so:

Ein

grub-mkconfig | grep -E 'submenu |menuentry '

liefert den Menüeintrag für den älteren Kernel

menuentry 'Ubuntu' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {
submenu 'Advanced options for Ubuntu' $menuentry_id_option 'gnulinux-advanced-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {
        menuentry 'Ubuntu, with Linux 4.15.0-106-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-106-generic-advanced-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {
        menuentry 'Ubuntu, with Linux 4.15.0-106-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-106-generic-recovery-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {
Found linux image: /boot/vmlinuz-4.15.0-101-generic
Found initrd image: /boot/initrd.img-4.15.0-101-generic
        menuentry 'Ubuntu, with Linux 4.15.0-101-generic' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-101-generic-advanced-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {
        menuentry 'Ubuntu, with Linux 4.15.0-101-generic (recovery mode)' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-4.15.0-101-generic-recovery-18a21bc3-6dd4-4d7a-a538-c7d935a00a63' {

der dann beim Boot via /etc/default/grub (vorher wegsichern!) ausgewählt wird

GRUB_DEFAULT="Advanced options for Ubuntu>Ubuntu, with Linux 4.15.0-101-generic"

nachdem ein

update-grub

fehlerfrei durchläuft.

Doof gedacht: wireguard-dkms baut natürlich trotzdem für den neueren Kernel. Weil? Weil er da ist. So simpel.

Das Ergebnis ist also das gleiche wie oben: wireguard-dkms fällt beim Modulbau auf die Nase – obwohl der Server mit dem älteren Kernel läuft.

Eigentlich total klar – aber die Finger auf den Tasten sind manchmal schneller als das Hirn dazu.

Einfacher – und dazu noch fehlerfreier bei den Nacharbeiten mit DKMS zu handhaben – ist ein simpler apt-get purge auf den neueren Kernel.

apt-get purge linux-image-4.15.0-106-generic
apt-get clean ; apt-get autoremove

Dann evtl. noch die alten /etc/default/grub Inhalte wiederherstellen (falls mensch so blöd wie ich war), ein update-grub und nach einem Neustart ist wireguard wieder brav am Start.

Update

Was hier bezüglich Wireguard wunderbar funktioniert hat:

apt-get install --install-recommends linux-generic-hwe-18.04
apt-get install --reinstall wireguard-dkms wireguard-tools linux-headers-$(uname -r)

Ich hoffe, das hält nun eine Weile.

LMDE und CPU Zahl

Schnarchlangsam ist mein oller Asus  – und das obwohl Debian eigentlich weniger Ressourcen frisst als Ubuntu. Also schaute ich mal mit top nach, was da an den Ressourcen zehrt und stolperte über xorg, der 35% der CPU schluckte. Dazu kam: LMDE erkannt nur eine CPU des Dualcores.

$ dmesg | grep CPU
[    0.000000] ACPI: NR_CPUS/possible_cpus limit of 1 reached.  Processor 1/0x1 ignored.
[    0.000000] Initializing CPU#0
[    0.000000] CPU 0 irqstacks, hard=f5808000 soft=f580a000
[    0.012261] CPU: AMD Turion(tm) 64 X2 Mobile Technology TL-52 stepping 02
[    0.586082] Switch to broadcast mode on CPU0

Das scheint ein Debian Bug zu sein, der sich durch die Installation eines PAE Kernels beheben lässt:

sudo apt-get install linux-headers-3.2.0-3-686-pae linux-image-3.2.0-3-686-pae

Und tatsächlich – danach stimmt wenigstens die Verwendung der CPU Zahl:

$ dmesg | grep CPU
[    0.000000] SMP: Allowing 2 CPUs, 0 hotplug CPUs
[    0.000000] setup_percpu: NR_CPUS:32 nr_cpumask_bits:32 nr_cpu_ids:2 nr_node_ids:1
[    0.000000] PERCPU: Embedded 14 pages/cpu @f79d5000 s33280 r0 d24064 u57344
[    0.000000] Initializing CPU#0
[    0.000000] CPU 0 irqstacks, hard=f5806000 soft=f5808000
[    0.004382] CPU: Physical Processor ID: 0
[    0.004385] CPU: Processor Core ID: 0
[    0.004389] mce: CPU supports 5 MCE banks
[    0.069029] CPU0: AMD Turion(tm) 64 X2 Mobile Technology TL-52 stepping 02
[    0.072003] CPU 1 irqstacks, hard=f5894000 soft=f5896000
[    0.008000] Initializing CPU#1
[    0.156188] Brought up 2 CPUs
[    0.156186] Switch to broadcast mode on CPU1
[    0.156895] Switch to broadcast mode on CPU0

Was sich nicht so einfach in den Griff bekommen lässt, ist der unendlich zähe nouveau Treiber, der xorg mit 35% CPU-Last weiterhin viel zu umfangreich beschäftigt. LMDE geht also weiterhin eher zäh zu Werke. Wenn F18 auf den Markt kommt, dann fliegt LMDE wieder runter … oder ich spiel hier mit Kubuntu weiter.

Kernelbackede

Kein Backofen in der Wohnung hier … also muss ein Debian 6 darunter leiden, dem ich gerade versuchsweise einen 3.4.7 Kernel unterschieben will.

cd /usr/src/

wget http://www.kernel.org/pub/linux/kernel/v3.0/linux-3.4.7.tar.bz2

tar jxvf linux-3.4.7.tar.bz2

cp /boot/config-$(uname -r) /usr/src/linux-3.4.7/.config

cd linux-3.4.7

make menuconfig

make-kpkg clean

fakeroot make-kpkg –initrd –revision=custom.0.1 kernel_image

Ich hätte allerdings den Prozess nicht unbedingt als root durchlaufen müssen, sondern mich in die Gruppe src einschreiben können. Weiter wäre es wohl schlau gewesen in /etc/kernel-pkg.conf zuerst noch CONCURRENCY_LEVEL=n (wobei n = CPU Cores + 1 und damit wie der Schalter -j bei make zu behandeln) zu setzen, statt nun blöd auf die Shell zu glotzen, weil alles ziemlich ewig dauert. Bis zum finalen

dpkg -i linux-image-3.4.7_custom.0.1_i386.deb

und dem Reboot dauert es demnach noch … und ich vertreibe mir so lange die Zeit mit dem Schreiben von Posts. Auch gut.

Da mir mein Backprozess immer wieder mit einer Fehlermeldung zu lguest auf die Nase fiel, hab ich die folgenden Auskommentierungen noch in der .config händisch vorgenommen [1]:

# CONFIG_LGUEST_GUEST
# CONFIG_PARAVIRT_SPINLOCKS
# CONFIG_LGUEST