Skip to content

Commit 4255071

Browse files
committed
Use host's reprepro if available
In preparation for pbuilder usage, try to not strictly depend on custom chroot environment for update-repo-* targets. reprepro is packaged for major distributions already, so using version installed on the host is an option. If it isn't there, fallback to the old approach, but extract complexity into a helper script and keep Makefile.debian simpler.
1 parent 108e329 commit 4255071

File tree

2 files changed

+71
-34
lines changed

2 files changed

+71
-34
lines changed

Makefile.debian

+5-34
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,7 @@ ifneq (,$(GNUPG))
115115
DEBSIGN_ARGS += -p$(GNUPG)
116116
endif
117117

118+
REPREPRO := $(firstword $(wildcard /usr/bin/reprepro $(DEBIAN_PLUGIN_DIR)/scripts/reprepro-wrapper))
118119

119120
EXTRA_REPREPRO_OPTS ?=
120121
EXTRA_REPREPRO_OPTS += --ignore=surprisingbinary
@@ -291,33 +292,17 @@ update-repo-prepare:
291292
if [ $$? -ne 0 ]; then \
292293
echo "$$aptdistributions" >> $(UPDATE_REPO)/conf/distributions; \
293294
fi
294-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo $(CHROOT_REPO_DIR)/tmp/qubes-deb 2>/dev/null || true
295-
296-
@# Softlink to the first distribution called; it will be used to create and store repo
297-
@if ! [ -L $(CHROOT_REPO_DIR) ]; then \
298-
ln -sf chroot-${DIST} ${CHROOT_REPO_DIR}; \
299-
fi
300-
@if ! [ -d $(CHROOT_REPO_DIR)/tmp/qubes-deb/deb ]; then \
301-
mkdir -p $(CHROOT_REPO_DIR)/tmp/qubes-deb ;\
302-
sudo mount --bind $(BUILDER_REPO_DIR) $(CHROOT_REPO_DIR)/tmp/qubes-deb ;\
303-
fi
304-
@if ! [ -d $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo/dists ]; then \
305-
mkdir -p $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo ;\
306-
sudo mount --bind $(UPDATE_REPO) $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo ;\
307-
fi
308295

309296
update-repo: update-repo-prepare update-repo-do
310297
update-repo-do:
311298
ifndef UPDATE_REPO
312299
$(error "You need to specify destination repo in UPDATE_REPO variable")
313300
endif
314301
@if [ -n "$(INCREMENT_DEVEL_VERSIONS)" -a -n "$(release_name_dist)" ]; then \
315-
sudo $(CHROOT_ENV) chroot $(CHROOT_REPO_DIR) su $(RUN_AS_USER) -c "reprepro $(EXTRA_REPREPRO_OPTS) -b /tmp/qubes-apt-repo include $(DEBIANVERSION)$(REPO_SUFFIX) /tmp/qubes-deb/deb/$(release_name_dist)_amd64.changes </dev/null >/dev/null" || exit 1; \
302+
$(REPREPRO) $(EXTRA_REPREPRO_OPTS) -b $(UPDATE_REPO) include $(DEBIANVERSION)$(REPO_SUFFIX) $(BUILDER_REPO_DIR)/deb/$(release_name_dist)_amd64.changes </dev/null >/dev/null || exit 1; \
316303
else \
317-
sudo $(CHROOT_ENV) chroot $(CHROOT_REPO_DIR) su $(RUN_AS_USER) -c "reprepro $(EXTRA_REPREPRO_OPTS) -b /tmp/qubes-apt-repo include $(DEBIANVERSION)$(REPO_SUFFIX) /tmp/qubes-deb/deb/$(release_name_full)_amd64.changes </dev/null >/dev/null" || exit 1; \
304+
$(REPREPRO) $(EXTRA_REPREPRO_OPTS) -b $(UPDATE_REPO) include $(DEBIANVERSION)$(REPO_SUFFIX) $(BUILDER_REPO_DIR)/deb/$(release_name_full)_amd64.changes </dev/null >/dev/null || exit 1; \
318305
fi
319-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo
320-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-deb
321306
ifdef SNAPSHOT_FILE
322307
@if [ -n "$(INCREMENT_DEVEL_VERSIONS)" -a -n "$(package_ver_dist)" ]; then \
323308
echo '$$Source (== $(source_name)), Version (== $(package_ver_dist))' > $(SNAPSHOT_FILE); \
@@ -330,9 +315,7 @@ endif
330315
update-repo-from-snapshot: pkg_filter = $(shell cat $(SNAPSHOT_FILE))
331316
update-repo-from-snapshot: update-repo-prepare update-repo-from-snapshot-do
332317
update-repo-from-snapshot-do:
333-
@sudo $(CHROOT_ENV) chroot $(CHROOT_REPO_DIR) su $(RUN_AS_USER) -c "reprepro --ignore=surprisingbinary -b /tmp/qubes-apt-repo copyfilter $(DIST)$(REPO_SUFFIX) $(DIST)$(SNAPSHOT_REPO_SUFFIX) '$(subst $$,\$$,$(pkg_filter))'"
334-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo
335-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-deb
318+
$(REPREPRO) --ignore=surprisingbinary -b $(UPDATE_REPO) copyfilter $(DIST)$(REPO_SUFFIX) $(DIST)$(SNAPSHOT_REPO_SUFFIX) '$(subst $$,\$$,$(pkg_filter))'
336319

337320
ifeq (,$(DEBIAN_BUILD_DIRS))
338321
check-repo:
@@ -344,19 +327,7 @@ check-repo:
344327
ifndef UPDATE_REPO
345328
$(error "You need to specify destination repo in UPDATE_REPO variable")
346329
endif
347-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo $(CHROOT_REPO_DIR)/tmp/qubes-deb 2>/dev/null || true
348-
349-
@# Softlink to the first distribution called; it will be used to create and store repo
350-
@if ! [ -L $(CHROOT_REPO_DIR) ]; then \
351-
ln -sf chroot-${DIST} ${CHROOT_REPO_DIR}; \
352-
fi
353-
@if ! [ -d $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo/dists ]; then \
354-
mkdir -p $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo ;\
355-
sudo mount --bind $(UPDATE_REPO) $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo ;\
356-
fi
357-
358-
sudo $(CHROOT_ENV) chroot $(CHROOT_REPO_DIR) su $(RUN_AS_USER) -c "reprepro -b /tmp/qubes-apt-repo -T deb listfilter $(DEBIANVERSION)$(REPO_SUFFIX) '\$$Source (== $$source_name), Version (== $$package_ver+$(DIST_TAG)u1)'" | grep -q " "
359-
@sudo umount $(CHROOT_REPO_DIR)/tmp/qubes-apt-repo
330+
$(REPREPRO) -b $(UPDATE_REPO) -T deb listfilter $(DEBIANVERSION)$(REPO_SUFFIX) '\$$Source (== $$source_name), Version (== $$package_ver+$(DIST_TAG)u1)' | grep -q " "
360331
endif
361332

362333
ifeq (,$(PACKAGE_LIST))

scripts/reprepro-wrapper

+66
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
#!/bin/bash
2+
3+
set -e
4+
5+
# which release to use for reprepro
6+
reprepro_debian_release=buster
7+
reprepro_args=()
8+
basedir=
9+
sourcedir=
10+
11+
CHROOT_DIR=chroot-vm-$reprepro_debian_release
12+
export LC_ALL=C
13+
14+
while [ -n "$1" ]; do
15+
case "$1" in
16+
-b)
17+
basedir="$2"
18+
reprepro_args+=( "-b" "/tmp/qubes-apt-repo" )
19+
shift
20+
;;
21+
${BUILDER_REPO_DIR}/*)
22+
sourcedir="$BUILDER_REPO_DIR"
23+
reprepro_args+=( "/tmp/qubes-deb/${1#${BUILDER_REPO_DIR}}" )
24+
;;
25+
*)
26+
reprepro_args+=( "$1" )
27+
;;
28+
esac
29+
shift
30+
done
31+
32+
# require basedir
33+
if [ -z "$basedir" ]; then
34+
echo "Missing -b option" >&2
35+
exit 1
36+
fi
37+
38+
if ! [ -r "${CHROOT_DIR}/home/user/.prepared_base" ]; then
39+
echo "-> Preparing $reprepro_debian_release reprepro environment" >&2
40+
sudo -E "$(dirname "$0")/../prepare-chroot-debian" \
41+
"$CHROOT_DIR" $reprepro_debian_release
42+
touch "${CHROOT_DIR}/home/user/.prepared_base"
43+
fi
44+
45+
if ! [ -r "${CHROOT_DIR}/home/user/.reprepro_installed" ]; then
46+
sudo chroot "$CHROOT_DIR" apt-get install -y reprepro
47+
touch "${CHROOT_DIR}/home/user/.reprepro_installed"
48+
fi
49+
50+
sudo umount "${CHROOT_DIR}/tmp/qubes-apt-repo" "${CHROOT_DIR}/tmp/qubes-deb" 2>/dev/null || :
51+
52+
if [ -n "$basedir" ]; then
53+
mkdir -p "${CHROOT_DIR}/tmp/qubes-apt-repo"
54+
sudo mount --bind "$basedir" "${CHROOT_DIR}/tmp/qubes-apt-repo"
55+
fi
56+
57+
if [ -n "$sourcedir" ]; then
58+
mkdir -p "${CHROOT_DIR}/tmp/qubes-deb"
59+
sudo mount --bind "$sourcedir" "${CHROOT_DIR}/tmp/qubes-deb"
60+
fi
61+
62+
retcode=0
63+
sudo chroot "$CHROOT_DIR" runuser -u user -- reprepro "${reprepro_args[@]}" || retcode=$?
64+
65+
sudo umount "${CHROOT_DIR}/tmp/qubes-apt-repo" "${CHROOT_DIR}/tmp/qubes-deb" 2>/dev/null || :
66+
exit $retcode

0 commit comments

Comments
 (0)