From a1c07e3cbb9b0fd77edbdb84d6a56efc61fb2c1b Mon Sep 17 00:00:00 2001 From: Alexei Sheplyakov Date: Wed, 12 Nov 2014 13:42:53 +0300 Subject: [PATCH] packages/deb: build packages using the correct mirror (LP #1390416) As of now Fuel related deb packages are built using the upstream mirror. This yeilds inconsistent dependencies, for instance, packages depend on both the upstream and the customized python versions, and provisioning of Ubuntu node fails as a result. To resolve the problem setup the build chroot using the official Fuel apt repo. While at it use the locally created apt mirror instead of downloading packages once more, and fix a number of inconsistencies/bugs. * sandbox.mk: - sandbox define is modified so as to use local pre-built mirror. * packages/deb/module.mk: - use the helper script to create build sandbox. * requirements-deb.txt: - make sure tools required for building Debian packages are included into the local apt repo. Change-Id: I9f7b06bba94a65b2d65168cc1122257f4bec78be Related-bug: #1390416 --- packages/deb/module.mk | 12 +++++------- requirements-deb.txt | 2 ++ sandbox.mk | 31 +++++++++++++++++++++---------- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/packages/deb/module.mk b/packages/deb/module.mk index 2a8f605c0..e3efe48cc 100644 --- a/packages/deb/module.mk +++ b/packages/deb/module.mk @@ -14,20 +14,18 @@ clean-deb: define build_deb $(BUILD_DIR)/packages/deb/repo.done: $(BUILD_DIR)/packages/deb/$1.done $(BUILD_DIR)/packages/deb/repo.done: $(BUILD_DIR)/packages/deb/$1-repocleanup.done - $(BUILD_DIR)/packages/deb/$1.done: $(BUILD_DIR)/mirror/ubuntu/build.done $(BUILD_DIR)/packages/deb/$1.done: $(BUILD_DIR)/packages/source_$1.done - $(BUILD_DIR)/packages/deb/$1.done: SANDBOX_UBUNTU:=$(BUILD_DIR)/packages/deb/SANDBOX +$(BUILD_DIR)/packages/deb/$1.done: SANDBOX_DEB_PKGS:=apt wget bzip2 apt-utils build-essential python-setuptools devscripts debhelper fakeroot $(BUILD_DIR)/packages/deb/$1.done: export SANDBOX_UBUNTU_UP:=$$(SANDBOX_UBUNTU_UP) $(BUILD_DIR)/packages/deb/$1.done: export SANDBOX_UBUNTU_DOWN:=$$(SANDBOX_UBUNTU_DOWN) $(BUILD_DIR)/packages/deb/$1.done: $(BUILD_DIR)/repos/repos.done mkdir -p $(BUILD_DIR)/packages/deb/packages $(BUILD_DIR)/packages/deb/sources - mkdir -p $$(SANDBOX_UBUNTU) - mkdir -p $$(SANDBOX_UBUNTU)/proc - sed -e "s/@@UBUNTU_RELEASE@@/$(UBUNTU_RELEASE)/g" $$(SOURCE_DIR)/packages/multistrap.conf | sudo tee $$(SANDBOX_UBUNTU)/multistrap.conf - sudo sh -c "$$$${SANDBOX_UBUNTU_UP}" - sudo chroot $$(SANDBOX_UBUNTU) /bin/bash -c "apt-get update" +# create sandbox if does not exist + test -e $$(SANDBOX_UBUNTU)/etc/debian_version || sudo sh -c "$$$${SANDBOX_UBUNTU_UP}" +# mount proc if not mounted + mountpoint -q $$(SANDBOX_UBUNTU)/proc || sudo mount -t proc sandbox_ubuntu_proc $$(SANDBOX_UBUNTU)/proc sudo mkdir -p $$(SANDBOX_UBUNTU)/tmp/$1 ifeq ($1,$(filter $1,nailgun-net-check python-tasklib)) tar zxf $(BUILD_DIR)/packages/sources/$1/$(subst python-,,$1)*.tar.gz -C $(BUILD_DIR)/packages/deb/sources diff --git a/requirements-deb.txt b/requirements-deb.txt index 4274a84b6..9fb69c394 100644 --- a/requirements-deb.txt +++ b/requirements-deb.txt @@ -31,6 +31,8 @@ crda curl daemonize debconf-utils +devscripts +debhelper dhcp-checker diffutils discover diff --git a/sandbox.mk b/sandbox.mk index 69272f966..3012e595a 100644 --- a/sandbox.mk +++ b/sandbox.mk @@ -52,19 +52,30 @@ umount $(SANDBOX)/dev endef define SANDBOX_UBUNTU_UP -mount | grep -q $(SANDBOX_UBUNTU)/proc || sudo mount -t proc none $(SANDBOX_UBUNTU)/proc -[ -f $(SANDBOX_UBUNTU)/etc/debian_version ] || sudo multistrap -a amd64 -f $(SANDBOX_UBUNTU)/multistrap.conf -d $(SANDBOX_UBUNTU)/ -sudo chroot $(SANDBOX_UBUNTU) /bin/bash -c "locale-gen en_US.UTF-8 ; dpkg-reconfigure locales" -sudo chroot $(SANDBOX_UBUNTU) /bin/bash -c "dpkg --configure -a || exit 0" -sudo chroot $(SANDBOX_UBUNTU) /bin/bash -c "rm -rf /var/run/*" -sudo chroot $(SANDBOX_UBUNTU) /bin/bash -c "dpkg --configure -a || exit 0" -echo 'APT::Get::AllowUnauthenticated 1;' | sudo tee $(SANDBOX_UBUNTU)/etc/apt/apt.conf.d/02mirantis-unauthenticated -[ -n "$(EXTRA_DEB_REPOS)" ] && echo "$(EXTRA_DEB_REPOS)" | tr '|' '\n' | while read repo; do echo deb $$repo; done | sudo tee $(SANDBOX_UBUNTU)/etc/apt/sources.list.d/extra.list || exit 0 +echo "SANDBOX_UBUNTU_UP: start" +mkdir -p $(SANDBOX_UBUNTU) +echo "Running debootstrap" +sudo debootstrap --no-check-gpg --arch=$(UBUNTU_ARCH) $(UBUNTU_RELEASE) $(SANDBOX_UBUNTU) file://$(LOCAL_MIRROR)/ubuntu sudo cp /etc/resolv.conf $(SANDBOX_UBUNTU)/etc/resolv.conf -mount | grep -q $(SANDBOX_UBUNTU)/proc || sudo mount -t proc none $(SANDBOX_UBUNTU)/proc +echo "Generating utf8 locale" +sudo chroot $(SANDBOX_UBUNTU) /bin/sh -c 'locale-gen en_US.UTF-8; dpkg-reconfigure locales' +echo "Preparing directory for chroot local mirror" +test -e $(SANDBOX_UBUNTU)/tmp/apt && sudo rm -rf $(SANDBOX_UBUNTU)/tmp/apt +sudo mkdir -p $(SANDBOX_UBUNTU)/tmp/apt +echo "Copying local ubuntu mirror into $(SANDBOX_UBUNTU)/tmp/apt" +sudo cp -al $(LOCAL_MIRROR)/ubuntu/dists $(LOCAL_MIRROR)/ubuntu/pool $(SANDBOX_UBUNTU)/tmp/apt +echo "Configuring apt sources.list: deb file:///tmp/apt $(UBUNTU_RELEASE) main" +echo "deb file:///tmp/apt $(UBUNTU_RELEASE) main" | sudo tee $(SANDBOX_UBUNTU)/etc/apt/sources.list +echo "Allowing using unsigned repos" +echo "APT::Get::AllowUnauthenticated 1;" | sudo tee $(SANDBOX_UBUNTU)/etc/apt/apt.conf.d/02mirantis-unauthenticated +echo "Updating apt package database" +sudo chroot $(SANDBOX_UBUNTU) apt-get update +echo "Installing additional packages: $(SANDBOX_DEB_PKGS)" +test -n "$(SANDBOX_DEB_PKGS)" && sudo chroot $(SANDBOX_UBUNTU) apt-get install --yes $(SANDBOX_DEB_PKGS) +echo "SANDBOX_UBUNTU_UP: done" endef define SANDBOX_UBUNTU_DOWN sync sudo umount $(SANDBOX_UBUNTU)/proc -endef \ No newline at end of file +endef