Compare commits

..

8 Commits

Author SHA1 Message Date
Patrick McCarty 128799fa02 local repo: unhide local repo conf files
To make sure the conf files are more visible in the local repo
directory, unhide them by installing them without a leading dot
character.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty ad77e695dc local repo: instantiate repo after creating the directory
DNF seems to ignore an uninitialized repo, but Yum does not. To fix,
make sure to run createrepo immediately after creating the local repo
directory.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty 8bf6c59e96 Enable local repo support for 'make build'
With this change, 'make build' will automatically use the local repo, if
enabled. A notice is printed in case the user didn't want to use the
local repo and wishes to disable it with 'make repodisable'.

Another functional change here is that 'make build' will use the in-tree
mock config (clear.cfg) instead of the /etc/mock/clear.cfg. If this
behavior is not desired, then MOCK_CONF can be modified in
Makefile.config, or overridden by a Makefile.config.site_local.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty ac3f1898f6 local repo: forcibly remove RPMs from the local dir
In case the user runs 'make repoclean' followed by 'make repoadd' in a
package repo dir, 'rm' will complain. Add the -f option to silence those
warnings.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty 905b1d1c06 local repo: add toplevel 'repoclean' command
In case the user wants to remove all RPMs from the local repo, they can
now run 'make repoclean' at toplevel.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty e3b1adedd8 local repo: add 'repostatus' command
This new command displays a helpful summary of what packages exist in
the local RPM repo and whether it is enabled for Yum/DNF, Mock, or both.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty ab142ead38 local repo: run createrepo after 'repodel' removes RPMs
To ensure that RPM repo metadata is always up-to-date for the local
repo, make sure createrepo is run after removing the RPMs.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
Patrick McCarty a9982b4064 local repo: add Mock support and enable/disable commands
An interface for a local RPM repository already exists, so extend it by
adding Mock support and the ability to enable and disable the
repository, at package level and at toplevel.

Integration for commands that use Mock will be added in separate
commits.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-03-06 16:56:47 -08:00
4 changed files with 117 additions and 8 deletions
+33 -8
View File
@@ -19,7 +19,12 @@ RPMS ?= $(LATEST_RPMS)
WITH_SUDO = $(shell cmp /usr/bin/mock /usr/sbin/mock &> /dev/null && echo sudo )
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r clear
ifeq ($(wildcard $(TOPLVL)/repo/clear.cfg),)
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONF)
else
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(TOPLVL)/repo/clear.cfg
USE_LOCAL_REPO = 1
endif
ifneq ($(wildcard upstream),)
__allsources := $(notdir $(strip $(shell cat upstream)))
@@ -115,6 +120,13 @@ shell:
.PHONY: $(SRPMFILE)
$(SRPMFILE): $(SPECFILE) $(__allsources)
@$(MAKE) spdxcheck
@if [ -n "${USE_LOCAL_REPO}" ]; then \
printf '\n\n** NOTICE: Using local repo for the build. Continuing after 3 seconds.\n'; \
printf '** If this is not desired, run `make repodisable`.\n'; \
printf '** The repo can be re-enabled later with `make repoenable`.\n'; \
printf '** Run `touch $(TOPLVL)/repo/opt-in-build` to prevent the 3 second delay.\n\n\n'; \
[ -f $(TOPLVL)/repo/opt-in-build ] || sleep 3; \
fi >&2
$(MOCK) --buildsrpm --source=./ --spec=$(SPECFILE) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
# Do a git fetch and a git rebase rather than a git pull so aborting
@@ -275,8 +287,11 @@ logcheck:
$(TOPLVL)/repo:
@echo "Creating local RPM repository $(TOPLVL)/repo"
mkdir $(TOPLVL)/repo
$(MAKE) localrepocreate
#help repoadd: Creates a local Yum repository in the $(TOPLVL)/repo directory.
#help repoadd: Adds locally-built RPMs for this package to the local RPM
#help repository. If this repository does not yet exist, it is created and
#help enabled.
repoadd: results/build.log $(TOPLVL)/repo
@if [ -z "`grep '^Wrote: .*$(shell basename $(SRPMFILE))$$' results/build.log`" ]; then \
echo "You have not yet succesfully built this release yet"; exit 1; \
@@ -285,17 +300,16 @@ repoadd: results/build.log $(TOPLVL)/repo
echo "Cleaning old rpms:"; \
for r in `cat .repo-index`; do \
echo "-$$r"; \
rm $(TOPLVL)/repo/$$r; \
rm -f $(TOPLVL)/repo/$$r; \
done; \
rm .repo-index; \
fi
for r in $(LATEST_RPMS); do echo "+$$r"; echo $$(basename $$r) >> .repo-index; cp $$r $(TOPLVL)/repo; done
( cd $(TOPLVL)/repo ; if type createrepo_c 1>/dev/null 2>&1; then createrepo_c .; else createrepo .; fi );
@cp $(TOPLVL)/projects/common/image-creator/yum.conf $(TOPLVL)/repo/.yum.conf
@printf "\n\n[local]\nname=Local\nfailovermethod=priority\nenabled=1\ngpgcheck=0\n" >> $(TOPLVL)/repo/.yum.conf
@printf "baseurl=file://$$(realpath $(TOPLVL))/repo/\n\n" >> $(TOPLVL)/repo/.yum.conf
$(MAKE) localrepocreate
$(call localrepoenable,${PM_CONF},${MOCK_CONF})
#help repodel: Removes package from local Yum repository.
#help repodel: Removes RPMs from the local RPM repository that were
#help previously added by 'make repoadd' for this package.
repodel:
@if [ -f .repo-index ]; then \
echo "Cleaning old rpms:"; \
@@ -304,8 +318,19 @@ repodel:
rm -f $(TOPLVL)/repo/$$r; \
done; \
rm .repo-index; \
$(MAKE) localrepocreate; \
fi
#help repoenable: Enables the local RPM repository for use with Yum/DNF and
#help Mock. If this repository does not yet exist, it is created.
repoenable: $(TOPLVL)/repo ; $(call localrepoenable,${PM_CONF},${MOCK_CONF})
#help repodisable: Disables the local RPM repository.
repodisable: localrepodisable ;
#help repostatus: Summarizes the local RPM repository status.
repostatus: localrepostatus ;
loop-up:
$(loopup)
+7
View File
@@ -54,6 +54,13 @@ AUTOSPEC_CONF = $(TOPLVL)/projects/common/autospec.conf
# in "pkg-mapping" for cloning/pulling package repos.
USE_PACKAGE_MAPPING = yes
# Package manager config file. Default to the in-tree copy.
PM_CONF = $(TOPLVL)/projects/common/image-creator/yum.conf
# Mock configuration file. Default to the in-tree copy.
MOCK_CONF = $(TOPLVL)/projects/common/koji-client-files/clear.cfg
# Include any site local configuration variables. These variables may override
# the definitions given above.
-include $(TOPLVL)/projects/common/Makefile.config.site_local
+58
View File
@@ -62,6 +62,64 @@ define remotepkgname
$(if $(USE_PACKAGE_MAPPING),$$(awk -v P="$(1)" '$$1 == P { res=$$2 } END { print res ? res : P }' $(TOPLVL)/projects/common/pkg-mapping),$(1))
endef
# Enables the local RPM repo by installing package manager and Mock configs.
# First argument is the path to the package manager config, and the second
# argument is the path to the mock config. Each of these config files is
# augmented for local repo support.
define localrepoenable
@cp $(1) $(TOPLVL)/repo/yum.conf
@printf "\n\n[local]\nname=Local\nfailovermethod=priority\nenabled=1\ngpgcheck=0\n" >> $(TOPLVL)/repo/yum.conf
@printf "baseurl=file://$$(realpath $(TOPLVL))/repo/\n\n" >> $(TOPLVL)/repo/yum.conf
@cp $(2) $(TOPLVL)/repo/clear.cfg
@printf "\n\n[localrepo]\nname=Local repo\nfailovermethod=priority\nenabled=1\ngpgcheck=0\n" >> $(TOPLVL)/repo/clear.cfg
@printf "baseurl=file://$$(realpath $(TOPLVL))/repo/\n\n" >> $(TOPLVL)/repo/clear.cfg
@sed -i '/^"""/d; $$a"""' $(TOPLVL)/repo/clear.cfg
endef
# Disables the local RPM repo by removing the installed package manager and
# Mock configuration files.
localrepodisable:
@rm -f $(TOPLVL)/repo/yum.conf
@rm -f $(TOPLVL)/repo/clear.cfg
# Runs createrepo_c (or createrepo) for the local RPM repo
localrepocreate:
( cd $(TOPLVL)/repo ; if type createrepo_c 1>/dev/null 2>&1; then createrepo_c .; else createrepo .; fi );
# Remove all RPMs from the local RPM repo
localrepoclean:
@find $(TOPLVL)/repo -maxdepth 1 -name '*.rpm' -delete
# Summarizes the local RPM repo status
localrepostatus:
@if [ ! -d $(TOPLVL)/repo ]; then \
echo '** Local repo not found'; \
exit 0; \
fi; \
if [ -f $(TOPLVL)/repo/yum.conf ]; then \
echo '** Local repo enabled for Yum/DNF.'; \
else \
echo '** Local repo not enabled for Yum/DNF.'; \
fi; \
if [ -f $(TOPLVL)/repo/clear.cfg ]; then \
echo '** Local repo enabled for Mock.'; \
else \
echo '** Local repo not enabled for Mock.'; \
fi; \
echo -n '** Local repo package list: '; \
( \
cd "$(TOPLVL)/repo"; \
LC_COLLATE="C"; \
shopt -s nullglob; \
set -- *.rpm; \
if [ -n "$$1" ]; then \
printf '\n'; printf '%q\n' "$$@"; \
else \
printf 'none found\n'; \
fi; \
)
.PHONY: help
##### Code
# Make sure that HELPSPACE has exactly HELPLEN spaces in it
+19
View File
@@ -211,5 +211,24 @@ autospecnew:
exit 1; \
fi
$(TOPLVL)/repo:
@echo "Creating local RPM repository $(TOPLVL)/repo"
mkdir $(TOPLVL)/repo
$(MAKE) localrepocreate
#help repoenable: Enables the local RPM repository for use with Yum/DNF and
#help Mock. If this repository does not yet exist, it is created.
repoenable: $(TOPLVL)/repo ; $(call localrepoenable,${PM_CONF},${MOCK_CONF})
#help repodisable: Disables the local RPM repository.
repodisable: localrepodisable ;
#help repoclean: Removes all RPMs from the local RPM repository.
repoclean: localrepoclean localrepocreate ;
#help repostatus: Summarizes the local RPM repository status.
repostatus: localrepostatus ;
# Define site local toplevel targets in a separate makefile
-include $(TOPLVL)/projects/common/Makefile.toplevel.site_local