<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Structure of the RPM repositories]]></title><description><![CDATA[<p dir="auto">[Updated: renamed <code>community</code> to <code>extras</code> and <code>main</code> to <code>base</code>]</p>
<p dir="auto">After many thoughts, using my experience as a packager for the Mageia linux distribution and looking at how CentOS and Fedora handle repositories, I've come with the following proposal. Since it's a proposal, it means that it's open to discussion of course <img src="https://xcp-ng.org/forum/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=2bdbead4301" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
<p dir="auto">But first, some goals we want to reach through this structure:</p>
<ul>
<li>Allow users to update from XCP-ng 7.4 or later to the latest 7.x release with a simple <code>yum update</code>.</li>
<li>Allow users to test future updates before they are pushed to everyone, to help validate them.</li>
<li>Have a place where additionnal community-made packages can be made available.</li>
<li>Release fixes to current stable release fast.</li>
</ul>
<p dir="auto">This would lead to the following structure.</p>
<p dir="auto">At top level, just a number:</p>
<pre><code>.
├── 7
└── 8
</code></pre>
<p dir="auto">7 for current major version number. 8 for the next, someday (we won't create it yet, actually, so we'll just have 7).</p>
<p dir="auto">Then, a few subdirectories:</p>
<pre><code>.
├── 7
│   ├── 7.4
│   ├── 7.5
│   ├── 7.6
│   ├── 7.7
│   ├── dev
│   └── latest
└── 8
</code></pre>
<p dir="auto">In the above, let's consider that we are in the future and that the current stable branch is <code>7.7</code>.</p>
<p dir="auto"><code>latest</code> is a symbolic link that will always point at the latest stable <code>7.x</code> branch. Our current maintenance plan is to have people always update to the latest <code>7.x</code> branch, so counting from XCP-ng <code>7.5</code>, the yum repositories configured on XCP-ng instances would point at that <code>latest</code> repository. This means that because of our limited resources, at first we don't plan to keep patching previous <code>7.x</code> releases for security issues or bugs.</p>
<p dir="auto"><code>dev</code> is the future <code>7.8</code> (in our example). Can be unstable. That's for pioneers and developers. Once <code>7.8</code> is ready, <code>dev</code> will be copied to a <code>7.8</code> repository, and the <code>latest</code> symlink will be made to point to <code>7.8</code>.</p>
<p dir="auto">Now let's go one level deeper.</p>
<pre><code>.
├── 7
│   ├── 7.4
│   ├── 7.5
│   │   ├── builddeps
│   │   ├── extras
│   │   ├── extras_testing
│   │   ├── base
│   │   ├── updates
│   │   └── updates_testing
│   ├── 7.6
│   ├── 7.7
│   ├── dev
│   └── latest
└── 8
</code></pre>
<p dir="auto"><code>base</code> is the state of the packages in the installation ISO for <code>7.5</code>. Activated by default.<br />
<code>updates</code> contains released updates to the 7.5 branch during the period between <code>7.5</code> and <code>7.6</code>. Activated by default.<br />
<code>updates_testing</code> contained (past tense: remember current release is <code>7.7</code> in our example) update candidates for the <code>7.5</code> branch before they were pushed to everyone. Disabled by default.<br />
<code>extras</code> contains additional RPMs from the community. Use at your own risks, but they can bring useful additions! We'll try to guarantee the upgrade path even with these installed, but that's on a best-effort basis. Disabled by default.<br />
<code>extras_testing</code> is for those additional community-provided RPMs while still at an early experimental state. Disabled by default, of course.<br />
<code>builddeps</code> contains extra RPMs needed for building other packages. Disabled by default. Will probably get merged into <code>base</code> and <code>updates</code> in due time, but we're not ready for that yet.</p>
<p dir="auto">Let's unfold the last levels: standard repository structure from CentOS 7.</p>
<pre><code>.
├── 7
│   ├── 7.4
│   ├── 7.5
│   │   ├── builddeps
│   │   ├── extras
│   │   ├── extras_testing
│   │   ├── base
│   │   ├── updates
│   │   │   ├── Source
│   │   │   │   ├── repodata
│   │   │   │   └── SPackages
│   │   │   │       └── source-RPMs-are-here.src.rpm
│   │   │   └── x86_64
│   │   │       ├── Packages
│   │   │       │   └── RPMs-are-here.rpm
│   │   │       └── repodata
│   │   └── updates_testing
│   ├── 7.6
│   ├── 7.7
│   ├── dev
│   └── latest
└── 8
</code></pre>
<p dir="auto">So, how does it look?</p>
]]></description><link>https://xcp-ng.org/forum/topic/185/structure-of-the-rpm-repositories</link><generator>RSS for Node</generator><lastBuildDate>Sat, 12 Sep 2026 16:58:01 GMT</lastBuildDate><atom:link href="https://xcp-ng.org/forum/topic/185.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 04 Jul 2018 14:55:07 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Structure of the RPM repositories on Mon, 16 Jul 2018 09:36:12 GMT]]></title><description><![CDATA[<p dir="auto">Updated: <code>main</code> renamed to <code>base</code>.</p>
]]></description><link>https://xcp-ng.org/forum/post/1697</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1697</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Mon, 16 Jul 2018 09:36:12 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Sat, 07 Jul 2018 20:15:51 GMT]]></title><description><![CDATA[<p dir="auto">Yes, you usually need a phase called "bootstrapping" in the distros world where you start with some prebuilt binaries of A in order to be able to build B which will in turn be used to rebuild A <img src="https://xcp-ng.org/forum/assets/plugins/nodebb-plugin-emoji/emoji/android/1f642.png?v=2bdbead4301" class="not-responsive emoji emoji-android emoji--slightly_smiling_face" style="height:23px;width:auto;vertical-align:middle" title=":)" alt="🙂" /></p>
]]></description><link>https://xcp-ng.org/forum/post/1571</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1571</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Sat, 07 Jul 2018 20:15:51 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Sat, 07 Jul 2018 19:39:28 GMT]]></title><description><![CDATA[<p dir="auto">I tried it once but it gave me cyclic dependencies. Im new to the process. YMMV.</p>
]]></description><link>https://xcp-ng.org/forum/post/1570</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1570</guid><dc:creator><![CDATA[r1]]></dc:creator><pubDate>Sat, 07 Jul 2018 19:39:28 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Sat, 07 Jul 2018 19:37:14 GMT]]></title><description><![CDATA[<p dir="auto">We can infer most of it from the BuildRequires of the source RPMs actually.</p>
]]></description><link>https://xcp-ng.org/forum/post/1569</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1569</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Sat, 07 Jul 2018 19:37:14 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Sat, 07 Jul 2018 18:38:19 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/stormi" aria-label="Profile: stormi">@<bdi>stormi</bdi></a> said in <a href="/forum/post/1560">Structure of the RPM repositories</a>:</p>
<blockquote>
<p dir="auto">And if someone very brave manages to make an ordered list of all the source RPMs by build order, in order to be able to rebuild them all without CentOS repositories at all, I promise to rebuild them and push them to the builddeps repo!</p>
</blockquote>
<p dir="auto">Only Citrix knows it, see if you can get this order from <a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/johnelse" aria-label="Profile: johnelse">@<bdi>johnelse</bdi></a>.</p>
]]></description><link>https://xcp-ng.org/forum/post/1568</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1568</guid><dc:creator><![CDATA[r1]]></dc:creator><pubDate>Sat, 07 Jul 2018 18:38:19 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Fri, 06 Jul 2018 07:36:20 GMT]]></title><description><![CDATA[<p dir="auto">New repository structure is online, without any stable branch yet (since 7.4.1 used a different structure).</p>
<p dir="auto"><a href="https://updates.xcp-ng.org/7/dev/" target="_blank" rel="noopener noreferrer nofollow ugc">https://updates.xcp-ng.org/7/dev/</a></p>
<p dir="auto">Not usable yet for testing, but I invite you to start using it for RPM building and to report issues.</p>
<pre><code>[xcp-ng-main]
name=Main repository for XCP-ng
baseurl=https://updates.xcp-ng.org/7/dev/main/x86_64/
gpgcheck=0
priority=1

[xcp-ng-builddeps]
name=Build dependencies for XCP-ng
baseurl=https://updates.xcp-ng.org/7/dev/builddeps/x86_64/
gpgcheck=0
priority=2
</code></pre>
<p dir="auto">Note that if you install the <code>yum-plugin-priorities</code> package, you'll probably meet some errors when trying to install <code>-devel</code> packages from CentOS repositories. But that's a good thing in my opinion because that encourages us to rebuild the source RPMs corresponding to the exact version of packages in <code>xcp-ng-main</code>, to avoid build errors related to API changes (such as that of <code>libdrm</code> that breaks the build of <code>qemu-dp</code>).</p>
<p dir="auto">And if someone very brave manages to make an ordered list of all the source RPMs by build order, in order to be able to rebuild them all <em>without</em> CentOS repositories at all, I promise to rebuild them and push them to the <code>builddeps</code> repo!<br />
Actually, I think we might have to import some source RPMs from CentOS to boostrap the process, but afterwards we would have a solid build environment for 7.5</p>
]]></description><link>https://xcp-ng.org/forum/post/1560</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1560</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Fri, 06 Jul 2018 07:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Thu, 05 Jul 2018 08:52:46 GMT]]></title><description><![CDATA[<p dir="auto">Let call it <code>extras</code> then. Ok for the readme and credits files.</p>
]]></description><link>https://xcp-ng.org/forum/post/1533</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1533</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Thu, 05 Jul 2018 08:52:46 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Thu, 05 Jul 2018 08:48:47 GMT]]></title><description><![CDATA[<p dir="auto"><code>extras</code> is fine by me. A readme file in that directory with sufficient warning to make user alert but not scare away &amp; a file with list of package =&gt; user xcp-ng profile link will help.</p>
]]></description><link>https://xcp-ng.org/forum/post/1532</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1532</guid><dc:creator><![CDATA[r1]]></dc:creator><pubDate>Thu, 05 Jul 2018 08:48:47 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Wed, 04 Jul 2018 16:27:42 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/r1" aria-label="Profile: r1">@<bdi>r1</bdi></a> said in <a href="/forum/post/1525">Structure of the RPM repositories</a>:</p>
<blockquote>
<p dir="auto">Im no expert of this but looks ok and usable to me except I feel community and community_testing are same because both are going to be supported by community only and pretty much always be in an experimental stage.</p>
</blockquote>
<p dir="auto">This may be true. I considered that <code>community</code> would mean "unsupported, but people used it with success" whereas <code>community_testing</code> would mean "untested, except by me".  If you've got some driver RPM already in use by several in <code>community</code> and want to test a risky change, having <code>community_testing</code> available for that could be useful.</p>
<p dir="auto">But we could also start without and add it later if need be.</p>
<blockquote>
<p dir="auto">Another suggestion, instead of community, you may want to mention "experimental" as it warns user. The project itself is a community-driven project and may not need another subdirectory showing "community" as some external set of members.</p>
</blockquote>
<p dir="auto">You're right. I thought of it and changed the name several times while writing the document but I finally came back to <code>community</code>, though it's probably not the best choice. My concern with "experimental" was that there would probably be some officially unsupported packages in it that would actually get good support from those who provide them. On the plus side, its name conveys an unambiguous meaning of "unsupported". On the minus side, it's hard to understand the difference between <code>experimental</code> and <code>updates_testing</code> without an explanation I think.</p>
<p dir="auto">Other options:</p>
<ul>
<li><code>extras</code></li>
<li><code>lab</code></li>
<li>anything else?</li>
</ul>
]]></description><link>https://xcp-ng.org/forum/post/1526</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1526</guid><dc:creator><![CDATA[stormi]]></dc:creator><pubDate>Wed, 04 Jul 2018 16:27:42 GMT</pubDate></item><item><title><![CDATA[Reply to Structure of the RPM repositories on Wed, 04 Jul 2018 15:16:42 GMT]]></title><description><![CDATA[<p dir="auto"><a class="plugin-mentions-user plugin-mentions-a" href="/forum/user/stormi" aria-label="Profile: stormi">@<bdi>stormi</bdi></a> said in <a href="/forum/post/1524">Structure of the RPM repositories</a>:</p>
<blockquote>
<p dir="auto">community_testing is for those community-provided RPMs while still at an experimental state. Disabled by default, of course.</p>
</blockquote>
<p dir="auto">Im no expert of this but looks ok and usable to me except I feel community and community_testing are same because both are going to be supported by community only and pretty much always be in an experimental stage.</p>
<p dir="auto">Another suggestion, instead of community, you may want to mention "experimental" as it warns user. The project itself is a community-driven project and may not need another subdirectory showing "community" as some external set of members.</p>
<p dir="auto">My 2c.</p>
]]></description><link>https://xcp-ng.org/forum/post/1525</link><guid isPermaLink="true">https://xcp-ng.org/forum/post/1525</guid><dc:creator><![CDATA[r1]]></dc:creator><pubDate>Wed, 04 Jul 2018 15:16:42 GMT</pubDate></item></channel></rss>