Commit Graph

18578 Commits

Author SHA1 Message Date
Kir Kolyshkin 15aad5d3e6 make binary: do not ignore unresolved symbols
TL;DR: stop building static binary that may fail

Linker flag --unresolved-symbols=ignore-in-shared-libs was added
in commit 06d0843 two years ago for the static build case, presumably
to avoid dealing with problem of missing libraries.

For the record, this is what ld(1) man page says:

> --unresolved-symbols=method
>    Determine how to handle unresolved symbols.  There are four
>    possible values for method:
> .........
>    ignore-in-shared-libs
>        Report unresolved symbols that come from regular object files,
>        but ignore them if they come from shared libraries.  This can
>        be useful when creating a dynamic binary and it is known that
>        all the shared libraries that it should be referencing are
>        included on the linker's command line.

Here, the flag is not used for its purpose ("creating a dynamic binary")
and does more harm than good. Instead of complaining about missing symbols
as it should do if some libraries are missing from LIBS/LDFLAGS, it lets
ld create a binary with unresolved symbols, ike this:

 $ readelf -s bundles/1.7.1/binary/docker-1.7.1 | grep -w UND
 ........
 21029: 0000000000000000     0 NOTYPE  GLOBAL DEFAULT  UND dlopen
 .........

Such binary is working just fine -- until code calls one of those
functions, then it crashes (for apparently no reason, i.e. it is
impossible to tell why from the diagnistics printed).

In other words, adding this flag allows to build a static binary
with missing libraries, hiding the problem from both a developer
(who forgot to add a library to #cgo: LDFLAGS -- I was one such
developer a few days ago when I was working on ploop graphdriver)
and from a user (who expects the binary to work without crashing,
and it does that until the code calls a function in one of those
libraries).

Removing the flag immediately unveils the problem (as it should):

	/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libsqlite3.a(sqlite3.o):
	In function `unixDlError':
	(.text+0x20971): undefined reference to `dlerror'
	/usr/lib/gcc/x86_64-linux-gnu/4.8/../../../x86_64-linux-gnu/libsqlite3.a(sqlite3.o):
	In function `unixDlClose':
	(.text+0x8814): undefined reference to `dlclose'

The problem is, gosqlite package says:

	#cgo LDFLAGS: -lsqlite3

which is enough for dynamic linking, as indirect dependencies (i.e.
libraries required by libsqlite3.so) are listed in .so file and will be
resolved dynamically by ldd upon executing the binary.

For static linking though, one has to list all the required libraries,
both direct and indirect. For libraries with pkgconfig support the
list of required libraries can be obtained with pkg-config:

	$ pkg-config --libs sqlite3 # dynamic linking case
	-lsqlite3
	$ pkg-config --libs --static sqlite3 # static case
	-lsqlite3 -ldl -lpthread

It seems that all one has to do is to fix gosqlite this way:

	-#cgo LDFLAGS: -lsqlite3
	+#cgo pkg-config: sqlite3

Unfortunately, cmd/go doesn't know that it needs to pass --static
flag to pkg-config in case of static linking
(see https://github.com/golang/go/issues/12058).

So, for one, one has to do one of these things:

1. Patch sqlite.go like this:

	-#cgo LDFLAGS: -lsqlite3
	+#cgo pkg-config: --static sqlite3

(this is exactly what I do in goploop, see
https://github.com/kolyshkin/goploop/commit/e9aa072f51)

2. Patch sqlite.go like this:
	-#cgo LDFLAGS: -lsqlite3
	+#cgo LDFLAGS: -lsqlite3 -ldl -lpthread

(I would submit this patch to gosqlite but it seems that
https://code.google.com/p/gosqlite/ is deserted and not maintained,
and patching it here is not right as it is "vendored")

3. Explicitly add -ldl for the static link case.
This is what this patch does.

4. Fork sqlite to github and maintain it there. Personally I am not
ready for that, as I'm neither a Go expert nor gosqlite user.

Now, #3 doesn't look like a clear solution, but nevertheless it makes
the build much better than it was before.

Signed-off-by: Kir Kolyshkin <kir@openvz.org>
2015-09-04 13:15:25 -07:00
John Howard f9a3558a9d Windows: Get Integration CLI running
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-04 12:32:40 -07:00
Jessie Frazelle bc915d0856 Merge pull request #16087 from Microsoft/turn-off-dockerhubpull-suite
Temp: Turn off dockerhubpullsuite on Win2Linux CI
2015-09-04 12:30:06 -07:00
John Howard 0b18b1b309 Temp: Turn off dockerhubpullsuite on Win2Linux CI
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-04 11:53:40 -07:00
Jessie Frazelle 6b14d9a645 Merge pull request #16065 from Microsoft/10662-fix2panics
Fixes 2 panics initialising tests
2015-09-04 11:07:17 -07:00
Cezar Sa Espinola e787296c75 Ensure goroutines dump is not truncated
Calling runtime.Stack requires the buffer to be big enough to fit the
goroutines dump. If it's not big enough the dump will be truncated and
the value returned will be the same size as the buffer.

The code was changed to handle this situation and try again with a
bigger buffer. Each time the dump doesn't fit in the buffer its size is
doubled.

Signed-off-by: Cezar Sa Espinola <cezarsa@gmail.com>
2015-09-04 14:50:37 -03:00
Jessie Frazelle 5b46d8f0fa Merge pull request #16039 from icecrime/update_pull_tests
Update pull tests
2015-09-04 09:52:41 -07:00
Jessie Frazelle 7c667f9d6e Merge pull request #15999 from cpuguy83/15994_ext_volume_bind
Set bind driver after volume is created
2015-09-04 09:47:10 -07:00
David Calavera 6549d6517b Move VolumeDriver to HostConfig to make containers portable.
Signed-off-by: David Calavera <david.calavera@gmail.com>
2015-09-04 12:42:44 -04:00
Sally O'Malley 5446aac0e5 add --insecure-registry warning to online docs
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-04 10:28:35 -04:00
Sally O'Malley 9c3aafd354 man docker-tag minor fixup
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-04 10:10:03 -04:00
Sebastiaan van Stijn 4a0606423b Merge pull request #16043 from sallyom/manDockerfile
man Dockerfile ADD/COPY/FROM clarify
2015-09-04 10:03:50 +02:00
Sebastiaan van Stijn 409212be24 Merge pull request #16057 from sallyom/manDocker
clarify --insecure-registry in man docker
2015-09-04 09:56:01 +02:00
Kunal Kushwaha 44da5c3de2 "docker network" missing from docker --help
Fixed issues related to network subcommand tests
- "network" in exempted list of short help check
- Condition for exact test modified to meet experimental commands
- Sorting of commands done in flags_experimental

Signed-off-by: Kunal Kushwaha <kunal.kushwaha@gmail.com>
2015-09-04 15:34:17 +09:00
Alexander Morozov 0009852cb0 Merge pull request #15877 from Microsoft/10662-trigger
Fix trigger count and output
2015-09-03 20:04:05 -07:00
Jessie Frazelle 38ecc7fc32 Merge pull request #16054 from jfrazelle/update-sqlite3-dep
code.google.com is shutting down so update the dep
2015-09-03 19:20:57 -07:00
John Howard 69bf17ffbd Fixes 2 panics initialising tests
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-03 18:26:38 -07:00
Jessie Frazelle 90477e8e94 Merge pull request #16066 from jfrazelle/remove-reprepro
remove reprepro
2015-09-03 18:20:01 -07:00
Jessie Frazelle 1fa560e6eb Merge pull request #15706 from clnperez/vendor-helper-use-branch
Allow branch name in vendor-helper script
2015-09-03 18:02:06 -07:00
Tianon Gravi b019229996 Merge pull request #16052 from jfrazelle/fix-release-selinux
make docker-engine-selinux findable
2015-09-03 17:52:39 -07:00
Tibor Vass c8c1c472b2 Merge pull request #15845 from calavera/refactor_daemon_list
Refactor daemon container list.
2015-09-03 20:48:54 -04:00
Tibor Vass 057f53f503 Merge pull request #15846 from ZJU-SEL/11646-fix-path-validations
fix 11646 to check volume path in server side
2015-09-03 20:42:37 -04:00
Jessica Frazelle 4a864a7552 code.google.com is shutting down so update the dep
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 17:39:29 -07:00
John Howard 6620102926 Fix trigger count and output
Signed-off-by: John Howard <jhoward@microsoft.com>
2015-09-03 17:39:19 -07:00
Jessica Frazelle e7cf75c103 remove reprepro
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 17:31:49 -07:00
Tibor Vass 07d2eae6d5 Merge pull request #16060 from vdemeester/14756-lint-pkg-term-windows
Lint pkg/term/windows package
2015-09-03 19:54:20 -04:00
Tibor Vass 2d605ce53b Merge pull request #16041 from runcom/portmapping-doc-cleaning
Clean latest api doc from PortMapping and outdated error check
2015-09-03 19:37:34 -04:00
Jessie Frazelle 9b072fb722 Merge pull request #16067 from jfrazelle/fix-release-branch-in-suites-script
fix release branch in suites.sh
2015-09-03 16:33:32 -07:00
Arnaud Porterie f324f4851f Update image pull tests
Update and migrate existing tests to the `DockerHubPullSuite`. Most
tests were preserved, but refactored and made more exhaustive. One test
was deliberately removed (`TestPullVerified`) as it is unreliable and
that the feature was obsoleted by content trust.

Move all trust related tests to `docker_cli_pull_trusted_test.go`.

Move tests depending on a local registry to `docker_cli_pull_local_test.go`.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-03 15:57:41 -07:00
Arnaud Porterie c87cbd3862 Add integration-cli/checker package
Add a `checker` package that adds some utility Checker implementation,
the first one being `checker.Contains`, as well as brining all go-check
provided Checker implementations in scope as a commodity.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-03 15:57:41 -07:00
Jessica Frazelle e38a9ecef6 fix release branch in suites.sh
we changed the naming scheme of the release branch

Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 15:48:02 -07:00
Tibor Vass 6ffbea3c94 Merge pull request #16027 from Microsoft/10662-utimes
Windows: Fix dockerfile ADD from HTTP
2015-09-03 18:44:34 -04:00
Tibor Vass f0a5d03400 Merge pull request #16022 from nalind/cgo-windows
Fix a daemon build error when cgo isn't available
2015-09-03 18:42:58 -04:00
Sally O'Malley 2d9ea188d4 clarify --insecure-registry in man docker
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-03 17:10:40 -04:00
Vincent Demeester 3409de971c Lint pkg/term/windows package
Signed-off-by: Vincent Demeester <vincent@sbr.pm>
2015-09-03 22:25:52 +02:00
Brian Goff 9d0eef55ea Merge pull request #16025 from sallyom/overlayfsSelinux
selinux/overlay incompatible err
2015-09-03 16:08:55 -04:00
Jenny Gebske ffc8d4e204 [doc] Rephrase Ubuntu installation
Signed-off-by: Jenny Gebske <jennifer@gebske.de>
2015-09-03 22:07:33 +02:00
Michael Crosby 6f5eb78519 Merge pull request #16018 from surya-shodan/master
Typo in README.md
2015-09-03 11:57:06 -07:00
Michael Crosby 8258996cf2 Merge pull request #16036 from Microsoft/10662-httpdirectory
Windows: Fix HTTP download directory
2015-09-03 11:54:53 -07:00
Michael Crosby 288275ab60 Merge pull request #16038 from aboch/sbx
Vendor libnetwork dc52820147f40fe424c8959987af3b396f842639
2015-09-03 11:48:02 -07:00
Jessica Frazelle c7b3e7e770 make docker-engine-selinux findable
Signed-off-by: Jessica Frazelle <acidburn@docker.com>
2015-09-03 08:58:33 -07:00
Sally O'Malley 48badd2a2e man Dockerfile ADD/COPY/FROM clarify
Signed-off-by: Sally O'Malley <somalley@redhat.com>
2015-09-03 09:08:25 -04:00
David Calavera d9065fcdb5 Merge pull request #16001 from jfrazelle/apt-repo-pinning
use apt-ftparchive and reprepro to enable apt-pinning;
2015-09-03 11:18:54 +02:00
Antonio Murdaca 137c12f19a Clean latest api doc from PortMapping and outdated error check
Regarding the outdated error check, there's no `docker.PortMapping`
struct anymore and this is linked to something really old #1334

Signed-off-by: Antonio Murdaca <runcom@linux.com>
2015-09-03 11:01:55 +02:00
Sebastiaan van Stijn ee4de4d163 Merge pull request #15984 from jlhawn/document_build_auth_config
[docs] Add description of "X-Registry-Config"
2015-09-03 08:40:34 +02:00
Arnaud Porterie 9e4addde76 Add test suite for push/pull code
Introduce the `DockerHubPullSuite` that interacts with its own dedicated
daemon, thus allowing to start from a clean environment and finely test
against the impact of isolated push and pull operations.

Signed-off-by: Arnaud Porterie <arnaud.porterie@docker.com>
2015-09-02 22:06:24 -07:00
Alexander Morozov 2bd30cd6cb Merge pull request #16035 from aaronlehmann/remove-test-push-interrupt
Remove TestPushInterrupt
2015-09-02 21:07:55 -07:00
Alessandro Boch 56fdb05258 Docker changes for libnetwork Sandbox
- Ground-work for integrating with user namespace support

Signed-off-by: Alessandro Boch <aboch@docker.com>
2015-09-02 17:24:56 -07:00
Brian Goff 39be36658d Set bind driver after volume is created
When using a named volume without --volume-driver, the driver was
hardcoded to "local".
Even when the volume was already created by some other driver (and
visible in `docker volume ls`), the container would store in it's own
config that it was the `local` driver.
The external driver would work perfecly fine until the daemon is
restarted, at which point the `local` driver was assumed because that is
as it was set in the container config.

Set the bind driver to the driver returned by createVolume.

Signed-off-by: Brian Goff <cpuguy83@gmail.com>
2015-09-02 20:13:20 -04:00
Brian Goff fb4cce5e53 Merge pull request #16030 from Microsoft/fix-golint-commit
Windows: Fix golint daemon breaking commit
2015-09-02 20:10:33 -04:00