diff --git a/.copr/Makefile b/.copr/Makefile new file mode 120000 index 0000000..d0b0e8e --- /dev/null +++ b/.copr/Makefile @@ -0,0 +1 @@ +../Makefile \ No newline at end of file diff --git a/.gitignore b/.gitignore index 50554ee..34913a3 100644 --- a/.gitignore +++ b/.gitignore @@ -2,3 +2,5 @@ .build-container .testprep .validate +*.rpm +x86_64/ diff --git a/BuildSourceImage.sh b/BuildSourceImage.sh index 59b08f7..8bb713e 100755 --- a/BuildSourceImage.sh +++ b/BuildSourceImage.sh @@ -16,6 +16,8 @@ _usage() { _version echo "Usage: $(basename "$0") [-D] [-b ] [-c ] [-e ] [-r ] [-o ] [-i ] [-p ] [-l] [-d ]" echo "" + echo " Container Source Image tool" + echo "" echo -e " -b \tbase path for source image builds" echo -e " -c \tbuild context for the container image. Can be provided via CONTEXT_DIR env variable" echo -e " -e \textra src for the container image. Can be provided via EXTRA_SRC_DIR env variable" @@ -128,6 +130,14 @@ _tar() { fi } +_rpm_download() { + if [ "$(command -v yumdownloader)" != "" ] ; then + yumdownloader "${@}" + else + dnf download "${@}" + fi +} + # output things, only when $DEBUG is set _debug() { if [ -n "${DEBUG}" ] ; then @@ -841,7 +851,7 @@ sourcedriver_rpm_fetch() { rpm=${srcrpm%*.src.rpm} if [ ! -f "${out_dir}/${srcrpm}" ] ; then _debug "--> fetching ${srcrpm}" - dnf download \ + _rpm_download \ --quiet \ --installroot "${rootfs}" \ --release "${release}" \ diff --git a/BuildSourceImage.spec b/BuildSourceImage.spec new file mode 100644 index 0000000..879399e --- /dev/null +++ b/BuildSourceImage.spec @@ -0,0 +1,43 @@ +Name: BuildSourceImage +Version: 0.2 +Release: 1%{?dist} +Summary: Container Source Image tool + +Group: containers +License: GPLv2 +URL: https://github.com/containers/BuildSourceImage +Source0: BuildSourceImage.sh + +#BuildRequires: +Requires: jq +Requires: skopeo +Requires: findutils +Requires: file +%if 0%{?rhel} > 6 +Requires: yum-utils +%else +Requires: dnf-command(download) +%endif + +%description +%{summary}. + +%prep + + +%build + + +%install +%{__mkdir_p} %{buildroot}/%{_bindir} +%{__install} -T -m 0755 ${RPM_SOURCE_DIR}/BuildSourceImage.sh %{buildroot}/%{_bindir}/BuildSourceImage + + +%files +%doc ${RPM_SOURCE_DIR}/LICENSE ${RPM_SOURCE_DIR}/README.md +%{_bindir}/BuildSourceImage + + + +%changelog + diff --git a/Makefile b/Makefile index c38791d..f8b4969 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,29 @@ -SRC := ./BuildSourceImage.sh -CTR_IMAGE := localhost/containers/buildsourceimage -CTR_ENGINE ?= podman -BATS_OPTS ?= -cleanfiles = +pkgname := BuildSourceImage +CTR_IMAGE := localhost/containers/buildsourceimage +CTR_ENGINE ?= podman +BATS_OPTS ?= +cleanfiles = # these are packages whose src.rpms are very small -srpm_urls = \ +srpm_urls = \ https://archive.kernel.org/centos-vault/7.0.1406/os/Source/SPackages/basesystem-10.0-7.el7.centos.src.rpm \ https://archive.kernel.org/centos-vault/7.0.1406/os/Source/SPackages/rootfiles-8.1-11.el7.src.rpm \ https://archive.kernel.org/centos-vault/7.0.1406/os/Source/SPackages/centos-bookmarks-7-1.el7.src.rpm -srpms = $(addprefix ./.testprep/srpms/,$(notdir $(rpms))) +srpms = $(addprefix ./.testprep/srpms/,$(notdir $(rpms))) + +spec ?= $(pkgname).spec +pwd := $(shell pwd) +NAME := $(shell rpmspec -q --qf "%{name}" $(spec)) +VERSION := $(shell rpmspec -q --qf "%{version}" $(spec)) +RELEASE := $(shell rpmspec -q --qf "%{release}" $(spec)) +ARCH := $(shell rpmspec -q --qf "%{arch}" $(spec)) +NVR := $(NAME)-$(VERSION)-$(RELEASE) +outdir ?= $(pwd) + +SHELL_SRC := ./BuildSourceImage.sh +DIST_FILES := \ + $(SHELL_SRC) \ + LICENSE \ + README.md export CTR_IMAGE export CTR_ENGINE @@ -18,13 +33,13 @@ all: validate validate: .validate cleanfiles += .validate -.validate: $(SRC) - shellcheck $(SRC) && touch $@ +.validate: $(SHELL_SRC) + shellcheck $(SHELL_SRC) && touch $@ build-container: .build-container cleanfiles += .build-container -.build-container: .validate Dockerfile $(SRC) +.build-container: .validate Dockerfile $(SHELL_SRC) @echo @echo "==> Building BuildSourceImage Container" $(CTR_ENGINE) build --quiet --file Dockerfile --tag $(CTR_IMAGE) . && touch $@ @@ -41,6 +56,34 @@ test-integration: .build-container .testprep @echo "==> Running integration tests" TMPDIR=$(realpath .testprep/tmp) bats $(BATS_OPTS) test/ +.PHONY: srpm +srpm: $(NVR).src.rpm + @echo $^ + +cleanfiles += $(NVR).src.rpm +$(NVR).src.rpm: $(spec) $(DIST_FILES) + rpmbuild \ + --define '_sourcedir $(pwd)' \ + --define '_specdir $(pwd)' \ + --define '_builddir $(pwd)' \ + --define '_srcrpmdir $(outdir)' \ + --define '_rpmdir $(outdir)' \ + --nodeps \ + -bs ./$(spec) + +.PHONY: rpm +rpm: $(ARCH)/$(NVR).$(ARCH).rpm + @echo $^ + +cleanfiles += $(ARCH)/$(NVR).$(ARCH).rpm +$(ARCH)/$(NVR).$(ARCH).rpm: $(spec) $(DIST_FILES) + rpmbuild \ + --define '_sourcedir $(pwd)' \ + --define '_specdir $(pwd)' \ + --define '_builddir $(pwd)' \ + --define '_srcrpmdir $(outdir)' \ + --define '_rpmdir $(outdir)' \ + -bb ./$(spec) clean: if [ -n "$(cleanfiles)" ] ; then rm -rf $(cleanfiles) ; fi