parent
dceb664858
commit
648230526f
@ -1,224 +0,0 @@
|
|||||||
From 3590ab0a355adaf63c7a5f068f7a6ac0eb5e8b05 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mikolaj Izdebski <mizdebsk@redhat.com>
|
|
||||||
Date: Feb 21 2019 12:42:18 +0000
|
|
||||||
Subject: Allow generating separate src repo for build repos
|
|
||||||
|
|
||||||
|
|
||||||
Fixes #1266
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/builder/kojid b/builder/kojid
|
|
||||||
index 27fe523..0fffb89 100755
|
|
||||||
--- a/builder/kojid
|
|
||||||
+++ b/builder/kojid
|
|
||||||
@@ -4990,13 +4990,15 @@ class NewRepoTask(BaseTaskHandler):
|
|
||||||
Methods = ['newRepo']
|
|
||||||
_taskWeight = 0.1
|
|
||||||
|
|
||||||
- def handler(self, tag, event=None, src=False, debuginfo=False):
|
|
||||||
+ def handler(self, tag, event=None, src=False, debuginfo=False, separate_src=False):
|
|
||||||
tinfo = self.session.getTag(tag, strict=True, event=event)
|
|
||||||
kwargs = {}
|
|
||||||
if event is not None:
|
|
||||||
kwargs['event'] = event
|
|
||||||
if src:
|
|
||||||
kwargs['with_src'] = True
|
|
||||||
+ if separate_src:
|
|
||||||
+ kwargs['with_separate_src'] = True
|
|
||||||
if debuginfo:
|
|
||||||
kwargs['with_debuginfo'] = True
|
|
||||||
repo_id, event_id = self.session.host.repoInit(tinfo['id'], **kwargs)
|
|
||||||
diff --git a/cli/koji_cli/commands.py b/cli/koji_cli/commands.py
|
|
||||||
index a2b2b2b..1a2ace6 100644
|
|
||||||
--- a/cli/koji_cli/commands.py
|
|
||||||
+++ b/cli/koji_cli/commands.py
|
|
||||||
@@ -7011,7 +7011,8 @@ def handle_regen_repo(options, session, args):
|
|
||||||
parser.add_option("--target", action="store_true", help=_("Interpret the argument as a build target name"))
|
|
||||||
parser.add_option("--nowait", action="store_true", help=_("Don't wait on for regen to finish"))
|
|
||||||
parser.add_option("--debuginfo", action="store_true", help=_("Include debuginfo rpms in repo"))
|
|
||||||
- parser.add_option("--source", "--src", action="store_true", help=_("Include source rpms in the repo"))
|
|
||||||
+ parser.add_option("--source", "--src", action="store_true", help=_("Include source rpms in each of repos"))
|
|
||||||
+ parser.add_option("--separate-source", "--separate-src", action="store_true", help=_("Include source rpms in separate src repo"))
|
|
||||||
(suboptions, args) = parser.parse_args(args)
|
|
||||||
if len(args) == 0:
|
|
||||||
parser.error(_("A tag name must be specified"))
|
|
||||||
@@ -7047,6 +7048,8 @@ def handle_regen_repo(options, session, args):
|
|
||||||
repo_opts['debuginfo'] = True
|
|
||||||
if suboptions.source:
|
|
||||||
repo_opts['src'] = True
|
|
||||||
+ if suboptions.separate_source:
|
|
||||||
+ repo_opts['separate_src'] = True
|
|
||||||
task_id = session.newRepo(tag, **repo_opts)
|
|
||||||
print("Regenerating repo for tag: %s" % tag)
|
|
||||||
print("Created task: %d" % task_id)
|
|
||||||
diff --git a/hub/kojihub.py b/hub/kojihub.py
|
|
||||||
index 46b8f3e..9844861 100644
|
|
||||||
--- a/hub/kojihub.py
|
|
||||||
+++ b/hub/kojihub.py
|
|
||||||
@@ -2345,7 +2345,7 @@ def maven_tag_archives(tag_id, event_id=None, inherit=True):
|
|
||||||
yield archive
|
|
||||||
return _iter_archives()
|
|
||||||
|
|
||||||
-def repo_init(tag, with_src=False, with_debuginfo=False, event=None):
|
|
||||||
+def repo_init(tag, with_src=False, with_debuginfo=False, event=None, with_separate_src=False):
|
|
||||||
"""Create a new repo entry in the INIT state, return full repo data
|
|
||||||
|
|
||||||
Returns a dictionary containing
|
|
||||||
@@ -2355,9 +2355,11 @@ def repo_init(tag, with_src=False, with_debuginfo=False, event=None):
|
|
||||||
state = koji.REPO_INIT
|
|
||||||
tinfo = get_tag(tag, strict=True, event=event)
|
|
||||||
koji.plugin.run_callbacks('preRepoInit', tag=tinfo, with_src=with_src, with_debuginfo=with_debuginfo,
|
|
||||||
- event=event, repo_id=None)
|
|
||||||
+ event=event, repo_id=None, with_separate_src=with_separate_src)
|
|
||||||
tag_id = tinfo['id']
|
|
||||||
repo_arches = {}
|
|
||||||
+ if with_separate_src:
|
|
||||||
+ repo_arches['src'] = 1
|
|
||||||
if tinfo['arches']:
|
|
||||||
for arch in tinfo['arches'].split():
|
|
||||||
arch = koji.canonArch(arch)
|
|
||||||
@@ -2420,6 +2422,8 @@ def repo_init(tag, with_src=False, with_debuginfo=False, event=None):
|
|
||||||
if with_src:
|
|
||||||
for repoarch in repo_arches:
|
|
||||||
pkglist[repoarch].write(relpath)
|
|
||||||
+ if with_separate_src:
|
|
||||||
+ pkglist[arch].write(relpath)
|
|
||||||
elif arch == 'noarch':
|
|
||||||
for repoarch in repo_arches:
|
|
||||||
pkglist[repoarch].write(relpath)
|
|
||||||
@@ -2474,7 +2478,7 @@ def repo_init(tag, with_src=False, with_debuginfo=False, event=None):
|
|
||||||
_write_maven_repo_metadata(artifact_dir, artifacts)
|
|
||||||
|
|
||||||
koji.plugin.run_callbacks('postRepoInit', tag=tinfo, with_src=with_src, with_debuginfo=with_debuginfo,
|
|
||||||
- event=event, repo_id=repo_id)
|
|
||||||
+ event=event, repo_id=repo_id, with_separate_src=with_separate_src)
|
|
||||||
return [repo_id, event_id]
|
|
||||||
|
|
||||||
def _write_maven_repo_metadata(destdir, artifacts):
|
|
||||||
@@ -2519,7 +2523,8 @@ def dist_repo_init(tag, keys, task_opts):
|
|
||||||
# note: we need to match args from the other preRepoInit callback
|
|
||||||
koji.plugin.run_callbacks('preRepoInit', tag=tinfo, with_src=False,
|
|
||||||
with_debuginfo=False, event=event, repo_id=None,
|
|
||||||
- dist=True, keys=keys, arches=arches, task_opts=task_opts)
|
|
||||||
+ dist=True, keys=keys, arches=arches, task_opts=task_opts,
|
|
||||||
+ with_separate_src=False)
|
|
||||||
if not event:
|
|
||||||
event = get_event()
|
|
||||||
repo_id = nextval('repo_id_seq')
|
|
||||||
@@ -2540,7 +2545,7 @@ def dist_repo_init(tag, keys, task_opts):
|
|
||||||
koji.plugin.run_callbacks('postRepoInit', tag=tinfo, with_src=False,
|
|
||||||
with_debuginfo=False, event=event, repo_id=repo_id,
|
|
||||||
dist=True, keys=keys, arches=arches, task_opts=task_opts,
|
|
||||||
- repodir=repodir)
|
|
||||||
+ repodir=repodir, with_reparate_src=False)
|
|
||||||
return repo_id, event
|
|
||||||
|
|
||||||
|
|
||||||
@@ -10521,7 +10526,7 @@ class RootExports(object):
|
|
||||||
task_opts['event'] = event_id
|
|
||||||
return make_task('distRepo', [tag, repo_id, keys, task_opts], priority=15, channel='createrepo')
|
|
||||||
|
|
||||||
- def newRepo(self, tag, event=None, src=False, debuginfo=False):
|
|
||||||
+ def newRepo(self, tag, event=None, src=False, debuginfo=False, separate_src=False):
|
|
||||||
"""Create a newRepo task. returns task id"""
|
|
||||||
if context.session.hasPerm('regen-repo'):
|
|
||||||
pass
|
|
||||||
@@ -10532,6 +10537,8 @@ class RootExports(object):
|
|
||||||
opts['event'] = event
|
|
||||||
if src:
|
|
||||||
opts['src'] = True
|
|
||||||
+ if separate_src:
|
|
||||||
+ opts['separate_src'] = True
|
|
||||||
if debuginfo:
|
|
||||||
opts['debuginfo'] = True
|
|
||||||
args = koji.encode_args(tag, **opts)
|
|
||||||
@@ -12699,11 +12706,11 @@ class HostExports(object):
|
|
||||||
|
|
||||||
return br.updateArchiveList(archives, project)
|
|
||||||
|
|
||||||
- def repoInit(self, tag, with_src=False, with_debuginfo=False, event=None):
|
|
||||||
+ def repoInit(self, tag, with_src=False, with_debuginfo=False, event=None, with_separate_src=False):
|
|
||||||
"""Initialize a new repo for tag"""
|
|
||||||
host = Host()
|
|
||||||
host.verify()
|
|
||||||
- return repo_init(tag, with_src=with_src, with_debuginfo=with_debuginfo, event=event)
|
|
||||||
+ return repo_init(tag, with_src=with_src, with_debuginfo=with_debuginfo, event=event, with_separate_src=with_separate_src)
|
|
||||||
|
|
||||||
def repoAddRPM(self, repo_id, path):
|
|
||||||
"""Add an uploaded rpm to a repo"""
|
|
||||||
diff --git a/koji/tasks.py b/koji/tasks.py
|
|
||||||
index ba4cd31..90656b8 100644
|
|
||||||
--- a/koji/tasks.py
|
|
||||||
+++ b/koji/tasks.py
|
|
||||||
@@ -200,7 +200,7 @@ LEGACY_SIGNATURES = {
|
|
||||||
[['builds', 'target', 'opts'], None, None, (None,)],
|
|
||||||
],
|
|
||||||
'newRepo' : [
|
|
||||||
- [['tag', 'event', 'src', 'debuginfo'], None, None, (None, False, False)],
|
|
||||||
+ [['tag', 'event', 'src', 'debuginfo', 'separate_src'], None, None, (None, False, False, False)],
|
|
||||||
],
|
|
||||||
'createImage' : [
|
|
||||||
[['name', 'version', 'release', 'arch', 'target_info', 'build_tag', 'repo_info', 'inst_tree', 'opts'], None, None, (None,)],
|
|
||||||
diff --git a/tests/test_cli/test_regen_repo.py b/tests/test_cli/test_regen_repo.py
|
|
||||||
index 43eff0b..90f16b1 100644
|
|
||||||
--- a/tests/test_cli/test_regen_repo.py
|
|
||||||
+++ b/tests/test_cli/test_regen_repo.py
|
|
||||||
@@ -168,11 +168,13 @@ class TestRegenRepo(utils.CliTestCase):
|
|
||||||
(Specify the --help global option for a list of other help options)
|
|
||||||
|
|
||||||
Options:
|
|
||||||
- -h, --help show this help message and exit
|
|
||||||
- --target Interpret the argument as a build target name
|
|
||||||
- --nowait Don't wait on for regen to finish
|
|
||||||
- --debuginfo Include debuginfo rpms in repo
|
|
||||||
- --source, --src Include source rpms in the repo
|
|
||||||
+ -h, --help show this help message and exit
|
|
||||||
+ --target Interpret the argument as a build target name
|
|
||||||
+ --nowait Don't wait on for regen to finish
|
|
||||||
+ --debuginfo Include debuginfo rpms in repo
|
|
||||||
+ --source, --src Include source rpms in each of repos
|
|
||||||
+ --separate-source, --separate-src
|
|
||||||
+ Include source rpms in separate src repo
|
|
||||||
""" % self.progname)
|
|
||||||
|
|
||||||
|
|
||||||
diff --git a/util/kojira b/util/kojira
|
|
||||||
index 8e68cfd..a93d966 100755
|
|
||||||
--- a/util/kojira
|
|
||||||
+++ b/util/kojira
|
|
||||||
@@ -671,6 +671,7 @@ class RepoManager(object):
|
|
||||||
|
|
||||||
debuginfo_pat = self.options.debuginfo_tags.split()
|
|
||||||
src_pat = self.options.source_tags.split()
|
|
||||||
+ separate_src_pat = self.options.separate_source_tags.split()
|
|
||||||
order = sorted(self.needed_tags.values(), key=lambda t: t['score'])
|
|
||||||
for tag in order:
|
|
||||||
if running_tasks >= self.options.max_repo_tasks:
|
|
||||||
@@ -699,6 +700,8 @@ class RepoManager(object):
|
|
||||||
taskopts['debuginfo'] = True
|
|
||||||
if koji.util.multi_fnmatch(tagname, src_pat):
|
|
||||||
taskopts['src'] = True
|
|
||||||
+ if koji.util.multi_fnmatch(tagname, separate_src_pat):
|
|
||||||
+ taskopts['separate_src'] = True
|
|
||||||
maven = tag['taginfo']['maven_support']
|
|
||||||
if maven:
|
|
||||||
if running_tasks_maven >= self.options.max_repo_tasks_maven:
|
|
||||||
@@ -836,6 +839,7 @@ def get_options():
|
|
||||||
defaults = {'with_src': False,
|
|
||||||
'debuginfo_tags': '',
|
|
||||||
'source_tags': '',
|
|
||||||
+ 'separate_source_tags': '',
|
|
||||||
'ignore_tags': '',
|
|
||||||
'verbose': False,
|
|
||||||
'debug': False,
|
|
||||||
@@ -876,7 +880,7 @@ def get_options():
|
|
||||||
'recent_tasks_lifetime')
|
|
||||||
str_opts = ('topdir', 'server', 'user', 'password', 'logfile', 'principal', 'keytab', 'krbservice',
|
|
||||||
'cert', 'ca', 'serverca', 'debuginfo_tags',
|
|
||||||
- 'source_tags', 'ignore_tags') # FIXME: remove ca here
|
|
||||||
+ 'source_tags', 'separate_source_tags', 'ignore_tags') # FIXME: remove ca here
|
|
||||||
bool_opts = ('with_src','verbose','debug','ignore_stray_repos', 'offline_retry',
|
|
||||||
'krb_rdns', 'krb_canon_host', 'no_ssl_verify')
|
|
||||||
for name in config.options(section):
|
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From a66b4ddfb4399cdc03ccc6f66acd634c692ee88f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
Date: Apr 17 2019 05:38:03 +0000
|
|
||||||
Subject: kojid: Download only 'repomd.xml'
|
|
||||||
|
|
||||||
|
|
||||||
We have pretty slow connection from s390x koji which helped to uncover
|
|
||||||
this part. Kojid downloads all files from repomd.xml (incl. filelists)
|
|
||||||
which is really big. What we really want is just find location of
|
|
||||||
'origin' (used later in the code).
|
|
||||||
|
|
||||||
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/builder/kojid b/builder/kojid
|
|
||||||
index 75f8a7d..5110d04 100755
|
|
||||||
--- a/builder/kojid
|
|
||||||
+++ b/builder/kojid
|
|
||||||
@@ -739,6 +739,9 @@ class BuildRoot(object):
|
|
||||||
h.setopt(librepo.LRO_REPOTYPE, librepo.LR_YUMREPO)
|
|
||||||
h.setopt(librepo.LRO_URLS, [repo_url])
|
|
||||||
h.setopt(librepo.LRO_DESTDIR, tmpdir)
|
|
||||||
+ # We are using this just to find out location of 'origin',
|
|
||||||
+ # we don't even need to download it since we use openRemoteFile
|
|
||||||
+ h.setopt(librepo.LRO_YUMDLIST, [])
|
|
||||||
h.perform(r)
|
|
||||||
pkgorigins = r.getinfo(librepo.LRR_YUM_REPOMD)['origin']['location_href']
|
|
||||||
koji.util.rmtree(tmpdir)
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
From 3c5ddb8dab9a5736f03b6d60593adc9170304af3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mike McLean <mikem@redhat.com>
|
|
||||||
Date: May 03 2019 14:57:43 +0000
|
|
||||||
Subject: [PATCH 1/2] handle bare merge mode
|
|
||||||
|
|
||||||
|
|
||||||
Fixes https://pagure.io/koji/issue/1404
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/builder/kojid b/builder/kojid
|
|
||||||
index 5110d04..e176266 100755
|
|
||||||
--- a/builder/kojid
|
|
||||||
+++ b/builder/kojid
|
|
||||||
@@ -5186,6 +5186,10 @@ class CreaterepoTask(BaseTaskHandler):
|
|
||||||
cmd = ['/usr/libexec/kojid/mergerepos',
|
|
||||||
'--mode', 'simple',
|
|
||||||
'--tempdir', self.workdir]
|
|
||||||
+ elif merge_mode == 'bare':
|
|
||||||
+ # "bare" merge mode for repos with modular metadata
|
|
||||||
+ # forces use of mergerepo_c
|
|
||||||
+ cmd = ['/usr/bin/mergerepo_c', '--pkgorigins']
|
|
||||||
elif self.options.use_createrepo_c:
|
|
||||||
cmd = ['/usr/bin/mergerepo_c', '--koji']
|
|
||||||
else:
|
|
||||||
diff --git a/koji/__init__.py b/koji/__init__.py
|
|
||||||
index 6e667ce..9c7101c 100644
|
|
||||||
--- a/koji/__init__.py
|
|
||||||
+++ b/koji/__init__.py
|
|
||||||
@@ -236,7 +236,7 @@ REPO_EXPIRED = REPO_STATES['EXPIRED']
|
|
||||||
REPO_DELETED = REPO_STATES['DELETED']
|
|
||||||
REPO_PROBLEM = REPO_STATES['PROBLEM']
|
|
||||||
|
|
||||||
-REPO_MERGE_MODES = set(['koji', 'simple'])
|
|
||||||
+REPO_MERGE_MODES = set(['koji', 'simple', 'dumb'])
|
|
||||||
|
|
||||||
# buildroot states
|
|
||||||
BR_STATES = Enum((
|
|
||||||
|
|
||||||
From 0da20019456c386aa44589c3f0529926fb426541 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Mike McLean <mikem@redhat.com>
|
|
||||||
Date: May 03 2019 16:54:54 +0000
|
|
||||||
Subject: [PATCH 2/2] fix mode name
|
|
||||||
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/koji/__init__.py b/koji/__init__.py
|
|
||||||
index 9c7101c..0b9b5bc 100644
|
|
||||||
--- a/koji/__init__.py
|
|
||||||
+++ b/koji/__init__.py
|
|
||||||
@@ -236,7 +236,7 @@ REPO_EXPIRED = REPO_STATES['EXPIRED']
|
|
||||||
REPO_DELETED = REPO_STATES['DELETED']
|
|
||||||
REPO_PROBLEM = REPO_STATES['PROBLEM']
|
|
||||||
|
|
||||||
-REPO_MERGE_MODES = set(['koji', 'simple', 'dumb'])
|
|
||||||
+REPO_MERGE_MODES = set(['koji', 'simple', 'bare'])
|
|
||||||
|
|
||||||
# buildroot states
|
|
||||||
BR_STATES = Enum((
|
|
||||||
|
|
@ -1,36 +0,0 @@
|
|||||||
From 403f0f8a44c8ee0fd44326ae4d11bafe79e1809a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Patrick Uiterwijk <patrick@puiterwijk.org>
|
|
||||||
Date: May 29 2019 15:31:52 +0000
|
|
||||||
Subject: Allow builder to attempt krb if gssapi is available
|
|
||||||
|
|
||||||
|
|
||||||
Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/builder/kojid b/builder/kojid
|
|
||||||
index be1cb26..91d4d69 100755
|
|
||||||
--- a/builder/kojid
|
|
||||||
+++ b/builder/kojid
|
|
||||||
@@ -69,6 +69,11 @@ except ImportError: # pragma: no cover
|
|
||||||
krbV = None
|
|
||||||
|
|
||||||
try:
|
|
||||||
+ import requests_kerberos
|
|
||||||
+except ImportError: # pragma: no cover
|
|
||||||
+ requests_kerberos = None
|
|
||||||
+
|
|
||||||
+try:
|
|
||||||
import librepo
|
|
||||||
import io
|
|
||||||
except ImportError:
|
|
||||||
@@ -6137,7 +6142,7 @@ if __name__ == "__main__":
|
|
||||||
quit("Error: Unable to log in. Bad credentials?")
|
|
||||||
except six.moves.xmlrpc_client.ProtocolError:
|
|
||||||
quit("Error: Unable to connect to server %s" % (options.server))
|
|
||||||
- elif krbV:
|
|
||||||
+ elif krbV or requests_kerberos:
|
|
||||||
krb_principal = options.krb_principal
|
|
||||||
if krb_principal is None:
|
|
||||||
krb_principal = options.host_principal_format % socket.getfqdn()
|
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From ad0da60a380499e7b1ed8ca84ce606b183f79e39 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Kevin Fenzi <kevin@scrye.com>
|
||||||
|
Date: Jul 19 2019 23:27:30 +0000
|
||||||
|
Subject: builder/kojid: revert using only 2 processors for xz compression and lower preset to 6
|
||||||
|
|
||||||
|
|
||||||
|
In c360c791ec24b567a16553dca38b24645dd80a36 we changed xz to use only
|
||||||
|
2 cpus for compression. That commit notes that xz threads are really
|
||||||
|
memory hungry. However, preset -9 is many times as memory hungry as
|
||||||
|
preset -6. If we switch to preset 6, xz compressed artifacts will be
|
||||||
|
a little bit larger, but will compress (and decompress!) a lot larger.
|
||||||
|
This is obviously a trade off, but I think lowering the preset and
|
||||||
|
using more cpus will be a better tradeoff.
|
||||||
|
|
||||||
|
This commit moves xz to preset 6 and using all cpus the builder has.
|
||||||
|
|
||||||
|
Signed-off-by: Kevin Fenzi <kevin@scrye.com>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/builder/kojid b/builder/kojid
|
||||||
|
index 3f84887..09a48a9 100755
|
||||||
|
--- a/builder/kojid
|
||||||
|
+++ b/builder/kojid
|
||||||
|
@@ -3989,7 +3989,7 @@ class BaseImageTask(OzImageTask):
|
||||||
|
'xz-cp-%s-%s.log' % (format, self.arch))
|
||||||
|
log_output(self.session, cmd[0], cmd, conlog, self.getUploadDir(),
|
||||||
|
logerror=1)
|
||||||
|
- cmd = ['/usr/bin/xz', '-z9T2', rawimg]
|
||||||
|
+ cmd = ['/usr/bin/xz', '-z6T0', rawimg]
|
||||||
|
conlog = os.path.join(self.workdir,
|
||||||
|
'xz-%s-%s.log' % (format, self.arch))
|
||||||
|
log_output(self.session, cmd[0], cmd, conlog, self.getUploadDir(),
|
||||||
|
|
@ -0,0 +1,76 @@
|
|||||||
|
From 88e92b61a4a4eacf5ccd14566ecfa473d6719a8f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Patrick Uiterwijk <patrick@puiterwijk.org>
|
||||||
|
Date: Aug 13 2019 11:35:14 +0000
|
||||||
|
Subject: [PATCH 1/2] Allow builder to attempt krb if gssapi is available
|
||||||
|
|
||||||
|
|
||||||
|
Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/builder/kojid b/builder/kojid
|
||||||
|
index 142a440..86af4e5 100755
|
||||||
|
--- a/builder/kojid
|
||||||
|
+++ b/builder/kojid
|
||||||
|
@@ -69,6 +69,11 @@ except ImportError: # pragma: no cover
|
||||||
|
krbV = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
+ import requests_kerberos
|
||||||
|
+except ImportError: # pragma: no cover
|
||||||
|
+ requests_kerberos = None
|
||||||
|
+
|
||||||
|
+try:
|
||||||
|
import librepo
|
||||||
|
import io
|
||||||
|
except ImportError:
|
||||||
|
@@ -6264,7 +6269,7 @@ if __name__ == "__main__":
|
||||||
|
quit("Error: Unable to log in. Bad credentials?")
|
||||||
|
except six.moves.xmlrpc_client.ProtocolError:
|
||||||
|
quit("Error: Unable to connect to server %s" % (options.server))
|
||||||
|
- elif krbV:
|
||||||
|
+ elif krbV or requests_kerberos:
|
||||||
|
krb_principal = options.krb_principal
|
||||||
|
if krb_principal is None:
|
||||||
|
krb_principal = options.host_principal_format % socket.getfqdn()
|
||||||
|
|
||||||
|
From 8b76e0d1af3b4e6d1faf04cbc9142c277c2cd613 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Tomas Kopecek <tkopecek@redhat.com>
|
||||||
|
Date: Aug 13 2019 11:53:16 +0000
|
||||||
|
Subject: [PATCH 2/2] fix krbV error handling
|
||||||
|
|
||||||
|
|
||||||
|
Fixes: https://pagure.io/koji/issue/1575
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
diff --git a/builder/kojid b/builder/kojid
|
||||||
|
index 86af4e5..73c2bf7 100755
|
||||||
|
--- a/builder/kojid
|
||||||
|
+++ b/builder/kojid
|
||||||
|
@@ -65,11 +65,13 @@ from koji.util import parseStatus, isSuccess, dslice, dslice_ex, to_list
|
||||||
|
|
||||||
|
try:
|
||||||
|
import krbV
|
||||||
|
+ Krb5Error = krbV.Krb5Error
|
||||||
|
except ImportError: # pragma: no cover
|
||||||
|
krbV = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
import requests_kerberos
|
||||||
|
+ Krb5Error = requests_kerberos.exceptions.RequestException
|
||||||
|
except ImportError: # pragma: no cover
|
||||||
|
requests_kerberos = None
|
||||||
|
|
||||||
|
@@ -6277,8 +6279,8 @@ if __name__ == "__main__":
|
||||||
|
session.krb_login(principal=krb_principal,
|
||||||
|
keytab=options.keytab,
|
||||||
|
ccache=options.ccache)
|
||||||
|
- except krbV.Krb5Error as e:
|
||||||
|
- quit("Kerberos authentication failed: '%s' (%s)" % (e.args[1], e.args[0]))
|
||||||
|
+ except Krb5Error as e:
|
||||||
|
+ quit("Kerberos authentication failed: %s" % e.args)
|
||||||
|
except socket.error as e:
|
||||||
|
quit("Could not connect to Kerberos authentication service: '%s'" % e.args[1])
|
||||||
|
else:
|
||||||
|
|
@ -1,96 +0,0 @@
|
|||||||
From 9828bc3dd8ed0679159aceb902409600b21f803c Mon Sep 17 00:00:00 2001
|
|
||||||
From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
Date: May 30 2019 18:45:46 +0000
|
|
||||||
Subject: Expose 'dynamic_buildrequires' mock setting
|
|
||||||
|
|
||||||
|
|
||||||
We need it in order to enable this feature in rawhide and any module
|
|
||||||
builds which depend on rpm:4.15 (by request in modulemd).
|
|
||||||
|
|
||||||
Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/0001-Expose-dynamic_buildrequires-mock-setting.patch b/0001-Expose-dynamic_buildrequires-mock-setting.patch
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..914b5a4
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/0001-Expose-dynamic_buildrequires-mock-setting.patch
|
|
||||||
@@ -0,0 +1,77 @@
|
|
||||||
+From cdecc416ec4cc5a5f29d0ff16318f68b562fcfd0 Mon Sep 17 00:00:00 2001
|
|
||||||
+From: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
+Date: Wed, 29 May 2019 08:13:01 +0200
|
|
||||||
+Subject: [PATCH] Expose 'dynamic_buildrequires' mock setting
|
|
||||||
+
|
|
||||||
+Signed-off-by: Igor Gnatenko <ignatenkobrain@fedoraproject.org>
|
|
||||||
+---
|
|
||||||
+ builder/kojid | 2 ++
|
|
||||||
+ docs/source/using_the_koji_build_system.rst | 2 ++
|
|
||||||
+ koji/__init__.py | 2 ++
|
|
||||||
+ tests/test_cli/test_add_tag.py | 4 +++-
|
|
||||||
+ 4 files changed, 9 insertions(+), 1 deletion(-)
|
|
||||||
+
|
|
||||||
+diff --git a/builder/kojid b/builder/kojid
|
|
||||||
+index d6714258..5fc64638 100755
|
|
||||||
+--- a/builder/kojid
|
|
||||||
++++ b/builder/kojid
|
|
||||||
+@@ -272,6 +272,8 @@ class BuildRoot(object):
|
|
||||||
+ opts['target_arch'] = self.target_arch
|
|
||||||
+ if 'mock.package_manager' in self.config['extra']:
|
|
||||||
+ opts['package_manager'] = self.config['extra']['mock.package_manager']
|
|
||||||
++ if 'mock.dynamic_buildrequires' in self.config['extra']:
|
|
||||||
++ opts['dynamic_buildrequires'] = self.config['extra']['mock.dynamic_buildrequires']
|
|
||||||
+ if self.internal_dev_setup is not None:
|
|
||||||
+ opts['internal_dev_setup'] = bool(self.internal_dev_setup)
|
|
||||||
+ output = koji.genMockConfig(self.name, self.br_arch, managed=True, **opts)
|
|
||||||
+diff --git a/docs/source/using_the_koji_build_system.rst b/docs/source/using_the_koji_build_system.rst
|
|
||||||
+index c3d5981b..d4664527 100644
|
|
||||||
+--- a/docs/source/using_the_koji_build_system.rst
|
|
||||||
++++ b/docs/source/using_the_koji_build_system.rst
|
|
||||||
+@@ -456,6 +456,8 @@ environment follows:
|
|
||||||
+ * `mock.new_chroot` - 0/1 value. If it is set, `--new-chroot` or
|
|
||||||
+ `--old-chroot` option is appended to any mock call. If it is not set,
|
|
||||||
+ mock's default behavior is used.
|
|
||||||
++* `mock.dynamic_buildrequires` - 0/1 value. If this is set, it will override
|
|
||||||
++ mock's default setting of `dynamic_buildrequires`.
|
|
||||||
+
|
|
||||||
+ Using Koji to control tasks
|
|
||||||
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
|
||||||
+diff --git a/koji/__init__.py b/koji/__init__.py
|
|
||||||
+index 64ab90d6..e105f7ee 100644
|
|
||||||
+--- a/koji/__init__.py
|
|
||||||
++++ b/koji/__init__.py
|
|
||||||
+@@ -1458,6 +1458,8 @@ def genMockConfig(name, arch, managed=False, repoid=None, tag_name=None, **opts)
|
|
||||||
+ }
|
|
||||||
+ if opts.get('package_manager'):
|
|
||||||
+ config_opts['package_manager'] = opts['package_manager']
|
|
||||||
++ if 'dynamic_buildrequires' in opts:
|
|
||||||
++ config_opts['dynamic_buildrequires'] = opts['dynamic_buildrequires']
|
|
||||||
+
|
|
||||||
+ # bind_opts are used to mount parts (or all of) /dev if needed.
|
|
||||||
+ # See kojid::LiveCDTask for a look at this option in action.
|
|
||||||
+diff --git a/tests/test_cli/test_add_tag.py b/tests/test_cli/test_add_tag.py
|
|
||||||
+index 422b9245..47112c51 100644
|
|
||||||
+--- a/tests/test_cli/test_add_tag.py
|
|
||||||
++++ b/tests/test_cli/test_add_tag.py
|
|
||||||
+@@ -56,7 +56,8 @@ class TestAddTag(utils.CliTestCase):
|
|
||||||
+ '--maven-support', '--include-all']
|
|
||||||
+ # extra fields,
|
|
||||||
+ arguments += ['--extra', 'mock.package_manager=dnf',
|
|
||||||
+- '--extra', 'mock.new_chroot=0']
|
|
||||||
++ '--extra', 'mock.new_chroot=0',
|
|
||||||
++ '--extra', 'mock.dynamic_buildrequires=1']
|
|
||||||
+
|
|
||||||
+ opts = {
|
|
||||||
+ 'parent': 'parent',
|
|
||||||
+@@ -67,6 +68,7 @@ class TestAddTag(utils.CliTestCase):
|
|
||||||
+ {
|
|
||||||
+ 'mock.package_manager': 'dnf',
|
|
||||||
+ 'mock.new_chroot': 0,
|
|
||||||
++ 'mock.dynamic_buildrequires': 1,
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+--
|
|
||||||
+2.22.0.rc1
|
|
||||||
+
|
|
@ -1,65 +1,49 @@
|
|||||||
From e28b662b29f688954a8ebe772e21cb7025ba47b6 Mon Sep 17 00:00:00 2001
|
diff -Nur koji-1.18.0.orig/cli/koji.conf koji-1.18.0/cli/koji.conf
|
||||||
From: Patrick Uiterwijk <patrick@puiterwijk.org>
|
--- koji-1.18.0.orig/cli/koji.conf 2019-08-09 11:07:07.000000000 -0700
|
||||||
Date: Thu, 7 Mar 2019 12:22:12 +0100
|
+++ koji-1.18.0/cli/koji.conf 2019-08-16 08:14:51.834690613 -0700
|
||||||
Subject: [PATCH] Apply Fedora instance configuration
|
@@ -4,17 +4,22 @@
|
||||||
|
|
||||||
Signed-off-by: Patrick Uiterwijk <patrick@puiterwijk.org>
|
|
||||||
---
|
|
||||||
cli/koji.conf | 25 +++++++++++--------------
|
|
||||||
1 file changed, 11 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/cli/koji.conf b/cli/koji.conf
|
|
||||||
index addd4e3..3588c19 100644
|
|
||||||
--- a/cli/koji.conf
|
|
||||||
+++ b/cli/koji.conf
|
|
||||||
@@ -3,18 +3,23 @@
|
|
||||||
;configuration for koji cli tool
|
|
||||||
|
|
||||||
;url of XMLRPC server
|
;url of XMLRPC server
|
||||||
-;server = http://hub.example.com/kojihub
|
;server = http://hub.example.com/kojihub
|
||||||
+server = https://koji.fedoraproject.org/kojihub
|
+server = https://koji.fedoraproject.org/kojihub
|
||||||
|
|
||||||
;url of web interface
|
;url of web interface
|
||||||
-;weburl = http://www.example.com/koji
|
;weburl = http://www.example.com/koji
|
||||||
+weburl = https://koji.fedoraproject.org/koji
|
+weburl = https://koji.fedoraproject.org/koji
|
||||||
|
|
||||||
;url of package download site
|
;url of package download site
|
||||||
-;pkgurl = http://www.example.com/packages
|
;pkgurl = http://www.example.com/packages
|
||||||
+topurl = https://kojipkgs.fedoraproject.org/
|
+pkgurl = https://kojipkgs.fedoraproject.org/
|
||||||
|
|
||||||
;path to the koji top directory
|
;path to the koji top directory
|
||||||
;topdir = /mnt/koji
|
;topdir = /mnt/koji
|
||||||
|
|
||||||
+; use the fast upload feature of koji by default
|
|
||||||
+use_fast_upload = yes
|
|
||||||
+
|
|
||||||
;configuration for Kerberos authentication
|
;configuration for Kerberos authentication
|
||||||
+authtype = kerberos
|
+authtype = kerberos
|
||||||
+krb_rdns = false
|
+krb_rdns = false
|
||||||
|
|
||||||
;the service name of the principal being used by the hub
|
;the service name of the principal being used by the hub
|
||||||
;krbservice = host
|
;krbservice = host
|
||||||
@@ -28,17 +33,9 @@
|
@@ -28,7 +33,6 @@
|
||||||
;enable to lookup dns canonical hostname for krb auth
|
;enable to lookup dns canonical hostname for krb auth
|
||||||
;krb_canon_host = no
|
;krb_canon_host = no
|
||||||
|
|
||||||
-
|
-
|
||||||
-;configuration for SSL authentication
|
;configuration for SSL authentication
|
||||||
-
|
|
||||||
-;client certificate
|
;client certificate
|
||||||
-;cert = ~/.koji/client.crt
|
@@ -45,9 +49,14 @@
|
||||||
-
|
;[not_implemented_yet]
|
||||||
-;certificate of the CA that issued the HTTP server certificate
|
;enabled plugins for CLI, runroot and save_failed_tree are available
|
||||||
-;serverca = ~/.koji/serverca.crt
|
;plugins =
|
||||||
-
|
+; runroot plugin is enabled by default in fedora
|
||||||
-;enabled plugins for CLI, runroot and save_failed_tree are available
|
|
||||||
-;plugins =
|
|
||||||
+;enabled plugins for CLI, runroot is enabled by default for fedora
|
|
||||||
+;save_failed_tree is available
|
|
||||||
+plugins = runroot
|
+plugins = runroot
|
||||||
|
|
||||||
;timeout of XMLRPC requests by seconds, default: 60 * 60 * 12 = 43200
|
;timeout of XMLRPC requests by seconds, default: 60 * 60 * 12 = 43200
|
||||||
;timeout = 43200
|
;timeout = 43200
|
||||||
--
|
|
||||||
2.20.1
|
|
||||||
|
|
||||||
|
;timeout of GSSAPI/SSL authentication by seconds, default: 60
|
||||||
|
;auth_timeout = 60
|
||||||
|
+
|
||||||
|
+; use the fast upload feature of koji by default
|
||||||
|
+use_fast_upload = yes
|
||||||
|
@ -1,37 +0,0 @@
|
|||||||
From 781a09a9750a18b77208e58eaa960b1b0d3f7dac Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Kopecek <tkopecek@redhat.com>
|
|
||||||
Date: Feb 25 2019 13:50:30 +0000
|
|
||||||
Subject: createrepo_c is used by default now
|
|
||||||
|
|
||||||
|
|
||||||
Fixes: https://pagure.io/koji/issue/716
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
diff --git a/builder/kojid b/builder/kojid
|
|
||||||
index e7c87f9..5e97615 100755
|
|
||||||
--- a/builder/kojid
|
|
||||||
+++ b/builder/kojid
|
|
||||||
@@ -5975,7 +5975,7 @@ def get_options():
|
|
||||||
'timeout': None,
|
|
||||||
'no_ssl_verify': False,
|
|
||||||
'use_fast_upload': True,
|
|
||||||
- 'use_createrepo_c': False,
|
|
||||||
+ 'use_createrepo_c': True,
|
|
||||||
'createrepo_skip_stat': True,
|
|
||||||
'createrepo_update': True,
|
|
||||||
'pkgurl': None,
|
|
||||||
diff --git a/builder/kojid.conf b/builder/kojid.conf
|
|
||||||
index 7bc235d..b9f0851 100644
|
|
||||||
--- a/builder/kojid.conf
|
|
||||||
+++ b/builder/kojid.conf
|
|
||||||
@@ -50,7 +50,7 @@ server=http://hub.example.com/kojihub
|
|
||||||
topurl=http://hub.example.com/kojifiles
|
|
||||||
|
|
||||||
; use createrepo_c rather than createrepo
|
|
||||||
-; use_createrepo_c=False
|
|
||||||
+; use_createrepo_c=True
|
|
||||||
|
|
||||||
; A space-separated list of tuples from which kojid is allowed to checkout.
|
|
||||||
; The format of those tuples is:
|
|
||||||
|
|
@ -1 +1 @@
|
|||||||
SHA512 (koji-1.17.0.tar.bz2) = 6f5da6d10ca3d2c01aa9251d5fa01221a89eb80a24b6b933197f359d9bc348d8e2f8b18d66d886454bdf89e8269a6a9652c44f1858b1c75d6540e32898e76f89
|
SHA512 (koji-1.18.0.tar.bz2) = 6229ddde6b0d792d3a8d71ab5cdf7cbed525d64c58b41e779ceac56ae0608ca2eac1346e86ba2e0ce5d64126cc57a50e6ab89253b2c1862ed6f5ca02e1591f6d
|
||||||
|
Loading…
Reference in new issue