wiki/documentation/index.html

888 lines
No EOL
27 KiB
HTML

<!doctype html>
<html lang="en" class="no-js">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<meta name="description" content="The wiki for Rocky Linux Core SIG.">
<link rel="canonical" href="https://sig-core.rocky.page/documentation/">
<link rel="prev" href="../what_we_do/">
<link rel="next" href="compose/">
<link rel="icon" href="../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.5">
<title>Composing Releases - SIG/Core Wiki</title>
<link rel="stylesheet" href="../assets/stylesheets/main.7a7fce14.min.css">
<link rel="stylesheet" href="../assets/stylesheets/palette.a0c5b2b5.min.css">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&display=fallback">
<style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
<script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
</head>
<body dir="ltr" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="teal">
<script>var palette=__md_get("__palette");if(palette&&"object"==typeof palette.color)for(var key of Object.keys(palette.color))document.body.setAttribute("data-md-color-"+key,palette.color[key])</script>
<input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
<input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
<label class="md-overlay" for="__drawer"></label>
<div data-md-component="skip">
<a href="#build-system-and-tools" class="md-skip">
Skip to content
</a>
</div>
<div data-md-component="announce">
</div>
<header class="md-header md-header--shadow" data-md-component="header">
<nav class="md-header__inner md-grid" aria-label="Header">
<a href=".." title="SIG/Core Wiki" class="md-header__button md-logo" aria-label="SIG/Core Wiki" data-md-component="logo">
<img src="../assets/icon-white.svg" alt="logo">
</a>
<label class="md-header__button md-icon" for="__drawer">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"/></svg>
</label>
<div class="md-header__title" data-md-component="header-title">
<div class="md-header__ellipsis">
<div class="md-header__topic">
<span class="md-ellipsis">
SIG/Core Wiki
</span>
</div>
<div class="md-header__topic" data-md-component="header-topic">
<span class="md-ellipsis">
Composing Releases
</span>
</div>
</div>
</div>
<form class="md-header__option" data-md-component="palette">
<input class="md-option" data-md-color-media="(prefers-color-scheme: light)" data-md-color-scheme="default" data-md-color-primary="teal" data-md-color-accent="teal" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_1">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_2" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
<input class="md-option" data-md-color-media="(prefers-color-scheme: dark)" data-md-color-scheme="slate" data-md-color-primary="teal" data-md-color-accent="teal" aria-label="Switch to dark mode" type="radio" name="__palette" id="__palette_2">
<label class="md-header__button md-icon" title="Switch to dark mode" for="__palette_1" hidden>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="m17.75 4.09-2.53 1.94.91 3.06-2.63-1.81-2.63 1.81.91-3.06-2.53-1.94L12.44 4l1.06-3 1.06 3 3.19.09m3.5 6.91-1.64 1.25.59 1.98-1.7-1.17-1.7 1.17.59-1.98L15.75 11l2.06-.05L18.5 9l.69 1.95 2.06.05m-2.28 4.95c.83-.08 1.72 1.1 1.19 1.85-.32.45-.66.87-1.08 1.27C15.17 23 8.84 23 4.94 19.07c-3.91-3.9-3.91-10.24 0-14.14.4-.4.82-.76 1.27-1.08.75-.53 1.93.36 1.85 1.19-.27 2.86.69 5.83 2.89 8.02a9.96 9.96 0 0 0 8.02 2.89m-1.64 2.02a12.08 12.08 0 0 1-7.8-3.47c-2.17-2.19-3.33-5-3.49-7.82-2.81 3.14-2.7 7.96.31 10.98 3.02 3.01 7.84 3.12 10.98.31Z"/></svg>
</label>
</form>
<label class="md-header__button md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
</label>
<div class="md-search" data-md-component="search" role="dialog">
<label class="md-search__overlay" for="__search"></label>
<div class="md-search__inner" role="search">
<form class="md-search__form" name="search">
<input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required>
<label class="md-search__icon md-icon" for="__search">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"/></svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"/></svg>
</label>
<nav class="md-search__options" aria-label="Search">
<button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"/></svg>
</button>
</nav>
<div class="md-search__suggest" data-md-component="search-suggest"></div>
</form>
<div class="md-search__output">
<div class="md-search__scrollwrap" data-md-scrollfix>
<div class="md-search-result" data-md-component="search-result">
<div class="md-search-result__meta">
Initializing search
</div>
<ol class="md-search-result__list" role="presentation"></ol>
</div>
</div>
</div>
</div>
</div>
<div class="md-header__source">
<a href="https://git.resf.org/sig_core/wiki" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
sig_core/wiki
</div>
</a>
</div>
</nav>
</header>
<div class="md-container" data-md-component="container">
<main class="md-main" data-md-component="main">
<div class="md-main__inner md-grid">
<div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation" >
<div class="md-sidebar__scrollwrap">
<div class="md-sidebar__inner">
<nav class="md-nav md-nav--primary md-nav--integrated" aria-label="Navigation" data-md-level="0">
<label class="md-nav__title" for="__drawer">
<a href=".." title="SIG/Core Wiki" class="md-nav__button md-logo" aria-label="SIG/Core Wiki" data-md-component="logo">
<img src="../assets/icon-white.svg" alt="logo">
</a>
SIG/Core Wiki
</label>
<div class="md-nav__source">
<a href="https://git.resf.org/sig_core/wiki" title="Go to repository" class="md-source" data-md-component="source">
<div class="md-source__icon md-icon">
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2023 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"/></svg>
</div>
<div class="md-source__repository">
sig_core/wiki
</div>
</a>
</div>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href=".." class="md-nav__link">
SIG/Core
</a>
</li>
<li class="md-nav__item">
<a href="../members/" class="md-nav__link">
Members
</a>
</li>
<li class="md-nav__item">
<a href="../what_we_do/" class="md-nav__link">
What We Do
</a>
</li>
<li class="md-nav__item md-nav__item--active md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4" checked>
<label class="md-nav__link" for="__nav_4" id="__nav_4_label" tabindex="0">
Documentation
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_4_label" aria-expanded="true">
<label class="md-nav__title" for="__nav_4">
<span class="md-nav__icon md-icon"></span>
Documentation
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item md-nav__item--active">
<input class="md-nav__toggle md-toggle" type="checkbox" id="__toc">
<label class="md-nav__link md-nav__link--active" for="__toc">
Composing Releases
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Composing Releases
</a>
<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
<label class="md-nav__title" for="__toc">
<span class="md-nav__icon md-icon"></span>
Table of contents
</label>
<ul class="md-nav__list" data-md-component="toc" data-md-scrollfix>
<li class="md-nav__item">
<a href="#build-system-and-tools" class="md-nav__link">
Build System and Tools
</a>
</li>
<li class="md-nav__item">
<a href="#full-compose-major-or-minor-releases" class="md-nav__link">
Full Compose (major or minor releases)
</a>
</li>
<li class="md-nav__item">
<a href="#general-updates" class="md-nav__link">
General Updates
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_2" >
<label class="md-nav__link" for="__nav_4_2" id="__nav_4_2_label" tabindex="0">
Composing Releases
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_2_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_2">
<span class="md-nav__icon md-icon"></span>
Composing Releases
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="compose/" class="md-nav__link">
Composing Releases
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
<a href="empanadas/" class="md-nav__link">
Empanadas
</a>
</li>
<li class="md-nav__item">
<a href="peridot/" class="md-nav__link">
Peridot
</a>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_4_5" >
<label class="md-nav__link" for="__nav_4_5" id="__nav_4_5_label" tabindex="0">
References
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="2" aria-labelledby="__nav_4_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_4_5">
<span class="md-nav__icon md-icon"></span>
References
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="references/" class="md-nav__link">
References
</a>
</li>
<li class="md-nav__item">
<a href="references/empanadas_common/" class="md-nav__link">
Empanadas common.py Configuration
</a>
</li>
<li class="md-nav__item">
<a href="references/empanadas_config/" class="md-nav__link">
Empanadas config yaml Configuration
</a>
</li>
<li class="md-nav__item">
<a href="references/empanadas_sig_config/" class="md-nav__link">
Empanadas SIG yaml Configuration
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item md-nav__item--nested">
<input class="md-nav__toggle md-toggle " type="checkbox" id="__nav_5" >
<label class="md-nav__link" for="__nav_5" id="__nav_5_label" tabindex="0">
SOP
<span class="md-nav__icon md-icon"></span>
</label>
<nav class="md-nav" data-md-level="1" aria-labelledby="__nav_5_label" aria-expanded="false">
<label class="md-nav__title" for="__nav_5">
<span class="md-nav__icon md-icon"></span>
SOP
</label>
<ul class="md-nav__list" data-md-scrollfix>
<li class="md-nav__item">
<a href="../sop/" class="md-nav__link">
SOP (Standard Operationg Procedures)
</a>
</li>
<li class="md-nav__item">
<a href="../sop/sop_release/" class="md-nav__link">
Release Procedures
</a>
</li>
<li class="md-nav__item">
<a href="../sop/sop_upstream_prep_checklist/" class="md-nav__link">
Generalized Prep Checklist for Upcoming Releases
</a>
</li>
<li class="md-nav__item">
<a href="../sop/sop_mirrormanager2/" class="md-nav__link">
Mirror Manager
</a>
</li>
</ul>
</nav>
</li>
</ul>
</nav>
</div>
</div>
</div>
<div class="md-content" data-md-component="content">
<article class="md-content__inner md-typeset">
<h1>Composing Releases</h1>
<p>This section goes over at a high level how we compose releases for Rocky Linux.
As most of our tools are home grown, we have made sure that the tools are open
source and in our git services.</p>
<p>This page should serve as an idea of the steps we generally take and we hope
that other projects out there who wish to also use our tools can make sure they
can use them in this same way, whether they want to be an Enterprise Linux
derivative or another project entirely.</p>
<h2 id="build-system-and-tools">Build System and Tools<a class="headerlink" href="#build-system-and-tools" title="Permanent link">&para;</a></h2>
<p>The tools in use for the distribution are in the table below.</p>
<table>
<thead>
<tr>
<th>Tool</th>
<th>Maintainer</th>
<th>Code Location</th>
</tr>
</thead>
<tbody>
<tr>
<td>srpmproc</td>
<td>SIG/Core at RESF</td>
<td><a href="https://github.com/rocky-linux/srpmproc">GitHub</a></td>
</tr>
<tr>
<td>empanadas</td>
<td>SIG/Core at RESF</td>
<td><a href="https://github.com/rocky-linux/sig-core-toolkit">sig-core-toolkit</a></td>
</tr>
<tr>
<td>Peridot</td>
<td>SIG/Core at RESF</td>
<td><a href="https://github.com/rocky-linux/peridot">GitHub</a></td>
</tr>
<tr>
<td>MirrorManager 2</td>
<td>Fedora Project</td>
<td><a href="https://github.com/fedora-infra/mirrormanager2">MirrorManager2</a></td>
</tr>
</tbody>
</table>
<p>For Rocky Linux to be build, we use <code>Peridot</code> as the build system and
<code>empanadas</code> to "compose" the distribution. As we do not use Koji for Rocky
Linux beyond version 9, pungi can no longer be used. Peridot instead takes
pungi configuration data and comps and transforms them into a format it
can understand. Empanadas then comes in to do the "compose" and sync
all the repositories down.</p>
<h2 id="full-compose-major-or-minor-releases">Full Compose (major or minor releases)<a class="headerlink" href="#full-compose-major-or-minor-releases" title="Permanent link">&para;</a></h2>
<p>Step by step, it looks like this:</p>
<ul>
<li>Distribution is built and maintained in Peridot</li>
<li>Comps and pungi configuration is converted into the peridot format for the project</li>
<li>Repositories are created in yumrepofs based on the configuration provided</li>
<li>A repoclosure is ran against the repositories from empanadas to ensure there are no critical issues</li>
<li>
<p>In Parallel:</p>
<ul>
<li>Repositories are synced as a "full run" in empanadas</li>
<li>Lorax is ran using empanadas in the peridot cluster</li>
</ul>
</li>
<li>
<p>Lorax results are pulled down from an S3 bucket</p>
</li>
<li>DVD images are built for each architecture</li>
<li>Compose directory is synced to staging for verification</li>
<li>Staging is synced to production to allow mirror syncing</li>
<li>Bit flip on release day</li>
</ul>
<h2 id="general-updates">General Updates<a class="headerlink" href="#general-updates" title="Permanent link">&para;</a></h2>
<p>Step by step, it looks like this:</p>
<ul>
<li>Distribution is maintained in Peridot</li>
<li>Updates are built, repos are then "hashed" in yumrepofs</li>
<li>Empanadas syncs updates as needed, either per repo or all repos at once</li>
<li>Updates are synced to staging to be verified</li>
<li>Staging is synced to production to allow mirror syncing</li>
</ul>
<h4>Resources</h4>
<div class="tabbed-set tabbed-alternate" data-tabs="1:6"><input checked="checked" id="__tabbed_1_1" name="__tabbed_1" type="radio" /><input id="__tabbed_1_2" name="__tabbed_1" type="radio" /><input id="__tabbed_1_3" name="__tabbed_1" type="radio" /><input id="__tabbed_1_4" name="__tabbed_1" type="radio" /><input id="__tabbed_1_5" name="__tabbed_1" type="radio" /><input id="__tabbed_1_6" name="__tabbed_1" type="radio" /><div class="tabbed-labels"><label for="__tabbed_1_1">Account Services</label><label for="__tabbed_1_2">Git (RESF Git Service)</label><label for="__tabbed_1_3">Git (Rocky Linux GitHub)</label><label for="__tabbed_1_4">Git (Rocky Linux GitLab)</label><label for="__tabbed_1_5">Mail Lists</label><label for="__tabbed_1_6">Contacts</label></div>
<div class="tabbed-content">
<div class="tabbed-block">
<p><strong>URL</strong>: <a href="https://accounts.rockylinux.org">https://accounts.rockylinux.org</a></p>
<p><strong>Purpose</strong>: Account Services maintains the accounts for almost all components of the Rocky ecosystem</p>
<p><strong>Technology</strong>: Noggin used by Fedora Infrastructure</p>
<p><strong>Contact</strong>: <code>~Infrastructure</code> in Mattermost and <code>#rockylinux-infra</code> in Libera IRC</p>
</div>
<div class="tabbed-block">
<p><strong>URL</strong>: <a href="https://git.resf.org">https://git.resf.org</a></p>
<p><strong>Purpose</strong>: General projects, code, and so on for the Rocky Enterprise Software Foundation.</p>
<p><strong>Technology</strong>: <a href="https://gitea.io/en-us/">Gitea</a></p>
<p><strong>Contact</strong>: <code>~Infrastructure</code>, <code>~Development</code> in Mattermost and <code>#rockylinux-infra</code>, <code>#rockylinux-devel</code> in Libera IRC</p>
</div>
<div class="tabbed-block">
<p><strong>URL</strong>: <a href="https://github.com/rocky-linux">https://github.com/rocky-linux</a></p>
<p><strong>Purpose</strong>: General purpose code, assets, and so on for Rocky Linux. Some content is mirrored to the RESF Git Service.</p>
<p><strong>Technology</strong>: <a href="https://github.com">GitHub</a></p>
<p><strong>Contact</strong>: <code>~Infrastructure</code>, <code>~Development</code> in Mattermost and <code>#rockylinux-infra</code>, <code>#rockylinux-devel</code> in Libera IRC</p>
</div>
<div class="tabbed-block">
<p><strong>URL</strong>: <a href="https://git.rockylinux.org">https://git.rockylinux.org</a></p>
<p><strong>Purpose</strong>: Packages and light code for the Rocky Linux distribution</p>
<p><strong>Technology</strong>: <a href="https://gitlab.com">GitLab</a></p>
<p><strong>Contact</strong>: <code>~Infrastructure</code>, <code>~Development</code> in Mattermost and <code>#rockylinux-infra</code>, <code>#rockylinux-devel</code> in Libera IRC</p>
</div>
<div class="tabbed-block">
<p><strong>URL</strong>: <a href="https://lists.resf.org">https://lists.resf.org</a></p>
<p><strong>Purpose</strong>: Users can subscribe and interact with various mail lists for the Rocky ecosystem</p>
<p><strong>Technology</strong>: Mailman 3 + Hyper Kitty</p>
<p><strong>Contact</strong>: <code>~Infrastructure</code> in Mattermost and <code>#rockylinux-infra</code> in Libera IRC</p>
</div>
<div class="tabbed-block">
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Mattermost Name</th>
<th>IRC Name</th>
</tr>
</thead>
<tbody>
<tr>
<td>Louis Abel</td>
<td>label@rockylinux.org</td>
<td>@nazunalika</td>
<td>Sokel/label/Sombra</td>
</tr>
<tr>
<td>Mustafa Gezen</td>
<td>mustafa@rockylinux.org</td>
<td>@mustafa</td>
<td>mstg</td>
</tr>
<tr>
<td>Skip Grube</td>
<td>skip@rockylinux.org</td>
<td>@skip77</td>
<td></td>
</tr>
<tr>
<td>Sherif Nagy</td>
<td>sherif@rockylinux.org</td>
<td>@sherif</td>
<td></td>
</tr>
<tr>
<td>Pablo Greco</td>
<td>pgreco@rockylinux.org</td>
<td>@pgreco</td>
<td>pgreco</td>
</tr>
<tr>
<td>Neil Hanlon</td>
<td>neil@resf.org</td>
<td>@neil</td>
<td>neil</td>
</tr>
<tr>
<td>Taylor Goodwill</td>
<td>tg@resf.org</td>
<td>@tgo</td>
<td>tg</td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
<hr>
<div class="md-source-file">
<small>
Last update:
2022-10-20
</small>
</div>
</article>
</div>
</div>
</main>
<footer class="md-footer">
<div class="md-footer-meta md-typeset">
<div class="md-footer-meta__inner md-grid">
<div class="md-copyright">
<div class="md-copyright__highlight">
Copyright &copy; 2022 Rocky Enterprise Software Foundation
</div>
Made with
<a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
Material for MkDocs
</a>
</div>
</div>
</div>
</footer>
</div>
<div class="md-dialog" data-md-component="dialog">
<div class="md-dialog__inner md-typeset"></div>
</div>
<script id="__config" type="application/json">{"base": "..", "features": ["search.highlight", "search.suggest", "toc.integrate"], "search": "../assets/javascripts/workers/search.208ed371.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
<script src="../assets/javascripts/bundle.407015b8.min.js"></script>
</body>
</html>