2023-03-03 09:08:14 +01:00
include::_partials/attributes.adoc[]
2023-03-03 11:52:29 +01:00
2023-08-16 13:13:26 +02:00
= End Of Life
2023-03-01 17:38:08 +01:00
2023-08-16 13:13:26 +02:00
== Description
2023-03-01 17:38:08 +01:00
Each release of Fedora is maintained as laid out in the
2024-11-26 09:23:33 -08:00
https://docs.fedoraproject.org/en-US/releases/lifecycle/#_maintenance_schedule[maintenance
2023-03-01 17:38:08 +01:00
schedule]. At the conclusion of the maintenance period, a Fedora release
enters `end of life` status. This procedure describes the tasks
2023-08-16 13:14:01 +02:00
necessary to move a release to that status. To get the correct EOL date visit
2023-05-15 13:20:56 +02:00
https://fedorapeople.org/groups/schedule/f-{branched}/f-{branched}-key-tasks.html[release schedule] for the last release.
2023-03-01 17:38:08 +01:00
2023-08-16 13:13:26 +02:00
== Actions
2023-03-01 17:38:08 +01:00
2023-08-16 13:13:26 +02:00
=== Reminder announcement
2023-03-01 17:38:08 +01:00
2024-11-26 09:23:33 -08:00
Around a week before the EOL date, end an email to `devel@`, `devel-announce@`, `test@`, `test-announce@`, `announce@` lists as remainder about the release EOL.
Use the https://pagure.io/releng/blob/main/f/mail-templates/08-end-of-life.txt[template] from release engineering repo.
2023-03-03 09:08:14 +01:00
2023-05-19 00:26:20 +05:30
[NOTE]
====
Please ensure that the reminder email is scheduled to be sent one week before the end of life.
====
2023-08-16 15:33:42 +02:00
=== `fedora-appstream-metadata` package update
2024-11-26 09:23:33 -08:00
If necessary, update the
2023-08-16 15:33:42 +02:00
https://src.fedoraproject.org/rpms/fedora-appstream-metadata[`fedora-appstream-metadata`]
package with the new EOL date. Follow the instructions from the repo README.
Build the package, create an update and make sure it lands in the stable repo
before proceeding.
2024-11-26 09:23:33 -08:00
This is not necessary if the package already has the correct EOL date.
2023-08-16 13:13:26 +02:00
=== Koji tasks
2023-03-03 09:08:14 +01:00
* Disable builds by removing targets
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
koji remove-target f{old_release}
koji remove-target f{old_release}-candidate
koji remove-target f{old_release}-container-candidate
koji remove-target f{old_release}-flatpak-candidate
koji remove-target f{old_release}-infra
koji remove-target f{old_release}-coreos-continuous
koji remove-target f{old_release}-rebuild
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:12:01 -08:00
* Remove sidetags
Remove any existing sidetags from the eol release.
[source,subs="attributes+"]
....
for i in `koji list-sidetags --basetag f{old_release}`
do
koji remove-sidetag $i
done
....
You need to do this differently because just removing the target of
a sidetag will leave it in a weird state where it cannot be removed.
2023-03-03 09:08:14 +01:00
* Purge from disk the signed copies of rpms that are signed with the
2024-11-26 09:50:45 -08:00
EOL'd release key. To achieve this, add the release key to
2023-03-03 09:08:14 +01:00
*koji_cleanup_signed.py* script in https://pagure.io/releng[releng] repo
2025-07-04 11:55:02 +02:00
and run the script on compose-branched01.rdu3.fedoraproject.org:
2023-03-03 09:08:14 +01:00
....
2024-11-26 10:12:23 -08:00
tmux
sudo su
cd /root/releng
2023-03-03 09:08:14 +01:00
./scripts/koji_cleanup_signed.py
....
2024-11-26 10:12:23 -08:00
[NOTE]
====
Running this script in tmux or screen is recommended as it takes a long time to run.
====
2024-11-26 08:29:24 -08:00
=== Final stable push
2023-03-03 09:08:14 +01:00
2024-11-26 08:29:24 -08:00
Do a final stable push for the release in Bodhi, following the
xref:releng_misc_guide:sop_pushing_updates.adoc[Pushing Updates SOP].
2023-03-03 09:08:14 +01:00
2023-08-16 13:13:26 +02:00
=== Bodhi tasks
2023-03-03 09:08:14 +01:00
2024-11-26 09:23:33 -08:00
Run the following bodhi commands to set the releases state to
2023-03-03 09:08:14 +01:00
*archived*
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
bodhi releases edit --name "F{old_release}" --state archived
bodhi releases edit --name "F{old_release}C" --state archived
bodhi releases edit --name "F{old_release}F" --state archived
2023-03-03 09:08:14 +01:00
....
2023-08-16 13:13:26 +02:00
=== Fedora Infra Ansible Changes
2023-03-03 09:08:14 +01:00
2024-11-26 09:23:33 -08:00
We need to make some changes and then run several roles in the ansible repo.
2023-03-03 09:08:14 +01:00
2024-11-26 08:29:24 -08:00
==== Update FedoraPreviousPrevious.yaml in ansible repository
2024-11-26 09:23:33 -08:00
Edit /vars/all/FedoraPreviousPrevious.yaml and set the value to `False`.
2024-11-26 08:29:24 -08:00
==== Adjust the EOL for gnome-software
2024-11-26 09:23:33 -08:00
Edit /roles/pkgdb-proxy/files/pkgdb-gnome-software-collections.json in ansible
and set the release to status "EOL".
2024-11-26 10:12:23 -08:00
==== Adjust the greenwave gating policy
Edit /roles/openshift-apps/greenwave/templates/fedora.yaml
and find the policies with \_upgrade_ in their name, near the bottom.
You should see a comment noting these are not run on "the oldest stable release".
The oldest release listed in the `product_versions` section for each of these policies should be one higher than the release you are EOLing.
Remove the lines for these releases, so the oldest release listed is now *two* higher than the release you are EOLing.
You may also remove all lines for the release you are EOLing, but this is not critical.
2024-11-26 11:01:00 -08:00
==== Remove eol release from robosignatory config
Edit roles/robosignatory/templates/robosignatory.toml.j2
and remove stansas that use "fedora-{old_release}" in them.
2024-11-26 09:23:33 -08:00
==== Run the playbooks
2024-11-26 08:29:24 -08:00
2024-11-26 09:23:33 -08:00
First, push the above edits. Then run the associated playbooks on _batcave01_:
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
sudo ansible-playbook /srv/web/infra/ansible/playbooks/groups/bodhi-backend.yml
sudo ansible-playbook /srv/web/infra/ansible/playbooks/groups/koji-hub.yml
sudo ansible-playbook /srv/web/infra/ansible/playbooks/groups/releng-compose.yml
sudo ansible-playbook /srv/web/infra/ansible/playbooks/groups/proxies.yml -t pkgdb2
sudo ansible-playbook /srv/web/infra/ansible/playbooks/openshift-apps/bodhi.yml
2024-11-26 10:12:23 -08:00
sudo ansible-playbook /srv/web/infra/ansible/playbooks/openshift-apps/greenwave.yml
2023-03-03 09:08:14 +01:00
....
2024-11-26 11:01:00 -08:00
You will need to have someone enable sshd on autosign02 and then run:
....
sudo ansible-playbook /srv/web/infra/ansible/playbooks/manual/autosign.yml
....
And then someone with the robosignatory passphrase will need to restart it.
2023-05-19 00:26:20 +05:30
[NOTE]
====
2024-11-26 09:23:33 -08:00
Another way to run the playbook is using rbac-playbook, in case you don't have sysadmin-main rights or can't become root.
Syntax: sudo rbac-playbook groups/bodhi-backend.yml
2023-05-19 00:26:20 +05:30
====
2023-08-16 13:13:26 +02:00
=== Final announcement
2023-03-03 09:08:14 +01:00
2024-11-26 09:23:33 -08:00
Send the final announcement to `devel@`, `devel-announce@`, `test@`, `test-announce@`, `announce@` lists.
Use the https://pagure.io/releng/blob/main/f/mail-templates/08-end-of-life.txt[template] from release engineering repo.
2023-03-03 09:08:14 +01:00
2024-11-27 08:56:16 -08:00
=== Other tasks
==== Remove EOL release from Koschei
The release going EOL must be removed from Koschei to prevent a flood of failed scratch builds.
See the xref:sysadmin_guide:koschei.adoc#_removing_an_eol_fedora_release[Koschei sysadmin guide] for details.
2023-03-03 09:08:14 +01:00
2024-11-27 09:10:08 -08:00
==== Remove release from fedfind source of truth
The Quality team maintains a source of truth for release information used by the fedfind tool
on fedorapeople (people01) in `/srv/groups/qa/metadata/release.json`.
If you have access to this file, you can remove the release going EOL from the file's list of stable releases.
Otherwise, alert the quality team to do so.
2024-11-26 09:55:03 -08:00
=== Stage the EOL release to archive
2023-03-03 09:08:14 +01:00
2024-11-26 09:50:45 -08:00
. Log into to bodhi-backend01 and become ftpsync, via root
2023-03-03 09:08:14 +01:00
+
____
....
2025-07-04 11:55:02 +02:00
ssh bodhi-backend01.rdu3.fedoraproject.org
2024-11-26 09:50:45 -08:00
sudo su
su - ftpsync
2023-03-03 09:08:14 +01:00
....
____
2023-05-19 00:26:20 +05:30
. Then change into the releases directory.
2023-03-03 09:08:14 +01:00
+
____
....
2024-11-26 09:50:45 -08:00
cd /pub/fedora/linux/releases
2023-03-03 09:08:14 +01:00
....
____
2024-11-26 09:50:45 -08:00
. Check to see that the target directory doesn't already exist.
2023-03-03 09:08:14 +01:00
+
____
....
2024-11-26 09:50:45 -08:00
ls /pub/archive/fedora/linux/releases/
2023-03-03 09:08:14 +01:00
....
____
2024-11-26 09:50:45 -08:00
. Do a recursive rsync to update any changes in the trees since the previous copy.
2023-03-03 09:08:14 +01:00
+
____
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
rsync -avAXSHP ./{old_release}/ /pub/archive/fedora/linux/releases/{old_release}/
2023-03-03 09:08:14 +01:00
....
____
2024-11-26 09:50:45 -08:00
. Similarly, sync updates and updates/testing.
2023-03-03 09:08:14 +01:00
+
____
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
cd ../updates/
rsync -avAXSHP {old_release}/ /pub/archive/fedora/linux/updates/{old_release}/
cd testing
rsync -avAXSHP {old_release}/ /pub/archive/fedora/linux/updates/testing/{old_release}/
2023-03-03 09:08:14 +01:00
....
____
2023-05-19 00:26:20 +05:30
. Do the same with fedora-secondary.
+
____
[source,subs="attributes+"]
....
2024-11-26 09:50:45 -08:00
cd /pub/fedora-secondary/releases/
rsync -avAXSHP ./{old_release}/ /pub/archive/fedora-secondary/releases/{old_release}/
cd ../updates/
rsync -avAXSHP {old_release}/ /pub/archive/fedora-secondary/updates/{old_release}/
cd testing
rsync -avAXSHP {old_release}/ /pub/archive/fedora-secondary/updates/testing/{old_release}/
2023-05-19 00:26:20 +05:30
....
____
2023-08-16 13:14:01 +02:00
. Announce to the mirror list this has been done and that in 2 weeks you will
move the old trees to archives.
2024-11-26 08:29:24 -08:00
2024-11-26 09:55:03 -08:00
=== Move the EOL release to archive
2024-11-26 08:29:24 -08:00
2024-08-06 07:14:14 +02:00
. In two weeks, run the following playbook from batcave:
2023-03-03 09:08:14 +01:00
____
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
sudo ansible-playbook -v /srv/web/infra/ansible/playbooks/manual/mirrormanager/move-to-archive.yml --extra-vars="product='Fedora' version='{old_release}'"
2023-03-03 09:08:14 +01:00
....
____
2023-05-19 00:26:20 +05:30
. If there are problems, the postgres DB may have issues and so you need
2023-03-03 09:08:14 +01:00
to get a DBA to update the backend to fix items.
2023-08-16 13:14:01 +02:00
. Wait an hour or so then you can remove the files from the main tree.
2023-05-19 00:26:20 +05:30
[NOTE]
====
We need to do a cleanup here for both fedora and fedora-secondary for releases, updates, and updates/testing for the {old_release} release.
====
2023-03-03 09:08:14 +01:00
____
2023-03-08 15:39:31 +01:00
[source,subs="attributes+"]
2023-03-03 09:08:14 +01:00
....
2024-11-26 09:50:45 -08:00
ssh bodhi-backend01
cd /pub/fedora/linux/releases/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
cd /pub/fedora/linux/updates/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
cd /pub/fedora/linux/updates/testing/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
2023-05-19 00:26:20 +05:30
#for fedora-secondary
2024-11-26 09:50:45 -08:00
cd /pub/fedora-secondary/releases/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
cd /pub/fedora-secondary/updates/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
cd /pub/fedora-secondary/updates/testing/{old_release}
ls
# make sure you have stuff here
rm -rf *
ln ../20/README .
2023-03-03 09:08:14 +01:00
....
____
== Consider Before Running
* Resource contention in infrastructure, such as outages
* Extenuating circumstances for specific planned updates, if any
* Send the reminder announcement, if it isn't sent already