Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

gollvm: runc runtime error, broken pipe #35907

Open
heylinn opened this issue Nov 29, 2019 · 2 comments
Assignees
Milestone

Comments

@heylinn
Copy link

@heylinn heylinn commented Nov 29, 2019

What version of Go are you using (go version)?

$ go version
go version go1.13 gollvm LLVM 10.0.0svn linux/amd64

Does this issue reproduce with the latest release?

Yes

What operating system and processor architecture are you using (go env)?

Ubuntu 18.04.3 LTS, x86_64

What did you do?

helloworld_rootfs.tar.gz

$ cd 
$ git clone https://github.com/opencontainers/runc.git
$ cd runc
$ mkdir -p .gopath/src/github.com/opencontainers/
$ ln -sf `pwd` `pwd`/.gopath/src/github.com/opencontainers/runc
$ export GOPATH=`pwd`/.gopath
$ cd .gopath/src/github.com/opencontainers/runc/
$ go build -tags "seccomp" -o runc .

$ cd 
$ mkdir mycontainer
$ cp helloworld_rootfs.tar.gz mycontainer
$ cd mycontainer
$ tar -xf helloworld_rootfs.tar.gz

$ ../runc/runc spec --rootless
$ sed -i 's;"sh";"/hello";' config.json
$ ../runc/runc run mycontainer

What did you expect to see?

                                                                      
Hello from Docker!                                                                                                                            
This message shows that your installation appears to be working correctly.
...

What did you see instead?

$ ../runc/runc run mycontainer
WARN[0000] exit status 127                              
ERRO[0000] container_linux.go:346: starting container process caused "process_linux.go:315: copying bootstrap data to pipe caused \"write init-p: broken pipe\"" 
container_linux.go:346: starting container process caused "process_linux.go:315: copying bootstrap data to pipe caused \"write init-p: broken pipe\""

$ gdb --args ../runc/runc run mycontainer
...
Thread 6 "runc" received signal SIGPIPE, Broken pipe.
[Switching to Thread 0x7fffe97f8700 (LWP 17662)]
0x00007ffff59ed187 in __GI___libc_write (fd=7, buf=0xc000236100, nbytes=64) at ../sysdeps/unix/sysv/linux/write.c:27
27      ../sysdeps/unix/sysv/linux/write.c: No such file or directory.
(gdb) bt
#0  0x00007ffff59ed187 in __GI___libc_write (fd=7, buf=0xc000236100, nbytes=64) at ../sysdeps/unix/sysv/linux/write.c:27
#1  0x00007ffff717a768 in syscall.write (fd=7, p=...) at build.rel/tools/gollvm/libgo/libcalls.go:2654
#2  syscall.Write (fd=7, p=...) at llvm/tools/gollvm/gofrontend/libgo/go/syscall/syscall_unix.go:168
#3  0x00007ffff6f6eb23 in internal..z2fpoll.FD.Write (fd=0xc0000ec1e0, p=...)
    at llvm/tools/gollvm/gofrontend/libgo/go/internal/poll/fd_unix.go:268
#4  0x00007ffff70a1a62 in os.File.write (f=0xc0000f6040, b=...)
    at llvm/tools/gollvm/gofrontend/libgo/go/os/file_unix.go:290
#5  0x00007ffff70a0f4e in os.File.Write (f=0xc0000f6040, b=...)
    at llvm/tools/gollvm/gofrontend/libgo/go/os/file.go:153
#6  0x00007ffff6d10674 in bytes.Reader.WriteTo (r=0xc0000f2270, w=...)
    at llvm/tools/gollvm/gofrontend/libgo/go/bytes/reader.go:144
#7  0x00007ffff6f8ef33 in io.copyBuffer (dst=..., src=..., buf=...)
    at llvm/tools/gollvm/gofrontend/libgo/go/io/io.go:384
#8  0x00007ffff6f8ecfd in io.Copy (dst=..., src=...) at llvm/tools/gollvm/gofrontend/libgo/go/io/io.go:364
#9  0x0000000000621d87 in github.x2ecom..z2fopencontainers..z2frunc..z2flibcontainer.initProcess.start (p=0xffffffffffffffe0)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/libcontainer/process_linux.go:314
#10 0x0000000000624f33 in github.x2ecom..z2fopencontainers..z2frunc..z2flibcontainer.linuxContainer.start (c=0xc0000bc2d0,
    process=0xc0000a2780)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/libcontainer/container_linux.go:341
#11 0x00000000006193a3 in github.x2ecom..z2fopencontainers..z2frunc..z2flibcontainer.linuxContainer.Start (c=0xc0000bc2d0,
    process=0xc0000a2780)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/libcontainer/container_linux.go:241
#12 0x0000000000618e2a in github.x2ecom..z2fopencontainers..z2frunc..z2flibcontainer.linuxContainer.Run (c=0xc0000bc2d0,
    process=0xc0000a2780)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/libcontainer/container_linux.go:251
#13 0x0000000000608235 in main.runner.run (r=0xffffffffffffffe0, config=0xc00010c0e0)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/utils_linux.go:324
#14 0x0000000000603093 in main.startContainer (context=, spec=0xffffffffffffffe0, action=2 '\002', criuOpts=)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/utils_linux.go:452
#15 0x000000000060cf9f in main.func13 (context=0xc0000ac840)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/run.go:76
#16 0x000000000066eeec in github.x2ecom..z2fopencontainers..z2frunc..z2fvendor..z2fgithub.x2ecom..z2furfave..z2fcli.HandleAction (
    action=..., context=0xc0000ac840)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/vendor/github.com/urfave/cli/app.go:495
#17 0x0000000000669e6e in github.x2ecom..z2fopencontainers..z2frunc..z2fvendor..z2fgithub.x2ecom..z2furfave..z2fcli.Command.Run (
    pointer=, ctx=0xc0000ac6e0)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/vendor/github.com/urfave/cli/command.go:210
#18 0x000000000066bc19 in github.x2ecom..z2fopencontainers..z2frunc..z2fvendor..z2fgithub.x2ecom..z2furfave..z2fcli.App.Run (
---Type  to continue, or q  to quit---
    a=, arguments=...)
    at github_issue/runc/.gopath/src/github.com/opencontainers/runc/vendor/github.com/urfave/cli/app.go:255
#19 0x000000000060b0f1 in main.main () at github_issue/runc/.gopath/src/github.com/opencontainers/runc/main.go:145

Comments

This is a runtime issue of runc built with gollvm. It doesn't reproduce for gccgo and golang 1.10.
I am sorry, I didn't know how to make a short example.

helloworld_rootfs.tar.gz contains hello-world container example created using runc manpages:
https://github.com/opencontainers/runc/blob/master/man/runc-spec.8.md

$ docker pull hello-world
$ docker export $(docker create hello-world) > hello-world.tar
$ mkdir rootfs
$ tar -C rootfs -xf hello-world.tar
@agnivade

This comment has been minimized.

Copy link
Contributor

@agnivade agnivade commented Nov 30, 2019

@agnivade agnivade added this to the gollvm milestone Nov 30, 2019
@thanm thanm self-assigned this Dec 2, 2019
@thanm

This comment has been minimized.

Copy link
Member

@thanm thanm commented Dec 2, 2019

I'll take a look... although not sure exactly when (I am a bit swamped with other work at the moment).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
3 participants
You can’t perform that action at this time.