Skip to content

Commit

Permalink
Build containerd and runc deb packages
Browse files Browse the repository at this point in the history
  • Loading branch information
ernoaapa committed Apr 17, 2018
1 parent 1e4d8e7 commit 39fd7cd
Show file tree
Hide file tree
Showing 11 changed files with 179 additions and 77 deletions.
16 changes: 16 additions & 0 deletions .buildkite/pipeline.yml
@@ -0,0 +1,16 @@
steps:
- label: Go version
command: go version

- label: Docker version
command: docker version

- label: Install tools
command:
- GOPATH=~/go ./build/install-build-tools.sh

- wait

- label: Build containerd arm64 deb package
command:
- GOOS=linux GOARCH=arm64 GOOS=linux GOARCH=arm64 ./deps/publish-all.sh
55 changes: 23 additions & 32 deletions .circleci/config.yml
Expand Up @@ -27,28 +27,9 @@ jobs:
- checkout
- setup_remote_docker

- run:
name: Install tools
command: |
go get github.com/goreleaser/goreleaser
# Switch to fixed fork
cd /go/src/github.com/goreleaser/goreleaser
git remote add ernoaapa https://github.com/ernoaapa/goreleaser.git
git fetch ernoaapa
git checkout fix-arm-architecture
GOBIN=/go/bin go install .
- run: ./build/install-build-tools.sh

go get github.com/mlafeldt/pkgcloud/...
- run: sudo apt-get update && sudo apt-get install -y btrfs-tools libseccomp-dev
- run: ./build/build-containerd-and-runc.sh
- run: goreleaser --snapshot
- run:
name: Publish Linux packages
command: |
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_amd64.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_arm64.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_armv6.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_armv7.deb

publish:
<<: *defaults
Expand All @@ -60,27 +41,37 @@ jobs:
name: Login Docker hub
command: echo $DOCKER_PASS | docker login --username $DOCKER_USER --password-stdin

- run:
name: Install tools
command: |
go get github.com/goreleaser/goreleaser
go get github.com/estesp/manifest-tool
go get github.com/mlafeldt/pkgcloud/...
- run: ./build/install-build-tools.sh

- run: sudo apt-get update && sudo apt-get install -y btrfs-tools libseccomp-dev
- run: ./build/build-containerd-and-runc.sh
- run: goreleaser
- run: .circleci/scripts/push-docker-manifest.sh $(git describe --tags --always --dirty)
- run:
name: Publish Linux packages
command: |
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_amd64.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_arm64.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_armv6.deb
pkgcloud-push ernoaapa/eliot/raspbian/stretch dist/eliot_*_linux_armv7.deb
for package in dist/eliot_*.deb; do
pkgcloud-push ernoaapa/eliot/raspbian/stretch $package
done
deps_build_and_release:
<<: *defaults
steps:
- checkout

- run: ./build/install-build-tools.sh

- run:
name: Install build dependencies
command: sudo apt-get update && sudo apt-get install -y btrfs-tools libseccomp-dev

- run:
name: build & release deps
command: GOOS=linux GOARCH=amd64 ./deps/publish-all.sh
workflows:
version: 2
deps:
jobs:
- deps_build_and_release

build_and_test:
jobs:
- test:
Expand Down
13 changes: 4 additions & 9 deletions .goreleaser.yml
Expand Up @@ -76,16 +76,11 @@ nfpm:
formats:
- deb

# At the moment repositories includes really old version of containerd
# so we bake in the containerd daemon and runc binary
# dependencies:
# - containerd@v1.0.3
dependencies:
- libseccomp2 #(Actually runc dep)
- containerd (>= 1.0.3)

files:
"build/etc/systemd/system/eliotd.service": "/etc/systemd/system/eliotd.service"
"build/etc/systemd/system/containerd.service": "/etc/systemd/system/containerd.service"
# Built during the build process
"bin/runc": "/usr/local/bin/runc"
"bin/containerd": "/usr/local/bin/containerd"

config_files:
"build/etc/eliotd/config": "/etc/eliotd/config"
33 changes: 0 additions & 33 deletions build/build-containerd-and-runc.sh

This file was deleted.

1 change: 1 addition & 0 deletions build/etc/eliotd/config
@@ -0,0 +1 @@
ELIOT_GRPC_API_LISTEN=0.0.0.0:5000
7 changes: 4 additions & 3 deletions build/etc/systemd/system/eliotd.service
@@ -1,11 +1,12 @@
[Unit]
Description=Eliot daemon
Documentation=https://github.com/ernoaapa/eliot
Requires=containerd.target
After=containerd.target
Requires=containerd.service
After=containerd.service

[Service]
ExecStart=/usr/local/bin/eliotd --debug --grpc-api-listen 0.0.0.0:5000
EnvironmentFile=/etc/eliotd/config
ExecStart=/usr/local/bin/eliotd
Restart=always
KillMode=process
RestartSec=2
Expand Down
22 changes: 22 additions & 0 deletions build/install-build-tools.sh
@@ -0,0 +1,22 @@
#!/bin/sh

set -eu

go get -u github.com/goreleaser/goreleaser
# Switch to fixed fork
cd $GOPATH/src/github.com/goreleaser/goreleaser
git remote add ernoaapa https://github.com/ernoaapa/goreleaser.git || true
git fetch ernoaapa
git checkout fix-arm-architecture
GOBIN=$GOPATH/bin go install .

go get -u github.com/goreleaser/nfpm
# Switch to fixed fork
cd $GOPATH/src/github.com/goreleaser/nfpm
git remote add ernoaapa https://github.com/ernoaapa/nfpm.git || true
git fetch ernoaapa
git checkout fix-arm-architecture
GOBIN=$GOPATH/bin go install ./cmd/nfpm/

go get github.com/estesp/manifest-tool
go get github.com/mlafeldt/pkgcloud/...
3 changes: 3 additions & 0 deletions deps/README.md
@@ -0,0 +1,3 @@
# DEPS

This directory contains all scripts to build containerd and runc dependencies
48 changes: 48 additions & 0 deletions deps/build-containerd.sh
@@ -0,0 +1,48 @@
#!/bin/sh
#
#

set -eu

CONTAINERD_VERSION="v1.0.3"
BUILD_DIR=/tmp/build
ELIOT_SRC_DIR=$(pwd)
TARGET_DIR=${ELIOT_SRC_DIR}/dist
GOOS=${GOOS-"linux"}
GOARCH=${GOARCH} # required
GOARM=${GOARM:-""} # optional

mkdir -p $TARGET_DIR

rm -rf ${BUILD_DIR} && mkdir -p ${BUILD_DIR}/src/github.com/containerd/containerd
wget -qO- "https://github.com/containerd/containerd/archive/${CONTAINERD_VERSION}.tar.gz" | tar xvz --strip-components=1 -C ${BUILD_DIR}/src/github.com/containerd/containerd
cd ${BUILD_DIR}/src/github.com/containerd/containerd
# Modify Makefile to have optional VERSION and REVISION
sed -i='' 's/VERSION=/VERSION?=/g' Makefile
sed -i='' 's/REVISION=/REVISION?=/g' Makefile

echo "Compile containerd os:${GOOS}, arch:${GOARCH}, variant:${GOARM}"
GOPATH=${BUILD_DIR} VERSION=${CONTAINERD_VERSION} REVISION=unknown make binaries

cat << EOF > ./nfpm.yaml
name: "containerd"
arch: "${GOARCH}${GOARM:-""}"
platform: "${GOOS}"
version: "${CONTAINERD_VERSION}"
section: "default"
priority: "extra"
depends:
- runc (>=0.1.1)
maintainer: "Erno Aapa <erno.aapa@gmail.com>"
description: An open and reliable container runtime
homepage: "https://containerd.io"
license: "Apache 2.0"
bindir: "/usr/local/bin"
files:
./bin/containerd: "/usr/local/bin/containerd"
./bin/ctr: "/usr/local/bin/ctr"
./bin/containerd-shim: "/usr/local/bin/containerd-shim"
${ELIOT_SRC_DIR}/build/etc/systemd/system/containerd.service: "/etc/systemd/system/containerd.service"
EOF

nfpm pkg --target ${TARGET_DIR}/containerd_${CONTAINERD_VERSION}_${GOOS}_${GOARCH}${GOARM:-""}.deb
41 changes: 41 additions & 0 deletions deps/build-runc.sh
@@ -0,0 +1,41 @@
#!/bin/sh
#
#

set -eu

RUNC_VERSION="v0.1.1"
BUILD_DIR=/tmp/build
TARGET_DIR=$(pwd)/dist
GOOS=${GOOS-"linux"}
GOARCH=${GOARCH} # required
GOARM=${GOARM:-""} # optional

mkdir -p $TARGET_DIR

rm -rf ${BUILD_DIR} && mkdir -p ${BUILD_DIR}/src/github.com/opencontainers/runc
wget -qO- "https://github.com/opencontainers/runc/archive/${RUNC_VERSION}.tar.gz" | tar xvz --strip-components=1 -C ${BUILD_DIR}/src/github.com/opencontainers/runc
cd ${BUILD_DIR}/src/github.com/opencontainers/runc

echo "Build runc os:${GOOS}, arch:${GOARCH}, variant:${GOARM}"
GOPATH=${BUILD_DIR} make

cat << EOF > ./nfpm.yaml
name: "runc"
arch: "${GOARCH}${GOARM:-""}"
platform: "${GOOS}"
version: "${RUNC_VERSION}"
section: "default"
priority: "extra"
depends:
- libseccomp2
maintainer: "Erno Aapa <erno.aapa@gmail.com>"
description: runc is a CLI tool for spawning and running containers according to the OCI specification.
homepage: "https://www.opencontainers.org"
license: "Apache 2.0"
bindir: "/usr/local/bin"
files:
./runc: "/usr/local/bin/runc"
EOF

nfpm pkg --target ${TARGET_DIR}/runc_${RUNC_VERSION}_${GOOS}_${GOARCH}${GOARM:-""}.deb
17 changes: 17 additions & 0 deletions deps/publish-all.sh
@@ -0,0 +1,17 @@
#!/bin/sh

set -eu

BASEDIR=$(dirname "$0")
if [ -z ${PACKAGECLOUD_TOKEN+x} ]; then
echo "You must define PACKAGECLOUD_TOKEN environment variable to publish packages"
exit 1
fi

rm -rf ./dist
${BASEDIR}/build-containerd.sh
${BASEDIR}/build-runc.sh

for package in dist/*.deb; do
pkgcloud-push ernoaapa/eliot/raspbian/stretch $package || echo "${package} upload failed. Already uploaded?"
done

0 comments on commit 39fd7cd

Please sign in to comment.