ganto / copr-lxc3

RPM spec files for building lxc-3 on Fedora COPR
MIT License
8 stars 2 forks source link

Symbol lookup error for add_elem_to_mount_list when using lxc-usernsexec on F30 (unpriviledged containers) #18

Closed vrubiolo closed 4 years ago

vrubiolo commented 4 years ago

Hi there,

First, thanks for making a Copr repository available for lxc3 on Fedora! This is a great way to use it w/ minimal fiddling.

I am currently trying to use it for unprivileged containers on Fedora30 and this fails with a symbol lookup error (running as root works fine):

$ lxc-create -n mycontainer -t download -- --dist fedora --release 29 --arch amd64 
lxc-create: mycontainer: conf.c: chown_mapped_root: 3182 lxc-usernsexec failed: lxc-usernsexec: symbol lookup error: lxc-usernsexec: undefined symbol: add_elem_to_mount_list
lxc-create: mycontainer: tools/lxc_create.c: main: 331 Failed to create container mycontainer

I think I have the setup right:

$ id
uid=1000(vincent) gid=1000(vincent) groups=1000(vincent),10(wheel),1001(docker) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

$ cat /etc/subgid
vincent:100000:65536

$ cat /etc/subuid
vincent:100000:65536

$ cat ~/.config/lxc/default.conf 
lxc.include = /etc/lxc/default.conf
lxc.idmap = u 0 100000 65536
lxc.idmap = g 0 100000 65536

And yet this still fails. Looking at the lxc source code, I see it's when chown_mapped_root does an execve of the binary that this ends up failing but ldd shows all libs as being resolved correctly.

Would you have some pointers? Below is my system info.

Thanks much!

$ cat /etc/redhat-release 
Fedora release 30 (Thirty)

$ which lxc-usernsexec |xargs rpm -qf
lxc-3.2.1-0.3.fc30.x86_64

$ ldd /usr/bin/lxc-usernsexec
    linux-vdso.so.1 (0x00007ffddf719000)
    liblxc.so.1 => /lib64/liblxc.so.1 (0x00007f80dd253000)
    libcrypto.so.1.1 => /lib64/libcrypto.so.1.1 (0x00007f80dcf72000)
    libutil.so.1 => /lib64/libutil.so.1 (0x00007f80dcf6d000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f80dcf4c000)
    libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f80dcf32000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f80dcd6c000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f80dcd3d000)
    libseccomp.so.2 => /lib64/libseccomp.so.2 (0x00007f80dccf4000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f80dcced000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f80dd35b000)
    libz.so.1 => /lib64/libz.so.1 (0x00007f80dccd3000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f80dcccd000)
    libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f80dcc3f000)
ganto commented 4 years ago

Thanks for your interest in my repository. I just tried to reproduce your issue on a Fedora 29 that I had available but didn't manage to.

Just some quick questions:

vrubiolo commented 4 years ago

Hi Reto,

Thanks for your reply and the associated guidance. I have started to follow/check the steps you were advising me to do and unfortunately I cannot reproduce the issue anymore. Since I reported it, the following has happened:

  1. I checked and finished the configuration to allow networking of priviledged containers (lxcbr0-based). At the time, priviledged containers could be started but networking would fail. This is now fixed.
  2. There were packages upgrades on the distro (not sure which ones, this is the automated dnf update).

For the record, here is the information you requested:

ganto commented 4 years ago

Thanks for the reply. I'm glad it's working for you now.

Actually I don't understand what went wrong. My gut feeling somehow pointed into the direction of still having an old version of the library loaded into the memory that's why I asked for a reboot or something blocking access to the symbol table that's why I asked for the SELinux logs. Not sure if any of this makes sense.

vrubiolo commented 4 years ago

Thanks for the followup and the associated help. Yes, I think your gut feeling was probably the right one, given the symbol-related error we got and that ldd did correctly solve the associated shared libraries.