parent
1b951f14d5
commit
8e80c627eb
2 changed files with 239 additions and 0 deletions
|
|
@ -44,6 +44,7 @@ Contents
|
||||||
content_generators
|
content_generators
|
||||||
content_generator_metadata
|
content_generator_metadata
|
||||||
configuring_jenkins
|
configuring_jenkins
|
||||||
|
utils
|
||||||
|
|
||||||
HowTos
|
HowTos
|
||||||
======
|
======
|
||||||
|
|
|
||||||
238
docs/source/utils.rst
Normal file
238
docs/source/utils.rst
Normal file
|
|
@ -0,0 +1,238 @@
|
||||||
|
Koji Utilities
|
||||||
|
==============
|
||||||
|
|
||||||
|
Basic koji is equipped with few handy utilities for maintaining
|
||||||
|
healthy build environment. They are packaged in ``koji-utils`` rpm and
|
||||||
|
can be installed as such.
|
||||||
|
|
||||||
|
Kojira
|
||||||
|
------
|
||||||
|
|
||||||
|
Kojira is stand-alone server which handles buildroot repos. It checks
|
||||||
|
if any builds were added to buildroots or build tag configuration has
|
||||||
|
changed. In such case it will trigger ``newRepo`` tasks to get build
|
||||||
|
repos actual once more. It is worth to create separate usera for
|
||||||
|
kojira with only ``repo`` permission.
|
||||||
|
|
||||||
|
Its usage is straightforward. It is being installed as system service
|
||||||
|
``kojira``, so standard systemctl commands like ``enable`` ``start``
|
||||||
|
and ``restart`` simply works.
|
||||||
|
|
||||||
|
``/etc/kojira/kojira.conf`` contains basic configuration for this
|
||||||
|
service. Standard connection options are defined there (keytab,
|
||||||
|
server, ...) and few options which affects, how kojira works,
|
||||||
|
especially in relation to throttling in creating ``newRepo`` tasks.
|
||||||
|
|
||||||
|
``deleted_repo_lifetime = one week (604800)``
|
||||||
|
This time (in seconds) is uses to clean up expired repositories.
|
||||||
|
It makes sense, that you don't want only the latest repodata. In
|
||||||
|
case of debugging some older build. Even in case you don't want to
|
||||||
|
do this, it is recommended to set it at least to few hours in
|
||||||
|
case, there is some running build, which is still using these
|
||||||
|
older data.
|
||||||
|
|
||||||
|
``dist_repo_lifetime = one week (604800)``
|
||||||
|
This is similar to previous one. The only difference is that while
|
||||||
|
previous is for buildroots, this one is affecting dist repos.
|
||||||
|
|
||||||
|
``recent_tasks_lifetime = 600``
|
||||||
|
kojira is buffering recent ``newRepo`` finished tasks to avoid
|
||||||
|
some race conditions. Generally, there is no reason to change this
|
||||||
|
default.
|
||||||
|
|
||||||
|
``ignore_tags = ''``
|
||||||
|
Comma-separated globs for tag names. These tags are simply ignored
|
||||||
|
by kojira (but they can still be manually regenerated via ``koji
|
||||||
|
regen-repo`` command.
|
||||||
|
|
||||||
|
``debuginfo_tags = ''``
|
||||||
|
Comma-separated globs for tag names. Regenerated repos will have
|
||||||
|
separate directory/repodata with corresponding debuginfo RPMs.
|
||||||
|
|
||||||
|
``source_tags = ''``
|
||||||
|
Comma-separated globs for tag names. Regenerated repos will
|
||||||
|
contain also corresponding SRPMs.
|
||||||
|
|
||||||
|
``separate_source_tags = ''``
|
||||||
|
Comma-separated globs for tag names. Regenerated repos will have
|
||||||
|
separate directory/repodata with corresponding SRPMs.
|
||||||
|
|
||||||
|
``ignore_stray_repos = False``
|
||||||
|
In some strange cases (someone manually deleted repo via API, but
|
||||||
|
not corresponding directories), there could stay some repo
|
||||||
|
directories. If this is set to False, kojira will just skip these.
|
||||||
|
Otherwise, it will remove them as if they would be normal
|
||||||
|
repodata referenced from db.
|
||||||
|
|
||||||
|
``max_delete_processes = 4``
|
||||||
|
How many threads are used for deleting data on disk.
|
||||||
|
|
||||||
|
``max_repo_tasks = 4``
|
||||||
|
The largest hub impact is from the first part of the ``newRepo``
|
||||||
|
task. Once it is waiting on subtasks (spawned createrepo), that
|
||||||
|
part is over. So, it makes sense to limit running ``newRepo``
|
||||||
|
tasks to not exhaust hub's capacity.
|
||||||
|
|
||||||
|
``max_repo_tasks_maven = 2``
|
||||||
|
Maven repo regeneration is ways more resource-demanding than rpm
|
||||||
|
ones. So, we've separate limit on this.
|
||||||
|
|
||||||
|
``repo_tasks_limit = 10``
|
||||||
|
Overall limit on running tasks is set here. It involves all
|
||||||
|
``newRepo`` tasks spawned by kojira and also by other users.
|
||||||
|
|
||||||
|
``delete_batch_size = 3``
|
||||||
|
How many repos are being removed from disk in one iteration. This
|
||||||
|
generally doesn't need to be changed.
|
||||||
|
|
||||||
|
|
||||||
|
Garbage Collector
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
There are tons of builds, which will be never used for anything. GC is
|
||||||
|
caring to get rid of these, so they'll not exhaust disk space. As it
|
||||||
|
is a sensitive task to not remove something what will be needed in
|
||||||
|
future, everything is driven by policy with same language as hub's
|
||||||
|
one.
|
||||||
|
|
||||||
|
Note, that GC removes only physical content. Every build will stay in
|
||||||
|
database, only build artifacts and logs get deleted.
|
||||||
|
|
||||||
|
GC runs all of the following actions (if they are not overriden via
|
||||||
|
``--action``):
|
||||||
|
|
||||||
|
``delete``
|
||||||
|
Delete builds that have been in the trashcan for long enough.
|
||||||
|
Builds satisfying any of following conditions, will be exempted
|
||||||
|
from deletion:
|
||||||
|
|
||||||
|
* package is on blacklist ``pkg_filter``
|
||||||
|
* they are not tagged with any other tag
|
||||||
|
* their signatures are not in ``protected_sig`` or they are
|
||||||
|
unknown
|
||||||
|
* they are tagged in trashcan for shorter time than
|
||||||
|
``grace_period``
|
||||||
|
|
||||||
|
``prune``
|
||||||
|
This action goes through all tags and checks tagged builds
|
||||||
|
according to ``prune`` policy from config. Policy can result in
|
||||||
|
``keep``, ``untag`` or ``skip`` actions. First two are
|
||||||
|
self-evident, last one is similar to ``keep``, but these builds
|
||||||
|
are also ignored in tagged builds ordering.
|
||||||
|
|
||||||
|
Prune policy is not run against trashcan tag itself, also locked
|
||||||
|
tags are ignored if ``bypass_locks`` is not specified.
|
||||||
|
|
||||||
|
With ``purge`` option, untagged builds can be immediately deleted.
|
||||||
|
|
||||||
|
``trash``
|
||||||
|
Runs through all builds without any tags (for longer than
|
||||||
|
``delay``) and put them to trashcan (effectively scheduling them
|
||||||
|
for deletion after additional ``grace_period`` time).
|
||||||
|
|
||||||
|
Following builds can't be put to trashcan during this action:
|
||||||
|
* build was tagged somewhere meanwhile (race condition)
|
||||||
|
* build was used inside some build's buildroot. We don't want to
|
||||||
|
delete such build, so we have reproducible build.
|
||||||
|
* build is part of any image or archive
|
||||||
|
* build was untagged later than before ``max_age`` seconds.
|
||||||
|
* build has some protected or unknown signature(s) ``protected_sig``
|
||||||
|
|
||||||
|
``salvage``
|
||||||
|
Untags builds from trashcan, which now have some protected or
|
||||||
|
unknown key. (Note, that you can always remove trashcan tag
|
||||||
|
from any build - it is normal tag as any other)
|
||||||
|
|
||||||
|
Prune Policy
|
||||||
|
............
|
||||||
|
|
||||||
|
Policy is part of config and without it, ``prune`` action will refuse
|
||||||
|
to work. Best documentation here would be part of example config with
|
||||||
|
comments.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
[prune]
|
||||||
|
policy =
|
||||||
|
# stuff to protect
|
||||||
|
# note that tags with master lock engaged are already protected
|
||||||
|
tag *-updates :: keep
|
||||||
|
age < 1 day :: skip
|
||||||
|
sig fedora-gold :: skip
|
||||||
|
sig fedora-test && age < 12 weeks :: keep
|
||||||
|
|
||||||
|
# stuff to chuck semi-rapidly
|
||||||
|
tag *-testing *-candidate :: { # nested rules
|
||||||
|
order >= 2 :: untag
|
||||||
|
order > 0 && age > 6 weeks :: untag
|
||||||
|
} # closing braces must be on a line by themselves (modulo comments/whitespace)
|
||||||
|
tag *-candidate && age > 60 weeks :: untag
|
||||||
|
|
||||||
|
# default: keep the last 3
|
||||||
|
order > 2 :: untag
|
||||||
|
|
||||||
|
GC Options
|
||||||
|
..........
|
||||||
|
``delay = 5 days``
|
||||||
|
Time, after which untagged builds can go to trashcan via
|
||||||
|
``trashcan`` action.
|
||||||
|
|
||||||
|
``grace_period = 4 weeks``
|
||||||
|
How long builds are staying in trashcan before final deletion.
|
||||||
|
|
||||||
|
``unprotected_keys = ''``
|
||||||
|
Set of signing keys, which are treated as in same way as
|
||||||
|
"unsigned" packages.
|
||||||
|
|
||||||
|
``tag_filter = ''``
|
||||||
|
If defined, only tags corresponding to these globs are checked.
|
||||||
|
|
||||||
|
``ignore_tags = ''``
|
||||||
|
Tags corresponding to these globs are ignored.
|
||||||
|
|
||||||
|
``pkg_filter = ''``
|
||||||
|
Globs for package names which should be processed.
|
||||||
|
|
||||||
|
``bypass_locks = ''``
|
||||||
|
If tag is locked and ``bypass_locks`` is set and GC user has
|
||||||
|
sufficient permissions, even locked tags are pruned.
|
||||||
|
|
||||||
|
``purge = False``
|
||||||
|
If set, delete packages immediately during pruning action
|
||||||
|
(effectively skipping ``delay`` + ``grace_period`` safety period)
|
||||||
|
|
||||||
|
``trashcan_tag = trashcan``
|
||||||
|
Default name for trashcan tag, you can use other tags for testing
|
||||||
|
policies, or deploy multiple configuration in cascade-like
|
||||||
|
workflows (anyway, not recommended)
|
||||||
|
|
||||||
|
``key_aliases = None``
|
||||||
|
Keys are normally defined by their hashes, which could be
|
||||||
|
inconvenient while reading configs. This option (pairs of
|
||||||
|
hash/name) make it more readable.
|
||||||
|
|
||||||
|
|
||||||
|
Notification related options
|
||||||
|
............................
|
||||||
|
``smtp_host = None``
|
||||||
|
Connection parameters
|
||||||
|
|
||||||
|
``mail = True``
|
||||||
|
Send / don't send e-mail notifications
|
||||||
|
|
||||||
|
``email_domain = fedoraproject.org``
|
||||||
|
Append this domain to usernames
|
||||||
|
|
||||||
|
``from_addr = Koji Build System <buildsys@example.com>``
|
||||||
|
Sender address
|
||||||
|
|
||||||
|
``email_template = /etc/koji-gc/email.tpl``
|
||||||
|
Simple template which can contain python formatting (via
|
||||||
|
``string.Template``) with ``owner`` (owner name) and ``builds``
|
||||||
|
(pre-generated list of builds).
|
||||||
|
|
||||||
|
Koji Shadow
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Koji DB Sweeper
|
||||||
|
---------------
|
||||||
Loading…
Add table
Add a link
Reference in a new issue