<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom"><title>David Duncan's Personal Blog - platform</title><link href="https://davidduncan.org/" rel="alternate"/><link href="https://davidduncan.org/feeds/platform.atom.xml" rel="self"/><id>https://davidduncan.org/</id><updated>2026-05-31T14:00:00-05:00</updated><entry><title>Finally migrating the Fedora Cloud SIG from Pagure to Forgejo</title><link href="https://davidduncan.org/cloud-sig-readme-forge-migration.html" rel="alternate"/><published>2026-05-31T14:00:00-05:00</published><updated>2026-05-31T14:00:00-05:00</updated><author><name>David Duncan</name></author><id>tag:davidduncan.org,2026-05-31:/cloud-sig-readme-forge-migration.html</id><summary type="html">&lt;p&gt;I finally migrated the Fedora Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt; from pagure.io to forge.fedoraproject.org. Neal Gompa nudged me on the deadline, and the &lt;span class="caps"&gt;README&lt;/span&gt; modernization was the last piece. Here&amp;#8217;s what moved, what was broken, and why getting the on-ramp right matters for growing the &lt;span class="caps"&gt;SIG&lt;/span&gt;.&lt;/p&gt;</summary><content type="html">&lt;p&gt;I finally migrated the Fedora Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt;&amp;nbsp;from &lt;code&gt;pagure.io&lt;/code&gt; ([pagure])&amp;nbsp;to &lt;code&gt;forge.fedoraproject.org&lt;/code&gt; ([forge.fp.o]). Neal Gompa (Conan_Kudo to many of you) basically told me that we were pushing up against the deadline and we needed to get it done. So I got it&amp;nbsp;done.&lt;/p&gt;
&lt;p&gt;The deadline isn&amp;#8217;t soft. The Community Linux Engineering team&amp;#8217;s &lt;a href="https://communityblog.fedoraproject.org/the-forge-is-our-new-home/"&gt;March 24th announcement&lt;/a&gt; was explicit: &lt;em&gt;&amp;#8220;If you own a project at pagure.io, you must migrate out of it before June 2026.&amp;#8221;&lt;/em&gt; Final cutover happens at &lt;a href="https://fedoraproject.org/flock/2026/"&gt;Flock to Fedora 2026&lt;/a&gt; in Prague, June 14–16. After that, pagure.io becomes a read-only archive. By Fedora 46 in 2027, the rest of the Pagure infrastructure,&amp;nbsp;including &lt;code&gt;src.fedoraproject.org&lt;/code&gt;, follows. The Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt;&amp;#8217;s piece of that (making sure new issues, mentions, and contributors land at forge.fp.o instead of pagure) finished the day before the&amp;nbsp;deadline.&lt;/p&gt;
&lt;p&gt;This isn&amp;#8217;t a modernization story. The Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt; had been doing its work in pagure for years, including my own attempts to push pagure toward a Software-as-a-Service shape, which I still think is a viable direction. The move to forge.fp.o is about Fedora consolidating its forges, not about pagure being inadequate. With that said, here&amp;#8217;s where the &lt;span class="caps"&gt;SIG&lt;/span&gt; works&amp;nbsp;now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The issue tracker is now &lt;a href="https://forge.fedoraproject.org/cloud/cloud-sig"&gt;&lt;code&gt;cloud/cloud-sig&lt;/code&gt;&lt;/a&gt; on&amp;nbsp;forge.fp.o.&lt;/li&gt;
&lt;li&gt;Meetings moved from &lt;span class="caps"&gt;IRC&lt;/span&gt;&amp;nbsp;(&lt;code&gt;#fedora-meeting-1&lt;/code&gt; on Libera.Chat) to Matrix&amp;nbsp;at &lt;code&gt;#meeting-1:fedoraproject.org&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;cloud@lists.fedoraproject.org&lt;/code&gt; mailing list quietly gave way to &lt;a href="https://discussion.fedoraproject.org/tag/cloud"&gt;Fedora Discussion&lt;/a&gt; for community conversation, with &lt;a href="https://discussion.fedoraproject.org/tag/cloud-wg"&gt;&lt;code&gt;cloud-wg&lt;/code&gt;&lt;/a&gt; as the working-group tag for meeting summaries and&amp;nbsp;housekeeping.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of those moves were dramatic on their own. Each was incremental and well-reasoned. But until the &lt;span class="caps"&gt;README&lt;/span&gt;, the document every new contributor reads first, actually reflected where the &lt;span class="caps"&gt;SIG&lt;/span&gt; works now, the migration was incomplete. Just half-done, in a way that made onboarding harder than either of the possible&amp;nbsp;end-states.&lt;/p&gt;
&lt;h2&gt;What was&amp;nbsp;broken&lt;/h2&gt;
&lt;p&gt;The &lt;span class="caps"&gt;README&lt;/span&gt; still read as if the &lt;span class="caps"&gt;SIG&lt;/span&gt; lived on&amp;nbsp;pagure:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The communications-channels list led with the &lt;span class="caps"&gt;IRC&lt;/span&gt; channel as a primary&amp;nbsp;entry.&lt;/li&gt;
&lt;li&gt;The meetings section routed people&amp;nbsp;to &lt;code&gt;#fedora-meeting-1&lt;/code&gt; on&amp;nbsp;Libera.Chat.&lt;/li&gt;
&lt;li&gt;Every &lt;span class="caps"&gt;URL&lt;/span&gt; pointed at pagure: the issue tracker,&amp;nbsp;the &lt;code&gt;meeting&lt;/code&gt;-label query, the link to&amp;nbsp;the &lt;code&gt;meeting-people.txt&lt;/code&gt; source&amp;nbsp;file.&lt;/li&gt;
&lt;li&gt;All the meetbot commands used the &lt;span class="caps"&gt;IRC&lt;/span&gt; convention&amp;nbsp;(&lt;code&gt;#startmeeting&lt;/code&gt;, &lt;code&gt;#topic&lt;/code&gt;, &lt;code&gt;#chair&lt;/code&gt;, &lt;code&gt;#action&lt;/code&gt;, &lt;code&gt;#endmeeting&lt;/code&gt;). The Matrix meetbot the Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt; runs takes&amp;nbsp;a &lt;code&gt;!&lt;/code&gt; prefix.&lt;/li&gt;
&lt;li&gt;The ping instruction said &amp;#8220;Ping the meeting people&amp;nbsp;in &lt;code&gt;#fedora-cloud&lt;/code&gt; on Libera.Chat.&amp;#8221; Matrix calls those mentions, not pings, and the notification model is per-user rather than&amp;nbsp;channel-wide.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The pattern underneath:&amp;nbsp;the &lt;code&gt;meeting-people.txt&lt;/code&gt; file already contained&amp;nbsp;Matrix &lt;code&gt;@user:server&lt;/code&gt; handles sitting alongside the older &lt;span class="caps"&gt;IRC&lt;/span&gt; nicknames. The data file had partially modernized; the prose around it had&amp;nbsp;not.&lt;/p&gt;
&lt;h2&gt;What I&amp;nbsp;changed&lt;/h2&gt;
&lt;p&gt;A four-commit branch on my fork at &lt;a href="https://forge.fedoraproject.org/cloud/cloud-sig/compare/main...davdunc:update-readme-meeting-workflow"&gt;&lt;code&gt;davdunc:update-readme-meeting-workflow&lt;/code&gt;&lt;/a&gt;, ready for upstream review. One commit per kind of drift (URLs, channels, bot syntax, idiom), so the diff stays readable. The deprecated surfaces (the mailing list, &lt;span class="caps"&gt;IRC&lt;/span&gt;) stay listed, just clearly labeled as such, rather than ripped out&amp;nbsp;wholesale.&lt;/p&gt;
&lt;h2&gt;Still&amp;nbsp;pending&lt;/h2&gt;
&lt;p&gt;Two items I deliberately left for&amp;nbsp;follow-ups:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;code&gt;bash meeting-people.txt&lt;/code&gt; ping mechanism still embeds an &lt;span class="caps"&gt;IRC&lt;/span&gt;-flavored room name in&amp;nbsp;its &lt;code&gt;echo&lt;/code&gt; line. That belongs in its own commit so the &lt;span class="caps"&gt;README&lt;/span&gt; change can land&amp;nbsp;independently.&lt;/li&gt;
&lt;li&gt;A workflow visualization for the meeting flow. I drafted one in Graphviz and the layout fought me hard enough that I dropped it for now. I&amp;#8217;ll pick it back up at a single-screen overview rather than the multi-phase diagram I tried&amp;nbsp;first.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Why it&amp;nbsp;matters&lt;/h2&gt;
&lt;p&gt;A &lt;span class="caps"&gt;README&lt;/span&gt; is a contract with new contributors. When it tells them the tracker is on pagure and the meeting is on &lt;span class="caps"&gt;IRC&lt;/span&gt;, they spend their first hour debugging the documentation rather than doing the work. Documentation drift is a silent tax on community&amp;nbsp;contribution.&lt;/p&gt;
&lt;p&gt;For the Cloud &lt;span class="caps"&gt;SIG&lt;/span&gt; specifically, and for &lt;a href="/gib.html"&gt;my goal of growing the contributor base&lt;/a&gt;, getting the on-ramp accurate is worth the unglamorous afternoon. The actual work of the &lt;span class="caps"&gt;SIG&lt;/span&gt; hasn&amp;#8217;t changed: cloud images, bootable containers, image defaults, release coordination. The infrastructure around it has. The &lt;span class="caps"&gt;README&lt;/span&gt; should reflect what&amp;#8217;s actually happening now, not what was happening four years&amp;nbsp;ago.&lt;/p&gt;
&lt;p&gt;Thanks to Neal for the&amp;nbsp;nudge.&lt;/p&gt;</content><category term="platform"/><category term="fedora"/><category term="cloud-sig"/><category term="forgejo"/><category term="matrix"/><category term="pagure"/><category term="documentation"/><category term="community"/></entry><entry><title>A simple way to install the Amazon AWSCLI on RHEL 7 on-demand instances</title><link href="https://davidduncan.org/pip-is-not-supported-for-system-python-on-rhel.html" rel="alternate"/><published>2019-11-05T00:00:00-06:00</published><updated>2020-01-08T00:00:00-06:00</updated><author><name>David Duncan</name></author><id>tag:davidduncan.org,2019-11-05:/pip-is-not-supported-for-system-python-on-rhel.html</id><summary type="html">&lt;p&gt;How to install &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt; on &lt;span class="caps"&gt;RHEL&lt;/span&gt; 7 when pip is not supported for system&amp;nbsp;Python&lt;/p&gt;</summary><content type="html">&lt;h1&gt;A simple way to install the Amazon &lt;span class="caps"&gt;AWSCLI&lt;/span&gt; on &lt;span class="caps"&gt;RHEL&lt;/span&gt; 7 on-demand&amp;nbsp;instances&lt;/h1&gt;
&lt;p&gt;When working with &lt;span class="caps"&gt;RHEL&lt;/span&gt; 7 instances, you might encounter the message &amp;#8220;pip is not supported for system python on &lt;span class="caps"&gt;RHEL&lt;/span&gt;&amp;#8221; when trying to install the &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt;. Here&amp;#8217;s a simple&amp;nbsp;solution.&lt;/p&gt;
&lt;h2&gt;The&amp;nbsp;Problem&lt;/h2&gt;
&lt;p&gt;&lt;span class="caps"&gt;RHEL&lt;/span&gt; 7 restricts the use of pip with the system Python installation to prevent conflicts with system packages. This can be frustrating when you need to install tools like the &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt;.&lt;/p&gt;
&lt;h2&gt;The&amp;nbsp;Solution&lt;/h2&gt;
&lt;p&gt;The easiest approach is to use the &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt; installer bundle or install it in a virtual&amp;nbsp;environment:&lt;/p&gt;
&lt;h3&gt;Method 1: Using the &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt; Installer&amp;nbsp;Bundle&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;curl&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip&amp;quot;&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;-o&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;&amp;quot;awscliv2.zip&amp;quot;&lt;/span&gt;
unzip&lt;span class="w"&gt; &lt;/span&gt;awscliv2.zip
sudo&lt;span class="w"&gt; &lt;/span&gt;./aws/install
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Method 2: Using a Virtual&amp;nbsp;Environment&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;python3&lt;span class="w"&gt; &lt;/span&gt;-m&lt;span class="w"&gt; &lt;/span&gt;venv&lt;span class="w"&gt; &lt;/span&gt;aws-cli-env
&lt;span class="nb"&gt;source&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;aws-cli-env/bin/activate
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;awscli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h3&gt;Method 3: Using the &lt;span class="caps"&gt;EPEL&lt;/span&gt;&amp;nbsp;Repository&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;sudo&lt;span class="w"&gt; &lt;/span&gt;yum&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;epel-release
sudo&lt;span class="w"&gt; &lt;/span&gt;yum&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;python-pip
pip&lt;span class="w"&gt; &lt;/span&gt;install&lt;span class="w"&gt; &lt;/span&gt;--user&lt;span class="w"&gt; &lt;/span&gt;awscli
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;h2&gt;Verification&lt;/h2&gt;
&lt;p&gt;After installation, verify the &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt; is&amp;nbsp;working:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre&gt;&lt;span&gt;&lt;/span&gt;&lt;code&gt;aws&lt;span class="w"&gt; &lt;/span&gt;--version
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;This approach ensures you have a working &lt;span class="caps"&gt;AWS&lt;/span&gt; &lt;span class="caps"&gt;CLI&lt;/span&gt; installation without conflicting with the system Python packages on &lt;span class="caps"&gt;RHEL&lt;/span&gt;&amp;nbsp;7.&lt;/p&gt;</content><category term="platform"/><category term="aws"/><category term="awscli"/><category term="python"/></entry></feed>