an [abandoned] attempt to slice out the docker/docker/pkg package
Find a file
Derek Ch c45a95b9c0 fix a race crash when building with "ADD some-broken.tar.xz ..."
The race is between pools.Put which calls buf.Reset and exec.Cmd
doing io.Copy from the buffer; it caused a runtime crash, as
described in #16924:

``` docker-daemon cat the-tarball.xz | xz -d -c -q | docker-untar /path/to/... (aufs ) ```

When docker-untar side fails (like try to set xattr on aufs, or a broken
tar), invokeUnpack will be responsible to exhaust all input, otherwise
`xz` will be write pending for ever.

this change add a receive only channel to cmdStream, and will close it
to notify it's now safe to close the input stream;

in CmdStream the change to use Stdin / Stdout / Stderr keeps the
code simple, os/exec.Cmd will spawn goroutines and call io.Copy automatically.

the CmdStream is actually called in the same file only, change it
lowercase to mark as private.

[...]
INFO[0000] Docker daemon                                 commit=0a8c2e3 execdriver=native-0.2 graphdriver=aufs version=1.8.2

DEBU[0006] Calling POST /build
INFO[0006] POST /v1.20/build?cgroupparent=&cpuperiod=0&cpuquota=0&cpusetcpus=&cpusetmems=&cpushares=0&dockerfile=Dockerfile&memory=0&memswap=0&rm=1&t=gentoo-x32&ulimits=null
DEBU[0008] [BUILDER] Cache miss
DEBU[0009] Couldn't untar /home/lib-docker-v1.8.2-tmp/tmp/docker-build316710953/stage3-x32-20151004.tar.xz to /home/lib-docker-v1.8.2-tmp/aufs/mnt/d909abb87150463939c13e8a349b889a72d9b14f0cfcab42a8711979be285537: Untar re-exec error: exit status 1: output: operation not supported
DEBU[0009] CopyFileWithTar(/home/lib-docker-v1.8.2-tmp/tmp/docker-build316710953/stage3-x32-20151004.tar.xz, /home/lib-docker-v1.8.2-tmp/aufs/mnt/d909abb87150463939c13e8a349b889a72d9b14f0cfcab42a8711979be285537/)
panic: runtime error: slice bounds out of range

goroutine 42 [running]:
bufio.(*Reader).fill(0xc208187800)
    /usr/local/go/src/bufio/bufio.go:86 +0x2db
bufio.(*Reader).WriteTo(0xc208187800, 0x7ff39602d150, 0xc2083f11a0, 0x508000, 0x0, 0x0)
    /usr/local/go/src/bufio/bufio.go:449 +0x27e
io.Copy(0x7ff39602d150, 0xc2083f11a0, 0x7ff3960261f8, 0xc208187800, 0x0, 0x0, 0x0)
    /usr/local/go/src/io/io.go:354 +0xb2
github.com/docker/docker/pkg/archive.func·006()
    /go/src/github.com/docker/docker/pkg/archive/archive.go:817 +0x71
created by github.com/docker/docker/pkg/archive.CmdStream
    /go/src/github.com/docker/docker/pkg/archive/archive.go:819 +0x1ec

goroutine 1 [chan receive]:
main.(*DaemonCli).CmdDaemon(0xc20809da30, 0xc20800a020, 0xd, 0xd, 0x0, 0x0)
    /go/src/github.com/docker/docker/docker/daemon.go:289 +0x1781
reflect.callMethod(0xc208140090, 0xc20828fce0)
    /usr/local/go/src/reflect/value.go:605 +0x179
reflect.methodValueCall(0xc20800a020, 0xd, 0xd, 0x1, 0xc208140090, 0x0, 0x0, 0xc208140090, 0x0, 0x45343f, ...)
    /usr/local/go/src/reflect/asm_amd64.s:29 +0x36
github.com/docker/docker/cli.(*Cli).Run(0xc208129fb0, 0xc20800a010, 0xe, 0xe, 0x0, 0x0)
    /go/src/github.com/docker/docker/cli/cli.go:89 +0x38e
main.main()
    /go/src/github.com/docker/docker/docker/docker.go:69 +0x428

goroutine 5 [syscall]:
os/signal.loop()
    /usr/local/go/src/os/signal/signal_unix.go:21 +0x1f
created by os/signal.init·1
    /usr/local/go/src/os/signal/signal_unix.go:27 +0x35

Signed-off-by: Derek Ch <denc716@gmail.com>
2015-10-13 15:58:06 -07:00
ansiescape Use notary library for trusted image fetch and signing 2015-07-24 14:08:20 -07:00
archive fix a race crash when building with "ADD some-broken.tar.xz ..." 2015-10-13 15:58:06 -07:00
broadcaster Move types from progressreader and broadcastwriter to broadcaster 2015-10-06 22:20:07 -04:00
chrootarchive fix a race crash when building with "ADD some-broken.tar.xz ..." 2015-10-13 15:58:06 -07:00
devicemapper devmapper: Implement deferred deletion functionality 2015-10-06 17:37:21 -04:00
directory Add user namespace (mapping) support to the Docker engine 2015-10-09 17:47:37 -04:00
discovery Merge pull request #16618 from abronan/fix_discovery_pkg_readme 2015-10-11 12:05:07 -07:00
fileutils Windows: Fix warning on info 2015-09-18 13:39:12 -07:00
graphdb Merge pull request #16054 from jfrazelle/update-sqlite3-dep 2015-09-03 19:20:57 -07:00
homedir Update libcontainer 2015-07-16 16:02:26 -07:00
httputils Update httputils tests 2015-09-09 14:59:25 +02:00
idtools Windows: Daemon broken on master 2015-10-12 09:11:19 -07:00
integration Timeouts are causing tests to fail differently. GCCGO CI. 2015-10-08 15:14:56 +00:00
ioutils Abstract builder and implement server-side dockerfile builder 2015-10-06 19:10:19 -04:00
jsonlog add labels/env log option for jsonfile 2015-10-12 21:12:46 +02:00
jsonmessage Revert "Merge pull request #16228 from duglin/ContextualizeEvents" 2015-09-29 14:26:51 -04:00
listenbuffer linting changes 2015-06-17 01:16:57 +03:00
longpath Windows: Fixing longpath hanlding of UNC paths. 2015-09-30 19:36:08 -07:00
mflag bump libcontainer to 902c012e85cdae6bb68d8c7a0df69a42f818ce96 2015-10-06 17:55:09 +02:00
mount pkg: mount: golint 2015-07-22 10:26:10 +02:00
namesgenerator Merge pull request #16367 from Morgy93/names-generator 2015-10-02 11:29:09 -07:00
nat Adding support to publish on custom host port ranges 2015-08-15 02:41:29 +00:00
parsers Validate --cpuset-cpus, --cpuset-mems 2015-09-27 16:38:58 +02:00
pidfile Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
plugins Add user namespace (mapping) support to the Docker engine 2015-10-09 17:47:37 -04:00
pools Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
progressreader Move types from progressreader and broadcastwriter to broadcaster 2015-10-06 22:20:07 -04:00
promise Move Go() promise-like func from utils to pkg/promise 2014-09-29 23:16:27 -07:00
proxy Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
pubsub Don't use time.After if there is no timeout 2015-07-14 09:14:51 -07:00
random Prefer crypto rand seed for pkg/rand 2015-07-29 12:55:57 -04:00
reexec make docker compile on freebsd 2015-07-29 21:25:56 +03:00
signal Windows: Enable kill (part one) 2015-10-13 08:42:47 -07:00
sockets make docker compile on freebsd 2015-07-29 21:25:56 +03:00
stdcopy Added test coverage to StdCopy closes #11584 2015-09-25 11:15:45 +02:00
streamformatter Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
stringid Add GenerateNonCryptoID function to avoid entropy exhaustion 2015-07-28 22:31:01 -07:00
stringutils pkg: stringutils: Add more tests to strslice 2015-09-01 20:27:45 +02:00
symlink Windows: Fix long path handling for docker build 2015-09-15 10:58:11 -07:00
sysinfo Validate --cpuset-cpus, --cpuset-mems 2015-09-27 16:38:58 +02:00
system Correct mismatched function names (UID() and Gid()) 2015-10-12 10:58:33 -04:00
tailfile typofix - https://github.com/vlajos/misspell_fixer 2015-08-07 23:25:49 +01:00
tarsum tarsum: add a big fat warning 2015-08-25 16:50:08 -04:00
term Remove unused variable, fix #16310 2015-09-15 22:20:10 +02:00
timeoutconn Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
timeutils Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
tlsconfig tlsconfig: better format for error message in tlsconfig 2015-07-30 14:15:41 -04:00
truncindex graph: add parent img refcount for faster rmi 2015-10-07 19:09:44 +02:00
ulimit Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
units Multiple fixes to 'docker stats' output: 2015-07-30 10:14:57 +03:00
urlutil Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
useragent Lint on pkg/* packages 2015-07-27 21:26:21 +02:00
version Fix minor typo 2015-03-25 00:46:22 +08:00
README.md Add README to pkg 2013-12-23 23:12:19 +00:00

pkg/ is a collection of utility packages used by the Docker project without being specific to its internals.

Utility packages are kept separate from the docker core codebase to keep it as small and concise as possible. If some utilities grow larger and their APIs stabilize, they may be moved to their own repository under the Docker organization, to facilitate re-use by other projects. However that is not the priority.

The directory pkg is named after the same directory in the camlistore project. Since Brad is a core Go maintainer, we thought it made sense to copy his methods for organizing Go code :) Thanks Brad!

Because utility packages are small and neatly separated from the rest of the codebase, they are a good place to start for aspiring maintainers and contributors. Get in touch if you want to help maintain them!