Compare commits

..

84 Commits

Author SHA1 Message Date
William Douglas 255935f4fb Add pattern directory configuration option
The failed_pattern_dir contains a path to a location containing
additonal configuration files for failed_commands, ignored_commands,
maven_jars, gems, license_hashes, license_translations,
license_blacklist, and qt_modules.
2018-07-10 17:55:31 +00:00
clrbuilder 34df391482 Update packages file for version 23630
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-10 14:51:38 +00:00
clrbuilder 3d9fd9fd67 Update packages file for version 23620
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-10 12:02:50 +00:00
clrbuilder 8894658b0a Update packages file for version 23610
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-09 18:02:33 +00:00
clrbuilder f2d0972aab Update packages file for version 23590
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-07 20:43:42 +00:00
clrbuilder 64c2b82443 Update packages file for version 23580
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-07 14:47:01 +00:00
clrbuilder 3963a1f319 Update packages file for version 23570
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-07 00:51:08 +00:00
clrbuilder 68cd34db8f Update packages file for version 23550
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-06 16:40:29 +00:00
clrbuilder b9952701c5 Update packages file for version 23480
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-04 03:33:26 +00:00
Patrick McCarty 3671774e8a Support newer versions of Mock (part 1)
In Mock version 1.4.4, the chroot group was changed from "mockbuild" to
"mock". This creates a problem for running Mock on Clear Linux because
(a) the distro already has group "mock", and (b) Mock tries to `groupdel
mock` within the chroot and fails, since the group is defined in
/usr/share/defaults/etc/group and not in /etc/group. Mock treats the
groupdel failure as fatal. Fortunately there is a workaround: set the
"chrootgroup" config to a group not already defined in the OS. I am
setting the group to "mockbuild" in the default config to restore the
behavior of previous Mock versions. Thanks to Mark Horn for adding this
feature upstream! It was merged for Mock 1.4.7.

Also, disable the new bootstrap container feature, added in Mock version
1.4.1. It was disabled by default in version 1.4.2, but keep the
explicit setting in case upstream enables it in the future.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-07-02 21:57:19 -07:00
clrbuilder fa7c45049f Update packages file for version 23450
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-03 04:11:59 +00:00
Patrick McCarty 768bdc7550 Ignore mv failure when debuginfo package is missing
Fixes #6

Not all Clear Linux packages have debuginfo subpackages, so ignore
errors when attempting to move them to the results/debuginfo/ directory.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-07-02 16:48:08 -07:00
clrbuilder 6372c11a12 Update packages file for version 23430
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-02 16:25:53 +00:00
clrbuilder 5629731f54 Update packages file for version 23410
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-01 17:14:56 +00:00
clrbuilder a0f8fd9a50 Update packages file for version 23400
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-01 14:55:29 +00:00
clrbuilder cad2e6081d Update packages file for version 23390
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-07-01 01:47:50 +00:00
clrbuilder 2daf8a48b2 Update packages file for version 23380
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-30 23:32:42 +00:00
clrbuilder 26582bd9f2 Update packages file for version 23370
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-29 19:42:57 +00:00
clrbuilder c6a2d6fabd Update packages file for version 23350
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-29 12:03:01 +00:00
Patrick McCarty 2d8fc9a155 koji: exit early if spec has uncommitted changes
When running 'make koji', the tooling will attempt to create a new git
tag with a name constructed from the spec file's NVR.

However, if there are uncommitted changes to the Name, Version, or
Release fields (collectively, NVR) in that file, the new tag's name will
not match the NVR in the spec file referenced by commit HEAD.

Protect against the mismatch by exiting early from a 'make koji' if any
spec file modifications are not yet committed to the repo, and alert the
user what the problem is.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-27 17:46:25 -07:00
Patrick McCarty 1eadce9aad Fix 'make repoadd'
The debuginfo RPMs are stored in a separate directory now, so the rpm
copy pipeline needed a slight adjustment.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-27 14:48:52 -07:00
Tudor Marcu 6613644b9c Update folder structure in results/
The logs, srpms, and debuginfo should all be split into their own
directory, so it is less confusing about which RPMs can be used when
creating mixes. They are mainly for extra metadata, and should not be
left in the main RPM results location.

Signed-off-by: Tudor Marcu <tudor.marcu@intel.com>
2018-06-27 14:04:12 -07:00
clrbuilder 93115e4073 Update packages file for version 23310
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-27 18:02:45 +00:00
clrbuilder 12537cbfb0 Update packages file for version 23240
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-22 18:02:37 +00:00
clrbuilder d397ee463a Update packages file for version 23230
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-22 12:02:16 +00:00
clrbuilder dfe55331e6 Update packages file for version 23200
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-21 18:02:34 +00:00
Patrick McCarty 0c69bfb9a9 Add OVMF.fd to the repo
Fixes #4

Because start_qemu.sh references OVMF.fd, it is convenient for OVMF.fd
to live alongside that script for ease of use.

Note that this version of OVMF.fd is a copy of /usr/share/qemu/OVMF.fd
in Clear Linux OS builds 22930 and newer from the edk2 package
(edk2-2-8, built using the recent UDK2018 release).

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-19 15:52:23 -07:00
William Douglas 689e48a2f7 start_qemu.sh: Add virtio-rng-pci device
In order to avoid issues
(https://github.com/clearlinux/distribution/issues/97) where the
VM is unable to procede to boot due to lack of entropy, add the
virtio-rng-pci device via the start_qemu.sh script.
2018-06-19 18:01:55 +00:00
Patrick McCarty 82e334a93a Make start_qemu.sh executable
Fixes #3

The other shell scripts in this repo are executable, so there's no
reason this one should not be.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-18 12:46:27 -07:00
clrbuilder ab6c4a674f Update packages file for version 23110
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-18 13:02:45 +00:00
clrbuilder 78de1a6a13 Update packages file for version 23100
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-16 03:50:04 +00:00
clrbuilder 74e79ffea2 Update packages file for version 23080
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-15 19:02:11 +00:00
clrbuilder bb21809c73 Update packages file for version 23050
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-15 03:23:35 +00:00
clrbuilder e912d4e6ae Update packages file for version 23040
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-14 19:02:20 +00:00
clrbuilder 340b6a74d4 Update packages file for version 23030
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-14 13:11:14 +00:00
clrbuilder 2e8f9ef0ab Update packages file for version 23010
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-13 19:07:40 +00:00
Patrick McCarty 4bdd1765c5 Remove explicit cachedir from dnf.conf
DNF doesn't fall back to /var/tmp if it cannot write to the cachedir
location specified in dnf.conf (unlike YUM). Removing the explicit
cachedir setting in dnf.conf enables the fallback behavior, which we
will need for autospec use.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-13 12:00:01 -07:00
clrbuilder 45f39671d6 Update packages file for version 22970
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-12 13:02:00 +00:00
clrbuilder 1d46a683e0 Update packages file for version 22950
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-11 19:05:51 +00:00
clrbuilder 41d2113b8a Update packages file for version 22940
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-11 13:09:51 +00:00
clrbuilder 528cd77168 Update packages file for version 22900
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-10 05:08:19 +00:00
Patrick McCarty 916ce142bb pull: skip repos that do not exist locally
Since the user-setup script does not clone package repos by default
anymore, 'make pull' can be made more user-friendly by not printing
warnings if some/all/most of the package repos are not already present
in the packages/ directory.

Instead, only populate the package "pull" list with names from the
packages file that are currently present in the packages/ directory.

Package repos that are not present can be cloned as before: 'make clone'
to clone all missing package repos, or 'make clone_PKG' to clone a
selected package repo.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-06-08 12:01:18 -07:00
clrbuilder e2a3b113f2 Update packages file for version 22860
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-07 19:02:21 +00:00
clrbuilder 0acf617611 Update packages file for version 22850
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-07 13:02:11 +00:00
clrbuilder 39aeb852fe Update packages file for version 22830
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-06 13:02:13 +00:00
clrbuilder 0e7d7e336d Update packages file for version 22800
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-05 16:06:47 +00:00
clrbuilder 2323c9924f Update packages file for version 22770
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-04 13:02:08 +00:00
clrbuilder da1f1f7483 Update packages file for version 22760
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-03 06:49:53 +00:00
clrbuilder 723a925ed8 Update packages file for version 22730
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-06-01 13:02:38 +00:00
clrbuilder 7e9ee1949d Update packages file for version 22720
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-31 21:08:28 +00:00
clrbuilder f0df3f7809 Update packages file for version 22710
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-31 16:14:03 +00:00
Patrick McCarty 9f77c5b172 Adjust mock config for improved caching
Not setting "keepcache=1" results to DNF removing cached RPMs after
every local build.

Also, naming the cachedir "/var/cache/dnf" is important for the cache to
stick around and be stored in /var/cache/mock/clear/dnf_cache.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-30 13:17:34 -07:00
Patrick McCarty 3c52bbd7d7 Add a dnf.conf, and use it by default
The new dnf.conf is very similar to the yum.conf, but because the
in-tree Mock config specifies to use DNF, we should track a dnf.conf
here as well and use it by default.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-30 13:15:17 -07:00
Patrick McCarty 7203329212 Move conf files into dedicated "conf" directory
The "image-creator" and "koji-client-files" subdirectories are named as
such to reflect their purpose from long ago. In the present, the names
are confusing, so I am shuffling files around a bit to reflect current
usage.

All conf files (or conf file templates) have been moved to "conf"
instead, and some documentation has been added to explain what the files
are used for, and how they can be customized.

Also, after moving the conf files, the last file remaining in one of the
old subdirectories is "start_qemu.sh", so move it to the toplevel dir.
We could eventually move the miscellaneous scripts into a dedicated
directory too, but I will save that for another time.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-30 13:15:17 -07:00
clrbuilder b76562fe35 Update packages file for version 22680
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-30 13:02:40 +00:00
clrbuilder 657bf44505 Update packages file for version 22630
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-26 17:06:00 +00:00
clrbuilder c0e4bbf18e Update packages file for version 22610
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-25 13:40:50 +00:00
clrbuilder 38b5e792cd Update packages file for version 22600
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-24 18:31:08 +00:00
clrbuilder 43a333f08f Update packages file for version 22590
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-24 05:43:36 +00:00
clrbuilder 9985956b7c Update packages file for version 22580
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-24 00:19:37 +00:00
clrbuilder 7a62e62b28 Update packages file for version 22540
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-22 13:02:25 +00:00
Patrick McCarty 92977583a6 user-setup: stop installing mock config to /etc
The common tooling behavior changed a while back with respect to the
mock config usage, so update the user-setup script to reflect the
changes. Also add documentation about how to customize the mock config,
which can be leveraged to revert back to the original behavior as well.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-21 16:32:52 -07:00
Patrick McCarty b8d121260a user-setup: create 'mix' directory for future use
To enable future shared workflows between the common tooling and mixer,
create a directory named 'mix' within the tooling workspace.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-21 16:12:44 -07:00
clrbuilder ace60d849e Update packages file for version 22530
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-21 13:02:36 +00:00
clrbuilder a2759eca40 Update packages file for version 22520
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-20 14:28:39 +00:00
clrbuilder 7d0977c785 Update packages file for version 22450
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-17 02:48:06 +00:00
Patrick McCarty 9184a2fd62 user-setup: support abs/rel paths for cert options
Support both absolute and relative paths for the cert options, instead
of relative paths only, by using realpath(1) to resolve the arguments.

(Note that the script cannot reference the path arguments verbatim
because much of the script operates in the workspace's toplevel
directory, which is a different location than where the script is
invoked. In that situation, relative paths would not resolve.)

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-15 14:50:09 -07:00
clrbuilder e80c6eb4bd Update packages file for version 22420
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-15 17:22:37 +00:00
clrbuilder 5cf5fd71cb Update packages file for version 22410
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-15 13:02:06 +00:00
clrbuilder 4b01a5a9cd Update packages file for version 22390
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-14 19:02:44 +00:00
Patrick McCarty 4910ef0882 koji: only pull --rebase if remote is initialized
After running 'make autospecnew', the freshly created repo only exists locally,
so the repo remote is not yet initialized. The 'git pull --rebase' (via 'make
koji') will then fail due to the uninitialized remote. Improve this case by
only rebasing when the remote is initialized.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-14 11:49:26 -07:00
clrbuilder 1518adace0 Update packages file for version 22380
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-14 02:27:47 +00:00
clrbuilder ef0e792c3d Update packages file for version 22370
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-12 02:19:56 +00:00
Patrick McCarty 1bb7b0c471 autospecnew: try to clone repo first
If the user tries to create a new package with 'make autospecnew', a
package repo will be created from scratch, even if a repo exists with
the same name at PKG_BASE_URL.

This problem stems from 'make autospecnew' assuming that all tracked
package repos are cloned already, but is a bad assumption, given the
recent change of behavior for user-setup.sh (not cloning package repos
by default).

Resolve it by first trying to clone the repo with "make clone_PKGNAME";
clone_PKGNAME targets are automatically defined for all packages listed
in the projects/common/packages file. As long as users have an
up-to-date packages file (i.e. are running 'make pull' regularly), then
this solution works well. The case not covered is when packages are
added, then later removed; package repos will already exist remotely in
this case. However, this is a relatively rare case, so I opted to only
handle the common case where a package is added and never removed from
the distro at a later point.

(Side note: I originally wanted to 'git ls-remote REPO' to check remote
repo existence, but this does not work well with Github, as Github
prompts for username/password for remotes that appear to not exist,
since they might be private repos. Prompting a Github username/password
in this case is not very user-friendly. Using the Github API looks
viable, but I would rather not special case the handling of Github repos
in the common tooling.)

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-11 11:21:41 -07:00
Leandro Dorileo 51dc7a7c24 autospec: use MOCK_OPTS
Also make autospec use MOCK_OPTS to pass down arbitrary mock options.

Signed-off-by: Leandro Dorileo <leandro.maciel.dorileo@intel.com>
2018-05-10 15:48:26 -07:00
George T Kramer c8848dbdb2 Allow additional curl options for fetching sources
The DOWNLOAD_MIRROR server, the SOURCES_URL server, and upstream
source tarballs may be hosted in many different environments.
Allow users to supply additional curl options via a config to use
whenever connecting to the DOWNLOAD_MIRROR and SOURCES_URL servers and
work better with their particular hosting environment.  Because upstream
source tarballs can come from many different locations, do not offer a
global config and instead allow users to define this manually as needed
when the rule is used.

Signed-off-by: George T Kramer <george.t.kramer@intel.com>
2018-05-10 15:22:57 -07:00
Leandro Dorileo 92e045116a mock: add MOCK_OPTS
Eventually developers - when they know what they're doing - want to
manipulate a little bit the mock arguments to i.e skip a few stages
in the mock build cycle while they're hacking a package.

One example is when developers are testing changes to a spec file but
not touching dependencies and they're [re]running the build multiple times
it would be nice to not cleanup before the build and run a rebuild
for example with: --rebuild --no-clean

With this patch one should only do:

make build MOCK_OPTS="--rebuild --no-clean"

Signed-off-by: Leandro Dorileo <leandro.maciel.dorileo@intel.com>
2018-05-10 14:56:22 -07:00
Patrick McCarty 1f3475a1ef Move "Manual setup" section to end of README
Users are encouraged to run the user-setup script as documented in the
"Automated setup" section. To clarify that the "Manual setup" section is
an alternative to "Automated setup", move those docs to the end of the
README instead.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 13:28:18 -07:00
Patrick McCarty f836786e2d user-setup: update docs in the README
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 13:23:34 -07:00
Patrick McCarty 7dc88fd01a user-setup: do not clone package repos by default
Because the package repo cloning process can take a lot of time, do not
clone them by default. Instead, add a new --clone-packages|-a option to
perform this task.

Also, immediately before the script exits, document some possible next
steps when *not* cloning package repos (the new default).

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 12:01:25 -07:00
Patrick McCarty 250efaef8f user-setup: enable a configurable workspace name
To allow setting up multiple workspaces in the same directory, or if the
name "clearlinux" is not the desired name, add a --directory|-d option
to let the user configure it.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 11:46:52 -07:00
Patrick McCarty c6532c6759 user-setup: enable parallel repo cloning
Since Clear Linux has many package repos, cloning them all in serial can
take a long time. Add a -j option to the script to let users speed up
the process.

Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 11:19:15 -07:00
Patrick McCarty f1c85e3294 user-setup: switch to 2-space indent
Signed-off-by: Patrick McCarty <patrick.mccarty@intel.com>
2018-05-10 10:45:12 -07:00
clrbuilder f5abc3a8d3 Update packages file for version 22340
Signed-off-by: clrbuilder <clrbuilder@intel.com>
2018-05-09 19:02:00 +00:00
16 changed files with 1040 additions and 199 deletions
+40 -23
View File
@@ -12,16 +12,15 @@ SHELL = /bin/bash
SPECFILE = $(addsuffix .spec, $(PKG_NAME))
SRPMVERS = $(shell [ ! -f $(SPECFILE) ] || rpmspec -D '_vendor clr' --srpm -q --queryformat '%{NAME}-%{VERSION}-%{RELEASE}\n' $(SPECFILE))
SRPMFILE = results/$(SRPMVERS).src.rpm
SRPMFILE = results/srpm/$(SRPMVERS).src.rpm
LATEST_RPMS = $(shell [ ! -s results/build.log ] || for r in `egrep 'Wrote.*/RPMS/.*.rpm' results/build.log | sed 's/.*\///'` ; do echo "results/$$r"; done)
LATEST_RPMS = $(shell [ ! -s results/logs/build.log ] || for r in `egrep 'Wrote.*/RPMS/.*.rpm' results/logs/build.log | sed 's/.*\///;s/.*debuginfo/debuginfo\/&/'` ; do echo "results/$$r"; done)
RPMS ?= $(LATEST_RPMS)
WITH_SUDO = $(shell cmp /usr/bin/mock /usr/sbin/mock &> /dev/null && echo sudo )
# MOCK_CONFIG_VAL is set in Makefile.shared
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONFIG_VAL)
MOCK ?= $(WITH_SUDO) /usr/bin/mock -r $(MOCK_CONFIG_VAL) $(MOCK_OPTS)
ifneq ($(wildcard upstream),)
__allsources := $(notdir $(strip $(shell cat upstream)))
@@ -89,20 +88,27 @@ prebuild-checks:
#help files and rpms in the results directory of your package. If there
#help are mutlple tar.gz files for a package, make will do make sources,
#help which creates a src.rpm file from the spec file.
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options.
build: prebuild-checks configemail $(SPECFILE) upstream $(SRPMFILE)
$(MOCK) $(SRPMFILE) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
@perl $(TOPLVL)/projects/common/logcheck.pl results/build.log
@perl $(TOPLVL)/projects/common/count.pl results/build.log &> testresults
mkdir -p results/logs results/debuginfo
mv results/*.log results/logs
-mv results/*-debuginfo*.rpm results/debuginfo/
@perl $(TOPLVL)/projects/common/logcheck.pl results/logs/build.log
@perl $(TOPLVL)/projects/common/count.pl results/logs/build.log &> testresults
@$(MAKE) checkblacklist
#help build-nocheck: Same as 'make build', but do not run the package's test suite.
build-nocheck: configemail $(SPECFILE) upstream $(SRPMFILE)
$(MOCK) $(SRPMFILE) --nocheck --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
@perl $(TOPLVL)/projects/common/logcheck.pl results/build.log
@perl $(TOPLVL)/projects/common/count.pl results/build.log &> testresults
mkdir -p results/logs results/debuginfo
mv results/*.log results/logs
-mv results/*-debuginfo*.rpm results/debuginfo/
@perl $(TOPLVL)/projects/common/logcheck.pl results/logs/build.log
@perl $(TOPLVL)/projects/common/count.pl results/logs/build.log &> testresults
@$(MAKE) checkblacklist
fmvpatches: results/build.log
fmvpatches: results/logs/build.log
@perl $(TOPLVL)/projects/common/fmvpatches.pl $(PKG_NAME)
#help rootshell: Puts you in a root shell at the top of your build root.
@@ -117,7 +123,7 @@ shell:
.PHONY: $(SRPMFILE)
$(SRPMFILE): $(SPECFILE) $(__allsources) localreponotice
@$(MAKE) spdxcheck
$(MOCK) --buildsrpm --source=./ --spec=$(SPECFILE) --result=results/ --no-cleanup-after --uniqueext=$(PKG_NAME)
$(MOCK) --buildsrpm --source=./ --spec=$(SPECFILE) --result=results/srpm/ --no-cleanup-after --uniqueext=$(PKG_NAME)
# 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
@@ -150,10 +156,12 @@ pullrebase:
#help autospec: automatically generates a specfile. If there is
#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
#help autospec will be created in the process.
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options
#help to autospec.
#help For more information, see the project at https://github.com/clearlinux/autospec
autospec: pullrebase localreponotice
rm -f results/*src.rpm
rm -f results/srpm/*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; \
@@ -166,6 +174,7 @@ autospec: pullrebase localreponotice
--name $(PKG_NAME) \
--archives $(ARCHIVES) \
--mock-config $(MOCK_CONFIG_VAL) \
--mock-opts "$(MOCK_OPTS)" \
$${SETVERSION:+ --version $${SETVERSION}} \
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
$(firstword $(NEWURL) $(URL));
@@ -209,7 +218,7 @@ $(__missingsources): sources
define fetch-from-srpm
tmp=$$(mktemp -d -p "."); \
srpm=$$(rpmspec --srpm -q --qf "%{NVR}.src.rpm\n" $(SPECFILE)); \
if cd "$$tmp" && ! curl -s -S -f -L -O $(DOWNLOAD_MIRROR)/releases/$(1)/clear/source/SRPMS/$$srpm; then \
if cd "$$tmp" && ! curl -s -S -f -L -O $(MIRROR_CURL_OPTS) $(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; \
@@ -246,7 +255,7 @@ sources: upstream
*://*) n="$$u" ;; \
*) n="$(SOURCES_URL)/$$u" ;; \
esac; \
if ! curl --fail -L "$$n" -o `basename "$$n"`; then \
if ! curl --fail -L -o `basename "$$n"` $(SOURCES_CURL_OPTS) "$$n"; then \
echo "Failed to download $$n"; \
exit 1; \
fi; \
@@ -260,7 +269,7 @@ sources:
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 \
if grep -q "$$nvr" <(curl -s -f -L $(MIRROR_CURL_OPTS) $$url); then \
$(call fetch-from-srpm,$$b); \
if [ $$? -eq 0 ]; then \
echo "Source files retrieved from build $$b"; \
@@ -283,8 +292,14 @@ koji: prekoji-checks kojidef
@if ! git branch | grep -q -E '^\* master'; then \
echo "Error: Must be on the master branch to submit to koji" >&2; \
exit 1; \
fi; \
if ! git diff --quiet HEAD ${SPECFILE}; then \
echo "Error: All changes to ${SPECFILE} must be committed first" >&2; \
exit 1; \
fi; \
if git rev-parse --verify --quiet origin/master > /dev/null; then \
git pull --rebase; \
fi
git pull --rebase
git tag $(SRPMVERS)
git push origin master refs/tags/$(SRPMVERS)
$(KOJI_CMD) build $$KOJI_NOWAIT $(KOJI_TAG) $(PKG_BASE_URL)/$(PKG_NAME)?#$(SRPMVERS)
@@ -312,7 +327,7 @@ rekoji-nowait:
$(MAKE) KOJI_NOWAIT="--nowait --background" rekoji
logcheck:
@perl $(TOPLVL)/projects/common/logcheck.pl results/build.log
@perl $(TOPLVL)/projects/common/logcheck.pl results/logs/build.log
$(TOPLVL)/repo:
@echo "Creating local RPM repository $(TOPLVL)/repo"
@@ -322,8 +337,8 @@ $(TOPLVL)/repo:
#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 \
repoadd: results/logs/build.log $(TOPLVL)/repo
@if [ -z "`grep '^Wrote: .*$(shell basename $(SRPMFILE))$$' results/logs/build.log`" ]; then \
echo "You have not yet succesfully built this release yet"; exit 1; \
fi
@if [ -f .repo-index ]; then \
@@ -388,15 +403,17 @@ install:
#help generateupstream: Run this rule to create or update the 'upstream' file
#help by downloading the upstream source tarballs listed in the spec file and
#help calculating their hashes. Autospec performs this step automatically, so ignore
#help it for packages managed with autospec.
#help calculating their hashes. Autospec performs this step automatically, so
#help ignore it for packages managed with autospec. Additional curl options
#help may be used for downloading the upstream source tarballs by defining the
#help CURL_OPTS variable for this rule.
generateupstream:
@[ -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 \
if ! curl --fail -L -O $$url; then \
if ! curl --fail -L -O $(CURL_OPTS) $$url; then \
echo "Failed to download $$url"; \
[ -e upstream.bak ] && mv --no-clobber upstream.bak upstream; \
exit 1; \
+10 -4
View File
@@ -26,6 +26,9 @@ CGIT_BASE_URL =
# Location of upstream tarball cache used by 'make build', 'make sources', etc.
SOURCES_URL =
# Additional curl options to use when downloading files from SOURCES_URL
SOURCES_CURL_OPTS =
# Location where package repos are hosted.
PKG_BASE_URL = https://github.com/clearlinux-pkgs
@@ -38,6 +41,9 @@ PROJ_PKGS = autospec clr-bundles common
# Clear Linux download mirror to use
DOWNLOAD_MIRROR = https://cdn.download.clearlinux.org
# Additional curl options to use when downloading files from DOWNLOAD_MIRROR
MIRROR_CURL_OPTS =
# Location of release content from latest Clear Linux release
LATEST_RELEASE = $(DOWNLOAD_MIRROR)/current
@@ -48,17 +54,17 @@ LATEST_SRPMS = $(LATEST_RELEASE)/source/SRPMS
PACKAGES_FILE = $(TOPLVL)/projects/common/packages
# Configuration file for autospec.
AUTOSPEC_CONF = $(TOPLVL)/projects/common/autospec.conf
AUTOSPEC_CONF = $(TOPLVL)/projects/common/conf/autospec.conf
# Set this variable to any non-empty value to use the package mappings stored
# 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
# Package manager config file. Default to the in-tree copy of dnf.conf.
PM_CONF = $(TOPLVL)/projects/common/conf/dnf.conf
# Mock configuration file. Default to the in-tree copy.
MOCK_CONF = $(TOPLVL)/projects/common/koji-client-files/clear.cfg
MOCK_CONF = $(TOPLVL)/projects/common/conf/clear.cfg
# Include any site local configuration variables. These variables may override
+8 -2
View File
@@ -10,6 +10,7 @@ include $(TOPLVL)/projects/common/Makefile.shared
SHELL = /bin/bash
PKGS = $(shell cat $(PACKAGES_FILE))
PKGS_LOCAL = $(sort $(filter ${PKGS},$(subst packages/,,$(wildcard packages/*))))
proj_PKGS = $(addprefix proj_,$(PROJ_PKGS))
clone_PKGS = $(addprefix clone_,$(PKGS))
@@ -64,7 +65,7 @@ cvecheck:
#help of merge commits, while displaying any changes since your last pull. It is
#help silent if there are no changes.
.PHONY: pull ${PULL_PKGS}
PULL_PKGS:= $(addprefix PULL_projects/,$(PROJ_PKGS)) $(addprefix PULL_packages/,$(PKGS))
PULL_PKGS:= $(addprefix PULL_projects/,$(PROJ_PKGS)) $(addprefix PULL_packages/,${PKGS_LOCAL})
${PULL_PKGS}:
@p=$(patsubst PULL_%,%,$@) ; \
if [ ! -d "$$p/.git" ]; then echo "Nothing to pull for $$p - $$p/.git missing"; exit 0; fi; \
@@ -191,12 +192,16 @@ 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
#help process.
#help Use MOCK_OPTS environment varible to pass down arbitrary mock options
#help to autospec.
#help For more information about autospec, see the project page on Github https://github.com/clearlinux/autospec
autospecnew: localreponotice
@if [ -z $(NAME) ] || [ -z $(URL) ]; then \
echo "Please specify NAME and URL. The ARCHIVES variable is optional."; \
exit 1; \
fi
-$(MAKE) clone_$(NAME)
@if [ ! -d $(TOPLVL)/packages/$(NAME)/.git ]; then \
echo "no remote repository found, creating new package repository and running autospec"; \
mkdir -p $(TOPLVL)/packages/$(NAME); \
@@ -215,6 +220,7 @@ autospecnew: localreponotice
--name $(NAME) \
--archives $(ARCHIVES) \
--mock-config $(MOCK_CONFIG_VAL) \
--mock-opts "$(MOCK_OPTS)" \
$${SETVERSION:+ --version $${SETVERSION}} \
${NON_INTERACTIVE} ${SKIP_GIT} ${CLEANUP} \
$(URL); \
BIN
View File
Binary file not shown.
+69 -36
View File
@@ -31,43 +31,13 @@ $ ./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
documented in the script's `--help` output.
The script accepts several options, or no options at all. The options are
documented in the script's `--help` output. Note that if you are supplying any
of the three Koji cert options (`-k`, `-s`, or `-c`), the other two options
must be supplied as well.
### Manual setup
On your Clear Linux system, create a workspace for Clear Linux development
work:
```
$ mkdir clearlinux
```
Clone this repo into a `projects` directory within the workspace:
```
$ cd clearlinux
$ mkdir projects
$ git clone https://github.com/clearlinux/common projects/common
```
Create the toplevel tooling Makefile:
```
$ ln -s projects/common/Makefile.toplevel Makefile
```
Clone all Clear Linux package and project repositories:
```
$ make clone
```
Note: You can clone the repos in parallel by using make's `-j` option.
At this point, the `packages` directory will contain all Clear Linux package
repos, and `projects` will contain common, clr-bundles, and autospec repos.
If you do not wish to run the user-setup script, see the "Manual setup" section
below for hints about how to initialize the tooling workspace.
## Example usage
@@ -141,3 +111,66 @@ package, a `make bump` command is available for this purpose.
$ make bump
$ make build
```
## Other topics
### Customizing the mock config
In the past, the various make commands that call `mock` required a mock config
installed at `/etc/mock/clear.cfg`. However, at present, the commands will
instead use the mock config within this repo (`conf/clear.cfg`).
If you wish to use a custom mock config, you must override the `MOCK_CONF`
variable to specify a different value to pass to mock's `-r` option. The value
is either a full path that ends with `.cfg`, or a config NAME installed at
`/etc/mock/<NAME>.cfg`. You can override the `MOCK_CONF` config variable by
redefining it in `Makefile.config.site_local`, which must reside at the
toplevel directory in this repo.
For example, to retain the old behavior of mock using `/etc/mock/clear.cfg`,
add this line to `Makefile.config.site_local`:
```
MOCK_CONF = /etc/mock/clear.cfg
```
If `Makefile.config.site_local` doesn't exist already, create it.
### Manual setup
If you did not run the user-setup script (see "Automated setup" section above),
you will want to set up the developer tooling workspace manually. This section
provides general documentation for the manual setup process, and it is not
meant to be exhaustive.
On your Clear Linux system, create a workspace for Clear Linux development
work:
```
$ mkdir clearlinux
```
Clone this repo into a `projects` directory within the workspace:
```
$ cd clearlinux
$ mkdir projects
$ git clone https://github.com/clearlinux/common projects/common
```
Create the toplevel tooling Makefile:
```
$ ln -s projects/common/Makefile.toplevel Makefile
```
Clone all Clear Linux package and project repositories:
```
$ make clone
```
Note: You can clone the repos in parallel by using make's `-j` option.
At this point, the `packages` directory will contain all Clear Linux package
repos, and `projects` will contain common, clr-bundles, and autospec repos.
+31
View File
@@ -0,0 +1,31 @@
# Configuration files
This directory contains various configuration files used by the developer
tooling framework.
Unless otherwise noted in the config file documentation below, the config files
can be modified with custom, site-local changes by modifying a variable in
`Makefile.config.site_local` to point to a location of your choice (e.g.
somewhere in `/etc`). The framework will then read the config file from the
location you have specified instead, so copy the in-tree copy to that location
as a starting point if you need to.
* `autospec.conf`: default Autospec configuration file used by `make autospec`
and `make autospecnew`. All configuration is commented out by default, so
default Autospec settings are used. Config variable: `AUTOSPEC_CONF`
* `clear.cfg`: default Mock configuration file used by various targets that
call out to Mock. Config variable: `MOCK_CONF`
* `dnf.conf`: DNF conf for use as the package manager configuration file, made
available for the framework's local repo support. Config variable: `PM_CONF`
* `yum.conf`: YUM conf for use as the package manager configuration file, made
available for the framework's local repo support. Config variable: `PM_CONF`
* `koji.conf`: template Koji configuration file. It is installed by
`user-setup.sh` to `/etc/koji.conf`, and the in-tree copy is not used. If you
are using Koji with the framework, you will need to modify `/etc/koji.conf`
according to how the Koji instance is set up for your environment. Configuring
the installation location via `Makefile.config.site_local` is not possible at
the moment but is a planned feature.
+5 -1
View File
@@ -18,6 +18,10 @@
# 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 to dnf/yum config, used for generating whatrequires. It can be an absolute
# path or a path relative to this autospec.conf.
#yum_conf =
# Path to autospec failed patterns directory, used to match build failure lines to
# package dependencies.
#failed_pattern_dir =
@@ -8,15 +8,18 @@ config_opts['useradd'] = '/usr/sbin/useradd -m -u %(uid)s -g %(gid)s -d %(home)s
config_opts['plugin_conf']['ccache_enable'] = False
config_opts['releasever'] = 'clear'
config_opts['package_manager'] = 'dnf'
config_opts['chrootgroup'] = 'mockbuild'
config_opts['use_bootstrap_container'] = False
config_opts['yum.conf'] = """
config_opts['dnf.conf'] = """
[main]
cachedir=/var/cache/yum
cachedir=/var/cache/dnf
keepcache=1
debuglevel=1
reposdir=/dev/null
logfile=/var/log/yum.log
logfile=/var/log/dnf.log
retries=20
obsoletes=1
gpgcheck=0
+24
View File
@@ -0,0 +1,24 @@
[main]
keepcache=1
debuglevel=1
logfile=/var/log/dnf.log
exactarch=1
obsoletes=1
gpgcheck=0
plugins=0
retries=10
installonly_limit=3
reposdir=/root/mash
[clear]
name=Clear
baseurl=https://cdn.download.clearlinux.org/current/x86_64/os/
enabled=1
gpgcheck=0
[clear-source]
name=Clear sources
failovermethod=priority
baseurl=https://cdn.download.clearlinux.org/current/source/SRPMS/
enabled=1
gpgcheck=0
+1 -1
View File
@@ -82,7 +82,7 @@ sub find_file {
return $file;
}
open(BUILD_LOG, '<', "results/build.log") or die $!;
open(BUILD_LOG, '<', "results/logs/build.log") or die $!;
while (<BUILD_LOG>) {
if($_ =~ /(\S+):([0-9]*):([0-9]*): note: (basic block|loop) (vectorized)/) {
$fmv->{s_name} = (split('/',$1))[-1];
+711 -28
View File
File diff suppressed because it is too large Load Diff
+1 -1
View File
@@ -23,7 +23,7 @@ if [ "$#" -eq 0 ]; then
fi
if [ ! -e /etc/yum.conf ]; then
echo "Error: yum.conf is missing. Please copy projects/common/image-creator/yum.conf to /etc"
echo "Error: yum.conf is missing. Please copy projects/common/conf/yum.conf to /etc"
exit 1
fi
+1
View File
@@ -54,4 +54,5 @@ qemu-system-x86_64 \
-drive file="$IMAGE",if=virtio,aio=threads,format=raw \
-netdev user,id=mynet0,hostfwd=tcp::${VMN}0022-:22,hostfwd=tcp::${VMN}2375-:2375 \
-device virtio-net-pci,netdev=mynet0 \
-device virtio-rng-pci \
-debugcon file:debug.log -global isa-debugcon.iobase=0x402 $@
+133 -100
View File
@@ -1,102 +1,131 @@
#!/bin/sh
#!/bin/bash
SCRIPT=$(/usr/bin/basename $0)
PEM=""
SERVERCA=""
CLIENTCA=""
WORKSPACE="clearlinux"
PACKAGE_REPOS=
help() {
printf "%s\n" >&2 "Usage: $SCRIPT [options]" \
"" \
"Options:" \
"-k --client-cert PEM_FILE: Enable client user cert for koji configuration; requires a PEM file argument" \
"-s --server-ca PEM_FILE: Enable server CA cert for koji configuration; requires a PEM file argument" \
"-c --client-ca PEM_FILE: Enable client CA cert for koji configuration; requires a PEM file argument" \
""
printf "%s\n" >&2 "Usage: $SCRIPT [options]" \
"" \
"Options:" \
"" \
"-d --directory NAME: Set up workspace in the given directory." \
"-a --clone-packages: Clone all package repos." \
"-j --jobs [NUM]: Clone repos with NUM jobs. If NUM is not given, it is set to the available CPU count." \
"" \
"-k --client-cert PEM_FILE: Enable client user cert for koji configuration; requires a PEM file argument" \
"-s --server-ca PEM_FILE: Enable server CA cert for koji configuration; requires a PEM file argument" \
"-c --client-ca PEM_FILE: Enable client CA cert for koji configuration; requires a PEM file argument" \
""
}
error() {
echo -e "Error: $1\n" >&2
help
exit 1
}
while [ $# -gt 0 ]; do
case "$1" in
"--help"|"-h")
help
exit 0
;;
"--client-cert"|"-k")
shift
PEM="$PWD/$1"
;;
"--server-ca"|"-s")
shift
SERVERCA="$PWD/$1"
;;
"--client-ca"|"-c")
shift
CLIENTCA="$PWD/$1"
;;
*)
help
exit 1
;;
esac
shift
case "$1" in
"--help"|"-h")
help
exit 0
;;
"--client-cert"|"-k")
shift
PEM="$(realpath $1)"
;;
"--server-ca"|"-s")
shift
SERVERCA="$(realpath $1)"
;;
"--client-ca"|"-c")
shift
CLIENTCA="$(realpath $1)"
;;
"--jobs"|"-j")
if echo "$2" | grep -qx "[1-9][0-9]*"; then
shift
JOBS="$1"
elif [ -f /proc/cpuinfo ]; then
JOBS=$(grep -Ec '^processor.*:.*[0-9]+$' /proc/cpuinfo)
fi
;;
"--directory"|"-d")
[ -z "$2" ] && error "Must supply a directory name to the -d option"
[ "${2:0:1}" = "-" ] && error "Directory name cannot begin with \"-\""
shift
WORKSPACE="$1"
;;
"--clone-packages"|"-a")
PACKAGE_REPOS=1
;;
*)
help
exit 1
;;
esac
shift
done
error() {
echo -e "Error: $1\n" >&2
help
exit 1
}
if [ -z "$PEM" ] && [ -z "$SERVERCA" ] && [ -z "$CLIENTCA" ]; then
USE_KOJI=
USE_KOJI=
else
if [ -z "$PEM" ] || [ -z "$SERVERCA" ] || [ -z "$CLIENTCA" ]; then
error "Must specify all three command line options (or none)"
fi
if [ ! -f "$PEM" ]; then
error "Missing koji client PEM key file"
fi
if [ ! -f "$SERVERCA" ]; then
error "Missing koji server CA PEM file"
fi
if [ ! -f "$CLIENTCA" ]; then
error "Missing koji client CA PEM file"
fi
USE_KOJI="yes"
if [ -z "$PEM" ] || [ -z "$SERVERCA" ] || [ -z "$CLIENTCA" ]; then
error "Must specify all three command line options (or none)"
fi
if [ ! -f "$PEM" ]; then
error "Missing koji client PEM key file"
fi
if [ ! -f "$SERVERCA" ]; then
error "Missing koji server CA PEM file"
fi
if [ ! -f "$CLIENTCA" ]; then
error "Missing koji client CA PEM file"
fi
USE_KOJI="yes"
fi
if [ -n "$JOBS" ]; then
JOBS_ARG="-j $JOBS"
fi
if [ -d "$WORKSPACE" ]; then
error "Directory \"$WORKSPACE\" already exists. \
Either remove this workspace, or use a different workspace name."
fi
required_progs() {
local bindir="/usr/bin"
for f in git mock rpm rpmbuild ; do
[ ! -x "${bindir}/${f}" ] && missing+="${f} "
done
[ "$PEM" ] && [ ! -x /usr/bin/koji ] && missing+="koji "
if [ -n "$missing" ]; then
echo "Install the following programs and re-run this script:" >&2
echo $missing >&2
echo 'All programs should be provided in the "os-clr-on-clr" bundle.' >&2
exit 1
fi
local bindir="/usr/bin"
for f in git mock rpm rpmbuild ; do
[ ! -x "${bindir}/${f}" ] && missing+="${f} "
done
[ "$PEM" ] && [ ! -x /usr/bin/koji ] && missing+="koji "
if [ -n "$missing" ]; then
echo "Install the following programs and re-run this script:" >&2
echo $missing >&2
echo 'All programs should be provided in the "os-clr-on-clr" bundle.' >&2
exit 1
fi
}
required_progs
echo 'Initializing development workspace in "clearlinux" . . .'
if [ -d "clearlinux" ]; then
echo 'Directory "clearlinux" already exists in current directory.' >&2
echo "Cannot initialize workspace." >&2
exit 1
fi
echo "Initializing development workspace in \"$WORKSPACE\" . . ."
mkdir clearlinux
cd clearlinux
mkdir "$WORKSPACE"
cd "$WORKSPACE"
echo "Setting up common repo . . ."
mkdir projects
git clone https://github.com/clearlinux/common projects/common
if [ $? -ne 0 ]; then
echo "Failed to clone common repo." >&2
exit 1
echo "Failed to clone common repo." >&2
exit 1
fi
# Finish setup for packages/projects hierarchy
@@ -105,48 +134,52 @@ mkdir -p packages/common
ln -sf ../../projects/common/Makefile.common packages/common/Makefile.common
if [ "$USE_KOJI" ]; then
echo "Setting up koji certs . . ."
mkdir -p ~/.koji
cp "$PEM" ~/.koji/client.crt
cp "$CLIENTCA" ~/.koji/clientca.crt
cp "$SERVERCA" ~/.koji/serverca.crt
echo "Setting up koji certs . . ."
mkdir -p ~/.koji
cp "$PEM" ~/.koji/client.crt
cp "$CLIENTCA" ~/.koji/clientca.crt
cp "$SERVERCA" ~/.koji/serverca.crt
if [ ! -f /etc/koji.conf ]; then
echo "Setting up koji config . . ."
sudo cp projects/common/koji-client-files/koji.conf /etc
fi
fi
if [ ! -f /etc/mock/clear.cfg ]; then
echo "Setting up mock config . . ."
sudo mkdir -p /etc/mock
sudo cp projects/common/koji-client-files/clear.cfg /etc/mock
if [ ! -f /etc/koji.conf ]; then
echo "Setting up koji config . . ."
sudo cp projects/common/conf/koji.conf /etc
fi
fi
echo "Adding user to kvm group . . ."
sudo usermod -a -G kvm $USER
echo "Cloning special project repositories . . ."
make clone-projects
make ${JOBS_ARG} clone-projects
if [ -z "$NO_PACKAGE_REPOS" ]; then
echo "Cloning all package repositories . . ."
make clone-packages
if [ -n "$PACKAGE_REPOS" ]; then
echo "Cloning all package repositories . . ."
make ${JOBS_ARG} clone-packages
fi
echo "Creating mix workspace . . ."
mkdir -p mix
if [ "$USE_KOJI" ]; then
echo "Testing koji installation . . ."
if koji moshimoshi; then
echo -en "\n************************\n\n"
echo "Koji installed and configured successfully"
else
echo -en "\n************************\n\n"
echo "Error with koji installation or configuration" >&2
exit 1
fi
echo "Testing koji installation . . ."
if koji moshimoshi; then
echo -en "\n************************\n\n"
echo "Koji installed and configured successfully"
else
echo -en "\n************************\n\n"
echo "Error with koji installation or configuration" >&2
exit 1
fi
fi
echo -en "\n************************\n"
echo 'Workspace has been set up in the "clearlinux" directory'
echo "Workspace has been set up in \"$WORKSPACE\""
if [ -z "$PACKAGE_REPOS" ]; then
echo "NOTE: To clone all package repos, run \"cd $WORKSPACE; make [-j NUM] clone-packages\""
echo "NOTE: To clone a single package repo with NAME, run \"cd $WORKSPACE; make clone_NAME\""
fi
echo 'NOTE: logout and log back in to finalize the setup process'
# vi: ft=sh sw=2 et sts=2