Skip to content
This repository has been archived by the owner on Feb 13, 2024. It is now read-only.

anbox breaks dkms due to broken symlinks in /var/lib/dkms/ (leads to broken kernel upgrades) #789

Open
bwerthmann opened this issue Jul 2, 2018 · 5 comments
Labels

Comments

@bwerthmann
Copy link

bwerthmann commented Jul 2, 2018

$ anbox system-info
version: 3
snap-revision: 82
os:
  name: Ubuntu
  version: 16.04.4 LTS (Xenial Xerus)
  snap-based: true
kernel:
  version: Linux version 4.13.0-45-generic (buildd@lgw01-amd64-011) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.9)) #50~16.04.1-Ubuntu SMP Wed May 30 11:18:27 UTC 2018
  binder: false
  ashmem: true

Please describe your problem:

Relates to: #547

anbox left a broken symlink in /var/lib/dkms/ for version 9~xenial1:

$ find /var/lib/dkms -xtype l -ls
 45236456      0 lrwxrwxrwx   1 root     root           39 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/9~xenial1/source -> /usr/src/anbox-modules-ashmem-9~xenial1
 45237121      0 lrwxrwxrwx   1 root     root           39 May 15 23:59 /var/lib/dkms/anbox-modules-binder/9~xenial1/source -> /usr/src/anbox-modules-binder-9~xenial1
$ find /var/lib/dkms/anbox* -type l -name source | xargs ls -Hl
ls: cannot access '/var/lib/dkms/anbox-modules-ashmem/9~xenial1/source': No such file or directory
ls: cannot access '/var/lib/dkms/anbox-modules-binder/9~xenial1/source': No such file or directory
/var/lib/dkms/anbox-modules-ashmem/10.1~20180523.2.xenial.c36965f/source:
total 44
-rw-r--r-- 1 root root 23437 Apr 11 12:23 ashmem.c
-rw-r--r-- 1 root root   663 Apr 11 12:23 ashmem.h
-rw-r--r-- 1 root root   303 Apr 11 12:23 deps.c
-rw-r--r-- 1 root root   216 Apr 11 12:23 dkms.conf
-rw-r--r-- 1 root root   341 Apr 11 12:23 Makefile
drwxr-xr-x 2 root root  4096 May 31 15:19 uapi

/var/lib/dkms/anbox-modules-binder/10.1~20180523.2.xenial.c36965f/source:
total 168
-rw-r--r-- 1 root root 124451 Apr 11 12:23 binder.c
-rw-r--r-- 1 root root  13033 Apr 11 12:23 binder.h
-rw-r--r-- 1 root root   8979 Apr 11 12:23 binder_trace.h
-rw-r--r-- 1 root root   5567 Apr 11 12:23 deps.c
-rw-r--r-- 1 root root    216 Apr 11 12:23 dkms.conf
-rw-r--r-- 1 root root    362 Apr 11 12:23 Makefile

This wedges dkms:

$ sudo dkms status
anbox-modules-ashmem, 10.1~20180523.2.xenial.c36965f, 4.13.0-43-generic, x86_64: installed
anbox-modules-ashmem, 10.1~20180523.2.xenial.c36965f, 4.13.0-45-generic, x86_64: installed
anbox-modules-ashmem, 10.1~20180523.2.xenial.c36965f, 4.15.0-24-generic, x86_64: installedError! Could not locate dkms.conf file.
File:  does not exist.

anbox-modules-ashmem, 10.1~20180523.2.xenial.c36965f, 4.4.0-128-generic, x86_64: installed

During a kernel upgrade, broken dkms prevented other dkms I depend on (nvidia driver) from building:
sudo apt-get install --install-recommends linux-generic-hwe-16.04 xserver-xorg-hwe-16.04 linux-tools-generic-hwe-16.04:

Selecting previously unselected package linux-modules-4.15.0-24-generic.
Preparing to unpack .../linux-modules-4.15.0-24-generic_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-modules-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Selecting previously unselected package linux-image-4.15.0-24-generic.
Preparing to unpack .../linux-image-4.15.0-24-generic_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-image-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Selecting previously unselected package linux-modules-extra-4.15.0-24-generic.
Preparing to unpack .../linux-modules-extra-4.15.0-24-generic_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-modules-extra-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Preparing to unpack .../linux-image-generic-hwe-16.04_4.15.0.24.46_amd64.deb ...
Unpacking linux-image-generic-hwe-16.04 (4.15.0.24.46) over (4.13.0.45.64) ...
Selecting previously unselected package linux-headers-4.15.0-24.
Preparing to unpack .../linux-headers-4.15.0-24_4.15.0-24.26~16.04.1_all.deb ...
Unpacking linux-headers-4.15.0-24 (4.15.0-24.26~16.04.1) ...
Selecting previously unselected package linux-headers-4.15.0-24-generic.
Preparing to unpack .../linux-headers-4.15.0-24-generic_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-headers-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Preparing to unpack .../linux-headers-generic-hwe-16.04_4.15.0.24.46_amd64.deb ...
Unpacking linux-headers-generic-hwe-16.04 (4.15.0.24.46) over (4.13.0.45.64) ...
Selecting previously unselected package linux-generic-hwe-16.04.
Preparing to unpack .../linux-generic-hwe-16.04_4.15.0.24.46_amd64.deb ...
Unpacking linux-generic-hwe-16.04 (4.15.0.24.46) ...
Selecting previously unselected package linux-hwe-tools-4.15.0-24.
Preparing to unpack .../linux-hwe-tools-4.15.0-24_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-hwe-tools-4.15.0-24 (4.15.0-24.26~16.04.1) ...
Selecting previously unselected package linux-tools-4.15.0-24-generic.
Preparing to unpack .../linux-tools-4.15.0-24-generic_4.15.0-24.26~16.04.1_amd64.deb ...
Unpacking linux-tools-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Selecting previously unselected package linux-tools-generic-hwe-16.04.
Preparing to unpack .../linux-tools-generic-hwe-16.04_4.15.0.24.46_amd64.deb ...
Unpacking linux-tools-generic-hwe-16.04 (4.15.0.24.46) ...
Setting up linux-modules-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Setting up linux-image-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
I: /vmlinuz.old is now a symlink to boot/vmlinuz-4.13.0-45-generic
I: /initrd.img.old is now a symlink to boot/initrd.img-4.13.0-45-generic
I: /vmlinuz is now a symlink to boot/vmlinuz-4.15.0-24-generic
I: /initrd.img is now a symlink to boot/initrd.img-4.15.0-24-generic
Setting up linux-modules-extra-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Setting up linux-image-generic-hwe-16.04 (4.15.0.24.46) ...
Setting up linux-headers-4.15.0-24 (4.15.0-24.26~16.04.1) ...
Setting up linux-headers-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
/etc/kernel/header_postinst.d/dkms:
Error! Could not locate dkms.conf file.
File:  does not exist.
Setting up linux-headers-generic-hwe-16.04 (4.15.0.24.46) ...
Setting up linux-generic-hwe-16.04 (4.15.0.24.46) ...
Setting up linux-hwe-tools-4.15.0-24 (4.15.0-24.26~16.04.1) ...
Setting up linux-tools-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
Setting up linux-tools-generic-hwe-16.04 (4.15.0.24.46) ...
Processing triggers for linux-image-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
/etc/kernel/postinst.d/dkms:
Error! Could not locate dkms.conf file.
File:  does not exist.
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.15.0-24-generic
/etc/kernel/postinst.d/zz-update-grub:
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.15.0-24-generic
Found initrd image: /boot/initrd.img-4.15.0-24-generic
Found linux image: /boot/vmlinuz-4.13.0-45-generic
Found initrd image: /boot/initrd.img-4.13.0-45-generic
Found linux image: /boot/vmlinuz-4.13.0-43-generic
Found initrd image: /boot/initrd.img-4.13.0-43-generic
Found linux image: /boot/vmlinuz-4.13.0-41-generic
Found initrd image: /boot/initrd.img-4.13.0-41-generic
Adding boot menu entry for EFI firmware configuration
done

Two dkms hooks /etc/kernel/header_postinst.d/dkms and /etc/kernel/postinst.d/dkms failed with the same output as dkms status from above:

Error! Could not locate dkms.conf file.
File:  does not exist.

Workaround:

WARNING: This workaround comes with NO WARRANTY. YMMV. Some of these commands may render your system unbootable.

Remove my broken symlinks:

$ sudo rm -rf /var/lib/dkms/anbox-modules-ashmem/9~xenial1 /var/lib/dkms/anbox-modules-binder/9~xenial1

Last command produces more broken symlinks:

$ find /var/lib/dkms -xtype l -ls
 45244085      0 lrwxrwxrwx   1 root     root           34 May 23 06:24 /var/lib/dkms/anbox-modules-ashmem/kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
 45242970      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
 45236968      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64
 45244093      0 lrwxrwxrwx   1 root     root           34 May 23 06:24 /var/lib/dkms/anbox-modules-binder/kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
 45243136      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-binder/kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
 45238616      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-binder/kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64

Clean these up with:

$ sudo find /var/lib/dkms/anbox-* -xtype l -delete

dkms status should work now.

Now, re-run the dkms portions of the kernel upgrade. This can take some time...

$ sudo dpkg-reconfigure linux-headers-4.15.0-24-generic linux-image-4.15.0-24-generic
Processing triggers for linux-image-4.15.0-24-generic (4.15.0-24.26~16.04.1) ...
/etc/kernel/postinst.d/initramfs-tools:
update-initramfs: Generating /boot/initrd.img-4.15.0-24-generic
/etc/kernel/postinst.d/zz-update-grub:
Generating grub configuration file ...
Warning: Setting GRUB_TIMEOUT to a non-zero value when GRUB_HIDDEN_TIMEOUT is set is no longer supported.
Found linux image: /boot/vmlinuz-4.15.0-24-generic
Found initrd image: /boot/initrd.img-4.15.0-24-generic
Found linux image: /boot/vmlinuz-4.13.0-45-generic
Found initrd image: /boot/initrd.img-4.13.0-45-generic
Found linux image: /boot/vmlinuz-4.13.0-43-generic
Found initrd image: /boot/initrd.img-4.13.0-43-generic
Found linux image: /boot/vmlinuz-4.13.0-41-generic
Found initrd image: /boot/initrd.img-4.13.0-41-generic
Adding boot menu entry for EFI firmware configuration
done

dkms status should have entries for both running and target kernel.
running: 4.13.0-45-generic
target: 4.15.0-24-generic

What were you expecting?:

Working kernel upgrades.

If anbox packaging controls this, during upgrade, please remove the old version from dkms before removing the old source directory (in this case /usr/src/anbox-modules-ashmem-9~xenial1).

There's an upstream bug for this general problem:
https://bugs.launchpad.net/ubuntu/+source/dkms/+bug/830915

In either case, I assume other people will run into this bug so I thought it should be documented here.

Additional info:

$ ls -l /var/lib/dkms/anbox-modules-*
/var/lib/dkms/anbox-modules-ashmem:
total 8
drwxr-xr-x 7 root root 4096 Jul  2 12:11 10.1~20180523.2.xenial.c36965f
drwxr-xr-x 7 root root 4096 May 30 06:37 9~xenial1
lrwxrwxrwx 1 root root   34 May 15 23:59 kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64
lrwxrwxrwx 1 root root   55 May 31 15:20 kernel-4.13.0-43-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-43-generic/x86_64
lrwxrwxrwx 1 root root   55 Jun 26 10:45 kernel-4.13.0-45-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-45-generic/x86_64
lrwxrwxrwx 1 root root   55 Jul  2 12:12 kernel-4.15.0-24-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.15.0-24-generic/x86_64
lrwxrwxrwx 1 root root   34 May 15 23:59 kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
lrwxrwxrwx 1 root root   34 May 23 06:24 kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
lrwxrwxrwx 1 root root   55 Jun 26 10:45 kernel-4.4.0-128-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.4.0-128-generic/x86_64

/var/lib/dkms/anbox-modules-binder:
total 8
drwxr-xr-x 4 root root 4096 May 31 15:20 10.1~20180523.2.xenial.c36965f
drwxr-xr-x 7 root root 4096 May 30 06:37 9~xenial1
lrwxrwxrwx 1 root root   34 May 15 23:59 kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64
lrwxrwxrwx 1 root root   55 May 31 15:20 kernel-4.13.0-43-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-43-generic/x86_64
lrwxrwxrwx 1 root root   34 May 15 23:59 kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
lrwxrwxrwx 1 root root   34 May 23 06:24 kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
$ ls -l /var/lib/dkms/anbox-modules-ashmem/9~xenial1/
total 20
drwxr-xr-x 3 root root 4096 May 15 23:59 4.13.0-41-generic
drwxr-xr-x 3 root root 4096 May 23 06:23 4.13.0-43-generic
drwxr-xr-x 3 root root 4096 May 15 23:59 4.4.0-124-generic
drwxr-xr-x 3 root root 4096 May 23 06:24 4.4.0-127-generic
drwxr-xr-x 3 root root 4096 May 30 06:36 build
lrwxrwxrwx 1 root root   39 May 15 23:59 source -> /usr/src/anbox-modules-ashmem-9~xenial1
$ ls -dl /usr/src/anbox-*
drwxr-xr-x 3 root root 4096 May 31 15:19 /usr/src/anbox-modules-ashmem-10.1~20180523.2.xenial.c36965f
drwxr-xr-x 2 root root 4096 May 31 15:19 /usr/src/anbox-modules-binder-10.1~20180523.2.xenial.c36965f
$ find /var/lib/dkms/anbox-* -type l -ls
 45243717      0 lrwxrwxrwx   1 root     root           55 Jun 26 10:45 /var/lib/dkms/anbox-modules-ashmem/kernel-4.4.0-128-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.4.0-128-generic/x86_64
 45242205      0 lrwxrwxrwx   1 root     root           55 Jul  2 12:12 /var/lib/dkms/anbox-modules-ashmem/kernel-4.15.0-24-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.15.0-24-generic/x86_64
 45243701      0 lrwxrwxrwx   1 root     root           55 Jun 26 10:45 /var/lib/dkms/anbox-modules-ashmem/kernel-4.13.0-45-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-45-generic/x86_64
 45243337      4 lrwxrwxrwx   1 root     root           60 May 31 15:20 /var/lib/dkms/anbox-modules-ashmem/10.1~20180523.2.xenial.c36965f/source -> /usr/src/anbox-modules-ashmem-10.1~20180523.2.xenial.c36965f
 45242977      0 lrwxrwxrwx   1 root     root           55 May 31 15:20 /var/lib/dkms/anbox-modules-ashmem/kernel-4.13.0-43-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-43-generic/x86_64
 45236456      0 lrwxrwxrwx   1 root     root           39 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/9~xenial1/source -> /usr/src/anbox-modules-ashmem-9~xenial1
 45244085      0 lrwxrwxrwx   1 root     root           34 May 23 06:24 /var/lib/dkms/anbox-modules-ashmem/kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
 45242970      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
 45236968      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-ashmem/kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64
 45243753      4 lrwxrwxrwx   1 root     root           60 May 31 15:20 /var/lib/dkms/anbox-modules-binder/10.1~20180523.2.xenial.c36965f/source -> /usr/src/anbox-modules-binder-10.1~20180523.2.xenial.c36965f
 45243001      0 lrwxrwxrwx   1 root     root           55 May 31 15:20 /var/lib/dkms/anbox-modules-binder/kernel-4.13.0-43-generic-x86_64 -> 10.1~20180523.2.xenial.c36965f/4.13.0-43-generic/x86_64
 45237121      0 lrwxrwxrwx   1 root     root           39 May 15 23:59 /var/lib/dkms/anbox-modules-binder/9~xenial1/source -> /usr/src/anbox-modules-binder-9~xenial1
 45244093      0 lrwxrwxrwx   1 root     root           34 May 23 06:24 /var/lib/dkms/anbox-modules-binder/kernel-4.4.0-127-generic-x86_64 -> 9~xenial1/4.4.0-127-generic/x86_64
 45243136      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-binder/kernel-4.4.0-124-generic-x86_64 -> 9~xenial1/4.4.0-124-generic/x86_64
 45238616      0 lrwxrwxrwx   1 root     root           34 May 15 23:59 /var/lib/dkms/anbox-modules-binder/kernel-4.13.0-41-generic-x86_64 -> 9~xenial1/4.13.0-41-generic/x86_64
@bwerthmann
Copy link
Author

Relates to:
#547

@bwerthmann
Copy link
Author

bwerthmann commented Jul 2, 2018

Another instance of this problem is uninstalling Anbox with sudo ppa-purge ppa:morphis/anbox-support which results in broken dkms.

Running these commands before ppa-purge prevents this issue.

sudo dkms remove anbox-modules-ashmem/10.1~20180523.2.xenial.c36965f --all
sudo dkms remove anbox-modules-binder/10.1~20180523.2.xenial.c36965f --all

@morphis
Copy link
Member

morphis commented Jul 2, 2018

@bwerthmann You have time and interested in helping to improve the packaging? We've split out the kernel modules into a separate repository here: https://github.com/anbox/anbox-modules

@morphis
Copy link
Member

morphis commented Jul 4, 2018

@zhsj Can you take a look at this one?

@morphis morphis added the kernel label Jul 4, 2018
@zhsj
Copy link
Contributor

zhsj commented Jul 4, 2018

@bwerthmann maybe you can purge all the old things, like /var/lib/dkms/anbox-*, /usr/src/anbox-*, lib/modules/*/dkms/{binder,ashmem}_linux.ko. Then do a fresh install with the newest version from ppa.

@morphis have you uploaded new version to ppa? The main difference from the master is, I combined binder and ashmem into one dkms module, and removed magic hacks in debian/post*

Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

No branches or pull requests

3 participants