packaging-ubuntu, issue #30: streamline building and uploading to PPA

This commit is contained in:
Daniel Mizyrycki 2013-04-15 18:01:54 -07:00
Родитель fd39af7f85
Коммит 523cd8e29c
10 изменённых файлов: 407 добавлений и 287 удалений

Просмотреть файл

@ -1,73 +1,57 @@
# Ubuntu package Makefile
#
# Dependencies: debhelper autotools-dev devscripts golang
# Notes:
# Use 'make ubuntu' to create the ubuntu package
# GPG_KEY environment variable needs to contain a GPG private key for package to be signed
# and uploaded to docker PPA.
# If GPG_KEY is not defined, make ubuntu will create docker package and exit with
# status code 2
PKG_NAME=lxc-docker PKG_NAME=lxc-docker
PKG_ARCH=amd64 VERSION=$(shell head -1 changelog | sed 's/^.\+(\(.\+\)..).\+$$/\1/')
PKG_VERSION=1 GITHUB_PATH=github.com/dotcloud/docker
ROOT_PATH:=$(PWD) DOCKER_VERSION=${PKG_NAME}_${VERSION}
BUILD_PATH=build # Do not change, decided by dpkg-buildpackage DOCKER_FVERSION=${PKG_NAME}_$(shell head -1 changelog | sed 's/^.\+(\(.\+\)).\+$$/\1/')
BUILD_SRC=build_src BUILD_SRC=${CURDIR}/../../build_src
GITHUB_PATH=src/github.com/dotcloud/docker
INSDIR=usr/bin
SOURCE_PACKAGE=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
DEB_PACKAGE=$(PKG_NAME)_$(PKG_VERSION)_$(PKG_ARCH).deb
EXTRA_GO_PKG=./auth
TMPDIR=$(shell mktemp -d -t XXXXXX) all:
# Compile docker. Used by dpkg-buildpackage.
cd src/${GITHUB_PATH}/docker; GOPATH=${CURDIR} go build
# Build a debian source package
all: clean build_in_deb
build_in_deb:
echo "GOPATH = " $(ROOT_PATH)
mkdir bin
cd $(GITHUB_PATH)/docker; GOPATH=$(ROOT_PATH) go build -o $(ROOT_PATH)/bin/docker
# DESTDIR provided by Debian packaging
install: install:
# Call this from a go environment (as packaged for deb source package) # Used by dpkg-buildpackage
mkdir -p $(DESTDIR)/$(INSDIR) mkdir -p ${DESTDIR}/usr/bin
mkdir -p $(DESTDIR)/etc/init mkdir -p ${DESTDIR}/etc/init
install -m 0755 bin/docker $(DESTDIR)/$(INSDIR) install -m 0755 src/${GITHUB_PATH}/docker/docker ${DESTDIR}/usr/bin
install -o root -m 0755 etc/docker.upstart $(DESTDIR)/etc/init/docker.conf install -o root -m 0755 debian/docker.upstart ${DESTDIR}/etc/init/docker.conf
$(BUILD_SRC): clean ubuntu:
# Copy ourselves into $BUILD_SRC to comply with unusual golang constraints # This Makefile will compile the github master branch of dotcloud/docker
tar --exclude=*.tar.gz --exclude=checkout.tgz -f checkout.tgz -cz * # Retrieve docker project and its go structure from internet
mkdir -p $(BUILD_SRC)/$(GITHUB_PATH) rm -rf ${BUILD_SRC}
tar -f checkout.tgz -C $(BUILD_SRC)/$(GITHUB_PATH) -xz GOPATH=${BUILD_SRC} go get ${GITHUB_PATH}
cd $(BUILD_SRC)/$(GITHUB_PATH)/docker; GOPATH=$(ROOT_PATH)/$(BUILD_SRC) go get -d # Add debianization
for d in `find $(BUILD_SRC) -name '.git*'`; do rm -rf $$d; done mkdir ${BUILD_SRC}/debian
# Populate source build with debian stuff cp Makefile ${BUILD_SRC}
cp -R -L ./deb/* $(BUILD_SRC) cp -r * ${BUILD_SRC}/debian
cp ../../README.md ${BUILD_SRC}
$(SOURCE_PACKAGE): $(BUILD_SRC) # Cleanup
rm -f $(SOURCE_PACKAGE) for d in `find ${BUILD_SRC} -name '.git*'`; do rm -rf $$d; done
# Create the debian source package rm -rf ${BUILD_SRC}/../${DOCKER_VERSION}.orig.tar.gz
tar -f $(SOURCE_PACKAGE) -C ${ROOT_PATH}/${BUILD_SRC} -cz . rm -rf ${BUILD_SRC}/pkg
# Create docker debian files
# Build deb package fetching go dependencies and cleaning up git repositories cd ${BUILD_SRC}; tar czf ../${DOCKER_VERSION}.orig.tar.gz .
deb: $(DEB_PACKAGE) cd ${BUILD_SRC}; dpkg-buildpackage -us -uc
rm -rf ${BUILD_SRC}
$(DEB_PACKAGE): $(SOURCE_PACKAGE) # Sign package and upload it to PPA if GPG_KEY environment variable
# dpkg-buildpackage looks for source package tarball in ../ # holds a private GPG KEY
cd $(BUILD_SRC); dpkg-buildpackage if /usr/bin/test "$${GPG_KEY}" == ""; then exit 2; fi
rm -rf $(BUILD_PATH) debian/$(PKG_NAME)* debian/files mkdir ${BUILD_SRC}
# Import gpg signing key
debsrc: $(SOURCE_PACKAGE) echo "$${GPG_KEY}" | gpg --allow-secret-key-import --import
# Sign the package
# Build local sources cd ${BUILD_SRC}; dpkg-source -x ${BUILD_SRC}/../${DOCKER_FVERSION}.dsc
#$(PKG_NAME): build_local cd ${BUILD_SRC}/${PKG_NAME}-${VERSION}; debuild -S -sa
cd ${BUILD_SRC};dput ppa:dotcloud/lxc-docker ${DOCKER_FVERSION}_source.changes
build_local: rm -rf ${BUILD_SRC}
-@mkdir -p bin
cd docker && go build -o ../bin/docker
gotest:
@echo "\033[36m[Testing]\033[00m docker..."
@sudo -E GOPATH=$(ROOT_PATH)/$(BUILD_SRC) go test -v . $(EXTRA_GO_PKG) && \
echo -n "\033[32m[OK]\033[00m" || \
echo -n "\033[31m[FAIL]\033[00m"; \
echo " docker"
@sudo rm -rf /tmp/docker-*
clean:
rm -rf $(BUILD_PATH) debian/$(PKG_NAME)* debian/files $(BUILD_SRC) checkout.tgz bin

Просмотреть файл

@ -0,0 +1,37 @@
Docker on Ubuntu
================
The easiest way to get docker up and running natively on Ubuntu is installing
it from its official PPA::
sudo sh -c "echo 'deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main' >>/etc/apt/sources.list"
sudo apt-get update
sudo apt-get install lxc-docker
Building docker package
~~~~~~~~~~~~~~~~~~~~~~~
The building process is shared by both, developers and maintainers. If you are
a developer, the Makefile will stop with exit status 2 right before signing
the built packages.
Assuming you are working on an Ubuntu 12.04 TLS system ::
# Download a fresh copy of the docker project
git clone https://github.com/dotcloud/docker.git
cd docker
# Get building dependencies
sudo apt-get update; sudo apt-get install -y debhelper autotools-dev devscripts golang
# Make the ubuntu package
(cd packaging/ubuntu; make ubuntu)
Install docker built package
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
::
sudo dpkg -i lxc-docker_*_amd64.deb; sudo apt-get install -f -y

12
packaging/ubuntu/Vagrantfile поставляемый Normal file
Просмотреть файл

@ -0,0 +1,12 @@
BUILDBOT_IP = '192.168.33.32'
Vagrant::Config.run do |config|
config.vm.box = 'quantal64_3.5.0-25'
config.vm.box_url = 'http://get.docker.io/vbox/ubuntu/12.10/quantal64_3.5.0-25.box'
config.vm.share_folder 'v-data', '/data/docker', "#{File.dirname(__FILE__)}/../.."
config.vm.network :hostonly,BUILDBOT_IP
# Install ubuntu packaging dependencies and create ubuntu packages
config.vm.provision :shell, :inline => 'export DEBIAN_FRONTEND=noninteractive; apt-get -qq update; apt-get install -qq -y debhelper autotools-dev devscripts golang'
config.vm.provision :shell, :inline => "export GPG_KEY='#{ENV['GPG_KEY']}'; cd /data/docker/packaging/ubuntu; make ubuntu"
end

Просмотреть файл

@ -1,4 +1,21 @@
lxc-docker (1) precise; urgency=low lxc-docker (0.1.4.1-1) precise; urgency=low
Improvements [+], Updates [*], Bug fixes [-]:
* Test PPA
-- dotCloud <ops@dotcloud.com> Fri, 15 Apr 2013 12:14:50 -0700
lxc-docker (0.1.4-1) precise; urgency=low
Improvements [+], Updates [*], Bug fixes [-]:
* Changed default bridge interface do 'docker0'
- Fix a race condition when running the port allocator
-- dotCloud <ops@dotcloud.com> Fri, 12 Apr 2013 12:20:06 -0700
lxc-docker (0.1.0-1) unstable; urgency=low
* Initial release * Initial release

Просмотреть файл

@ -1,19 +1,19 @@
Source: lxc-docker Source: lxc-docker
Section: misc Section: misc
Priority: extra Priority: extra
Homepage: http://docker.io
Maintainer: Daniel Mizyrycki <daniel@dotcloud.com> Maintainer: Daniel Mizyrycki <daniel@dotcloud.com>
Build-Depends: debhelper (>= 8.0.0), pkg-config, git, golang, libsqlite3-dev Build-Depends: debhelper,autotools-dev,devscripts,golang
Vcs-Git: http://github.com/dotcloud/docker.git
Standards-Version: 3.9.3 Standards-Version: 3.9.3
Homepage: http://github.com/dotcloud/docker
Package: lxc-docker Package: lxc-docker
Architecture: amd64 Architecture: linux-any
Depends: ${shlibs:Depends}, ${misc:Depends}, lxc, wget, bsdtar, curl, sqlite3 Depends: ${misc:Depends},${shlibs:Depends},lxc,bsdtar
Conflicts: docker Conflicts: docker
Description: A process manager with superpowers Description: lxc-docker is a Linux container runtime
It encapsulates heterogeneous payloads in Standard Containers, and runs Docker complements LXC with a high-level API which operates at the process
them on any server with strong guarantees of isolation and repeatability. level. It runs unix processes with strong guarantees of isolation and
Is is a great building block for automating distributed systems: repeatability across servers.
large-scale web deployments, database clusters, continuous deployment Docker is a great building block for automating distributed systems:
systems, private PaaS, service-oriented architectures, etc. large-scale web deployments, database clusters, continuous deployment systems,
private PaaS, service-oriented architectures, etc.

Просмотреть файл

@ -1,11 +1,11 @@
Format: http://dep.debian.net/deps/dep5 Format: http://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
Upstream-Name: docker Upstream-Name: docker
Source: https://github.com/dotcloud/docker Upstream-Contact: DotCloud Inc <opensource@dotcloud.com>
Source: http://github.com/dotcloud/docker
Files: * Files: *
Copyright: 2012 DotCloud Inc (opensource@dotcloud.com) Copyright: 2012, DotCloud Inc <opensource@dotcloud.com>
License: Apache License Version 2.0 License: Apache-2.0
Apache License Apache License
Version 2.0, January 2004 Version 2.0, January 2004
http://www.apache.org/licenses/ http://www.apache.org/licenses/
@ -194,7 +194,7 @@ License: Apache License Version 2.0
same "printed page" as the copyright notice for easier same "printed page" as the copyright notice for easier
identification within third-party archives. identification within third-party archives.
Copyright 2012 DotCloud Inc (opensource@dotcloud.com) Copyright 2012 DotCloud Inc
Licensed under the Apache License, Version 2.0 (the "License"); Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License. you may not use this file except in compliance with the License.
@ -207,3 +207,31 @@ License: Apache License Version 2.0
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
Files: src/github.com/kr/pty/*
Copyright: Copyright (c) 2011 Keith Rarick
License: Expat
Copyright (c) 2011 Keith Rarick
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated
documentation files (the "Software"), to deal in the
Software without restriction, including without limitation
the rights to use, copy, modify, merge, publish, distribute,
sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so,
subject to the following conditions:
The above copyright notice and this permission notice shall
be included in all copies or substantial portions of the
Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS
OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Просмотреть файл

@ -5,6 +5,6 @@ stop on starting rc RUNLEVEL=[016]
respawn respawn
script script
test -f /etc/default/locale && . /etc/default/locale || true /usr/bin/test -f /etc/default/locale && . /etc/default/locale || true
LANG=$LANG LC_ALL=$LANG /usr/bin/docker -d LANG=$LANG LC_ALL=$LANG /usr/bin/docker -d
end script end script

Просмотреть файл

@ -0,0 +1,4 @@
#!/bin/sh
# Start docker
/sbin/start docker

Просмотреть файл

@ -0,0 +1,4 @@
#!/bin/sh
# Stop docker
/sbin/stop docker

Просмотреть файл

@ -0,0 +1,34 @@
Maintainer duty
===============
Ubuntu allows developers to use their PPA (Personal Package Archive)
repository. This is very convenient for the users as they just need to add
the PPA address, update their package database and use the apt-get tool.
The official lxc-docker package is located on launchpad and can be accessed
adding the following line to /etc/apt/sources.list ::
deb http://ppa.launchpad.net/dotcloud/lxc-docker/ubuntu precise main
Realeasing a new package
~~~~~~~~~~~~~~~~~~~~~~~~
The most relevant information to update is the changelog file:
Each new release should create a new first paragraph with new release version,
changes, and the maintainer information.
Assuming your PPA GPG signing key is on /media/usbdrive/docker.key, load it
into the GPG_KEY environment variable with::
export GPG_KEY=`cat /media/usbdrive/docker.key`
After this is done and you are ready to upload the package to the PPA, you have
a couple of choices:
* Follow README.debian to generate the actual source packages and upload them
to the PPA
* Let vagrant do all the work for you::
( cd docker/packaging/ubuntu; vagrant up )