0

I had asked this question in podman discussion on Github (see the post here) but no luck getting an answer. So I copy the content and turn to ask Ubuntu for help. I hope that in a more general site with more users the comments and answers may solve my problem or lead me to somewhere nearer to the target.

I want to configure podman to provide a shared image storage between root-less users within the host but failed. I don't care if root user works.

user0 is sudo user, user1 and user2 are root-less users. All shells are ssh-ed with corresponding username directly (i.e. not by su).

  • user1 output
user1@test:~$ podman images
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
user1@test:~$ podman pull busybox
Resolving "busybox" using unqualified-search registries (/etc/containers/registries.conf)
Trying to pull gitea.cn:666/busybox:latest...
Getting image source signatures
Copying blob a10d77880eaf done
Copying config 87ff76f62d done
Writing manifest to image destination
Storing signatures
87ff76f62d367950186bde563642e39208c0e2b4afc833b4b3b01b8fef60ae9e

user1@test:~$ podman images --log-level=debug INFO[0000] podman filtering at log level debug DEBU[0000] Called images.PersistentPreRunE(podman images --log-level=debug) DEBU[0000] overlay storage already configured with a mount-program DEBU[0000] Merged system config "/usr/share/containers/containers.conf" DEBU[0000] overlay storage already configured with a mount-program DEBU[0000] Using conmon: "/usr/bin/conmon" DEBU[0000] Initializing boltdb state at /var/lib/sharedimages/libpod/bolt_state.db DEBU[0000] Overriding run root "/run/user/1001" with "/run/user/1001/containers" from database DEBU[0000] systemd-logind: Unknown object '/'. DEBU[0000] Using graph driver overlay DEBU[0000] Using graph root /var/lib/sharedimages DEBU[0000] Using run root /run/user/1001/containers DEBU[0000] Using static dir /var/lib/sharedimages/libpod DEBU[0000] Using tmp dir /run/user/1001/libpod/tmp DEBU[0000] Using volume path /var/lib/sharedimages/volumes DEBU[0000] overlay storage already configured with a mount-program DEBU[0000] Set libpod namespace to "" DEBU[0000] [graphdriver] trying provided driver "overlay" DEBU[0000] cached value indicated that overlay is supported DEBU[0000] cached value indicated that metacopy is not being used DEBU[0000] cached value indicated that native-diff is usable DEBU[0000] backingFs=extfs, projectQuotaSupported=false, useNativeDiff=true, usingMetacopy=false DEBU[0000] Initializing event backend journald DEBU[0000] configured OCI runtime runc initialization failed: no valid executable found for OCI runtime runc: invalid argument DEBU[0000] configured OCI runtime kata initialization failed: no valid executable found for OCI runtime kata: invalid argument DEBU[0000] configured OCI runtime runsc initialization failed: no valid executable found for OCI runtime runsc: invalid argument DEBU[0000] Using OCI runtime "/usr/bin/crun" INFO[0000] Found CNI network podman (type=bridge) at /home/user1/.config/cni/net.d/87-podman.conflist DEBU[0000] Default CNI network name podman is unchangeable INFO[0000] Setting parallel job count to 37 DEBU[0000] parsed reference into "[overlay@/var/lib/sharedimages+/run/user/1001/containers]@87ff76f62d367950186bde563642e39208c0e2b4afc833b4b3b01b8fef60ae9e" DEBU[0000] exporting opaque data as blob "sha256:87ff76f62d367950186bde563642e39208c0e2b4afc833b4b3b01b8fef60ae9e" DEBU[0000] exporting opaque data as blob "sha256:87ff76f62d367950186bde563642e39208c0e2b4afc833b4b3b01b8fef60ae9e" REPOSITORY TAG IMAGE ID CREATED SIZE gitea.cn:666/busybox latest 87ff76f62d36 16 months ago 4.5 MB DEBU[0000] Called images.PersistentPostRunE(podman images --log-level=debug)

user1@test:~$

  • user2 output

user2@test:~$ podman images --log-level=debug
INFO[0000] podman filtering at log level debug
DEBU[0000] Called images.PersistentPreRunE(podman images --log-level=debug)
DEBU[0000] Merged system config "/usr/share/containers/containers.conf"
DEBU[0000] Using conmon: "/usr/bin/conmon"
DEBU[0000] Initializing boltdb state at /var/lib/sharedimages/libpod/bolt_state.db
DEBU[0000] Overriding run root "/run/user/1002" with "/run/user/1001/containers" from database
DEBU[0000] Overriding tmp dir "/run/user/1002/libpod/tmp" with "/run/user/1001/libpod/tmp" from database
DEBU[0000] systemd-logind: Unknown object '/'.
WARN[0000] XDG_RUNTIME_DIR is pointing to a path which is not writable. Most likely podman will fail.
DEBU[0000] Using graph driver overlay
DEBU[0000] Using graph root /var/lib/sharedimages
DEBU[0000] Using run root /run/user/1001/containers
DEBU[0000] Using static dir /var/lib/sharedimages/libpod
DEBU[0000] Using tmp dir /run/user/1001/libpod/tmp
DEBU[0000] Using volume path /var/lib/sharedimages/volumes
DEBU[0000] Set libpod namespace to ""
DEBU[0000] Not configuring container store
DEBU[0000] Initializing event backend journald
Error: error creating tmpdir: mkdir /run/user/1001/libpod: permission denied
user2@test:~$

The configurations:

  • user1
user1@test:~$ more /home/user1/.config/containers/storage.conf
[storage]
driver = "overlay"
runroot = "/run/user/1001"
graphroot = "/var/lib/sharedimages"

user1@test:~$ id uid=1001(user1) gid=1001(user1) groups=1001(user1) user1@test:~$

  • user2
user2@test:~$ more /home/user2/.config/containers/storage.conf
[storage]
driver = "overlay"
runroot = "/run/user/1002"
graphroot = "/var/lib/sharedimages"
[storage.options]
mount_program = "/bin/fuse-overlayfs"
user2@test:~$ id
uid=1002(user2) gid=1002(user2) groups=1002(user2)
  • user0: no configuration
user0@test:/home/user1$ cd /etc/containers/
user0@test:/etc/containers$ ls
libpod.conf  policy.json  registries.conf  registries.conf.d
user0@test:/etc/containers$
user0@test:/etc/containers$ id
uid=1000(user0) gid=1000(user0) groups=1000(user0),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),110(lxd)
user0@test:/etc/containers$
  • The podman version
user1@test:~$ podman version
Version:      3.4.4
API Version:  3.4.4
Go Version:   go1.18.1
Built:        Thu Jan  1 00:00:00 1970
OS/Arch:      linux/amd64
  • The podman info

user1@test:~$ podman info
host:
  arch: amd64
  buildahVersion: 1.23.1
  cgroupControllers:
  - memory
  - pids
  cgroupManager: systemd
  cgroupVersion: v2
  conmon:
    package: 'conmon: /usr/bin/conmon'
    path: /usr/bin/conmon
    version: 'conmon version 2.0.25, commit: unknown'
  cpus: 12
  distribution:
    codename: jammy
    distribution: ubuntu
    version: "22.04"
  eventLogger: journald
  hostname: test
  idMappings:
    gidmap:
    - container_id: 0
      host_id: 1001
      size: 1
    - container_id: 1
      host_id: 165536
      size: 65536
    uidmap:
    - container_id: 0
      host_id: 1001
      size: 1
    - container_id: 1
      host_id: 165536
      size: 65536
  kernel: 5.15.0-122-generic
  linkmode: dynamic
  logDriver: journald
  memFree: 19415232512
  memTotal: 20680478720
  ociRuntime:
    name: crun
    package: 'crun: /usr/bin/crun'
    path: /usr/bin/crun
    version: |-
      crun version 0.17
      commit: 0e9229ae34caaebcb86f1fde18de3acaf18c6d9a
      spec: 1.0.0
      +SYSTEMD +SELINUX +APPARMOR +CAP +SECCOMP +EBPF +YAJL
  os: linux
  remoteSocket:
    exists: true
    path: /run/user/1001/podman/podman.sock
  security:
    apparmorEnabled: false
    capabilities: CAP_CHOWN,CAP_DAC_OVERRIDE,CAP_FOWNER,CAP_FSETID,CAP_KILL,CAP_NET_BIND_SERVICE,CAP_SETFCAP,CAP_SETGID,CAP_SETPCAP,CAP_SETUID,CAP_SYS_CHROOT
    rootless: true
    seccompEnabled: true
    seccompProfilePath: /usr/share/containers/seccomp.json
    selinuxEnabled: false
  serviceIsRemote: false
  slirp4netns:
    executable: /usr/bin/slirp4netns
    package: 'slirp4netns: /usr/bin/slirp4netns'
    version: |-
      slirp4netns version 1.0.1
      commit: 6a7b16babc95b6a3056b33fb45b74a6f62262dd4
      liuser0irp: 4.6.1
  swapFree: 8589930496
  swapTotal: 8589930496
  uptime: 13h 8m 55.68s (Approximately 0.54 days)
plugins:
  log:
  - k8s-file
  - none
  - journald
  network:
  - bridge
  - macvlan
  volume:
  - local
registries:
  search:
  - gitea.cn:666
store:
  configFile: /home/user1/.config/containers/storage.conf
  containerStore:
    number: 0
    paused: 0
    running: 0
    stopped: 0
  graphDriverName: overlay
  graphOptions: {}
  graphRoot: /var/lib/sharedimages
  graphStatus:
    Backing Filesystem: extfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  imageStore:
    number: 1
  runRoot: /run/user/1001/containers
  volumePath: /var/lib/sharedimages/volumes
version:
  APIVersion: 3.4.4
  Built: 0
  BuiltTime: Thu Jan  1 00:00:00 1970
  GitCommit: ""
  GoVersion: go1.18.1
  OsArch: linux/amd64
  Version: 3.4.4
  • The OS
user1@test:~$ uname -a
Linux test 5.15.0-122-generic #132-Ubuntu SMP Thu Aug 29 13:45:52 UTC 2024 x86_64 x86_64 x86_64 GNU/Linux

Seemed the debug log said the configuration of user2 did not take effect

DEBU[0000] Initializing boltdb state at /var/lib/sharedimages/libpod/bolt_state.db
DEBU[0000] Overriding run root "/run/user/1002" with "/run/user/1001/containers" from database
DEBU[0000] Overriding tmp dir "/run/user/1002/libpod/tmp" with "/run/user/1001/libpod/tmp" from databas

Then what's the expected configurations for this requirement?

Thank you very much!

Edit on 29th Sep.

I removed podman -> removed /var/lib/sharedimages -> removed /var/lib/containers -> removed /home/user1/.config/containers/storage.conf -> removed /home/user2/.config/container/stoarge.conf -> reboot host -> reinstalled podman -> recreated /var/lib/sharedimages and /var/lib/container

  • try user2 first
user2@test:~$ podman images --log-level=debug
INFO[0000] podman filtering at log level debug
DEBU[0000] Called images.PersistentPreRunE(podman images --log-level=debug)
DEBU[0000] overlay storage already configured with a mount-program
DEBU[0000] Merged system config "/usr/share/containers/containers.conf"
DEBU[0000] overlay storage already configured with a mount-program
DEBU[0000] Using conmon: "/usr/bin/conmon"
DEBU[0000] Initializing boltdb state at /home/user2/.local/share/containers/storage/libpod/bolt_state.db
DEBU[0000] systemd-logind: Unknown object '/'.
DEBU[0000] Using graph driver overlay
DEBU[0000] Using graph root /home/user2/.local/share/containers/storage
DEBU[0000] Using run root /run/user/1002/containers
DEBU[0000] Using static dir /home/user2/.local/share/containers/storage/libpod
DEBU[0000] Using tmp dir /run/user/1002/libpod/tmp
DEBU[0000] Using volume path /home/user2/.local/share/containers/storage/volumes
DEBU[0000] overlay storage already configured with a mount-program
DEBU[0000] Set libpod namespace to ""
DEBU[0000] [graphdriver] trying provided driver "overlay"
DEBU[0000] overlay: mount_program=/usr/bin/fuse-overlayfs
DEBU[0000] backingFs=extfs, projectQuotaSupported=false, useNativeDiff=false, usingMetacopy=false
DEBU[0000] Initializing event backend journald
DEBU[0000] configured OCI runtime runc initialization failed: no valid executable found for OCI runtime runc: invalid argument
DEBU[0000] configured OCI runtime kata initialization failed: no valid executable found for OCI runtime kata: invalid argument
DEBU[0000] configured OCI runtime runsc initialization failed: no valid executable found for OCI runtime runsc: invalid argument
DEBU[0000] Using OCI runtime "/usr/bin/crun"
INFO[0000] Found CNI network podman (type=bridge) at /home/user2/.config/cni/net.d/87-podman.conflist
DEBU[0000] Default CNI network name podman is unchangeable
INFO[0000] Setting parallel job count to 37
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
DEBU[0000] Called images.PersistentPostRunE(podman images --log-level=debug)
user2@test:~$

Then user1

user1@test:~$ podman images --log-level=debug
INFO[0000] podman filtering at log level debug
DEBU[0000] Called images.PersistentPreRunE(podman images --log-level=debug)
DEBU[0000] Merged system config "/usr/share/containers/containers.conf"
DEBU[0000] Using conmon: "/usr/bin/conmon"
Error: error creating runtime static files directory: mkdir /var/lib/sharedimages/libpod: permission denied
user1@test:~$
user1@test:~$
user1@test:~$ more .config/c
cni/        containers/
user1@test:~$ more .config/containers/storage.conf
[storage]
driver = "overlay"
runroot = "/run/user/1001"
graphroot = "/var/lib/sharedimages"
[storage.options]
mount_program = "/bin/fuse-overlayfs"

0 Answers0