| # Copyright 1999-2021 Gentoo Authors |
| # Distributed under the terms of the GNU General Public License v2 |
| |
| EAPI=7 |
| |
| CONTAINERD_COMMIT=05f951a3781f4f2c1911b05e61c160e9c30eaa8e |
| EGO_PN="github.com/containerd/${PN}" |
| |
| # lakitu: inherits eutils and systemd to install the containerd.service. |
| inherit golang-vcs-snapshot toolchain-funcs eutils systemd |
| |
| DESCRIPTION="A daemon to control runC" |
| HOMEPAGE="https://containerd.io/" |
| SRC_URI="https://github.com/containerd/containerd/archive/v${PV}.tar.gz -> ${P}.tar.gz" |
| |
| LICENSE="Apache-2.0" |
| SLOT="0" |
| KEYWORDS="*" |
| IUSE="apparmor btrfs device-mapper +cri hardened +seccomp selinux test" |
| |
| DEPEND=" |
| btrfs? ( sys-fs/btrfs-progs ) |
| seccomp? ( sys-libs/libseccomp ) |
| " |
| |
| # lakitu: RDEPEND on sys-apps/systemd because of the dependency on |
| # containerd.service. |
| RDEPEND=" |
| ${DEPEND} |
| ~app-emulation/runc-1.0.0_rc92 |
| sys-apps/systemd |
| " |
| |
| BDEPEND=" |
| dev-go/go-md2man |
| virtual/pkgconfig |
| test? ( ${RDEPEND} ) |
| " |
| |
| # tests require root or docker |
| # upstream does not recommend stripping binary |
| RESTRICT+=" strip test" |
| |
| S="${WORKDIR}/${P}/src/${EGO_PN}" |
| |
| PATCHES=( |
| # lakitu: set containerd path to /usr/bin/containerd |
| "${FILESDIR}"/1.4.0-customize-containerd-service.patch |
| ) |
| |
| src_prepare() { |
| default |
| sed -i -e "s/git describe --match.*$/echo ${PV})/"\ |
| -e "s/git rev-parse HEAD.*$/echo ${CONTAINERD_COMMIT})/"\ |
| -e "s/-s -w//" \ |
| Makefile || die |
| } |
| |
| src_compile() { |
| local options=( |
| $(usev apparmor) |
| $(usex btrfs "" "no_btrfs") |
| $(usex cri "" "no_cri") |
| $(usex device-mapper "" "no_devmapper") |
| $(usev seccomp) |
| $(usev selinux) |
| ) |
| |
| myemakeargs=( |
| BUILDTAGS="${options[*]}" |
| DESTDIR="${ED}" |
| LDFLAGS="$(usex hardened '-extldflags -fno-PIC' '')" |
| ) |
| |
| export GOPATH="${WORKDIR}/${P}" # ${PWD}/vendor |
| export GOFLAGS="-v -x -mod=vendor" |
| # lakitu: export a function named 'go' that invokes the go cross-compiler. |
| # The containerd Makefile will invoke this function instead of doing a PATH |
| # lookup for the go binary. |
| GO="$(tc-getGO)" |
| export GO |
| go() { |
| echo "${GO} $@" 1>&2 |
| "${GO}" "$@" |
| } |
| export -f go |
| # lakitu: don't build man pages as cross-compiling man pages doesn't |
| # work on ARM. |
| # TODO(mikewu@): renable man pages building once b/178526852 is fixed. |
| #emake "${myemakeargs[@]}" all man |
| emake "${myemakeargs[@]}" all |
| unset -f go |
| } |
| |
| src_install() { |
| dobin bin/* |
| # lakitu: don't install man pages as cross-compiling man pages doesn't |
| # work on ARM. |
| # TODO(mikewu@): uncomment the following line once b/178526852 is fixed. |
| #doman man/* |
| # lakitu: we use systemd service to start containerd. |
| # newinitd "${FILESDIR}"/${PN}.initd "${PN}" |
| keepdir /var/lib/containerd |
| |
| # we already installed manpages, remove markdown source |
| # before installing docs directory |
| rm -r docs/man || die |
| |
| local DOCS=( README.md PLUGINS.md docs/. ) |
| einstalldocs |
| |
| # lakitu: runs containerd as an individual service. This prevents |
| # docker from supervising containerd. |
| systemd_dounit containerd.service |
| systemd_enable_service multi-user.target containerd.service |
| } |