docker: avoid fetching dependencies

Docker's build process will clone missing dependencies which
circumvents the bitbake fetcher. This is a bad thing in many ways, for
example this will not respect BB_NO_NETWORK and DL_DIR settings. To
work around this we are able to provide recipes for each of the
missing dependencies.

The dependencies are all in GO and are required to be added to the
sysroot such that the docker build can find them via GOPATH at build
time. The docker recipe was updated to add these new packages as
dependencies and the explicit clone of go-cli was removed.

After these change we are able to complete the build with networking
disabled after completing a fetchall. Docker functionality was tested
on an image built with these changes and it functions as it did
before.

Signed-off-by: Mark Asselstine <mark.asselstine@windriver.com>
Signed-off-by: Amy Fong <amy.fong@windriver.com>
This commit is contained in:
Amy Fong 2015-03-12 21:45:03 -04:00 committed by Bruce Ashfield
parent 938c1cb127
commit 718987175a
14 changed files with 415 additions and 17 deletions

View File

@ -34,10 +34,31 @@ S = "${WORKDIR}/git"
DOCKER_VERSION = "1.5.0"
PV = "${DOCKER_VERSION}+git${SRCREV}"
DEPENDS = "golang-cross btrfs-tools sqlite3 "
DEPENDS = "golang-cross \
go-cli \
go-pty \
go-context \
go-mux \
go-patricia \
go-net \
go-sqlite \
go-libtrust \
go-logrus \
go-fsnotify \
go-dbus \
go-capability \
go-systemd \
btrfs-tools \
sqlite3 \
"
DEPENDS_append_class-target = "lvm2"
RDEPENDS_${PN} = "curl aufs-util git cgroup-lite util-linux"
RRECOMMENDS_${PN} = "lxc docker-registry rt-tests"
DOCKER_PKG="github.com/docker/docker"
do_configure() {
}
do_compile() {
export GOARCH="${TARGET_ARCH}"
@ -46,16 +67,15 @@ do_compile() {
export GOARCH="amd64"
fi
# setting AUTO_GOPATH to use the default vendor configuration
# as opposed to setting up GOPATH with all the explicit vendor
# directory structure...
#
# From docker's PACKAGERS.md:
# If you'd rather not be bothered with the hassles that setting up
# `GOPATH` appropriately can be, and prefer to just get a "build
# that works", you should add something similar to this to whatever
# script or process you're using to build Docker
export AUTO_GOPATH=1
# Set GOPATH. See 'PACKAGERS.md'. Don't rely on
# docker to download its dependencies but rather
# use dependencies packaged independently.
cd ${S}
rm -rf .gopath
mkdir -p .gopath/src/"$(dirname "${DOCKER_PKG}")"
ln -sf ../../../.. .gopath/src/"${DOCKER_PKG}"
export GOPATH="${S}/.gopath:${S}/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go"
cd -
# Pass the needed cflags/ldflags so that cgo
# can find the needed headers files and libraries
@ -68,12 +88,7 @@ do_compile() {
DOCKER_GITCOMMIT="${SRCREV}" \
./hack/make.sh dynbinary
export GOPATH=${S}/vendor
# make nsinit from libcontainer - installed in vendor/bin
ln -s ${S} ${S}/vendor/src/github.com/docker/docker
mkdir -p ${S}/vendor/src/github.com/codegangsta
(cd ${S}/vendor/src/github.com/codegangsta && git clone https://github.com/codegangsta/cli)
# make nsinit from libcontainer
go install github.com/docker/libcontainer/nsinit/
}

View File

@ -0,0 +1,29 @@
DESCRIPTION = "Utilities for manipulating POSIX capabilities in Go."
HOMEPAGE = "https://github.com/syndtr/gocapability"
SECTION = "devel/go"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=a7304f5073e7be4ba7bffabbf9f2bbca"
PR = "r0"
SRCNAME = "gocapability"
PKG_NAME = "github.com/syndtr/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "3c85049eaeb429febe7788d9c7aac42322a377fe"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_mux_sysroot_preprocess"
go_mux_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "A small package for building command line apps in Go"
HOMEPAGE = "https://github.com/codegangsta/cli"
SECTION = "devel/go"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=ed9b539ed65d73926f30ff1f1587dc44"
PR = "r0"
SRCNAME = "cli"
PKG_NAME = "github.com/codegangsta/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "27ecc97192df1bf053a22b04463f2b51b8b8373e"
PV = "1.1.0+git${SRCREV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_cli_sysroot_preprocess"
go_cli_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "A golang registry for global request variables."
HOMEPAGE = "https://github.com/gorilla/context"
SECTION = "devel/go"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c50f6bd9c1e15ed0bad3bea18e3c1b7f"
PR = "r0"
SRCNAME = "context"
PKG_NAME = "github.com/gorilla/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "14f550f51af52180c2eefed15e5fd18d63c0a64a"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_context_sysroot_preprocess"
go_context_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "Native Go bindings for D-Bus"
HOMEPAGE = "https://github.com/godbus/dbus"
SECTION = "devel/go"
LICENSE = "BSD-2-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=b5ac622301483800715d770434e27e5b"
PR = "r0"
SRCNAME = "dbus"
PKG_NAME = "github.com/godbus/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "cb98efbb933d8389ab549a060e880ea3c375d213"
PV = "1+git${SRCREV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_dbus_sysroot_preprocess"
go_dbus_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "A golang registry for global request variables."
HOMEPAGE = "https://github.com/go-fsnotify/fsnotify"
SECTION = "devel/go"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c38914c9a7ab03bb2b96d4baaee10769"
PR = "r0"
SRCNAME = "fsnotify"
PKG_NAME = "github.com/go-fsnotify/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "ca50e738d35a862c379baf8fffbc3bfd080b3cff"
PV = "1.0.4+git${SRCREV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_fsnotify_sysroot_preprocess"
go_fsnotify_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "Primitives for identity and authorization"
HOMEPAGE = "https://github.com/docker/libtrust"
SECTION = "devel/go"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=435b266b3899aa8a959f17d41c56def8"
PR = "r0"
SRCNAME = "libtrust"
PKG_NAME = "github.com/docker/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "230dfd18c2326f1e9d08238710e67a1040187d07"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_libtrust_sysroot_preprocess"
go_libtrust_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "A golang registry for global request variables."
HOMEPAGE = "https://github.com/Sirupsen/logrus"
SECTION = "devel/go"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=8dadfef729c08ec4e631c4f6fc5d43a0"
PR = "r0"
SRCNAME = "logrus"
PKG_NAME = "github.com/Sirupsen/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "6ebb4e7b3c24b9fef150d7693e728cb1ebadf1f5"
PV = "0.6.0+git${SRCREV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_logrus_sysroot_preprocess"
go_logrus_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "A powerful URL router and dispatcher for golang."
HOMEPAGE = "https://github.com/gorilla/mux"
SECTION = "devel/go"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=c50f6bd9c1e15ed0bad3bea18e3c1b7f"
PR = "r0"
SRCNAME = "mux"
PKG_NAME = "github.com/gorilla/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "136d54f81f00414c45c3c68dd47e98cc97519c5e"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_mux_sysroot_preprocess"
go_mux_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "A golang registry for global request variables."
HOMEPAGE = "https://code.google.com/p/go.net"
SECTION = "devel/go"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707"
PR = "r0"
SRCNAME = "go.net"
PKG_NAME = "code.google.com/p/${SRCNAME}"
SRC_URI = "hg://code.google.com/p;module=go.net"
SRCREV = "84a4013f96e01fdd14b65d260a78b543e3702ee1"
S = "${WORKDIR}/${SRCNAME}"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_net_sysroot_preprocess"
go_net_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "A generic patricia trie (also called radix tree) implemented in Go (Golang)"
HOMEPAGE = "https://github.com/gorilla/context"
SECTION = "devel/go"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://LICENSE;md5=9949b99212edd6b1e24ce702376c3baf"
PR = "r0"
SRCNAME = "go-patricia"
PKG_NAME = "github.com/tchap/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "f64d0a63cd3363481c898faa9339de04d12213f9"
PV = "1.0.1+git${SRCPV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_patricia_sysroot_preprocess"
go_patricia_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "PTY interface for Go"
HOMEPAGE = "https://github.com/kr/pty"
SECTION = "devel/go"
LICENSE = "MIT"
LIC_FILES_CHKSUM = "file://License;md5=93958070863d769117fa33b129020050"
PR = "r0"
SRCNAME = "pty"
PKG_NAME = "github.com/kr/${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "05017fcccf23c823bfdea560dcc958a136e54fb7"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_pty_sysroot_preprocess"
go_pty_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,29 @@
DESCRIPTION = "Trivial sqlite3 binding for Go"
HOMEPAGE = "https://code.google.com/p/gosqlite"
SECTION = "devel/go"
LICENSE = "BSD-3-Clause"
LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD-3-Clause;md5=550794465ba0ec5312d6919e203a55f9"
PR = "r0"
SRCNAME = "gosqlite"
PKG_NAME = "code.google.com/p/${SRCNAME}"
SRC_URI = "hg://code.google.com/p;module=gosqlite"
SRCREV = "74691fb6f83716190870cde1b658538dd4b18eb0"
S = "${WORKDIR}/${SRCNAME}"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_gosqlite_sysroot_preprocess"
go_gosqlite_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"

View File

@ -0,0 +1,30 @@
DESCRIPTION = "Go bindings to systemd socket activation, journal, D-Bus, and unit files"
HOMEPAGE = "https://github.com/coreos/go-systemd"
SECTION = "devel/go"
LICENSE = "Apache-2.0"
LIC_FILES_CHKSUM = "file://LICENSE;md5=19cbd64715b51267a47bf3750cc6a8a5"
PR = "r0"
SRCNAME = "systemd"
PKG_NAME = "github.com/coreos/go-${SRCNAME}"
SRC_URI = "git://${PKG_NAME}.git"
SRCREV = "f743bc15d6bddd23662280b4ad20f7c874cdd5ad"
PV = "2+git${SRCREV}"
S = "${WORKDIR}/git"
do_install() {
install -d ${D}${prefix}/local/go/src/${PKG_NAME}
cp -r ${S}/* ${D}${prefix}/local/go/src/${PKG_NAME}/
}
SYSROOT_PREPROCESS_FUNCS += "go_systemd_sysroot_preprocess"
go_systemd_sysroot_preprocess () {
install -d ${SYSROOT_DESTDIR}${prefix}/local/go/src/${PKG_NAME}
cp -r ${D}${prefix}/local/go/src/${PKG_NAME} ${SYSROOT_DESTDIR}${prefix}/local/go/src/$(dirname ${PKG_NAME})
}
FILES_${PN} += "${prefix}/local/go/src/${PKG_NAME}/*"