Podman: panic on `podman run --rootfs`

Created on 14 Mar 2019  路  13Comments  路  Source: containers/podman

Is this a BUG REPORT or FEATURE REQUEST? (leave only one on its own line)

/kind bug

Description

migrating old services from nspawn machines to podman containers.
Trying to use the --rootfs flag.

Steps to reproduce the issue:

  1. podman run -it --rm --rootfs /var/lib/machines/mymachine

  2. 2.

3.

Describe the results you received:

[root@knob] /var/lib/machines/bananaboat.usersys# podman run -it --rm --privileged --rootfs $(pwd) 
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x80 pc=0x113876a]

goroutine 1 [running]:
github.com/containers/libpod/libpod.(*Container).setupStorage(0xc000543bc0, 0x1854fa0, 0xc0000be048, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/libpod/container_internal.go:340 +0x6fa
github.com/containers/libpod/libpod.(*Runtime).newContainer(0xc000224540, 0x1854fa0, 0xc0000be048, 0xc00058a500, 0xc00058aa80, 0x10, 0x10, 0x0, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/libpod/runtime_ctr.go:161 +0x70f
github.com/containers/libpod/libpod.(*Runtime).NewContainer(0xc000224540, 0x1854fa0, 0xc0000be048, 0xc00058a500, 0xc00058aa80, 0x10, 0x10, 0x0, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/libpod/runtime_ctr.go:46 +0xe4
main.createContainerFromCreateConfig(0xc000224540, 0xc0000f6580, 0x1854fa0, 0xc0000be048, 0x0, 0x0, 0x0, 0xc0000f6580)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/cmd/podman/create.go:896 +0x14b
main.createContainer(0x27ca820, 0xc000224540, 0x0, 0x0, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/cmd/podman/create.go:172 +0x222
main.runCmd(0x27ca820, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/cmd/podman/run.go:68 +0x123
main.glob..func48(0x262b040, 0xc00047f9a0, 0x1, 0x5, 0x0, 0x0)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/cmd/podman/run.go:32 +0x7f
github.com/containers/libpod/vendor/github.com/spf13/cobra.(*Command).execute(0x262b040, 0xc0000c6020, 0x5, 0x5, 0x262b040, 0xc0000c6020)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/vendor/github.com/spf13/cobra/command.go:762 +0x473
github.com/containers/libpod/vendor/github.com/spf13/cobra.(*Command).ExecuteC(0x262bc20, 0x6, 0x27f0b80, 0xc0001a6f00)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/vendor/github.com/spf13/cobra/command.go:852 +0x2fd
github.com/containers/libpod/vendor/github.com/spf13/cobra.(*Command).Execute(0x262bc20, 0xc000146370, 0xc0000ac058)
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/vendor/github.com/spf13/cobra/command.go:800 +0x2b
main.main()
        /builddir/build/BUILD/libpod-0ad9b6bf2aea4ba37e8c9738feabec61343ba175/_build/src/github.com/containers/libpod/cmd/podman/main.go:225 +0x3c

Describe the results you expected:

Really unsure

Additional information you deem important (e.g. issue happens only occasionally):

Output of podman version:

Version:            1.1.2
RemoteAPI Version:  1
Go Version:         go1.11.5
Git Commit:         a95a49d3038462d033f84ac314ec8a3064a99cff
Built:              Tue Mar  5 13:10:31 2019
OS/Arch:            linux/amd64

Output of podman info --debug:

debug:
  compiler: gc
  git commit: a95a49d3038462d033f84ac314ec8a3064a99cff
  go version: go1.11.5
  podman version: 1.1.2
host:
  BuildahVersion: 1.7.1
  Conmon:
    package: podman-1.1.2-1.git0ad9b6b.fc29.x86_64
    path: /usr/libexec/podman/conmon
    version: 'conmon version 1.12.0-dev, commit: a95a49d3038462d033f84ac314ec8a3064a99cff'
  Distribution:
    distribution: fedora
    version: "29"
  MemFree: 3888041984
  MemTotal: 16645263360
  OCIRuntime:
    package: runc-1.0.0-68.dev.git6635b4f.fc29.x86_64
    path: /usr/bin/runc
    version: |-
      runc version 1.0.0-rc6+dev
      commit: ef9132178ccc3d2775d4fb51f1e431f30cac1398-dirty
      spec: 1.0.1-dev
  SwapFree: 8388079616
  SwapTotal: 8392798208
  arch: amd64
  cpus: 12
  hostname: knob.usersys.redhat.com
  kernel: 4.20.14-200.fc29.x86_64
  os: linux
  rootless: false
  uptime: 25h 59m 31.69s (Approximately 1.04 days)
insecure registries:
  registries:
  - localhost:5000
  - docker.usersys.redhat.com
registries:
  registries:
  - docker.io
  - registry.fedoraproject.org
  - quay.io
  - registry.access.redhat.com
  - registry.centos.org
store:
  ConfigFile: /etc/containers/storage.conf
  ContainerStore:
    number: 7
  GraphDriverName: overlay
  GraphOptions:
  - overlay.mountopt=nodev
  GraphRoot: /var/lib/containers/storage
  GraphStatus:
    Backing Filesystem: xfs
    Native Overlay Diff: "true"
    Supports d_type: "true"
    Using metacopy: "false"
  ImageStore:
    number: 24
  RunRoot: /var/run/containers/storage
  VolumePath: /var/lib/containers/storage/volumes

Additional environment details (AWS, VirtualBox, physical, etc.):
physical host

kinbug

All 13 comments

Oh dear. I honestly forgot we even implemented that flag.
@rhatdan @giuseppe Do we want to look into just deprecating --rootfs or is it worth supporting?

I find it useful.

I was playing with containerd and they have exactly the same feature --rootfs for unmanaged images

Cool. #2656 fixes the nil pointer.
Perhaps --rootfs= could use more docs. I think it is a very useful, probably not widely known feature.

Yes I think it could be a cool blog on this. @giuseppe Would you like to write one?

yes it is already on my TODO list, now just need to prioritize it :-)

Cheers guys!

Is this flag still supported?

smosciat@simo:~/go/src/github.com/containers/libpod$ ./bin/podman version
ERRO[0000] User-selected graph driver "vfs" overwritten by graph driver "overlay" from database - delete libpod local files to resolve 
Version:            1.7.1-dev
RemoteAPI Version:  1
Go Version:         go1.13.7
Git Commit:         9be64300d46341ab345f8c760b7a79cced7db3f9-dirty
Built:              Thu Jan 30 16:55:28 2020
OS/Arch:            linux/amd64
smosciat@simo:~/go/src/github.com/containers/libpod$ ./bin/podman --rootfs=/home/smosciat/tmp/redis6_rootfs/
Error: unknown flag: --rootfs

We are having some internal discussion and knowing the plan for this specific features would help us.

@siscia, it's podman run --rootfs.

Awww many thanks!

Actually how do I use it?

$ ./bin/podman run --rootfs /home/smosciat/tmp/redis6_rootfs
Error: args must not be empty: OCI runtime error

Where /home/smosciat/tmp/redis6_rootfs is a directory that contains an exploded filesystem generated using Singularity.

$ ll /home/smosciat/tmp/redis6_rootfs
total 92
drwxr-xr-x 23 smosciat smosciat 4096 Feb  7 10:10 ./
drwxr-xr-x 10 smosciat smosciat 4096 Feb  7 10:10 ../
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 bin/
drwxr-xr-x  2 smosciat smosciat 4096 Nov 10 13:17 boot/
drwxr-xr-x  2 smosciat smosciat 4096 Feb  1 20:18 data/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 dev/
lrwxrwxrwx  1 smosciat smosciat   36 Feb  7 10:10 environment -> .singularity.d/env/90-environment.sh*
drwxr-xr-x 28 smosciat smosciat 4096 Feb  7 10:10 etc/
lrwxrwxrwx  1 smosciat smosciat   27 Feb  7 10:10 .exec -> .singularity.d/actions/exec*
drwxr-xr-x  2 smosciat smosciat 4096 Nov 10 13:17 home/
drwxr-xr-x  8 smosciat smosciat 4096 Feb  1 20:18 lib/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 lib64/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 media/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 mnt/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 opt/
drwxr-xr-x  2 smosciat smosciat 4096 Nov 10 13:17 proc/
drwx------  2 smosciat smosciat 4096 Feb  1 20:15 root/
drwxr-xr-x  3 smosciat smosciat 4096 Jan 30 01:00 run/
lrwxrwxrwx  1 smosciat smosciat   26 Feb  7 10:10 .run -> .singularity.d/actions/run*
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 sbin/
lrwxrwxrwx  1 smosciat smosciat   28 Feb  7 10:10 .shell -> .singularity.d/actions/shell*
lrwxrwxrwx  1 smosciat smosciat   24 Feb  7 10:10 singularity -> .singularity.d/runscript*
drwxr-xr-x  5 smosciat smosciat 4096 Feb  7 10:10 .singularity.d/
drwxr-xr-x  2 smosciat smosciat 4096 Jan 30 01:00 srv/
drwxr-xr-x  2 smosciat smosciat 4096 Nov 10 13:17 sys/
lrwxrwxrwx  1 smosciat smosciat   27 Feb  7 10:10 .test -> .singularity.d/actions/test*
drwxrwxrwt  2 smosciat smosciat 4096 Feb  1 20:18 tmp/
drwxr-xr-x 10 smosciat smosciat 4096 Jan 30 01:00 usr/
drwxr-xr-x 11 smosciat smosciat 4096 Jan 30 01:00 var/

Error: args must not be empty: OCI runtime error

I assume that runc/crun are complaining because they do not know what do execute, so we need to specify a command:
$ ./bin/podman run --rootfs /home/smosciat/tmp/redis6_rootfs /usr/bin/ls for instance

Wonderful! We could kinda improve the error message!

Anyway this is very interesting for us!

Wonderful! We could kinda improve the error message!

Glad that it's working for you!

please do not remove --rootfs, It is because of it I changed from docker and nspawn虏 to podman.

here is a quick guide if needed for new comers:
create an OS

debootstrap --arch=amd64 --include=dbus,apt-transport-https,wget,curl,locales,tzdata,man-db,manpages,dialog,procps,sudo,nano,ifupdown,iproute2,apt-utils,less --components=main,contrib,non-free buster /busterr http://deb.debian.org/debian

change/create the root password:

podman run --rm -it  --rootfs /busterr bash -c "echo 'root:bbbbbbnn' | chpasswd"

run a full OS with systemd (like a vm):

podman run --rm -it --systemd=always --rootfs /busterr /sbin/init

虏 nspawn was slow compared to podman , podman is as quick as docker (using privileged containers). I could not make nspawn do some funcions in python as quick as podman/docker

Was this page helpful?
0 / 5 - 0 ratings