From aac4cfa93d4dae1941ac71233d824da00552069d Mon Sep 17 00:00:00 2001 From: Mark Friedenbach Date: Tue, 10 Jul 2012 20:38:08 -0700 Subject: [PATCH] =?UTF-8?q?A=20set=20of=20scripts=20built=20on=20top=20of?= =?UTF-8?q?=20gitian=20and=20vagrant=20(http://vagrantup.com)=20for=20auto?= =?UTF-8?q?mating=20gitian=20builds=20on=20any=20platform=20using=20Oracle?= =?UTF-8?q?=20VirtualBox.=20A=20minimum=20number=20of=20host=20dependencie?= =?UTF-8?q?s=20are=20required.=20See=20=E2=80=9Ccontrib/vagrant/README.md?= =?UTF-8?q?=E2=80=9D=20for=20details.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- contrib/vagrant/.gitignore | 5 + contrib/vagrant/Makefile | 558 ++++++++++++++++++ contrib/vagrant/README | 1 + contrib/vagrant/README.md | 114 ++++ contrib/vagrant/Vagrantfile | 124 ++++ ...itian-descriptors-bitcoin-deps-win32.patch | 31 + ...rib-gitian-descriptors-bitcoin-linux.patch | 31 + ...rib-gitian-descriptors-bitcoin-win32.patch | 48 ++ ...ntrib-gitian-descriptors-boost-win32.patch | 38 ++ ...-contrib-gitian-descriptors-qt-win32.patch | 31 + ...itian-builder-69bd6a53-100-change_ip.patch | 11 + ...-builder-69bd6a53-200-removepkg_cron.patch | 20 + ...uilder-69bd6a53-300-external_mirrors.patch | 14 + .../gitian-builder-69bd6a53-400-ssh_key.patch | 21 + ...c-network-interfaces-100-add_lxc_br0.patch | 20 + ...-sysctl.conf-100-enable_ipv4_forward.patch | 12 + 16 files changed, 1079 insertions(+) create mode 100644 contrib/vagrant/.gitignore create mode 100644 contrib/vagrant/Makefile create mode 120000 contrib/vagrant/README create mode 100644 contrib/vagrant/README.md create mode 100644 contrib/vagrant/Vagrantfile create mode 100644 contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-deps-win32.patch create mode 100644 contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-linux.patch create mode 100644 contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-win32.patch create mode 100644 contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-boost-win32.patch create mode 100644 contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-qt-win32.patch create mode 100644 contrib/vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch create mode 100644 contrib/vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch create mode 100644 contrib/vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch create mode 100644 contrib/vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch create mode 100644 contrib/vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch create mode 100644 contrib/vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch diff --git a/contrib/vagrant/.gitignore b/contrib/vagrant/.gitignore new file mode 100644 index 0000000000000..b488040365184 --- /dev/null +++ b/contrib/vagrant/.gitignore @@ -0,0 +1,5 @@ +cache/* +output/* +.stamp-* +.*.manifest +.vagrant diff --git a/contrib/vagrant/Makefile b/contrib/vagrant/Makefile new file mode 100644 index 0000000000000..8968f01103e4c --- /dev/null +++ b/contrib/vagrant/Makefile @@ -0,0 +1,558 @@ +# === Makefile ------------------------------------------------------------=== +# Copyright © 2011-2012 Bitcoin Developers. +# +# 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. +# ===----------------------------------------------------------------------=== + +MAKEFILE := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) + +SHELL := $(shell bash --help >/dev/null 2>&1 && echo ba)sh + +GREP := $(shell egrep --help >/dev/null 2>&1 && echo e)grep +PATCH := $(shell gpatch --help >/dev/null 2>&1 && echo g)patch +SED := $(shell gsed --help >/dev/null 2>&1 && echo g)sed +WGET := wget --no-check-certificate \ + --user-agent=$(shell wget --version | \ + $(SED) -n 's,GNU \(Wget\) \([0-9.]*\).*,\1/\2,p') + +REQUIREMENTS := $(SHELL) bzip2 cut diff $(GREP) gzip $(MAKE) openssl $(PATCH) \ + ruby $(SED) sort tar vagrant wget xargs xz + +BUILD_MANIFEST = cd '$(shell dirname '$(MAKEFILE)')'/../.. && \ + find $(1) -print0 | \ + xargs -0 -n1 openssl sha256 2>/dev/null | \ + openssl sha256 | \ + $(SED) -n 's,^.*\([0-9a-f]\{64\}\),\1,p' + +VALIDATE_MANIFEST = \ + if [ -f "$(1)" ] && echo "$(2)" | diff "$(1)" - 2>&1 >/dev/null; then \ + rm -f "$(1)"; \ + fi + +# ===----------------------------------------------------------------------=== + +PKGS := +CACHE_DIR := cache +HOST_CACHE_DIR := $(CACHE_DIR) +GUEST_CACHE_DIR := /vagrant/$(CACHE_DIR) + +SOURCEFORGE_MIRROR := kent.dl.sourceforge.net + +PKG := boost +$(PKG)_VERSION := 1.47.0 +$(PKG)_CHECKSUM := 815a5d9faac4dbd523fbcf3fe1065e443c0bbf43427c44aa423422c6ec4c2e31 +$(PKG)_SUBDIR := boost_$(subst .,_,$($(PKG)_VERSION)) +$(PKG)_FILE := boost_$(subst .,_,$($(PKG)_VERSION)).tar.bz2 +$(PKG)_URL := http://$(SOURCEFORGE_MIRROR)/project/boost/boost/$($(PKG)_VERSION)/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := boost-win32 +$(PKG)_VERSION := 1.49.0 +$(PKG)_CHECKSUM := dd748a7f5507a7e7af74f452e1c52a64e651ed1f7263fce438a06641d2180d3c +$(PKG)_SUBDIR := boost_$(subst .,_,$($(PKG)_VERSION)) +$(PKG)_FILE := boost_$(subst .,_,$($(PKG)_VERSION)).tar.bz2 +$(PKG)_URL := http://$(SOURCEFORGE_MIRROR)/project/boost/boost/$($(PKG)_VERSION)/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := db +$(PKG)_VERSION := 4.8.30 +$(PKG)_CHECKSUM := 12edc0df75bf9abd7f82f821795bcee50f42cb2e5f76a6a281b85732798364ef +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION).NC +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).NC.tar.gz +$(PKG)_URL := http://download.oracle.com/berkeley-db/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := libpng +$(PKG)_VERSION := 1.5.9 +$(PKG)_CHECKSUM := b75dae26151f9b031062c8d2f577a094b08da0ae44fe8c11175d0b9ff434cc02 +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.gz +$(PKG)_URL := ftp://ftp.simplesystems.org/pub/$(PKG)/png/src/$($(PKG)_FILE) +$(PKG)_URL_2 := http://image_magick.veidrodis.com/image_magick/delegates/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := miniupnpc +$(PKG)_VERSION := 1.6 +$(PKG)_CHECKSUM := bbd6b756e6af44b5a5b0f9b93eada3fb8922ed1d6451b7d6f184d0ae0c813994 +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.gz +$(PKG)_URL := http://miniupnp.free.fr/files/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := openssl +$(PKG)_VERSION := 1.0.1b +$(PKG)_CHECKSUM := 1187bf2d5cdf0b286b951bf5c777aa97855cd7db24fdb9604cb557c8b1d7364b +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.gz +$(PKG)_URL := http://www.openssl.org/source/$($(PKG)_FILE) +$(PKG)_URL_2 := ftp://ftp.openssl.org/source/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := qrencode +$(PKG)_VERSION := 3.2.0 +$(PKG)_CHECKSUM := 03c4bc7cd9a75747c3815d509bbe061907d615764f2357923f0db948c567068f +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.bz2 +$(PKG)_URL := http://fukuchi.org/works/$(PKG)/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := qt +$(PKG)_VERSION := 4.7.4 +$(PKG)_CHECKSUM := 97195ebce8a46f9929fb971d9ae58326d011c4d54425389e6e936514f540221e +$(PKG)_SUBDIR := $(PKG)-everywhere-opensource-src-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-everywhere-opensource-src-$($(PKG)_VERSION).tar.gz +$(PKG)_URL := http://releases.qt-project.org/qt4/source/$($(PKG)_FILE) +$(PKG)_URL_2 := http://get.qt.nokia.com/qt/source/$($(PKG)_FILE) +PKGS += $(PKG) + +PKG := zlib +$(PKG)_VERSION := 1.2.6 +$(PKG)_CHECKSUM := 21235e08552e6feba09ea5e8d750805b3391c62fb81c71a235c0044dc7a8a61b +$(PKG)_SUBDIR := $(PKG)-$($(PKG)_VERSION) +$(PKG)_FILE := $(PKG)-$($(PKG)_VERSION).tar.gz +$(PKG)_URL := http://zlib.net/$($(PKG)_FILE) +$(PKG)_URL_2 := http://$(SOURCEFORGE_MIRROR)/project/libpng/$(PKG)/$($(PKG)_VERSION)/$($(PKG)_FILE) +PKGS += $(PKG) + +# ===----------------------------------------------------------------------=== + +VAGRANT_UP = \ + vagrant up + +VAGRANT_HALT = \ + vagrant halt + +VAGRANT_RELOAD = \ + vagrant reload + +VAGRANT_DESTROY = \ + vagrant destroy --force + +# ===----------------------------------------------------------------------=== + +.PHONY: all +all: bitcoin-linux bitcoin-win32 + +.PHONY: mostlyclean +mostlyclean: + +.PHONY: clean +clean: mostlyclean + -rm -rf output + -rm -f .stamp-* + -$(call VAGRANT_DESTROY) + +.PHONY: distclean +distclean: clean + -rm -rf cache + +.PHONY: maintainer-clean +maintainer-clean: distclean + @echo 'This command is intended for maintainers to use; it' + @echo 'deletes files that may need special tools to rebuild.' + +.PHONY: dist +dist: all + +# ===----------------------------------------------------------------------=== + +.PHONY: check-requirements +define CHECK_REQUIREMENT + @if ! $(1) --help &>/dev/null; then \ + if ! which $(1) &>/dev/null; then \ + echo; \ + echo 'Missing requirement: $(1)'; \ + echo; \ + echo 'Please have a look at "README" to ensure'; \ + echo 'that your system meets all requirements.'; \ + echo; \ + exit 1; \ + fi; \ + fi + +endef +define CHECK_REQUIREMENT_VERSION + @if ! $(1) --version | head -1 | grep ' \($(2)\)$$' >/dev/null; then \ + echo; \ + echo 'Wrong version of requirement: $(1)'; \ + echo; \ + echo 'Please have a look at "README" to ensure'; \ + echo 'that your system meets all requirements.'; \ + echo; \ + exit 1; \ + fi + +endef +check-requirements: .stamp-check-requirements.h +.stamp-check-requirements.h: $(MAKEFILE) + @echo '[check requirements]' + $(foreach REQUIREMENT,$(REQUIREMENTS),$(call CHECK_REQUIREMENT,$(REQUIREMENT))) + $(call CHECK_REQUIREMENT_VERSION,vagrant,1\.[0-9]\.[0-9]) + @touch "$@" + +# ===----------------------------------------------------------------------=== + +.PHONY: download +download: $(addprefix download-,$(PKGS)) + +PKG_CHECKSUM = \ + openssl sha256 '$(HOST_CACHE_DIR)/$($(1)_FILE)' 2>/dev/null | $(SED) -n 's,^.*\([0-9a-f]\{64\}\)$$,\1,p' + +CHECK_PKG_ARCHIVE = \ + [ x'$($(1)_CHECKSUM)' == x"`$$(call PKG_CHECKSUM,$(1))`" ] + +DOWNLOAD_PKG_ARCHIVE = \ + mkdir -p '$(HOST_CACHE_DIR)' && \ + $(if $($(1)_URL_2), \ + ( $(WGET) -T 30 -t 3 -O- '$($(1)_URL)' || $(WGET) -O- '$($(1)_URL_2)' ), \ + $(WGET) -O- '$($(1)_URL)') \ + $(if $($(1)_FIX_GZIP), \ + | gzip -d | gzip -9n, \ + ) \ + > '$(HOST_CACHE_DIR)/$($(1)_FILE)' + +define PKG_RULE +.PHONY: download-$(1) +download-$(1): $(HOST_CACHE_DIR)/$($(1)_FILE) +$(HOST_CACHE_DIR)/$($(1)_FILE): .stamp-check-requirements.h + @echo -n "Checking cached package $(1)-$($(1)_VERSION)... "; \ + if ! $(call CHECK_PKG_ARCHIVE,$(1)); then \ + echo "failed"; \ + $(call DOWNLOAD_PKG_ARCHIVE,$(1)); \ + $(call CHECK_PKG_ARCHIVE,$(1)) \ + || { echo 'Wrong checksum!'; exit 1; }; \ + else \ + echo "ok"; \ + fi + +endef +$(foreach PKG,$(PKGS),$(eval $(call PKG_RULE,$(PKG)))) + +# ===----------------------------------------------------------------------=== + +HOST_VM_FILES := contrib/vagrant/Makefile \ + contrib/vagrant/Vagrantfile \ + contrib/vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch \ + contrib/vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch +HOST_VM_FILES := $(sort $(HOST_VM_FILES)) +HOST_VM_MANIFEST := $(shell $(call BUILD_MANIFEST,$(HOST_VM_FILES))) + +_ := $(shell $(call \ + VALIDATE_MANIFEST, \ + .stamp-host-vm.manifest, \ + $(HOST_VM_MANIFEST) \ +)) + +.PHONY: host-vm +host-vm: .stamp-host-vm.manifest +.stamp-host-vm.manifest: \ + .stamp-check-requirements.h \ + $(foreach FILE,$(HOST_VM_FILES),$(shell echo $(FILE) | $(SED) 's:^contrib/vagrant/::g')) + + -$(call VAGRANT_DESTROY) + + $(call VAGRANT_UP) + + vagrant ssh --command "sudo apt-get update" + vagrant ssh --command "sudo apt-get upgrade -y" + $(call VAGRANT_RELOAD) + + vagrant ssh --command "sudo apt-get install -y \ + debootstrap git lxc python-vm-builder ruby patch zip" + + vagrant ssh --command "sudo apt-get install -y bridge-utils" + vagrant ssh --command "sudo brctl addbr br0" + vagrant ssh --command "sudo $(SHELL) -c 'cd /etc/network && \ + patch -p1 < /vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch'" + vagrant ssh --command "sudo $(SHELL) -c 'cd /etc && \ + patch -p1 < /vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch'" + + vagrant ssh --command "sudo apt-get install -y apt-cacher-ng" + + -$(call VAGRANT_HALT) + + echo $(HOST_VM_MANIFEST) > "$@" + +# ===----------------------------------------------------------------------=== + +GITIAN_VM_FILES := contrib/vagrant/Makefile \ + contrib/vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch \ + contrib/vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch \ + contrib/vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch \ + contrib/vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch +GITIAN_VM_FILES := $(sort $(GITIAN_VM_FILES)) +GITIAN_VM_MANIFEST := $(shell $(call BUILD_MANIFEST,$(GITIAN_VM_FILES))) + +_ := $(shell $(call \ + VALIDATE_MANIFEST, \ + .stamp-gitian-guest-vm.manifest, \ + $(GITIAN_VM_MANIFEST) \ +)) + +.PHONY: gitian-guest-vm +gitian-guest-vm: .stamp-gitian-guest-vm.manifest +.stamp-gitian-guest-vm.manifest: \ + .stamp-host-vm.manifest \ + $(foreach FILE,$(GITIAN_VM_FILES),$(shell echo $(FILE) | $(SED) 's:^contrib/vagrant/::g')) + + $(call VAGRANT_UP) + + vagrant ssh --command "\ + if [ -d ~/gitian-builder ]; then \ + rm -rf ~/gitian-builder; \ + fi" + vagrant ssh --command "\ + git clone 'https://github.com/devrandom/gitian-builder' ~/gitian-builder" + vagrant ssh --command "cd ~/gitian-builder && \ + git checkout 69bd6a53" + vagrant ssh --command "cd ~/gitian-builder && \ + patch -p1 < /vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch" + vagrant ssh --command "cd ~/gitian-builder && \ + patch -p1 < /vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch" + vagrant ssh --command "cd ~/gitian-builder && \ + patch -p1 < /vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch" + vagrant ssh --command "cd ~/gitian-builder && \ + patch -p1 < /vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch" + vagrant ssh --command "cd ~/gitian-builder && \ + ln -s $(GUEST_CACHE_DIR) inputs" + + vagrant ssh --command "\ + cd ~/gitian-builder; \ + if [ -e $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST) ]; then \ + rsync -av $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST)/base-* . || exit 1; \ + else \ + bin/make-base-vm --lxc --suite lucid --arch i386 || exit 1; \ + bin/make-base-vm --lxc --suite lucid --arch amd64 || exit 1; \ + mkdir -p $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST) || exit 1; \ + rsync -av base-* $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST) || \ + rm -rf $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST); \ + [ -e $(GUEST_CACHE_DIR)/gitian-guest-vm/$(GITIAN_VM_MANIFEST) ] || \ + exit 1; \ + fi" + + -$(call VAGRANT_HALT) + + echo $(GITIAN_VM_MANIFEST) > "$@" + +# ===----------------------------------------------------------------------=== + +ifeq ($(shell git log -1 2>&1 >/dev/null && echo true),true) +SOURCE_FILES := $(shell \ + git ls-tree --name-only --full-tree -r `git log -1 --format="%H"` \ + | $(GREP) -v '^contrib/vagrant/' \ + | sort) +else +SOURCE_FILES := $(shell cd ../.. && \ + find -L . -type f -print \ + | $(SED) 's:^\./::g' \ + | $(GREP) -v '^\.git/' \ + | $(GREP) -v '^contrib/vagrant/' \ + | sort) +endif + +SOURCE_MANIFEST := $(shell $(call BUILD_MANIFEST,$(SOURCE_FILES))) + +_ := $(shell $(call \ + VALIDATE_MANIFEST, \ + $(HOST_CACHE_DIR)/src-local.manifest, \ + $(SOURCE_MANIFEST) \ +)) + +.PHONY: bundle-source +bundle-source: $(HOST_CACHE_DIR)/src-local.manifest +$(HOST_CACHE_DIR)/src-local.manifest: $(HOST_CACHE_DIR)/src-local.tar.xz + echo $(SOURCE_MANIFEST) >'$@' +$(HOST_CACHE_DIR)/src-local.tar.xz: \ + $(foreach FILE,$(SOURCE_FILES),$(shell echo $(FILE) | $(SED) 's:^:../../:g')) + + mkdir -p '$(HOST_CACHE_DIR)' + rm -f '$(HOST_CACHE_DIR)'/src-local.{tar,tar.xz} + COPYFILE_DISABLE=1 tar -C ../.. -rf '$(HOST_CACHE_DIR)'/src-local.tar $(SOURCE_FILES) + xz '$(HOST_CACHE_DIR)'/src-local.tar + +# ===----------------------------------------------------------------------=== + +OUTPUT_DIR := output +HOST_OUTPUT_DIR := $(OUTPUT_DIR) +GUEST_OUTPUT_DIR := /vagrant/$(OUTPUT_DIR) +PATCH_DIR := patch +HOST_PATCH_DIR := $(PATCH_DIR) +GUEST_PATCH_DIR := /vagrant/$(PATCH_DIR) + +TARGETS := + +TARGET := bitcoin-deps-win32 +$(TARGET)_NAME := bitcoin-deps +$(TARGET)_VERSION := 0.0.4 +$(TARGET)_OUTPUT := $($(TARGET)_NAME)-$($(TARGET)_VERSION).zip +$(TARGET)_SCRIPT := contrib/gitian-descriptors/deps-win32.yml +$(TARGET)_PATCH := contrib/vagrant/$(HOST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(TARGET).patch +$(TARGET)_PKGS := db libpng miniupnpc openssl qrencode zlib +$(TARGET)_DEPS := +$(TARGET)_FILES := $($(TARGET)_SCRIPT) \ + $($(TARGET)_PATCH) +$(TARGET)_FILES += $(foreach PACKAGE, \ + $($(TARGET)_PKGS), \ + contrib/vagrant/cache/$($(PACKAGE)_FILE)) +$(TARGET)_FILES := $(sort $($(TARGET)_FILES)) +$(TARGET)_MANIFEST := $(call BUILD_MANIFEST,$($(TARGET)_FILES)) +TARGETS += $(TARGET) + +TARGET := bitcoin-linux +$(TARGET)_NAME := bitcoin +$(TARGET)_VERSION := 0.6.99 +$(TARGET)_OUTPUT := $(TARGET)-$($(TARGET)_VERSION)-gitian.zip +$(TARGET)_SCRIPT := contrib/gitian-descriptors/gitian.yml +$(TARGET)_PATCH := contrib/vagrant/$(HOST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(TARGET).patch +$(TARGET)_PKGS := miniupnpc qrencode +$(TARGET)_DEPS := +$(TARGET)_FILES := $($(TARGET)_SCRIPT) \ + $($(TARGET)_PATCH) \ + contrib/vagrant/cache/src-local.tar.xz +$(TARGET)_FILES += $(foreach PACKAGE, \ + $($(TARGET)_PKGS), \ + contrib/vagrant/cache/$($(PACKAGE)_FILE)) +$(TARGET)_FILES := $(sort $($(TARGET)_FILES)) +$(TARGET)_MANIFEST := $(call BUILD_MANIFEST,$($(TARGET)_FILES)) +TARGETS += $(TARGET) + +TARGET := bitcoin-win32 +$(TARGET)_NAME := bitcoin +$(TARGET)_VERSION := 0.6.99 +$(TARGET)_OUTPUT := $(TARGET)-$($(TARGET)_VERSION)-gitian.zip +$(TARGET)_SCRIPT := contrib/gitian-descriptors/gitian-win32.yml +$(TARGET)_PATCH := contrib/vagrant/$(HOST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(TARGET).patch +$(TARGET)_PKGS := +$(TARGET)_DEPS := boost-win32 qt-win32 bitcoin-deps-win32 +$(TARGET)_FILES := $($(TARGET)_SCRIPT) \ + $($(TARGET)_PATCH) \ + contrib/vagrant/cache/src-local.tar.xz +$(TARGET)_FILES += $(foreach PACKAGE, \ + $($(TARGET)_PKGS), \ + contrib/vagrant/cache/$($(PACKAGE)_FILE)) +$(TARGET)_FILES := $(sort $($(TARGET)_FILES)) +$(TARGET)_MANIFEST := $(call BUILD_MANIFEST,$($(TARGET)_FILES)) +TARGETS += $(TARGET) + +TARGET := boost-win32 +$(TARGET)_NAME := boost +$(TARGET)_VERSION := 1.49.0 +$(TARGET)_OUTPUT := $(TARGET)-$($(TARGET)_VERSION)-gitian2.zip +$(TARGET)_SCRIPT := contrib/gitian-descriptors/$(TARGET).yml +$(TARGET)_PATCH := contrib/vagrant/$(HOST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(TARGET).patch +$(TARGET)_PKGS := boost-win32 +$(TARGET)_DEPS := +$(TARGET)_FILES := $($(TARGET)_SCRIPT) \ + $($(TARGET)_PATCH) +$(TARGET)_FILES += $(foreach PACKAGE, \ + $($(TARGET)_PKGS), \ + contrib/vagrant/cache/$($(PACKAGE)_FILE)) +$(TARGET)_FILES := $(sort $($(TARGET)_FILES)) +$(TARGET)_MANIFEST := $(call BUILD_MANIFEST,$($(TARGET)_FILES)) +TARGETS += $(TARGET) + +TARGET := qt-win32 +$(TARGET)_NAME := qt +$(TARGET)_VERSION := 4.7.4 +$(TARGET)_OUTPUT := $(TARGET)-$($(TARGET)_VERSION)-gitian.zip +$(TARGET)_SCRIPT := contrib/gitian-descriptors/$(TARGET).yml +$(TARGET)_PATCH := contrib/vagrant/$(HOST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(TARGET).patch +$(TARGET)_PKGS := qt +$(TARGET)_DEPS := +$(TARGET)_FILES := $($(TARGET)_SCRIPT) \ + $($(TARGET)_PATCH) +$(TARGET)_FILES += $(foreach PACKAGE, \ + $($(TARGET)_PKGS), \ + contrib/vagrant/cache/$($(PACKAGE)_FILE)) +$(TARGET)_FILES := $(sort $($(TARGET)_FILES)) +$(TARGET)_MANIFEST := $(call BUILD_MANIFEST,$($(TARGET)_FILES)) +TARGETS += $(TARGET) + +DEPLOY_SOURCE_BUNDLE = \ + vagrant ssh --command "rm -rf ~/'$(1)' || true"; \ + vagrant ssh --command "mkdir -p ~/'$(1)'"; \ + vagrant ssh --command "cd ~/'$(1)' && \ + tar -xf $(GUEST_CACHE_DIR)/src-local.tar.xz" + +define TARGET_RULE +.PHONY: $(1) +$(1): $(HOST_OUTPUT_DIR)/$($(1)_OUTPUT) +$(HOST_OUTPUT_DIR)/$($(1)_OUTPUT): \ + .stamp-gitian-guest-vm.manifest \ + $(HOST_CACHE_DIR)/src-local.manifest \ + $(foreach TARGET,$($(1)_DEPS),$(HOST_OUTPUT_DIR)/$($(TARGET)_OUTPUT)) \ + $(foreach PACKAGE,$($(1)_PKGS),$(HOST_CACHE_DIR)/$($(PACKAGE)_FILE)) + + mkdir -p $(HOST_OUTPUT_DIR) + + $(call VAGRANT_UP) + + $(call DEPLOY_SOURCE_BUNDLE,bitcoin) + vagrant ssh --command "cd ~/bitcoin && \ + if [ -f $(GUEST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(1).patch ]; then \ + patch -p1 < $(GUEST_PATCH_DIR)/bitcoin-contrib-gitian-descriptors-$(1).patch || exit 1; \ + fi" + + echo `$($(TARGET)_MANIFEST)` > .$(TARGET).manifest + + if [ ! -f $(HOST_CACHE_DIR)/$(TARGET)/`cat .$(TARGET).manifest`/$($(TARGET)_OUTPUT) ]; then \ + vagrant ssh --command "cd ~/gitian-builder && \ + USE_LXC=1 ./bin/gbuild ../bitcoin/$($(1)_SCRIPT)" || exit 1; \ + vagrant ssh --command "cd ~/gitian-builder/build/out && \ + if [ ! -f $($(TARGET)_OUTPUT) ]; then \ + zip -r $($(TARGET)_OUTPUT) * || exit 1; \ + fi" || exit 1; \ + vagrant ssh --command "mkdir -p '$(GUEST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`/" || exit 1; \ + vagrant ssh --command "cd ~/gitian-builder && \ + mv build/out/$($(TARGET)_OUTPUT) \ + '$(GUEST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`/" || exit 1; \ + vagrant ssh --command "cd ~/gitian-builder && \ + mv result/$($(TARGET)_NAME)-res.yml \ + '$(GUEST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-res.yml'" || exit 1; \ + vagrant ssh --command "cd ~/gitian-builder && \ + mv var/build.log \ + '$(GUEST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-build.log'" || exit 1; \ + vagrant ssh --command "cd ~/gitian-builder && \ + mv var/install.log \ + '$(GUEST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-install.log'" || exit 1; \ + fi + + cp -a '$(HOST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$($(TARGET)_OUTPUT)' \ + '$(HOST_CACHE_DIR)/' + cp -a '$(HOST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$($(TARGET)_OUTPUT)' \ + '$(HOST_OUTPUT_DIR)/' + cp -a '$(HOST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-res.yml' \ + '$(HOST_OUTPUT_DIR)/' + cp -a '$(HOST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-build.log' \ + '$(HOST_OUTPUT_DIR)/' + cp -a '$(HOST_CACHE_DIR)/$(TARGET)/'`cat .$(TARGET).manifest`'/$(1)-$($(TARGET)_VERSION)-gitian-install.log' \ + '$(HOST_OUTPUT_DIR)/' + + rm -f .$(TARGET).manifest + + vagrant ssh --command "rm -rf ~/bitcoin" + + -$(call VAGRANT_HALT) + +endef +$(foreach TARGET,$(TARGETS),$(eval $(call TARGET_RULE,$(TARGET)))) + +# ===----------------------------------------------------------------------=== +# End of File +# ===----------------------------------------------------------------------=== diff --git a/contrib/vagrant/README b/contrib/vagrant/README new file mode 120000 index 0000000000000..42061c01a1c70 --- /dev/null +++ b/contrib/vagrant/README @@ -0,0 +1 @@ +README.md \ No newline at end of file diff --git a/contrib/vagrant/README.md b/contrib/vagrant/README.md new file mode 100644 index 0000000000000..a227759ede1c7 --- /dev/null +++ b/contrib/vagrant/README.md @@ -0,0 +1,114 @@ +Automated Gitian builds with Vagrant +==================================== + +This directory contains platform-independent scripts for building bitcoind and +Bitcoin-QT using the deterministic Gitian build process. + +Dependencies +------------ + +These build scripts depend on a UNIX-like build environment, the freely +available open-source release of VirtualBox, and the Vagrant ruby gem. The +makefile will complain if any of the required tools are not found. Use the +makefile to find out which requirements are missing: + + $ cd contrib/vagrant + $ make check-requirements + +Instructions +------------ + + $ cd contrib/vagrant && make + +It really is that simple. + +Read the remainder of this document for some platform-specific instructions +for setting up an appropriate build environment. + +Mac OS X +-------- + +Install the latest versions of VirtualBox and Vagrant. The scripts are known +to work with VirtualBox 4.1.16 r78094 and Vagrant 1.0.3 on Mac OS X 10.7 Lion +with XCode 4.3.2 and the command-line developer tools installed. + +VirtualBox binaries are available from the VirtualBox website: + + https://www.virtualbox.org/wiki/Downloads + +The Vagrant installer for Mac OS X works: + + http://vagrantup.com/ + +Use MacPorts or homebrew to install any missing dependencies, for example: + + $ sudo port install openssl wget xz + +Then use GNU make to initiate the build: + + $ cd contrib/vagrant + $ make + +Linux +----- + +Existing binaries for VirtualBox, Vagrant, git, and the various UNIX +dependencies provided by your distribution should work. Use the makefile to +find out which requirements are missing: + + $ cd contrib/vagrant + $ make check-requirements + +If you cannot find `vagrant` in your distribution's package repositories, you +can install it using ruby gems: + + $ sudo gem install vagrant + +Once the dependencies are met, use GNU make to initiate the build: + + $ cd contrib/vagrant + $ make + +Windows +------- + +A UNIX-like build environment is required, but due to the peculiarities of the +required dependencies, the exact combination you have installed probably won't +work. Here are build instructions that are known to work from an updated fresh +install of Windows 7: + +Install Git for Windows (if you need git): + + http://msysgit.github.com/ + +You don't need the msys version--we will be installing msys separately. + +Install ruby using the one-click ruby installer: + + http://rubyinstaller.org/downloads/ + +Install ruby development environment, from the same download page. +Instructions: + + https://github.com/oneclick/rubyinstaller/wiki/Development-Kit + +Install Virtualbox (extension pack not required): + + https://www.virtualbox.org/wiki/Downloads + +Install mingw + msys environment: + + http://www.mingw.org/wiki/Getting_Started + +Install Vagrant via gem: + + $ gem install vagrant + +Use mingw-get to install other required packages. + + $ mingw-get install wget + +Once the dependencies are met, use GNU make to initiate the build: + + $ cd contrib/vagrant + $ make diff --git a/contrib/vagrant/Vagrantfile b/contrib/vagrant/Vagrantfile new file mode 100644 index 0000000000000..8534c83bc82d6 --- /dev/null +++ b/contrib/vagrant/Vagrantfile @@ -0,0 +1,124 @@ +# -*- mode: ruby -*- +# vi: set ft=ruby : + +# === Vagrantfile ---------------------------------------------------------=== +# Copyright © 2012 Bitcoin Developers. +# +# 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. +# ===----------------------------------------------------------------------=== + +Vagrant::Config.run do |config| + # All Vagrant configuration is done here. The most common configuration + # options are documented and commented below. For a complete reference, + # please see the online documentation at vagrantup.com. + + # Every Vagrant virtual environment requires a box to build off of. + config.vm.box = "Ubuntu 12.04 (x86_64)" + + # The url from where the 'config.vm.box' box will be fetched if it + # doesn't already exist on the user's system. + config.vm.box_url = "http://files.vagrantup.com/precise64.box" + + # Set RAM to 1.25GB + config.vm.customize ["modifyvm", :id, "--memory", 1280] + + # Boot with a GUI so you can see the screen. (Default is headless) + # config.vm.boot_mode = :gui + + # Assign this VM to a host-only network IP, allowing you to access it + # via the IP. Host-only networks can talk to the host machine as well as + # any other machines on the same network, but cannot be accessed (through this + # network interface) by any external networks. + # config.vm.network :hostonly, "192.168.33.10" + + # Assign this VM to a bridged network, allowing you to connect directly to a + # network using the host's network device. This makes the VM appear as another + # physical device on your network. + # config.vm.network :bridged + + # Forward a port from the guest to the host, which allows for outside + # computers to access the VM, whereas host only networking does not. + # config.vm.forward_port 80, 8080 + + # Share an additional folder to the guest VM. The first argument is + # an identifier, the second is the path on the guest to mount the + # folder, and the third is the path on the host to the actual folder. + # config.vm.share_folder "v-data", "/vagrant_data", "../data" + + # Enable provisioning with Puppet stand alone. Puppet manifests + # are contained in a directory path relative to this Vagrantfile. + # You will need to create the manifests directory and a manifest in + # the file base.pp in the manifests_path directory. + # + # An example Puppet manifest to provision the message of the day: + # + # # group { "puppet": + # # ensure => "present", + # # } + # # + # # File { owner => 0, group => 0, mode => 0644 } + # # + # # file { '/etc/motd': + # # content => "Welcome to your Vagrant-built virtual machine! + # # Managed by Puppet.\n" + # # } + # + # config.vm.provision :puppet do |puppet| + # puppet.manifests_path = "manifests" + # puppet.manifest_file = "base.pp" + # end + + # Enable provisioning with chef solo, specifying a cookbooks path, roles + # path, and data_bags path (all relative to this Vagrantfile), and adding + # some recipes and/or roles. + # + # config.vm.provision :chef_solo do |chef| + # chef.cookbooks_path = "../my-recipes/cookbooks" + # chef.roles_path = "../my-recipes/roles" + # chef.data_bags_path = "../my-recipes/data_bags" + # chef.add_recipe "mysql" + # chef.add_role "web" + # + # # You may also specify custom JSON attributes: + # chef.json = { :mysql_password => "foo" } + # end + + # Enable provisioning with chef server, specifying the chef server URL, + # and the path to the validation key (relative to this Vagrantfile). + # + # The Opscode Platform uses HTTPS. Substitute your organization for + # ORGNAME in the URL and validation key. + # + # If you have your own Chef Server, use the appropriate URL, which may be + # HTTP instead of HTTPS depending on your configuration. Also change the + # validation key to validation.pem. + # + # config.vm.provision :chef_client do |chef| + # chef.chef_server_url = "https://api.opscode.com/organizations/ORGNAME" + # chef.validation_key_path = "ORGNAME-validator.pem" + # end + # + # If you're using the Opscode platform, your validator client is + # ORGNAME-validator, replacing ORGNAME with your organization name. + # + # IF you have your own Chef Server, the default validation client name is + # chef-validator, unless you changed the configuration. + # + # chef.validation_client_name = "ORGNAME-validator" +end diff --git a/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-deps-win32.patch b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-deps-win32.patch new file mode 100644 index 0000000000000..0a9f1887e9ace --- /dev/null +++ b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-deps-win32.patch @@ -0,0 +1,31 @@ +diff --git a/contrib/gitian-descriptors/deps-win32.yml b/contrib/gitian-descriptors/deps-win32.yml +--- a/contrib/gitian-descriptors/deps-win32.yml ++++ b/contrib/gitian-descriptors/deps-win32.yml +@@ -40,7 +40,10 @@ script: | + tar xzf miniupnpc-1.6.tar.gz + cd miniupnpc-1.6 + sed 's/dllwrap -k --driver-name gcc/$(DLLWRAP) -k --driver-name $(CC)/' -i Makefile.mingw +- sed 's|wingenminiupnpcstrings $< $@|./wingenminiupnpcstrings $< $@|' -i Makefile.mingw ++ cp miniupnpcstrings.h.in miniupnpcstrings.h ++ sed 's|"OS/version"|"MSWindows/5.1.2600"|' -i miniupnpcstrings.h ++ sed 's|"version"|"1.6"|' -i miniupnpcstrings.h ++ sed 's|wingenminiupnpcstrings $< $@|true|' -i Makefile.mingw + make -f Makefile.mingw DLLWRAP=i586-mingw32msvc-dllwrap CC=i586-mingw32msvc-gcc AR=i586-mingw32msvc-ar + cd .. + mv miniupnpc-1.6 miniupnpc +@@ -52,13 +55,13 @@ script: | + # + tar xzf libpng-1.5.9.tar.gz + cd libpng-1.5.9 +- ./configure -disable-shared CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld LDFLAGS="-L../zlib-1.2.6/" CFLAGS="-I../zlib-1.2.6/" ++ ./configure -disable-shared --host=i586-mingw32msvc LDFLAGS="-L../zlib-1.2.6/" CFLAGS="-I../zlib-1.2.6/" + make $MAKEOPTS + cd .. + # + tar xjf qrencode-3.2.0.tar.bz2 + cd qrencode-3.2.0 +- ./configure CC=i586-mingw32msvc-cc AR=i586-mingw32msvc-ar STRIP=i586-mingw32msvc-strip RANLIB=i586-mingw32msvc-ranlib OBJDUMP=i586-mingw32msvc-objdump LD=i586-mingw32msvc-ld png_LIBS="../libpng-1.5.9/.libs/libpng15.a ../zlib-1.2.6/libz.a" png_CFLAGS="-I../libpng-1.5.9" ++ ./configure --host=i586-mingw32msvc png_LIBS="../libpng-1.5.9/.libs/libpng15.a ../zlib-1.2.6/libz.a" png_CFLAGS="-I../libpng-1.5.9" + make $MAKEOPTS + cd .. + # diff --git a/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-linux.patch b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-linux.patch new file mode 100644 index 0000000000000..9aa4c64674cda --- /dev/null +++ b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-linux.patch @@ -0,0 +1,31 @@ +diff --git a/contrib/gitian-descriptors/gitian.yml b/contrib/gitian-descriptors/gitian.yml +--- a/contrib/gitian-descriptors/gitian.yml ++++ b/contrib/gitian-descriptors/gitian.yml +@@ -19,12 +19,11 @@ packages: + - "pkg-config" + - "libpng12-dev" + reference_datetime: "2011-01-30 00:00:00" +-remotes: +-- "url": "https://github.com/bitcoin/bitcoin.git" +- "dir": "bitcoin" ++remotes: [] + files: + - "miniupnpc-1.6.tar.gz" + - "qrencode-3.2.0.tar.bz2" ++- "src-local.tar.xz" + script: | + INSTDIR="$HOME/install" + export LIBRARY_PATH="$INSTDIR/lib" +@@ -40,9 +39,11 @@ script: | + make $MAKEOPTS install + cd .. + # ++ mkdir -p bitcoin ++ tar -C bitcoin -xf src-local.tar.xz + cd bitcoin + mkdir -p $OUTDIR/src +- git archive HEAD | tar -x -C $OUTDIR/src ++ tar -C $OUTDIR/src -xf ../src-local.tar.xz + cp $OUTDIR/src/doc/README $OUTDIR + cp $OUTDIR/src/COPYING $OUTDIR + cd src diff --git a/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-win32.patch b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-win32.patch new file mode 100644 index 0000000000000..af1535b554a1a --- /dev/null +++ b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-bitcoin-win32.patch @@ -0,0 +1,48 @@ +diff --git a/contrib/gitian-descriptors/gitian-win32.yml b/contrib/gitian-descriptors/gitian-win32.yml +--- a/contrib/gitian-descriptors/gitian-win32.yml ++++ b/contrib/gitian-descriptors/gitian-win32.yml +@@ -11,13 +11,12 @@ packages: + - "nsis" + - "faketime" + reference_datetime: "2011-01-30 00:00:00" +-remotes: +-- "url": "https://github.com/bitcoin/bitcoin.git" +- "dir": "bitcoin" ++remotes: [] + files: + - "qt-win32-4.7.4-gitian.zip" + - "boost-win32-1.49.0-gitian2.zip" + - "bitcoin-deps-0.0.4.zip" ++- "src-local.tar.xz" + script: | + # + mkdir $HOME/qt +@@ -43,15 +42,17 @@ script: | + # + find -type f | xargs touch --date="$REFERENCE_DATETIME" + # ++ mkdir -p bitcoin ++ tar -C bitcoin -xf src-local.tar.xz + cd bitcoin + mkdir -p $OUTDIR/src +- git archive HEAD | tar -x -C $OUTDIR/src ++ tar -C $OUTDIR/src -xf ../src-local.tar.xz + cp $OUTDIR/src/doc/README_windows.txt $OUTDIR/readme.txt + cp $OUTDIR/src/COPYING $OUTDIR/license.txt + export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC +- $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_47_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_47_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1b OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1b/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 ++ $HOME/qt/src/bin/qmake -spec unsupported/win32-g++-cross MINIUPNPC_LIB_PATH=$HOME/build/miniupnpc MINIUPNPC_INCLUDE_PATH=$HOME/build/ BDB_LIB_PATH=$HOME/build/db-4.8.30.NC/build_unix BDB_INCLUDE_PATH=$HOME/build/db-4.8.30.NC/build_unix BOOST_LIB_PATH=$HOME/build/boost_1_49_0/stage/lib BOOST_INCLUDE_PATH=$HOME/build/boost_1_49_0 BOOST_LIB_SUFFIX=-mt-s BOOST_THREAD_LIB_SUFFIX=_win32-mt-s OPENSSL_LIB_PATH=$HOME/build/openssl-1.0.1b OPENSSL_INCLUDE_PATH=$HOME/build/openssl-1.0.1b/include QRENCODE_LIB_PATH=$HOME/build/qrencode-3.2.0/.libs QRENCODE_INCLUDE_PATH=$HOME/build/qrencode-3.2.0 USE_QRCODE=1 INCLUDEPATH=$HOME/build DEFINES=BOOST_THREAD_USE_LIB BITCOIN_NEED_QT_PLUGINS=1 QMAKE_LRELEASE=lrelease QMAKE_CXXFLAGS=-frandom-seed=bitcoin QMAKE_LFLAGS=-frandom-seed=bitcoin USE_BUILD_INFO=1 + make $MAKEOPTS + cp release/bitcoin-qt.exe $OUTDIR/ + # +@@ -65,7 +66,7 @@ script: | + cp bitcoind.exe $OUTDIR/daemon + cd .. + mkdir nsis +- git archive HEAD | tar -x -C nsis ++ tar -C nsis -xf $HOME/build/src-local.tar.xz + cd nsis/src + mkdir ../release + cp ../../release/* ../release/ diff --git a/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-boost-win32.patch b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-boost-win32.patch new file mode 100644 index 0000000000000..cac66e4b0282b --- /dev/null +++ b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-boost-win32.patch @@ -0,0 +1,38 @@ +diff --git a/contrib/gitian-descriptors/boost-win32.yml b/contrib/gitian-descriptors/boost-win32.yml +--- a/contrib/gitian-descriptors/boost-win32.yml ++++ b/contrib/gitian-descriptors/boost-win32.yml +@@ -18,20 +18,20 @@ script: | + tar xjf boost_1_49_0.tar.bz2 + cd boost_1_49_0 + echo "--- tmp_dir_helpers.orig.hpp 2012-06-10 01:39:25.403268210 +0200 +-+++ tmp_dir_helpers.hpp 2012-06-10 01:41:14.653823479 +0200 +-@@ -19,9 +19,9 @@ +- #include +- +- #if defined(BOOST_INTERPROCESS_WINDOWS) +-- //#define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME +-- //#define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME +-- //#include +-+ #define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME +-+ #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME +-+ #include +- #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) +- //#include +- //#if defined(CTL_KERN) && defined (KERN_BOOTTIME)" > useboottime.patch ++ +++ tmp_dir_helpers.hpp 2012-06-10 01:41:14.653823479 +0200 ++ @@ -19,9 +19,9 @@ ++ #include ++ ++ #if defined(BOOST_INTERPROCESS_WINDOWS) ++ - //#define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME ++ - //#define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME ++ - //#include ++ + #define BOOST_INTERPROCESS_HAS_WINDOWS_KERNEL_BOOTTIME ++ + #define BOOST_INTERPROCESS_HAS_KERNEL_BOOTTIME ++ + #include ++ #elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__APPLE__) ++ //#include ++ //#if defined(CTL_KERN) && defined (KERN_BOOTTIME)" > useboottime.patch + patch boost/interprocess/detail/tmp_dir_helpers.hpp useboottime.patch + echo "using gcc : 4.4 : i586-mingw32msvc-g++ + : diff --git a/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-qt-win32.patch b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-qt-win32.patch new file mode 100644 index 0000000000000..9116cca989c8e --- /dev/null +++ b/contrib/vagrant/patch/bitcoin-contrib-gitian-descriptors-qt-win32.patch @@ -0,0 +1,31 @@ +diff --git a/contrib/gitian-descriptors/qt-win32.yml b/contrib/gitian-descriptors/qt-win32.yml +--- a/contrib/gitian-descriptors/qt-win32.yml ++++ b/contrib/gitian-descriptors/qt-win32.yml +@@ -18,11 +18,17 @@ script: | + SRCDIR="$INSTDIR/src/" + mkdir $SRCDIR + # ++ if [ x"`uname -p`" == x"x86_64" ]; then ++ BITNESS=64 ++ else ++ BITNESS=32 ++ fi ++ # + tar xzf qt-everywhere-opensource-src-4.7.4.tar.gz + cd qt-everywhere-opensource-src-4.7.4 + sed 's/$TODAY/2011-01-30/' -i configure + sed 's/i686-pc-mingw32-/i586-mingw32msvc-/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf +- sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf ++ sed --posix 's|QMAKE_CFLAGS\t\t= -pipe|QMAKE_CFLAGS\t\t= -pipe -isystem /usr/i586-mingw32msvc/include/ -frandom-seed=qtbuild -m32|' -i mkspecs/unsupported/win32-g++-cross/qmake.conf + sed 's/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions -mthreads/QMAKE_CXXFLAGS_EXCEPTIONS_ON = -fexceptions/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf + sed 's/QMAKE_LFLAGS_EXCEPTIONS_ON = -mthreads/QMAKE_LFLAGS_EXCEPTIONS_ON = -lmingwthrd/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf + sed --posix 's/QMAKE_MOC\t\t= i586-mingw32msvc-moc/QMAKE_MOC\t\t= moc/' -i mkspecs/unsupported/win32-g++-cross/qmake.conf +@@ -40,7 +46,7 @@ script: | + #export LD_PRELOAD=/usr/lib/faketime/libfaketime.so.1 + export FAKETIME=$REFERENCE_DATETIME + export TZ=UTC +- ./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -opengl no -nomake examples -nomake demos -nomake docs ++ ./configure -prefix $INSTDIR -confirm-license -release -opensource -static -no-qt3support -platform linux-g++-$BITNESS -xplatform unsupported/win32-g++-cross -no-multimedia -no-audio-backend -no-phonon -no-phonon-backend -no-declarative -no-script -no-scripttools -no-javascript-jit -no-webkit -no-svg -no-xmlpatterns -no-sql-sqlite -no-nis -no-cups -no-iconv -no-dbus -no-gif -no-libtiff -opengl no -nomake examples -nomake demos -nomake docs + find . -name *.prl | xargs -l sed 's|/\.||' -i + find . -name *.prl | xargs -l sed 's|/$||' -i + make $MAKEOPTS install diff --git a/contrib/vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch b/contrib/vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch new file mode 100644 index 0000000000000..be814d718bfdf --- /dev/null +++ b/contrib/vagrant/patch/gitian-builder-69bd6a53-100-change_ip.patch @@ -0,0 +1,11 @@ +diff --git a/target-bin/bootstrap-fixup b/target-bin/bootstrap-fixup +--- a/target-bin/bootstrap-fixup ++++ b/target-bin/bootstrap-fixup +@@ -2,5 +2,5 @@ + + set -e + +-echo 'deb http://10.0.2.2:3142/archive.ubuntu.com/ubuntu lucid main universe' > $1/etc/apt/sources.list +-echo 'deb http://10.0.2.2:3142/archive.ubuntu.com/ubuntu lucid-updates main universe' >> $1/etc/apt/sources.list ++echo 'deb http://10.0.2.15:3142/archive.ubuntu.com/ubuntu lucid main universe' > $1/etc/apt/sources.list ++echo 'deb http://10.0.2.15:3142/archive.ubuntu.com/ubuntu lucid-updates main universe' >> $1/etc/apt/sources.list diff --git a/contrib/vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch b/contrib/vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch new file mode 100644 index 0000000000000..95c281b478d53 --- /dev/null +++ b/contrib/vagrant/patch/gitian-builder-69bd6a53-200-removepkg_cron.patch @@ -0,0 +1,20 @@ +diff --git a/bin/make-base-vm b/bin/make-base-vm +--- a/bin/make-base-vm ++++ b/bin/make-base-vm +@@ -69,6 +69,7 @@ if [ $ARCH = "amd64" -a $SUITE = "hardy" ]; then + fi + + addpkg=openssh-server,pciutils,build-essential,git-core,subversion ++removepkg=cron + + if [ -e $OUT.qcow2 ]; then + echo $OUT.qcow2 already exists, please remove it first +@@ -76,7 +77,7 @@ if [ -e $OUT.qcow2 ]; then + fi + + rm -rf $OUT +-sudo vmbuilder kvm ubuntu --arch=$ARCH --suite=$SUITE --addpkg=$addpkg --ssh-key=var/id_dsa.pub --ssh-user-key=var/id_dsa.pub --mirror=$MIRROR --security-mirror=$SECURITY_MIRROR --dest=$OUT --flavour=$FLAVOUR --firstboot=`pwd`/target-bin/bootstrap-fixup ++sudo vmbuilder kvm ubuntu --arch=$ARCH --suite=$SUITE --addpkg=$addpkg --removepkg=$removepkg --ssh-key=var/id_dsa.pub --ssh-user-key=var/id_dsa.pub --mirror=$MIRROR --security-mirror=$SECURITY_MIRROR --dest=$OUT --flavour=$FLAVOUR --firstboot=`pwd`/target-bin/bootstrap-fixup + mv $OUT/*.qcow2 $OUT.qcow2 + rm -rf $OUT + diff --git a/contrib/vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch b/contrib/vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch new file mode 100644 index 0000000000000..c6165ce77bada --- /dev/null +++ b/contrib/vagrant/patch/gitian-builder-69bd6a53-300-external_mirrors.patch @@ -0,0 +1,14 @@ +diff --git a/bin/make-base-vm b/bin/make-base-vm +--- a/bin/make-base-vm ++++ b/bin/make-base-vm +@@ -3,8 +3,8 @@ set -e + + SUITE=lucid + ARCH=amd64 +-MIRROR=http://${MIRROR_HOST:-127.0.0.1}:3142/archive.ubuntu.com/ubuntu +-SECURITY_MIRROR=http://${MIRROR_HOST:-127.0.0.1}:3142/security.ubuntu.com/ubuntu ++MIRROR=http://mirror.anl.gov/pub/ubuntu/ ++SECURITY_MIRROR=http://security.ubuntu.com/ubuntu + LXC=0 + + usage() { diff --git a/contrib/vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch b/contrib/vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch new file mode 100644 index 0000000000000..7a184862c36a3 --- /dev/null +++ b/contrib/vagrant/patch/gitian-builder-69bd6a53-400-ssh_key.patch @@ -0,0 +1,21 @@ +diff -rupN a/var/id_dsa b/var/id_dsa +--- a/var/id_dsa 1970-01-01 00:00:00.000000000 +0000 ++++ b/var/id_dsa 2012-07-06 01:35:07.514553903 +0000 +@@ -0,0 +1,12 @@ ++-----BEGIN DSA PRIVATE KEY----- ++MIIBugIBAAKBgQCjPELx9IgbW7F17XHddG/v1e47UOFuArK27FCBEnH/OBWQWmSr ++4qUGYg4OSIOWK1zc4XQB53dXt0ukOlz9230jILyEffoTrqW/Lca6OdzEex/FF88C ++ROmEAQC1lq5edts7UkIPT8WSxlINFh3VI85m1YqNe4G9UIVyAVIATLq/kQIVAJD1 ++oWkFkhTqyHzGcq3NrJuVkpfFAoGAMWADuFyUtPtYmUyZ4dFSgjGpCAfHIGb1S8wW ++LKWAmqjKVLq92pvSQqFaZDkcq80ivSsUaYrftydhxx2eSFBQuEKp9ibAi+oDf+0h ++pnq4hW8sBXzanjF3vZ2CZ1hxifJnFBrG9rcHfnE3/poXUKOQGr3HXH7MpeZoYlih ++dsgsOd4CgYBTe12qpE5oV/2t7dXEoiR2qgh7q2g8ow8A683NBmlyRl6HvJqKMAd3 ++/b8ckqqWkCoCe92JnmlSaR8MNB1EIc5N+H6oZXIxjwW1wxVCnqT65jcgjF3KNqwC ++0wUGbjZJw9u8v5MYJNRVGASM29C/J+TRpJjaA4onOR/DO1bjIwN90wIUAVvjDDOK ++MhkC+5GN+VGrMSAdD44= ++-----END DSA PRIVATE KEY----- +diff -rupN a/var/id_dsa.pub b/var/id_dsa.pub +--- a/var/id_dsa.pub 1970-01-01 00:00:00.000000000 +0000 ++++ b/var/id_dsa.pub 2012-07-06 01:35:07.518555852 +0000 +@@ -0,0 +1 @@ ++ssh-dss AAAAB3NzaC1kc3MAAACBAKM8QvH0iBtbsXXtcd10b+/V7jtQ4W4CsrbsUIEScf84FZBaZKvipQZiDg5Ig5YrXNzhdAHnd1e3S6Q6XP3bfSMgvIR9+hOupb8txro53MR7H8UXzwJE6YQBALWWrl522ztSQg9PxZLGUg0WHdUjzmbVio17gb1QhXIBUgBMur+RAAAAFQCQ9aFpBZIU6sh8xnKtzayblZKXxQAAAIAxYAO4XJS0+1iZTJnh0VKCMakIB8cgZvVLzBYspYCaqMpUur3am9JCoVpkORyrzSK9KxRpit+3J2HHHZ5IUFC4Qqn2JsCL6gN/7SGmeriFbywFfNqeMXe9nYJnWHGJ8mcUGsb2twd+cTf+mhdQo5Aavcdcfsyl5mhiWKF2yCw53gAAAIBTe12qpE5oV/2t7dXEoiR2qgh7q2g8ow8A683NBmlyRl6HvJqKMAd3/b8ckqqWkCoCe92JnmlSaR8MNB1EIc5N+H6oZXIxjwW1wxVCnqT65jcgjF3KNqwC0wUGbjZJw9u8v5MYJNRVGASM29C/J+TRpJjaA4onOR/DO1bjIwN90w== vagrant@precise64 diff --git a/contrib/vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch b/contrib/vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch new file mode 100644 index 0000000000000..70c70e6396c41 --- /dev/null +++ b/contrib/vagrant/patch/host-vm-etc-network-interfaces-100-add_lxc_br0.patch @@ -0,0 +1,20 @@ +diff -rupN a/interfaces b/interfaces +--- a/interfaces 2012-06-27 18:06:52.832120820 +0000 ++++ b/interfaces 2012-06-27 18:07:50.211791421 +0000 +@@ -5,7 +5,15 @@ + auto lo + iface lo inet loopback + ++# LXC bridge ++auto br0 ++iface br0 inet dhcp ++ bridge_ports eth0 ++ bridge_stp off ++ bridge_fd 0 ++ bridge_maxwait 0 ++ + # The primary network interface + auto eth0 +-iface eth0 inet dhcp ++iface eth0 inet manual + pre-up sleep 2 diff --git a/contrib/vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch b/contrib/vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch new file mode 100644 index 0000000000000..cdc85ab7f35f9 --- /dev/null +++ b/contrib/vagrant/patch/host-vm-etc-sysctl.conf-100-enable_ipv4_forward.patch @@ -0,0 +1,12 @@ +diff -rupN a/sysctl.conf b/sysctl.conf +--- a/sysctl.conf 2012-06-27 21:59:24.588545751 +0000 ++++ b/sysctl.conf 2012-06-27 21:59:40.640017010 +0000 +@@ -25,7 +25,7 @@ + #net.ipv4.tcp_syncookies=1 + + # Uncomment the next line to enable packet forwarding for IPv4 +-#net.ipv4.ip_forward=1 ++net.ipv4.ip_forward=1 + + # Uncomment the next line to enable packet forwarding for IPv6 + # Enabling this option disables Stateless Address Autoconfiguration