wiki/documentation/empanadas/index.html

928 lines
29 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/empanadas/">
<link rel="prev" href="../compose/">
<link rel="next" href="../peridot/">
<link rel="icon" href="../../assets/images/favicon.png">
<meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.1.5">
<title>Empanadas - 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="" data-md-color-accent="">
<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="#contact-information" 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">
Empanadas
</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="" data-md-color-accent="" 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="" data-md-color-accent="" 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">
<a href="../" class="md-nav__link">
Composing Releases
</a>
</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 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">
Empanadas
<span class="md-nav__icon md-icon"></span>
</label>
<a href="./" class="md-nav__link md-nav__link--active">
Empanadas
</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="#contact-information" class="md-nav__link">
Contact Information
</a>
</li>
<li class="md-nav__item">
<a href="#general-information" class="md-nav__link">
General Information
</a>
</li>
<li class="md-nav__item">
<a href="#requirements" class="md-nav__link">
Requirements
</a>
</li>
<li class="md-nav__item">
<a href="#features" class="md-nav__link">
Features
</a>
</li>
<li class="md-nav__item">
<a href="#installing-empanadas" class="md-nav__link">
Installing Empanadas
</a>
</li>
<li class="md-nav__item">
<a href="#configuring-empanadas" class="md-nav__link">
Configuring Empanadas
</a>
</li>
<li class="md-nav__item">
<a href="#using-empanadas" class="md-nav__link">
Using Empanadas
</a>
</li>
</ul>
</nav>
</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>Empanadas</h1>
<p>This page goes over <code>empanadas</code>, which is part of the SIG/Core toolkit. Empanadas
assists SIG/Core is composing repositories, creating ISO's, creating images, and
various other activities in Rocky Linux. It is also used for general testing and
debugging of repositories and its metadata.</p>
<h2 id="contact-information">Contact Information<a class="headerlink" href="#contact-information" title="Permanent link">&para;</a></h2>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Owner</strong></td>
<td>SIG/Core (Release Engineering &amp; Infrastructure)</td>
</tr>
<tr>
<td><strong>Email Contact</strong></td>
<td>releng@rockylinux.org</td>
</tr>
<tr>
<td><strong>Mattermost Contacts</strong></td>
<td><code>@label</code> <code>@neil</code></td>
</tr>
<tr>
<td><strong>Mattermost Channels</strong></td>
<td><code>~Development</code></td>
</tr>
</tbody>
</table>
<h2 id="general-information">General Information<a class="headerlink" href="#general-information" title="Permanent link">&para;</a></h2>
<p><code>empanadas</code> is a python project using poetry, containing various built-in modules
with the goal to try to emulate the Fedora Project's pungi to an extent. While it
is not perfect, it achieves the very basic goals of creating repositories, images
and ISO's for consumption by the end user. It also has interactions with peridot,
the build system used by the RESF to build the Rocky Linux distribution.</p>
<p>For performing syncs, it relies on the use of podman to perform syncing in a
parallel fashion. This was done because it is not possible to run multiple dnf
transactions at once on a single system and looping one repository at a time is
not sustainable (nor fast).</p>
<h2 id="requirements">Requirements<a class="headerlink" href="#requirements" title="Permanent link">&para;</a></h2>
<ul>
<li>Poetry must be installed on the system</li>
<li>Podman must be installed on the system</li>
<li><code>fpart</code> must be installed on the system (available in EPEL on EL systems)</li>
<li>Enough storage should be available if repositories are being synced</li>
<li><code>mock</code> must be installed if building live images</li>
<li>System must be an Enterprise Linux system or Fedora with the <code>%rhel</code> macro set</li>
</ul>
<h2 id="features">Features<a class="headerlink" href="#features" title="Permanent link">&para;</a></h2>
<p>As of this writing, <code>empanadas</code> has the following abilities:</p>
<ul>
<li>Repository syncing via dnf from a peridot instance or applicable repos</li>
<li>Per profile dnf repoclosure checking for all applicable repos</li>
<li>Per profile dnf repoclosure checking for peridot instance repositories</li>
<li>Basic ISO Building via <code>lorax</code></li>
<li>Extra ISO Building via <code>xorriso</code> for DVD and minimal images</li>
<li>Live ISO Building using <code>livemedia-creator</code> and <code>mock</code></li>
<li>Anaconda treeinfo builder</li>
<li>Cloud Image builder</li>
</ul>
<h2 id="installing-empanadas">Installing Empanadas<a class="headerlink" href="#installing-empanadas" title="Permanent link">&para;</a></h2>
<p>The below is how to install empanadas from the development branch on a Fedora
system.</p>
<div class="highlight"><pre><span></span><code>% dnf install git podman fpart poetry mock -y
% git clone https://git.resf.org/sig_core/toolkit.git -b devel
% cd toolkit/iso/empanadas
% poetry install
</code></pre></div>
<h2 id="configuring-empanadas">Configuring Empanadas<a class="headerlink" href="#configuring-empanadas" title="Permanent link">&para;</a></h2>
<p>Depending on how you are using empanadas will depend on how your configurations
will be setup.</p>
<ul>
<li><code>empanadas/common.py</code></li>
<li><code>empanadas/config/*.yaml</code></li>
<li><code>empanadas/sig/*.yaml</code></li>
</ul>
<p>These configuration files are delicate and can control a wide variety of the
moving parts of empanadas. As these configurations are fairly massive, we
recommend checking the <a href="./references/">reference guides</a> for deeper details into
configuring for base distribution or "SIG" content.</p>
<h2 id="using-empanadas">Using Empanadas<a class="headerlink" href="#using-empanadas" title="Permanent link">&para;</a></h2>
<p>The most common way to use empanadas is to sync repositories from a peridot
instance. This is performed upon each release or on each set of updates as they
come from upstream. Below lists how to use <code>empanadas</code>, as well as the common
options.</p>
<p>Note that for each of these commands, it is fully expected you are running
<code>poetry run</code> in the root of empanadas.</p>
<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>