diff --git a/doc/examples.rst b/doc/examples.rst new file mode 100644 index 00000000..a8a18d3a --- /dev/null +++ b/doc/examples.rst @@ -0,0 +1,481 @@ +.. _examples: + +Big picture examples +==================== + +Actual Pungi configuration files can get very large. This pages brings two +examples of (almost) full configuation for two different composes. + +Fedora Rawhide compose +---------------------- + +This is a shortened configuration for Fedora Radhide compose as of 2019-10-14. + +:: + + release_name = 'Fedora' + release_short = 'Fedora' + release_version = 'Rawhide' + release_is_layered = False + + bootable = True + comps_file = { + 'scm': 'git', + 'repo': 'https://pagure.io/fedora-comps.git', + 'branch': 'master', + 'file': 'comps-rawhide.xml', + # Merge translations by running make. This command will generate the file. + 'command': 'make comps-rawhide.xml' + } + module_defaults_dir = { + 'scm': 'git', + 'repo': 'https://pagure.io/releng/fedora-module-defaults.git', + 'branch': 'master', + 'dir': '.' + } + + variants_file='variants-fedora.xml' + sigkeys = ['12C944D0'] + + # Put packages into subdirectories hashed by their initial letter. + hashed_directories = True + + # There is a special profile for use with compose. It makes Pungi + # authenticate automatically as rel-eng user. + koji_profile = 'compose_koji' + + # RUNROOT settings + runroot = True + runroot_channel = 'compose' + runroot_tag = 'f32-build' + + # PKGSET + pkgset_source = 'koji' + pkgset_koji_tag = 'f32' + pkgset_koji_inherit = False + + filter_system_release_packages = False + + # GATHER + gather_method = { + '^.*': { # For all variants + 'comps': 'deps', # resolve dependencies for packages from comps file + 'module': 'nodeps', # but not for packages from modules + } + } + gather_backend = 'dnf' + gather_profiler = True + check_deps = False + greedy_method = 'build' + + repoclosure_backend = 'dnf' + + # CREATEREPO + createrepo_deltas = False + createrepo_database = True + createrepo_use_xz = True + createrepo_extra_args = ['--zck', '--zck-dict-dir=/usr/share/fedora-repo-zdicts/rawhide'] + + # CHECKSUMS + media_checksums = ['sha256'] + media_checksum_one_file = True + media_checksum_base_filename = '%(release_short)s-%(variant)s-%(version)s-%(arch)s-%(date)s%(type_suffix)s.%(respin)s' + + # CREATEISO + iso_hfs_ppc64le_compatible = False + create_jigdo = False + + # BUILDINSTALL + buildinstall_method = 'lorax' + buildinstall_skip = [ + # No installer for Modular variant + ('^Modular$', {'*': True}), + # No 32 bit installer for Everything. + ('^Everything$', {'i386': True}), + ] + + # Enables macboot on x86_64 for all variants and disables upgrade image building + # everywhere. + lorax_options = [ + ('^.*$', { + 'x86_64': { + 'nomacboot': False + }, + 'ppc64le': { + # Use 3GB image size for ppc64le. + 'rootfs_size': 3 + }, + '*': { + 'noupgrade': True + } + }) + ] + + additional_packages = [ + ('^(Server|Everything)$', { + '*': [ + # Add all architectures of dracut package. + 'dracut.*', + # All all packages matching this pattern + 'autocorr-*', + ], + }), + + ('^Everything$', { + # Everything should include all packages from the tag. This only + # applies to the native arch. Multilib will still be pulled in + # according to multilib rules. + '*': ['*'], + }), + ] + + filter_packages = [ + ("^.*$", {"*": ["glibc32", "libgcc32"]}), + ('(Server)$', { + '*': [ + 'kernel*debug*', + 'kernel-kdump*', + ] + }), + ] + + multilib = [ + ('^Everything$', { + 'x86_64': ['devel', 'runtime'], + }) + ] + + # These packages should never be multilib on any arch. + multilib_blacklist = { + '*': [ + 'kernel', 'kernel-PAE*', 'kernel*debug*', 'java-*', 'php*', 'mod_*', 'ghc-*' + ], + } + + # These should be multilib even if they don't match the rules defined above. + multilib_whitelist = { + '*': ['wine', '*-static'], + } + + createiso_skip = [ + # Keep binary ISOs for Server, but not source ones. + ('^Server$', {'src': True}), + + # Remove all other ISOs. + ('^Everything$', {'*': True, 'src': True}), + ('^Modular$', {'*': True, 'src': True}), + ] + + # Image name respecting Fedora's image naming policy + image_name_format = '%(release_short)s-%(variant)s-%(disc_type)s-%(arch)s-%(version)s-%(date)s%(type_suffix)s.%(respin)s.iso' + # Use the same format for volume id + image_volid_formats = [ + '%(release_short)s-%(variant)s-%(disc_type)s-%(arch)s-%(version)s' + ] + # Used by Pungi to replace 'Cloud' with 'C' (etc.) in ISO volume IDs. + # There is a hard 32-character limit on ISO volume IDs, so we use + # these to try and produce short enough but legible IDs. Note this is + # duplicated in Koji for live images, as livemedia-creator does not + # allow Pungi to tell it what volume ID to use. Note: + # https://fedoraproject.org/wiki/User:Adamwill/Draft_fedora_image_naming_policy + volume_id_substitutions = { + 'Beta': 'B', + 'Rawhide': 'rawh', + 'Silverblue': 'SB', + 'Cinnamon': 'Cinn', + 'Cloud': 'C', + 'Design_suite': 'Dsgn', + 'Electronic_Lab': 'Elec', + 'Everything': 'E', + 'Scientific_KDE': 'SciK', + 'Security': 'Sec', + 'Server': 'S', + 'Workstation': 'WS', + } + + disc_types = { + 'boot': 'netinst', + 'live': 'Live', + } + + translate_paths = [ + ('/mnt/koji/compose/', 'https://kojipkgs.fedoraproject.org/compose/'), + ] + + # These will be inherited by live_media, live_images and image_build + global_ksurl = 'git+https://pagure.io/fedora-kickstarts.git?#HEAD' + global_release = '!RELEASE_FROM_LABEL_DATE_TYPE_RESPIN' + global_version = 'Rawhide' + # live_images ignores this in favor of live_target + global_target = 'f32' + + image_build = { + '^Container$': [ + { + 'image-build': { + 'format': [('docker', 'tar.xz')], + 'name': 'Fedora-Container-Base', + 'kickstart': 'fedora-container-base.ks', + 'distro': 'Fedora-22', + 'disk_size': 5, + 'arches': ['armhfp', 'aarch64', 'ppc64le', 's390x', 'x86_64'], + 'repo': 'Everything', + 'install_tree_from': 'Everything', + 'subvariant': 'Container_Base', + 'failable': ['*'], + }, + 'factory-parameters': { + 'dockerversion': "1.10.1", + 'docker_cmd': '[ "/bin/bash" ]', + 'docker_env': '[ "DISTTAG=f32container", "FGC=f32", "container=oci" ]', + 'docker_label': '{ "name": "fedora", "license": "MIT", "vendor": "Fedora Project", "version": "32"}', + }, + }, + ], + } + + live_media = { + '^Workstation$': [ + { + 'name': 'Fedora-Workstation-Live', + 'kickstart': 'fedora-live-workstation.ks', + # Variants.xml also contains aarch64 and armhfp, but there + # should be no live media for those arches. + 'arches': ['x86_64', 'ppc64le'], + 'failable': ['ppc64le'], + # Take packages and install tree from Everything repo. + 'repo': 'Everything', + 'install_tree_from': 'Everything', + } + ], + '^Spins': [ + # There are multiple media for Spins variant. They use subvariant + # field so that they can be indentified in the metadata. + { + 'name': 'Fedora-KDE-Live', + 'kickstart': 'fedora-live-kde.ks', + 'arches': ['x86_64'], + 'repo': 'Everything', + 'install_tree_from': 'Everything', + 'subvariant': 'KDE' + + }, + { + 'name': 'Fedora-Xfce-Live', + 'kickstart': 'fedora-live-xfce.ks', + 'arches': ['x86_64'], + 'failable': ['*'], + 'repo': 'Everything', + 'install_tree_from': 'Everything', + 'subvariant': 'Xfce' + }, + ], + } + + failable_deliverables = [ + # Installer and ISOs for server failing do not abort the compose. + ('^Server$', { + '*': ['buildinstall', 'iso'], + }), + ('^.*$', { + # Buildinstall is not blocking + 'src': ['buildinstall'], + # Nothing on i386, ppc64le blocks the compose + 'i386': ['buildinstall', 'iso'], + 'ppc64le': ['buildinstall', 'iso'], + 's390x': ['buildinstall', 'iso'], + }) + ] + + live_target = 'f32' + live_images_no_rename = True + live_images = [ + ('^Workstation$', { + 'armhfp': { + 'kickstart': 'fedora-arm-workstation.ks', + 'name': 'Fedora-Workstation-armhfp', + # Again workstation takes packages from Everything. + 'repo': 'Everything', + 'type': 'appliance', + 'failable': True, + } + }), + ('^Server$', { + # But Server has its own repo. + 'armhfp': { + 'kickstart': 'fedora-arm-server.ks', + 'name': 'Fedora-Server-armhfp', + 'type': 'appliance', + 'failable': True, + } + }), + ] + + ostree = { + "^Silverblue$": { + "version": "!OSTREE_VERSION_FROM_LABEL_DATE_TYPE_RESPIN", + # To get config, clone master branch from this repo and take + # treefile from there. + "treefile": "fedora-silverblue.yaml", + "config_url": "https://pagure.io/workstation-ostree-config.git", + "config_branch": "master", + # Consume packages from Everything + "repo": "Everything", + # Don't create a reference in the ostree repo (signing automation does that). + "tag_ref": False, + # Don't use change detection in ostree. + "force_new_commit": True, + # This is the location for the repo where new commit will be + # created. Note that this is outside of the compose dir. + "ostree_repo": "/mnt/koji/compose/ostree/repo/", + "ostree_ref": "fedora/rawhide/${basearch}/silverblue", + "arches": ["x86_64", "ppc64le", "aarch64"], + "failable": ['*'], + } + } + + ostree_installer = [ + ("^Silverblue$", { + "x86_64": { + "repo": "Everything", + "release": None, + "rootfs_size": "8", + # Take templates from this repository. + 'template_repo': 'https://pagure.io/fedora-lorax-templates.git', + 'template_branch': 'master', + # Use following templates. + "add_template": ["ostree-based-installer/lorax-configure-repo.tmpl", + "ostree-based-installer/lorax-embed-repo.tmpl", + "ostree-based-installer/lorax-embed-flatpaks.tmpl"], + # And add these variables for the templates. + "add_template_var": [ + "ostree_install_repo=https://kojipkgs.fedoraproject.org/compose/ostree/repo/", + "ostree_update_repo=https://ostree.fedoraproject.org", + "ostree_osname=fedora", + "ostree_oskey=fedora-32-primary", + "ostree_contenturl=mirrorlist=https://ostree.fedoraproject.org/mirrorlist", + "ostree_install_ref=fedora/rawhide/x86_64/silverblue", + "ostree_update_ref=fedora/rawhide/x86_64/silverblue", + "flatpak_remote_name=fedora", + "flatpak_remote_url=oci+https://registry.fedoraproject.org", + "flatpak_remote_refs=runtime/org.fedoraproject.Platform/x86_64/f30 app/org.gnome.Baobab/x86_64/stable", + ], + 'failable': ['*'], + }, + }) + ] + + +RCM Tools compose +----------------- + +This is a small compose used to deliver packages to Red Hat internal users. The +configuration is split into two files. + +:: + + # rcmtools-common.conf + + release_name = "RCM Tools" + release_short = "RCMTOOLS" + release_version = "2.0" + release_type = "updates" + release_is_layered = True + createrepo_c = True + createrepo_checksum = "sha256" + + # PKGSET + pkgset_source = "koji" + koji_profile = "brew" + pkgset_koji_inherit = True + + + # GENERAL SETTINGS + bootable = False + comps_file = "rcmtools-comps.xml" + variants_file = "rcmtools-variants.xml" + sigkeys = ["3A3A33A3"] + + + # RUNROOT settings + runroot = False + + + # GATHER + gather_method = "deps" + check_deps = True + + additional_packages = [ + ('.*', { + '*': ['puddle', 'rcm-nexus'], + } + ), + ] + + # Set repoclosure_strictness to fatal to avoid installation dependency + # issues in production composes + repoclosure_strictness = [ + ("^.*$", { + "*": "fatal" + }) + ] + + +Configuration specific for different base products is split into separate files. + +:: + + # rcmtools-common.conf + from rcmtools-common import * + + # BASE PRODUCT + base_product_name = "Red Hat Enterprise Linux" + base_product_short = "RHEL" + base_product_version = "7" + + # PKGSET + pkgset_koji_tag = "rcmtools-rhel-7-compose" + + # remove i386 arch on rhel7 + tree_arches = ["aarch64", "ppc64le", "s390x", "x86_64"] + + check_deps = False + + # Packages in these repos are available to satisfy dependencies inside the + # compose, but will not be pulled in. + gather_lookaside_repos = [ + ("^Client|Client-optional$", { + "x86_64": [ + "http://example.redhat.com/rhel/7/Client/x86_64/os/", + "http://example.redhat.com/rhel/7/Client/x86_64/optional/os/", + ], + }), + ("^Workstation|Workstation-optional$", { + "x86_64": [ + "http://example.redhat.com/rhel/7/Workstation/x86_64/os/", + "http://example.redhat.com/rhel/7/Workstation/x86_64/optional/os/", + ], + }), + ("^Server|Server-optional$", { + "aarch64": [ + "http://example.redhat.com/rhel/7/Server/aarch64/os/", + "http://example.redhat.com/rhel/7/Server/aarch64/optional/os/", + ], + "ppc64": [ + "http://example.redhat.com/rhel/7/Server/ppc64/os/", + "http://example.redhat.com/rhel/7/Server/ppc64/optional/os/", + ], + "ppc64le": [ + "http://example.redhat.com/rhel/7/Server/ppc64le/os/", + "http://example.redhat.com/rhel/7/Server/ppc64le/optional/os/", + ], + "s390x": [ + "http://example.redhat.com/rhel/7/Server/s390x/os/", + "http://example.redhat.com/rhel/7/Server/s390x/optional/os/", + ], + "x86_64": [ + "http://example.redhat.com/rhel/7/Server/x86_64/os/", + "http://example.redhat.com/rhel/7/Server/x86_64/optional/os/", + ], + }) + ] diff --git a/doc/index.rst b/doc/index.rst index 0081fdea..5a92b34a 100644 --- a/doc/index.rst +++ b/doc/index.rst @@ -15,6 +15,7 @@ Contents: phases format configuration + examples scm_support messaging gathering