After I carefully examined this code, I noticed that it leads to an error:
|
cd $(BUILDDIR)/$(PRODUCT)-$(VERSION) && \ |
|
sudo mk-build-deps -i --tool "apt-get --no-install-recommends -y" && \ |
|
sudo rm -f *build-deps_*.deb \ |
|
@echo |
Let me show how I detected this:
diff --git a/pack/deb.mk b/pack/deb.mk
index de4a0b7..29a77c9 100644
--- a/pack/deb.mk
+++ b/pack/deb.mk
@@ -37,6 +37,23 @@ PREBUILD_OS_DIST := prebuild-$(OS)-$(DIST).sh
# gh-7: Ubuntu/Debian should export DEBIAN_FRONTEND=noninteractive
export DEBIAN_FRONTEND=noninteractive
+define install_deps
+ sudo rm -rf /var/lib/apt/lists/
+ sudo apt-get update > /dev/null
+ cd $(1)
+ sudo mk-build-deps --install --tool "apt-get --no-install-recommends -yq"
+ $(eval DEPS_FILE := $(shell find . -maxdepth 1 -type f -regex ".*-build-deps.*\.deb"))
+ if [ -f "$(DEPS_FILE)" ]; then \
+ dpkg --info $(DEPS_FILE); \
+ fi
+ sudo rm -f *build-deps_*.deb;
+endef
+
#
# Run prebuild scripts
#
@@ -120,11 +137,7 @@ $(BUILDDIR)/$(DPKG_CHANGES): $(BUILDDIR)/$(PRODUCT)-$(VERSION)/debian \
if [ -n "$(PACKAGECLOUD_USER)" ] && [ -n "$(PACKAGECLOUD_REPO)" ]; then \
curl -s https://packagecloud.io/install/repositories/$(PACKAGECLOUD_USER)/$(PACKAGECLOUD_REPO)/script.deb.sh | sudo bash; \
fi
- sudo rm -rf /var/lib/apt/lists/
- sudo apt-get update > /dev/null
- cd $(BUILDDIR)/$(PRODUCT)-$(VERSION) && \
- sudo mk-build-deps -i --tool "apt-get --no-install-recommends -y" && \
- sudo rm -f *build-deps_*.deb \
+ $(call install_deps,$(BUILDDIR)/$(PRODUCT)-$(VERSION))
@echo
@echo "-------------------------------------------------------------------"
@echo "Building Debian packages"
After these changes I saw the following output:
sudo mk-build-deps --install --tool "apt-get --no-install-recommends -yq"
Error in tempdir() using /source/equivs.XXXXXX: Could not create directory /source/equivs.GUTb7J: Read-only file system at /usr/bin/equivs-build line 19.
This is obvious, because the source volume is mounted in read-only mode:
|
docker run \ |
|
--volume "${PACKDIR}:/pack:ro" \ |
|
--volume "${SOURCEDIR}:/source:ro" \ |
|
--volume "${BUILDDIR}:/build" \ |
Lets take a look at /usr/bin/equivs-build:
$ cat /usr/bin/equivs-build | grep "equivs\." -A 1
my $builddir = tempdir('equivs.XXXXXX', DIR => ($ENV{TMPDIR} || cwd), CLEANUP => 1) or
die "Cannot create temporary build dir: $!\n";
Thus we should add a TMPDIR environment variable pointing to writable directory as follows:
diff --git a/packpack b/packpack
index 6f4c80f..1659773 100755
--- a/packpack
+++ b/packpack
@@ -155,6 +155,7 @@ docker run \
--entrypoint=/build/userwrapper.sh \
-e XDG_CACHE_HOME=/cache \
-e CCACHE_DIR=/cache/ccache \
+ -e TMPDIR=/tmp \
--volume "${CACHE_DIR}:/cache" \
${DOCKER_REPO}:${DOCKER_IMAGE} \
make -f /pack/Makefile -C /source BUILDDIR=/build -j "$@"
After I carefully examined this code, I noticed that it leads to an error:
packpack/pack/deb.mk
Lines 125 to 128 in 30ff7b5
Let me show how I detected this:
After these changes I saw the following output:
This is obvious, because the
sourcevolume is mounted in read-only mode:packpack/packpack
Lines 148 to 151 in 30ff7b5
Lets take a look at
/usr/bin/equivs-build:Thus we should add a TMPDIR environment variable pointing to writable directory as follows: