mirror of
https://github.com/clearlinux/common.git
synced 2026-06-16 19:16:00 +00:00
Compare commits
88 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6a7fac08d9 | |||
| 932c2236a7 | |||
| 6c92ce3160 | |||
| 3e2219c07e | |||
| f0d2523151 | |||
| de39e64e29 | |||
| 877fee6375 | |||
| e921a2a883 | |||
| e00c76846b | |||
| af2c0bea72 | |||
| b99b7e8c25 | |||
| 359d2a8379 | |||
| d828f3a3ce | |||
| 330876d190 | |||
| 3bf5f39687 | |||
| 71d9699bdd | |||
| ded920ccb3 | |||
| cc16065a09 | |||
| 45f2185a25 | |||
| 9ffc0b9640 | |||
| 98c5937801 | |||
| a50450212c | |||
| ab77a99a47 | |||
| 090bb77f92 | |||
| f2b7a30d12 | |||
| c26e27ce65 | |||
| 6fa010e10b | |||
| 173673b5c6 | |||
| eea34ccd7f | |||
| fa58b00fb7 | |||
| cd9b9c1319 | |||
| d22e4f985d | |||
| eb58950c17 | |||
| 8ff80b0be2 | |||
| 05634010e9 | |||
| f6442a0e7f | |||
| d6250a68cd | |||
| a0208a0509 | |||
| 7ff122463b | |||
| 08498361a4 | |||
| 1b8c8d250d | |||
| 4eccb104d5 | |||
| 4ac2b829d3 | |||
| 052fa48e83 | |||
| 382ed28176 | |||
| e695db8c80 | |||
| f12e7e48ea | |||
| f269683632 | |||
| a2c4413083 | |||
| cc6e70bb29 | |||
| f3989c0d5a | |||
| f697b227e8 | |||
| 01e548b268 | |||
| 128799fa02 | |||
| ad77e695dc | |||
| 8bf6c59e96 | |||
| ac3f1898f6 | |||
| 905b1d1c06 | |||
| e3b1adedd8 | |||
| ab142ead38 | |||
| a9982b4064 | |||
| 9f8869fdff | |||
| 9892e87aec | |||
| 100ad5965e | |||
| 61db58c057 | |||
| abe044ee0c | |||
| 8997c889f8 | |||
| f2dd86b50c | |||
| fa6fa080d6 | |||
| a20775675d | |||
| 9dfe2ba937 | |||
| 744cf78eb1 | |||
| 97e7ab937a | |||
| 4fb96cadcc | |||
| 670a01fc25 | |||
| 728e6ea221 | |||
| 240653c41d | |||
| 6935953ee7 | |||
| f210130e38 | |||
| 8df7f9dd6b | |||
| c424e9cd89 | |||
| c247096be4 | |||
| 42e2edaf6b | |||
| 5c4004f6d8 | |||
| 374f9dd581 | |||
| 68c06960c9 | |||
| a52f147734 | |||
| 3e7fad9b4b |
+112
-52
@@ -4,8 +4,8 @@ all: build
|
||||
|
||||
TOPLVL = ../..
|
||||
|
||||
include $(TOPLVL)/projects/common/Makefile.functions
|
||||
include $(TOPLVL)/projects/common/Makefile.config
|
||||
include $(TOPLVL)/projects/common/Makefile.shared
|
||||
|
||||
SHELL = /bin/bash
|
||||
|
||||
@@ -19,7 +19,9 @@ 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
|
||||
# MOCK_CONFIG_VAL is set in Makefile.shared
|
||||
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONFIG_VAL)
|
||||
|
||||
|
||||
ifneq ($(wildcard upstream),)
|
||||
__allsources := $(notdir $(strip $(shell cat upstream)))
|
||||
@@ -113,21 +115,29 @@ shell:
|
||||
|
||||
# Always rebuild the source rpm
|
||||
.PHONY: $(SRPMFILE)
|
||||
$(SRPMFILE): $(SPECFILE) $(__allsources)
|
||||
$(SRPMFILE): $(SPECFILE) $(__allsources) localreponotice
|
||||
@$(MAKE) spdxcheck
|
||||
$(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
|
||||
# the git pull at a password prompt doesn't leave local changes stashed
|
||||
# Do the the git status dance so we only apply a stash we create
|
||||
# Do a git fetch and a git rebase to apply local commits on top of latest
|
||||
# commits from the remote. A git fetch/rebase is used rather than a git pull so
|
||||
# aborting the git pull at a password prompt doesn't leave local changes
|
||||
# stashed. Do the git status dance so we only apply a stash we create. Note
|
||||
# that a fetch/rebase is not attempted if the remote 'origin' is not
|
||||
# initialized locally, or if the remote contains no commits.
|
||||
pullrebase:
|
||||
if [ -z "$$SKIP_GIT" ] && [ -e .git ]; then \
|
||||
set -x ; \
|
||||
@if [ -z "$$SKIP_GIT" ] && [ -e .git ]; then \
|
||||
if ! git rev-parse --verify --quiet origin/master > /dev/null; then \
|
||||
echo "Remote not yet initialized. Continuing."; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
echo "Fetching origin"; \
|
||||
git fetch; \
|
||||
if ! git rev-parse --verify --quiet FETCH_HEAD > /dev/null; then \
|
||||
echo "No commits exist in remote. Continuing."; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
echo "Rebasing to origin/master"; \
|
||||
if git status --porcelain | grep -q '^.[^?]'; \
|
||||
then \
|
||||
git stash save; \
|
||||
@@ -142,17 +152,23 @@ pullrebase:
|
||||
#help already a specfile, it will be overwritten. Several files used by
|
||||
#help autospec will be created in the process. For more information, see
|
||||
#help the project at https://github.com/clearlinux/autospec
|
||||
autospec: pullrebase
|
||||
autospec: pullrebase localreponotice
|
||||
rm -f results/*src.rpm
|
||||
@if [ -e $(SPECFILE) ] && ! grep -q "# Generated by: autospec.py" $(SPECFILE) ; then \
|
||||
echo "Specfile already exists and was not created by autospec.py! Aborting."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@printf 'PKG_NAME := %s\nURL = %s\nARCHIVES = %s\n\ninclude ../common/Makefile.common\n' $(PKG_NAME) '$(firstword $(value NEWURL) $(value URL))' '$(value ARCHIVES)' > Makefile
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py -t . --integrity \
|
||||
${NON_INTERACTIVE} --config "$(AUTOSPEC_CONF)" ${SKIP_GIT} \
|
||||
$(firstword $(NEWURL) $(URL)) --name $(PKG_NAME) ${CLEANUP} \
|
||||
$${SETVERSION:+ -v $${SETVERSION}} -a $(ARCHIVES)
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py \
|
||||
--target . \
|
||||
--integrity \
|
||||
--config "$(AUTOSPEC_CONF)" \
|
||||
--name $(PKG_NAME) \
|
||||
--archives $(ARCHIVES) \
|
||||
--mock-config $(MOCK_CONFIG_VAL) \
|
||||
$${SETVERSION:+ --version $${SETVERSION}} \
|
||||
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
|
||||
$(firstword $(NEWURL) $(URL));
|
||||
@$(MAKE) spdxcheck
|
||||
@$(MAKE) checkblacklist
|
||||
@if [ -e update_changelog.sh ] && [ -z "$$SKIP_GIT" ] ; then \
|
||||
@@ -189,30 +205,12 @@ bumpnogit:
|
||||
|
||||
$(__missingsources): sources
|
||||
|
||||
#help sources: If SOURCES_URL is defined, download required upstream source
|
||||
#help files from that location. Otherwise, try to extract source files from the
|
||||
#help SRPM in the latest Clear Linux release, as specified by the LATEST_SRPMS
|
||||
#help variable. This will run automatically, as a dependency. NOTE: A Koji
|
||||
#help server can make use of this "make sources" command, since it lives in a
|
||||
#help repo named "common". If you use this makefile in Koji, ensure
|
||||
#help "make sources" continues to work for both remote and local builds, since
|
||||
#help it is a prerequisite of several commands for building packages.
|
||||
sources: upstream
|
||||
ifneq ($(strip $(SOURCES_URL)),)
|
||||
while read u; do \
|
||||
case "$$u" in \
|
||||
"") continue ;; \
|
||||
*://*) n="$$u" ;; \
|
||||
*) n="$(SOURCES_URL)/$$u" ;; \
|
||||
esac; \
|
||||
curl --fail --noproxy "*" "$$n" -o `basename "$$n"`; \
|
||||
done < upstream
|
||||
else
|
||||
@tmp=$$(mktemp -d -p "."); \
|
||||
# First argument is a Clear Linux build number (e.g. 22000)
|
||||
define fetch-from-srpm
|
||||
tmp=$$(mktemp -d -p "."); \
|
||||
srpm=$$(rpmspec --srpm -q --qf "%{NVR}.src.rpm\n" $(SPECFILE)); \
|
||||
if cd "$$tmp" && ! curl -f -L -O $(LATEST_SRPMS)/$$srpm; then \
|
||||
echo "Failed to download $$srpm from latest Clear Linux release." >&2; \
|
||||
echo "Run \"git pull\" and try again." >&2; \
|
||||
if cd "$$tmp" && ! curl -s -S -f -L -O $(DOWNLOAD_MIRROR)/releases/$(1)/clear/source/SRPMS/$$srpm; then \
|
||||
echo "Failed to download $$srpm from Clear Linux release $(1)." >&2; \
|
||||
cd .. && rm -rf "$$tmp"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
@@ -220,14 +218,58 @@ else
|
||||
cd ..; \
|
||||
srclist=$$(rpmspec --srpm -q --qf "[%{SOURCE}\n]" $(SPECFILE)); \
|
||||
for s in $$srclist; do \
|
||||
if ! mv "$$tmp"/$$s .; then \
|
||||
if ! mv --no-clobber "$$tmp"/$$s .; then \
|
||||
echo "Missing source file \"$$s\" in $${srpm}." >&2; \
|
||||
rm -rf "$$tmp"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
echo "Retrieved source file $$s ..."; \
|
||||
done; \
|
||||
rm -rf "$$tmp";
|
||||
rm -rf "$$tmp"
|
||||
endef
|
||||
|
||||
#help sources: If SOURCES_URL is defined, download required upstream source files
|
||||
#help from that location. Otherwise, try to download source files according to the
|
||||
#help URLs listed in the spec file. If any of the source files fail to download,
|
||||
#help check for the relevant SRPM from published releases of Clear Linux OS, and
|
||||
#help extract the files if found. Note that SRPMs are taken from the DOWNLOAD_MIRROR
|
||||
#help location. This will run automatically, as a dependency. NOTE: A Koji server can
|
||||
#help make use of this "make sources" command, since it lives in a repo named
|
||||
#help "common". If you use this makefile in Koji, ensure "make sources" continues to
|
||||
#help work for both remote and local builds, since it is a prerequisite of several
|
||||
#help commands for building packages.
|
||||
ifneq ($(strip $(SOURCES_URL)),)
|
||||
sources: upstream
|
||||
while read u; do \
|
||||
case "$$u" in \
|
||||
"") continue ;; \
|
||||
*://*) n="$$u" ;; \
|
||||
*) n="$(SOURCES_URL)/$$u" ;; \
|
||||
esac; \
|
||||
if ! curl --fail -L "$$n" -o `basename "$$n"`; then \
|
||||
echo "Failed to download $$n"; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
done < upstream
|
||||
else
|
||||
sources:
|
||||
@$(MAKE) generateupstream; \
|
||||
[ $$? -eq 0 ] && exit 0; \
|
||||
nvr="$$(rpmspec --srpm -q --qf '%{NAME}\t%{VERSION}\t%{RELEASE}\n' $(SPECFILE))"; \
|
||||
latest_builds=$$(git -C $(TOPLVL)/projects/common tag -l | sort -rn); \
|
||||
for b in $$latest_builds; do \
|
||||
url="$(DOWNLOAD_MIRROR)/releases/$$b/clear/source/package-sources"; \
|
||||
echo "Checking for source files in build $$b ..."; \
|
||||
if grep -q "$$nvr" <(curl -s -f -L $$url); then \
|
||||
$(call fetch-from-srpm,$$b); \
|
||||
if [ $$? -eq 0 ]; then \
|
||||
echo "Source files retrieved from build $$b"; \
|
||||
exit 0; \
|
||||
fi; \
|
||||
fi; \
|
||||
done; \
|
||||
echo "Source files not found for package"; \
|
||||
exit 1
|
||||
endif
|
||||
|
||||
prekoji-checks:
|
||||
@@ -275,8 +317,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 +330,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 +348,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)
|
||||
|
||||
@@ -336,15 +391,20 @@ install:
|
||||
#help calculating their hashes. Autospec performs this step automatically, so ignore
|
||||
#help it for packages managed with autospec.
|
||||
generateupstream:
|
||||
@rm -f upstream
|
||||
@urls=$$(rpmspec -D '_vendor clr' -P $(SPECFILE) | grep Source | cut -d: -f2- | grep '://'); \
|
||||
@[ -e upstream ] && mv upstream upstream.bak; \
|
||||
urls=$$(rpmspec -D '_vendor clr' -P $(SPECFILE) | sed -n "s|^Source[0-9]*[[:blank:]]*:[[:blank:]]*\(..*://..*\)$$|\1|p"); \
|
||||
for url in $$urls; do \
|
||||
filename=$$(basename $$url); \
|
||||
if [ ! -e $$filename ]; then \
|
||||
curl --fail -L -O $$url; \
|
||||
fi; \
|
||||
echo $$(sha1sum $$filename | cut -d\ -f1)/$$filename >> upstream; \
|
||||
filename=$$(basename $$url); \
|
||||
if [ ! -e $$filename ]; then \
|
||||
if ! curl --fail -L -O $$url; then \
|
||||
echo "Failed to download $$url"; \
|
||||
[ -e upstream.bak ] && mv --no-clobber upstream.bak upstream; \
|
||||
exit 1; \
|
||||
fi; \
|
||||
fi; \
|
||||
echo $$(sha1sum $$filename | cut -d\ -f1)/$$filename >> upstream; \
|
||||
done
|
||||
@rm -f upstream.bak
|
||||
@cat upstream
|
||||
|
||||
#help drop-abandoned: Remove all unused patches from the git tree
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -14,9 +14,9 @@ define loopup
|
||||
@sudo partprobe /dev/loop$(DEVICE)
|
||||
@sleep 1
|
||||
@if [ -e /dev/loop$(DEVICE)p3 ]; then \
|
||||
sudo mount /dev/loop$(DEVICE)p3 $(TOPLVL)/image; \
|
||||
sudo mount /dev/loop$(DEVICE)p3 $(TOPLVL)/image; \
|
||||
else \
|
||||
sudo mount /dev/loop$(DEVICE)p2 $(TOPLVL)/image; \
|
||||
sudo mount /dev/loop$(DEVICE)p2 $(TOPLVL)/image; \
|
||||
fi
|
||||
@sudo mount /dev/loop$(DEVICE)p1 $(TOPLVL)/image/boot
|
||||
endef
|
||||
@@ -62,6 +62,82 @@ 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; \
|
||||
)
|
||||
|
||||
# Detection of whether to use the local RPM repo occurs on-the-fly. Normally,
|
||||
# variable definitions appear in Makefile.config, but these variables are not
|
||||
# intended to be user-modifiable.
|
||||
ifeq ($(wildcard $(TOPLVL)/repo/clear.cfg),)
|
||||
MOCK_CONFIG_VAL = $(realpath $(MOCK_CONF))
|
||||
else
|
||||
MOCK_CONFIG_VAL = $(realpath $(TOPLVL)/repo/clear.cfg)
|
||||
USE_LOCAL_REPO = 1
|
||||
endif
|
||||
|
||||
localreponotice:
|
||||
@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
|
||||
|
||||
.PHONY: help
|
||||
##### Code
|
||||
# Make sure that HELPSPACE has exactly HELPLEN spaces in it
|
||||
+45
-6
@@ -4,8 +4,8 @@ all: clone
|
||||
|
||||
TOPLVL = .
|
||||
|
||||
include $(TOPLVL)/projects/common/Makefile.functions
|
||||
include $(TOPLVL)/projects/common/Makefile.config
|
||||
include $(TOPLVL)/projects/common/Makefile.shared
|
||||
|
||||
SHELL = /bin/bash
|
||||
|
||||
@@ -80,7 +80,11 @@ ${PULL_PKGS}:
|
||||
fi ; \
|
||||
git --no-pager log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset' --abbrev-commit $$O..$$N; echo; \
|
||||
fi ; \
|
||||
$(call gitoliteurl,$$p); \
|
||||
if [ "$$p" = "projects/autospec" ] ; then \
|
||||
git remote set-url --push origin https://github.com/clearlinux/autospec.git; \
|
||||
else \
|
||||
$(call gitoliteurl,$$p); \
|
||||
fi ; \
|
||||
else \
|
||||
echo "$$p: no such remote 'origin'"; \
|
||||
fi ; \
|
||||
@@ -148,6 +152,7 @@ proper: $(proper_PKGS)
|
||||
.PHONY: $(proper_PKGS)
|
||||
|
||||
$(clean_PKGS):
|
||||
@echo "cleaning $(patsubst clean_%,%,$@)"
|
||||
-@$(MAKE) -s -j -C $(addprefix packages/,$(patsubst clean_%,%,$@)) clean
|
||||
|
||||
$(proper_PKGS):
|
||||
@@ -157,7 +162,7 @@ $(proper_PKGS):
|
||||
#help and unstaged files in addition to staged files.
|
||||
status: $(PACKAGES_FILE) $(addprefix packages/,$(PKGS))
|
||||
@for p in projects/common $(addprefix packages/,$(PKGS)); do \
|
||||
(cd $$p ; git status | grep -q 'nothing to commit, working [^ ]* clean' || (echo "Uncommitted changes in $$p:"; git status)) ;\
|
||||
if [ -d "$$p/.git" ] && [ -n "$$(git -C $$p status -uno --porcelain)" ]; then echo "Uncommitted changes in $$p:"; git -C "$$p" status --short; fi ;\
|
||||
done
|
||||
|
||||
#help diff: Runs git diff for all package repos and displays the output using
|
||||
@@ -187,22 +192,56 @@ provides:
|
||||
#help autospecnew: Creates a new autospec package with for a given URL=$(URL)
|
||||
#help with NAME=$(NAME). Several files used by autospec will be created in the
|
||||
#help process. For more information about autospec, see the project page on Github https://github.com/clearlinux/autospec
|
||||
autospecnew:
|
||||
autospecnew: localreponotice
|
||||
@if [ -z $(NAME) ] || [ -z $(URL) ]; then \
|
||||
echo "Please specify NAME and URL. The ARCHIVES variable is optional."; \
|
||||
exit 1; \
|
||||
fi
|
||||
@git clone $(PKG_BASE_URL)/$(NAME) $(TOPLVL)/packages/$(NAME) &> /dev/null || true
|
||||
@if [ ! -d $(TOPLVL)/packages/$(NAME)/.git ]; then \
|
||||
echo "no remote repository found, creating new package repository and running autospec"; \
|
||||
mkdir -p $(TOPLVL)/packages/$(NAME); \
|
||||
( \
|
||||
cd $(TOPLVL)/packages/$(NAME); \
|
||||
git init; \
|
||||
git remote add origin $(PKG_BASE_URL)/$(NAME); \
|
||||
$(call gitoliteurl,packages/$(NAME)); \
|
||||
$(call subjectprefix,$(NAME)); \
|
||||
); \
|
||||
printf 'PKG_NAME := %s\nURL = %s\nARCHIVES = %s\n\ninclude ../common/Makefile.common\n' $(NAME) '$(value URL)' '$(value ARCHIVES)' > $(TOPLVL)/packages/$(NAME)/Makefile; \
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py --integrity -t packages/$(NAME) --config $(AUTOSPEC_CONF) $(URL) --name $(NAME); \
|
||||
python3 $(TOPLVL)/projects/autospec/autospec/autospec.py \
|
||||
--target packages/$(NAME) \
|
||||
--integrity \
|
||||
--config "$(AUTOSPEC_CONF)" \
|
||||
--name $(NAME) \
|
||||
--archives $(ARCHIVES) \
|
||||
--mock-config $(MOCK_CONFIG_VAL) \
|
||||
$${SETVERSION:+ --version $${SETVERSION}} \
|
||||
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
|
||||
$(URL); \
|
||||
$(TOPLVL)/projects/common/checkblacklist.sh $(TOPLVL)/projects/common/blacklist $(TOPLVL)/packages/${NAME}/results/*.rpm; \
|
||||
else \
|
||||
echo "$(NAME) already exists at $(TOPLVL)/packages/$(NAME)"; \
|
||||
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
|
||||
|
||||
@@ -20,8 +20,16 @@ building Clear Linux packages.
|
||||
### Automated setup
|
||||
|
||||
Download the [user setup](user-setup.sh) script and run it on your Clear Linux
|
||||
system as an unprivileged user. After the script completes, make sure to logout
|
||||
and login again to complete the setup process.
|
||||
system as an unprivileged user.
|
||||
|
||||
```
|
||||
$ curl -O https://raw.githubusercontent.com/clearlinux/common/master/user-setup.sh
|
||||
$ chmod +x user-setup.sh
|
||||
$ ./user-setup.sh
|
||||
```
|
||||
|
||||
After the script completes, make sure to logout and login again to complete the
|
||||
setup process.
|
||||
|
||||
The script either accepts no options, or all (3) options in case you are
|
||||
configuring the Koji CLI for remote building on a Koji server. The options are
|
||||
|
||||
@@ -13,3 +13,11 @@
|
||||
|
||||
# String to replace with "localhost" in upstream tarball URLs
|
||||
#urlban =
|
||||
|
||||
# Path to packages file, a list of current packages in Clear Linux. It can be
|
||||
# an absolute path or a path relative to this autospec.conf.
|
||||
#packages_file =
|
||||
|
||||
# Path to yum config, used for generating whatrequires. It can be an absolute
|
||||
# path or a path relative to this autospec.conf.
|
||||
#yum_conf =
|
||||
|
||||
@@ -4,8 +4,10 @@ config_opts['legal_host_arches'] = ('x86_64',)
|
||||
config_opts['chroot_setup_cmd'] = 'groupinstall build srpm-build'
|
||||
config_opts['dist'] = 'clear' # only useful for --resultdir variable subst
|
||||
config_opts['extra_chroot_dirs'] = [ '/run/lock', ]
|
||||
config_opts['useradd'] = '/usr/sbin/useradd -m -u %(uid)s -g %(gid)s -d %(home)s %(user)s'
|
||||
config_opts['useradd'] = '/usr/sbin/useradd -m -u %(uid)s -g %(gid)s -d %(home)s %(user)s'
|
||||
config_opts['plugin_conf']['ccache_enable'] = False
|
||||
config_opts['releasever'] = 'clear'
|
||||
config_opts['package_manager'] = 'dnf'
|
||||
|
||||
|
||||
config_opts['yum.conf'] = """
|
||||
|
||||
+1
-1
@@ -149,4 +149,4 @@ fi
|
||||
echo -en "\n************************\n"
|
||||
|
||||
echo 'Workspace has been set up in the "clearlinux" directory'
|
||||
echo 'NOTE: logout and log back in or run "newgrp kvm" to finalize the setup process'
|
||||
echo 'NOTE: logout and log back in to finalize the setup process'
|
||||
|
||||
Reference in New Issue
Block a user